PageRenderTime 26ms CodeModel.GetById 10ms RepoModel.GetById 1ms app.codeStats 0ms

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

https://gitlab.com/juanito.abelo/nlmobile
PHP | 280 lines | 184 code | 47 blank | 49 comment | 13 complexity | ec764520f1104aec8805de6921ad2832 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. * Returns true if minifier exists
  42. *
  43. * @param string $engine
  44. * @return boolean
  45. */
  46. function exists($engine) {
  47. return isset($this->_minifiers[$engine]);
  48. }
  49. /**
  50. * Returns true if minifier available
  51. *
  52. * @param string $engine
  53. * @return boolean
  54. */
  55. function available($engine) {
  56. switch ($engine) {
  57. case 'yuijs':
  58. $path_java = $this->_config->get_string('minify.yuijs.path.java');
  59. $path_jar = $this->_config->get_string('minify.yuijs.path.jar');
  60. return (file_exists($path_java) && file_exists($path_jar));
  61. case 'yuicss':
  62. $path_java = $this->_config->get_string('minify.yuicss.path.java');
  63. $path_jar = $this->_config->get_string('minify.yuicss.path.jar');
  64. return (file_exists($path_java) && file_exists($path_jar));
  65. case 'ccjs':
  66. $path_java = $this->_config->get_string('minify.ccjs.path.java');
  67. $path_jar = $this->_config->get_string('minify.ccjs.path.jar');
  68. return (file_exists($path_java) && file_exists($path_jar));
  69. case 'htmltidy':
  70. case 'htmltidyxml':
  71. return class_exists('tidy');
  72. case 'js':
  73. case 'css':
  74. case 'csstidy':
  75. case 'html':
  76. case 'htmlxml':
  77. return true;
  78. }
  79. return false;
  80. }
  81. /**
  82. * Returns minifier
  83. *
  84. * @param string $engine
  85. * @return array
  86. */
  87. function get_minifier($engine) {
  88. if (isset($this->_minifiers[$engine])) {
  89. return $this->_minifiers[$engine];
  90. }
  91. return null;
  92. }
  93. /**
  94. * Initializes minifier
  95. *
  96. * @param string $engine
  97. * @return void
  98. */
  99. function init($engine) {
  100. switch ($engine) {
  101. case 'js':
  102. w3_require_once(W3TC_LIB_MINIFY_DIR . '/JSMin.php');
  103. break;
  104. case 'css':
  105. w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/CSS.php');
  106. break;
  107. case 'yuijs':
  108. w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/YUICompressor.php');
  109. Minify_YUICompressor::setPathJava($this->_config->get_string('minify.yuijs.path.java'));
  110. Minify_YUICompressor::setPathJar($this->_config->get_string('minify.yuijs.path.jar'));
  111. break;
  112. case 'yuicss':
  113. w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/YUICompressor.php');
  114. Minify_YUICompressor::setPathJava($this->_config->get_string('minify.yuicss.path.java'));
  115. Minify_YUICompressor::setPathJar($this->_config->get_string('minify.yuicss.path.jar'));
  116. break;
  117. case 'ccjs':
  118. w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/ClosureCompiler.php');
  119. Minify_ClosureCompiler::setPathJava($this->_config->get_string('minify.ccjs.path.java'));
  120. Minify_ClosureCompiler::setPathJar($this->_config->get_string('minify.ccjs.path.jar'));
  121. break;
  122. case 'csstidy':
  123. w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/CSSTidy.php');
  124. break;
  125. case 'html':
  126. case 'htmlxml':
  127. w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/HTML.php');
  128. break;
  129. case 'htmltidy':
  130. case 'htmltidyxml':
  131. w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/HTMLTidy.php');
  132. break;
  133. }
  134. }
  135. /**
  136. * Returns minifier options
  137. *
  138. * @param string $engine
  139. * @return array
  140. */
  141. function get_options($engine) {
  142. $options = array();
  143. switch ($engine) {
  144. case 'js':
  145. $options = array(
  146. 'preserveComments' => !$this->_config->get_boolean('minify.js.strip.comments'),
  147. 'stripCrlf' => $this->_config->get_boolean('minify.js.strip.crlf')
  148. );
  149. break;
  150. case 'css':
  151. $options = array(
  152. 'preserveComments' => !$this->_config->get_boolean('minify.css.strip.comments'),
  153. 'stripCrlf' => $this->_config->get_boolean('minify.css.strip.crlf')
  154. );
  155. $symlinks = $this->_config->get_array('minify.symlinks');
  156. foreach ($symlinks as $link => $target) {
  157. $link = str_replace('//', realpath($_SERVER['DOCUMENT_ROOT']), $link);
  158. $link = strtr($link, '/', DIRECTORY_SEPARATOR);
  159. $options['symlinks'][$link] = realpath($target);
  160. }
  161. break;
  162. case 'yuijs':
  163. $options = array(
  164. 'line-break' => $this->_config->get_integer('minify.yuijs.options.line-break'),
  165. 'nomunge' => $this->_config->get_boolean('minify.yuijs.options.nomunge'),
  166. 'preserve-semi' => $this->_config->get_boolean('minify.yuijs.options.preserve-semi'),
  167. 'disable-optimizations' => $this->_config->get_boolean('minify.yuijs.options.disable-optimizations')
  168. );
  169. break;
  170. case 'yuicss':
  171. $options = array(
  172. 'line-break' => $this->_config->get_integer('minify.yuicss.options.line-break')
  173. );
  174. break;
  175. case 'ccjs':
  176. $options = array(
  177. 'compilation_level' => $this->_config->get_string('minify.ccjs.options.compilation_level'),
  178. 'formatting' => $this->_config->get_string('minify.ccjs.options.formatting')
  179. );
  180. break;
  181. case 'csstidy':
  182. $options = array(
  183. 'remove_bslash' => $this->_config->get_boolean('minify.csstidy.options.remove_bslash'),
  184. 'compress_colors' => $this->_config->get_boolean('minify.csstidy.options.compress_colors'),
  185. 'compress_font-weight' => $this->_config->get_boolean('minify.csstidy.options.compress_font-weight'),
  186. 'lowercase_s' => $this->_config->get_boolean('minify.csstidy.options.lowercase_s'),
  187. 'optimise_shorthands' => $this->_config->get_integer('minify.csstidy.options.optimise_shorthands'),
  188. 'remove_last_;' => $this->_config->get_boolean('minify.csstidy.options.remove_last_;'),
  189. 'case_properties' => $this->_config->get_integer('minify.csstidy.options.case_properties'),
  190. 'sort_properties' => $this->_config->get_boolean('minify.csstidy.options.sort_properties'),
  191. 'sort_selectors' => $this->_config->get_boolean('minify.csstidy.options.sort_selectors'),
  192. 'merge_selectors' => $this->_config->get_integer('minify.csstidy.options.merge_selectors'),
  193. 'discard_invalid_properties' => $this->_config->get_boolean('minify.csstidy.options.discard_invalid_properties'),
  194. 'css_level' => $this->_config->get_string('minify.csstidy.options.css_level'),
  195. 'preserve_css' => $this->_config->get_boolean('minify.csstidy.options.preserve_css'),
  196. 'timestamp' => $this->_config->get_boolean('minify.csstidy.options.timestamp'),
  197. 'template' => $this->_config->get_string('minify.csstidy.options.template')
  198. );
  199. break;
  200. case 'html':
  201. case 'htmlxml':
  202. $options = array(
  203. 'xhtml' => true,
  204. 'stripCrlf' => $this->_config->get_boolean('minify.html.strip.crlf'),
  205. 'ignoredComments' => $this->_config->get_array('minify.html.comments.ignore')
  206. );
  207. break;
  208. case 'htmltidy':
  209. case 'htmltidyxml':
  210. $options = array(
  211. 'clean' => $this->_config->get_boolean('minify.htmltidy.options.clean'),
  212. 'hide-comments' => $this->_config->get_boolean('minify.htmltidy.options.hide-comments'),
  213. 'wrap' => $this->_config->get_integer('minify.htmltidy.options.wrap')
  214. );
  215. break;
  216. }
  217. 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'))) {
  218. $w3_plugin_browsercache = w3_instance('W3_Plugin_BrowserCache');
  219. $options = array_merge($options, array(
  220. 'browserCacheId' => $w3_plugin_browsercache->get_replace_id(),
  221. 'browserCacheExtensions' => $w3_plugin_browsercache->get_replace_extensions()
  222. ));
  223. }
  224. if ($this->_config->get_boolean('cdn.enabled') && $this->_config->get_boolean('cdn.minify.enable')) {
  225. $w3_plugin_cdn = w3_instance('W3_Plugin_CdnCommon');
  226. $cdn = $w3_plugin_cdn->get_cdn();
  227. $options = array_merge($options, array(
  228. 'prependAbsolutePathCallback' => array(&$cdn, 'get_prepend_path'),
  229. ));
  230. }
  231. return $options;
  232. }
  233. }