/static/wp-content/plugins/w3-total-cache/lib/W3/Minifier.php

https://github.com/elleeott/WPOC-boilerplate · PHP · 287 lines · 187 code · 48 blank · 52 comment · 13 complexity · 21fbba13f669f15b8436d406cecd80a8 MD5 · raw file

  1. <?php
  2. /**
  3. * Minifiers object
  4. */
  5. /**
  6. * Class W3_Minifier
  7. */
  8. class W3_Minifier {
  9. /**
  10. * Config instance
  11. *
  12. * @var W3_Config
  13. */
  14. var $_config = null;
  15. /**
  16. * Minifiers array
  17. *
  18. * @var array
  19. */
  20. var $_minifiers = array(
  21. 'combinejs' => array('Minify_CombineOnly', 'minify'),
  22. 'combinecss' => array('Minify_CombineOnly', 'minify'),
  23. 'js' => array('JSMin', 'minify'),
  24. 'yuijs' => array('Minify_YUICompressor', 'minifyJs'),
  25. 'ccjs' => array('Minify_ClosureCompiler', 'minify'),
  26. 'css' => array('Minify_CSS', 'minify'),
  27. 'yuicss' => array('Minify_YUICompressor', 'minifyCss'),
  28. 'csstidy' => array('Minify_CSSTidy', 'minify'),
  29. 'html' => array('Minify_HTML', 'minify'),
  30. 'htmlxml' => array('Minify_HTML', 'minify'),
  31. 'htmltidy' => array('Minify_HTMLTidy', 'minifyXhtml'),
  32. 'htmltidyxml' => array('Minify_HTMLTidy', 'minifyXml')
  33. );
  34. /**
  35. * PHP5-style constructor
  36. */
  37. function __construct() {
  38. $this->_config = & w3_instance('W3_Config');
  39. }
  40. /**
  41. * PHP4-style constructor
  42. */
  43. function W3_Minifier() {
  44. $this->__construct();
  45. }
  46. /**
  47. * Returns true if minifier exists
  48. *
  49. * @param string $engine
  50. * @return boolean
  51. */
  52. function exists($engine) {
  53. return isset($this->_minifiers[$engine]);
  54. }
  55. /**
  56. * Returns true if minifier available
  57. *
  58. * @param string $engine
  59. * @return boolean
  60. */
  61. function available($engine) {
  62. switch ($engine) {
  63. case 'yuijs':
  64. $path_java = $this->_config->get_string('minify.yuijs.path.java');
  65. $path_jar = $this->_config->get_string('minify.yuijs.path.jar');
  66. return (file_exists($path_java) && file_exists($path_jar));
  67. case 'yuicss':
  68. $path_java = $this->_config->get_string('minify.yuicss.path.java');
  69. $path_jar = $this->_config->get_string('minify.yuicss.path.jar');
  70. return (file_exists($path_java) && file_exists($path_jar));
  71. case 'ccjs':
  72. $path_java = $this->_config->get_string('minify.ccjs.path.java');
  73. $path_jar = $this->_config->get_string('minify.ccjs.path.jar');
  74. return (file_exists($path_java) && file_exists($path_jar));
  75. case 'htmltidy':
  76. case 'htmltidyxml':
  77. return class_exists('tidy');
  78. case 'js':
  79. case 'css':
  80. case 'csstidy':
  81. case 'html':
  82. case 'htmlxml':
  83. return true;
  84. }
  85. return false;
  86. }
  87. /**
  88. * Returns minifier
  89. *
  90. * @param string $engine
  91. * @return array
  92. */
  93. function get_minifier($engine) {
  94. if (isset($this->_minifiers[$engine])) {
  95. return $this->_minifiers[$engine];
  96. }
  97. return null;
  98. }
  99. /**
  100. * Initializes minifier
  101. *
  102. * @param string $engine
  103. * @return void
  104. */
  105. function init($engine) {
  106. switch ($engine) {
  107. case 'js':
  108. require_once W3TC_LIB_MINIFY_DIR . '/JSMin.php';
  109. break;
  110. case 'css':
  111. require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS.php';
  112. break;
  113. case 'yuijs':
  114. require_once W3TC_LIB_MINIFY_DIR . '/Minify/YUICompressor.php';
  115. Minify_YUICompressor::setPathJava($this->_config->get_string('minify.yuijs.path.java'));
  116. Minify_YUICompressor::setPathJar($this->_config->get_string('minify.yuijs.path.jar'));
  117. break;
  118. case 'yuicss':
  119. require_once W3TC_LIB_MINIFY_DIR . '/Minify/YUICompressor.php';
  120. Minify_YUICompressor::setPathJava($this->_config->get_string('minify.yuicss.path.java'));
  121. Minify_YUICompressor::setPathJar($this->_config->get_string('minify.yuicss.path.jar'));
  122. break;
  123. case 'ccjs':
  124. require_once W3TC_LIB_MINIFY_DIR . '/Minify/ClosureCompiler.php';
  125. Minify_ClosureCompiler::setPathJava($this->_config->get_string('minify.ccjs.path.java'));
  126. Minify_ClosureCompiler::setPathJar($this->_config->get_string('minify.ccjs.path.jar'));
  127. break;
  128. case 'csstidy':
  129. require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSSTidy.php';
  130. break;
  131. case 'html':
  132. case 'htmlxml':
  133. require_once W3TC_LIB_MINIFY_DIR . '/Minify/HTML.php';
  134. break;
  135. case 'htmltidy':
  136. case 'htmltidyxml':
  137. require_once W3TC_LIB_MINIFY_DIR . '/Minify/HTMLTidy.php';
  138. break;
  139. }
  140. }
  141. /**
  142. * Returns minifier options
  143. *
  144. * @param string $engine
  145. * @return array
  146. */
  147. function get_options($engine) {
  148. $options = array();
  149. switch ($engine) {
  150. case 'js':
  151. $options = array(
  152. 'preserveComments' => !$this->_config->get_boolean('minify.js.strip.comments'),
  153. 'stripCrlf' => $this->_config->get_boolean('minify.js.strip.crlf')
  154. );
  155. break;
  156. case 'css':
  157. $options = array(
  158. 'preserveComments' => !$this->_config->get_boolean('minify.css.strip.comments'),
  159. 'stripCrlf' => $this->_config->get_boolean('minify.css.strip.crlf')
  160. );
  161. $symlinks = $this->_config->get_array('minify.symlinks');
  162. foreach ($symlinks as $link => $target) {
  163. $link = str_replace('//', realpath($_SERVER['DOCUMENT_ROOT']), $link);
  164. $link = strtr($link, '/', DIRECTORY_SEPARATOR);
  165. $options['symlinks'][$link] = realpath($target);
  166. }
  167. break;
  168. case 'yuijs':
  169. $options = array(
  170. 'line-break' => $this->_config->get_integer('minify.yuijs.options.line-break'),
  171. 'nomunge' => $this->_config->get_boolean('minify.yuijs.options.nomunge'),
  172. 'preserve-semi' => $this->_config->get_boolean('minify.yuijs.options.preserve-semi'),
  173. 'disable-optimizations' => $this->_config->get_boolean('minify.yuijs.options.disable-optimizations')
  174. );
  175. break;
  176. case 'yuicss':
  177. $options = array(
  178. 'line-break' => $this->_config->get_integer('minify.yuicss.options.line-break')
  179. );
  180. break;
  181. case 'ccjs':
  182. $options = array(
  183. 'compilation_level' => $this->_config->get_string('minify.ccjs.options.compilation_level'),
  184. 'formatting' => $this->_config->get_string('minify.ccjs.options.formatting')
  185. );
  186. break;
  187. case 'csstidy':
  188. $options = array(
  189. 'remove_bslash' => $this->_config->get_boolean('minify.csstidy.options.remove_bslash'),
  190. 'compress_colors' => $this->_config->get_boolean('minify.csstidy.options.compress_colors'),
  191. 'compress_font-weight' => $this->_config->get_boolean('minify.csstidy.options.compress_font-weight'),
  192. 'lowercase_s' => $this->_config->get_boolean('minify.csstidy.options.lowercase_s'),
  193. 'optimise_shorthands' => $this->_config->get_integer('minify.csstidy.options.optimise_shorthands'),
  194. 'remove_last_;' => $this->_config->get_boolean('minify.csstidy.options.remove_last_;'),
  195. 'case_properties' => $this->_config->get_integer('minify.csstidy.options.case_properties'),
  196. 'sort_properties' => $this->_config->get_boolean('minify.csstidy.options.sort_properties'),
  197. 'sort_selectors' => $this->_config->get_boolean('minify.csstidy.options.sort_selectors'),
  198. 'merge_selectors' => $this->_config->get_integer('minify.csstidy.options.merge_selectors'),
  199. 'discard_invalid_properties' => $this->_config->get_boolean('minify.csstidy.options.discard_invalid_properties'),
  200. 'css_level' => $this->_config->get_string('minify.csstidy.options.css_level'),
  201. 'preserve_css' => $this->_config->get_boolean('minify.csstidy.options.preserve_css'),
  202. 'timestamp' => $this->_config->get_boolean('minify.csstidy.options.timestamp'),
  203. 'template' => $this->_config->get_string('minify.csstidy.options.template')
  204. );
  205. break;
  206. case 'html':
  207. case 'htmlxml':
  208. $options = array(
  209. 'xhtml' => true,
  210. 'stripCrlf' => $this->_config->get_boolean('minify.html.strip.crlf'),
  211. 'ignoredComments' => $this->_config->get_array('minify.html.comments.ignore')
  212. );
  213. break;
  214. case 'htmltidy':
  215. case 'htmltidyxml':
  216. $options = array(
  217. 'clean' => $this->_config->get_boolean('minify.htmltidy.options.clean'),
  218. 'hide-comments' => $this->_config->get_boolean('minify.htmltidy.options.hide-comments'),
  219. 'wrap' => $this->_config->get_integer('minify.htmltidy.options.wrap')
  220. );
  221. break;
  222. }
  223. if ($this->_config->get_boolean('browsercache.enabled') && ($this->_config->get_boolean('browsercache.cssjs.replace') || $this->_config->get_boolean('browsercache.html.replace') || $this->_config->get_boolean('browsercache.other.replace'))) {
  224. $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCache');
  225. $options = array_merge($options, array(
  226. 'browserCacheId' => $w3_plugin_browsercache->get_replace_id(),
  227. 'browserCacheExtensions' => $w3_plugin_browsercache->get_replace_extensions()
  228. ));
  229. }
  230. if ($this->_config->get_boolean('cdn.enabled') && $this->_config->get_boolean('cdn.minify.enable')) {
  231. $w3_plugin_cdn =& w3_instance('W3_Plugin_CdnCommon');
  232. $cdn =& $w3_plugin_cdn->get_cdn();
  233. $options = array_merge($options, array(
  234. 'prependAbsolutePathCallback' => array(&$cdn, 'get_prepend_path'),
  235. ));
  236. }
  237. return $options;
  238. }
  239. }