/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
- <?php
-
- /**
- * Minifiers object
- */
-
- /**
- * Class W3_Minifier
- */
- class W3_Minifier {
- /**
- * Config instance
- *
- * @var W3_Config
- */
- var $_config = null;
-
- /**
- * Minifiers array
- *
- * @var array
- */
- var $_minifiers = array(
- 'combinejs' => array('Minify_CombineOnly', 'minify'),
- 'combinecss' => array('Minify_CombineOnly', 'minify'),
-
- 'js' => array('JSMin', 'minify'),
- 'yuijs' => array('Minify_YUICompressor', 'minifyJs'),
- 'ccjs' => array('Minify_ClosureCompiler', 'minify'),
-
- 'css' => array('Minify_CSS', 'minify'),
- 'yuicss' => array('Minify_YUICompressor', 'minifyCss'),
- 'csstidy' => array('Minify_CSSTidy', 'minify'),
-
- 'html' => array('Minify_HTML', 'minify'),
- 'htmlxml' => array('Minify_HTML', 'minify'),
-
- 'htmltidy' => array('Minify_HTMLTidy', 'minifyXhtml'),
- 'htmltidyxml' => array('Minify_HTMLTidy', 'minifyXml')
- );
-
- /**
- * PHP5-style constructor
- */
- function __construct() {
- $this->_config = & w3_instance('W3_Config');
- }
-
- /**
- * PHP4-style constructor
- */
- function W3_Minifier() {
- $this->__construct();
- }
-
- /**
- * Returns true if minifier exists
- *
- * @param string $engine
- * @return boolean
- */
- function exists($engine) {
- return isset($this->_minifiers[$engine]);
- }
-
- /**
- * Returns true if minifier available
- *
- * @param string $engine
- * @return boolean
- */
- function available($engine) {
- switch ($engine) {
- case 'yuijs':
- $path_java = $this->_config->get_string('minify.yuijs.path.java');
- $path_jar = $this->_config->get_string('minify.yuijs.path.jar');
-
- return (file_exists($path_java) && file_exists($path_jar));
-
- case 'yuicss':
- $path_java = $this->_config->get_string('minify.yuicss.path.java');
- $path_jar = $this->_config->get_string('minify.yuicss.path.jar');
-
- return (file_exists($path_java) && file_exists($path_jar));
-
- case 'ccjs':
- $path_java = $this->_config->get_string('minify.ccjs.path.java');
- $path_jar = $this->_config->get_string('minify.ccjs.path.jar');
-
- return (file_exists($path_java) && file_exists($path_jar));
-
- case 'htmltidy':
- case 'htmltidyxml':
- return class_exists('tidy');
-
- case 'js':
- case 'css':
- case 'csstidy':
- case 'html':
- case 'htmlxml':
- return true;
- }
-
- return false;
- }
-
- /**
- * Returns minifier
- *
- * @param string $engine
- * @return array
- */
- function get_minifier($engine) {
- if (isset($this->_minifiers[$engine])) {
- return $this->_minifiers[$engine];
- }
-
- return null;
- }
-
- /**
- * Initializes minifier
- *
- * @param string $engine
- * @return void
- */
- function init($engine) {
- switch ($engine) {
- case 'js':
- require_once W3TC_LIB_MINIFY_DIR . '/JSMin.php';
- break;
-
- case 'css':
- require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSS.php';
- break;
-
- case 'yuijs':
- require_once W3TC_LIB_MINIFY_DIR . '/Minify/YUICompressor.php';
-
- Minify_YUICompressor::setPathJava($this->_config->get_string('minify.yuijs.path.java'));
- Minify_YUICompressor::setPathJar($this->_config->get_string('minify.yuijs.path.jar'));
- break;
-
- case 'yuicss':
- require_once W3TC_LIB_MINIFY_DIR . '/Minify/YUICompressor.php';
-
- Minify_YUICompressor::setPathJava($this->_config->get_string('minify.yuicss.path.java'));
- Minify_YUICompressor::setPathJar($this->_config->get_string('minify.yuicss.path.jar'));
- break;
-
- case 'ccjs':
- require_once W3TC_LIB_MINIFY_DIR . '/Minify/ClosureCompiler.php';
-
- Minify_ClosureCompiler::setPathJava($this->_config->get_string('minify.ccjs.path.java'));
- Minify_ClosureCompiler::setPathJar($this->_config->get_string('minify.ccjs.path.jar'));
- break;
-
- case 'csstidy':
- require_once W3TC_LIB_MINIFY_DIR . '/Minify/CSSTidy.php';
- break;
-
- case 'html':
- case 'htmlxml':
- require_once W3TC_LIB_MINIFY_DIR . '/Minify/HTML.php';
- break;
-
- case 'htmltidy':
- case 'htmltidyxml':
- require_once W3TC_LIB_MINIFY_DIR . '/Minify/HTMLTidy.php';
- break;
- }
- }
-
- /**
- * Returns minifier options
- *
- * @param string $engine
- * @return array
- */
- function get_options($engine) {
- $options = array();
-
- switch ($engine) {
- case 'js':
- $options = array(
- 'preserveComments' => !$this->_config->get_boolean('minify.js.strip.comments'),
- 'stripCrlf' => $this->_config->get_boolean('minify.js.strip.crlf')
- );
- break;
-
- case 'css':
- $options = array(
- 'preserveComments' => !$this->_config->get_boolean('minify.css.strip.comments'),
- 'stripCrlf' => $this->_config->get_boolean('minify.css.strip.crlf')
- );
-
- $symlinks = $this->_config->get_array('minify.symlinks');
-
- foreach ($symlinks as $link => $target) {
- $link = str_replace('//', realpath($_SERVER['DOCUMENT_ROOT']), $link);
- $link = strtr($link, '/', DIRECTORY_SEPARATOR);
- $options['symlinks'][$link] = realpath($target);
- }
- break;
-
- case 'yuijs':
- $options = array(
- 'line-break' => $this->_config->get_integer('minify.yuijs.options.line-break'),
- 'nomunge' => $this->_config->get_boolean('minify.yuijs.options.nomunge'),
- 'preserve-semi' => $this->_config->get_boolean('minify.yuijs.options.preserve-semi'),
- 'disable-optimizations' => $this->_config->get_boolean('minify.yuijs.options.disable-optimizations')
- );
- break;
-
- case 'yuicss':
- $options = array(
- 'line-break' => $this->_config->get_integer('minify.yuicss.options.line-break')
- );
- break;
-
- case 'ccjs':
- $options = array(
- 'compilation_level' => $this->_config->get_string('minify.ccjs.options.compilation_level'),
- 'formatting' => $this->_config->get_string('minify.ccjs.options.formatting')
- );
- break;
-
- case 'csstidy':
- $options = array(
- 'remove_bslash' => $this->_config->get_boolean('minify.csstidy.options.remove_bslash'),
- 'compress_colors' => $this->_config->get_boolean('minify.csstidy.options.compress_colors'),
- 'compress_font-weight' => $this->_config->get_boolean('minify.csstidy.options.compress_font-weight'),
- 'lowercase_s' => $this->_config->get_boolean('minify.csstidy.options.lowercase_s'),
- 'optimise_shorthands' => $this->_config->get_integer('minify.csstidy.options.optimise_shorthands'),
- 'remove_last_;' => $this->_config->get_boolean('minify.csstidy.options.remove_last_;'),
- 'case_properties' => $this->_config->get_integer('minify.csstidy.options.case_properties'),
- 'sort_properties' => $this->_config->get_boolean('minify.csstidy.options.sort_properties'),
- 'sort_selectors' => $this->_config->get_boolean('minify.csstidy.options.sort_selectors'),
- 'merge_selectors' => $this->_config->get_integer('minify.csstidy.options.merge_selectors'),
- 'discard_invalid_properties' => $this->_config->get_boolean('minify.csstidy.options.discard_invalid_properties'),
- 'css_level' => $this->_config->get_string('minify.csstidy.options.css_level'),
- 'preserve_css' => $this->_config->get_boolean('minify.csstidy.options.preserve_css'),
- 'timestamp' => $this->_config->get_boolean('minify.csstidy.options.timestamp'),
- 'template' => $this->_config->get_string('minify.csstidy.options.template')
- );
- break;
-
- case 'html':
- case 'htmlxml':
- $options = array(
- 'xhtml' => true,
- 'stripCrlf' => $this->_config->get_boolean('minify.html.strip.crlf'),
- 'ignoredComments' => $this->_config->get_array('minify.html.comments.ignore')
- );
- break;
-
- case 'htmltidy':
- case 'htmltidyxml':
- $options = array(
- 'clean' => $this->_config->get_boolean('minify.htmltidy.options.clean'),
- 'hide-comments' => $this->_config->get_boolean('minify.htmltidy.options.hide-comments'),
- 'wrap' => $this->_config->get_integer('minify.htmltidy.options.wrap')
- );
- break;
- }
-
- 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'))) {
- $w3_plugin_browsercache = & w3_instance('W3_Plugin_BrowserCache');
-
- $options = array_merge($options, array(
- 'browserCacheId' => $w3_plugin_browsercache->get_replace_id(),
- 'browserCacheExtensions' => $w3_plugin_browsercache->get_replace_extensions()
- ));
- }
-
- if ($this->_config->get_boolean('cdn.enabled') && $this->_config->get_boolean('cdn.minify.enable')) {
- $w3_plugin_cdn =& w3_instance('W3_Plugin_CdnCommon');
- $cdn =& $w3_plugin_cdn->get_cdn();
-
- $options = array_merge($options, array(
- 'prependAbsolutePathCallback' => array(&$cdn, 'get_prepend_path'),
- ));
- }
-
- return $options;
- }
- }