X-Git-Url: http://git.cyclocoop.org/?p=ptitvelo%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins-dist%2Fcompresseur%2Flib%2Fminify_html%2Fclass.minify_html.php;h=e088887f0cc480ee99e35949401dbba9d627224f;hp=4cb01aab42a6c345d3a0768522c3465b806fd0c3;hb=f489d45ae677afde12ba9c9f70f463ea34787b45;hpb=0dda6af18a04031b1ca8e217187966077e752fe3 diff --git a/www/plugins-dist/compresseur/lib/minify_html/class.minify_html.php b/www/plugins-dist/compresseur/lib/minify_html/class.minify_html.php index 4cb01aa..e088887 100644 --- a/www/plugins-dist/compresseur/lib/minify_html/class.minify_html.php +++ b/www/plugins-dist/compresseur/lib/minify_html/class.minify_html.php @@ -67,14 +67,18 @@ class Minify_HTML_SPIP extends Minify_HTML { * This is a heavy regex-based removal of whitespace, unnecessary comments and * tokens. IE conditional comments are preserved. There are also options to have * STYLE and SCRIPT blocks compressed by callback functions. + * https://github.com/mrclay/minify/blob/master/min/lib/Minify/HTML.php * * A test suite is available. - * http://code.google.com/p/minify/source/browse/trunk/min/lib/Minify/HTML.php - * + * * @package Minify * @author Stephen Clay */ class Minify_HTML { + /** + * @var boolean + */ + protected $_jsCleanComments = true; /** * "Minify" an HTML page @@ -95,7 +99,7 @@ class Minify_HTML { * @return string */ public static function minify($html, $options = array()) { - $min = new Minify_HTML($html, $options); + $min = new self($html, $options); return $min->process(); } @@ -113,6 +117,8 @@ class Minify_HTML { * 'jsMinifier' : (optional) callback function to process content of SCRIPT * elements. Note: the type attribute is ignored. * + * 'jsCleanComments' : (optional) whether to remove HTML comments beginning and end of script block + * * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If * unset, minify will sniff for an XHTML doctype. * @@ -130,6 +136,9 @@ class Minify_HTML { if (isset($options['jsMinifier'])) { $this->_jsMinifier = $options['jsMinifier']; } + if (isset($options['jsCleanComments'])) { + $this->_jsCleanComments = (bool)$options['jsCleanComments']; + } } @@ -149,13 +158,13 @@ class Minify_HTML { // replace SCRIPTs (and minify) with placeholders $this->_html = preg_replace_callback( - '/(\\s*)(]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i' + '/(\\s*)]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i' ,array($this, '_removeScriptCB') ,$this->_html); // replace STYLEs (and minify) with placeholders $this->_html = preg_replace_callback( - '/\\s*(]*?>)([\\s\\S]*?)<\\/style>\\s*/i' + '/\\s*]*>)([\\s\\S]*?)<\\/style>\\s*/i' ,array($this, '_removeStyleCB') ,$this->_html); @@ -166,16 +175,22 @@ class Minify_HTML { ,$this->_html); // replace PREs with placeholders - $this->_html = preg_replace_callback('/\\s*(]*?>[\\s\\S]*?<\\/pre>)\\s*/i' + $this->_html = preg_replace_callback('/\\s*]*?>[\\s\\S]*?<\\/pre>)\\s*/i' ,array($this, '_removePreCB') ,$this->_html); // replace TEXTAREAs with placeholders $this->_html = preg_replace_callback( - '/\\s*(]*?>[\\s\\S]*?<\\/textarea>)\\s*/i' + '/\\s*]*?>[\\s\\S]*?<\\/textarea>)\\s*/i' ,array($this, '_removeTextareaCB') ,$this->_html); + // replace INPUTs with placeholders + $this->_html = preg_replace_callback( + '/\\s*]*?>)\\s*/i' + ,array($this, '_removeInputCB') + ,$this->_html); + // trim each line. // @todo take into account attribute values that span multiple lines. // 2 regexp because merging un /^\\s+|\\s+$/m also del a lot of newline chars ??? @@ -190,9 +205,9 @@ class Minify_HTML { .'|ul)\\b[^>]*>)/i', '$1', $this->_html); // remove ws outside of all elements - $this->_html = preg_replace_callback( - '/>([^<]+)_html = preg_replace( + '/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?$1$2$3<' ,$this->_html); // use newlines before 1st attribute in open tags (to limit line lengths) @@ -204,6 +219,12 @@ class Minify_HTML { ,array_values($this->_placeholders) ,$this->_html ); + // issue 229: multi-pass to catch scripts that didn't get replaced in textareas + $this->_html = str_replace( + array_keys($this->_placeholders) + ,array_values($this->_placeholders) + ,$this->_html + ); return $this->_html; } @@ -227,24 +248,24 @@ class Minify_HTML { protected $_cssMinifier = null; protected $_jsMinifier = null; - protected function _outsideTagCB($m) - { - return '>' . preg_replace('/^\\s+|\\s+$/', ' ', $m[1]) . '<'; - } - protected function _removePreCB($m) { - return $this->_reservePlace($m[1]); + return $this->_reservePlace("_reservePlace("_reservePlace($m[1]); + return $this->_reservePlace("\\s*$)/', '', $css); @@ -266,7 +287,7 @@ class Minify_HTML { protected function _removeScriptCB($m) { - $openScript = $m[2]; + $openScript = "\\s*$)/', '', $js); + if ($this->_jsCleanComments) { + $js = preg_replace('/(?:^\\s*\\s*$)/', '', $js); + } // remove CDATA section markers $js = $this->_removeCdata($js); @@ -302,4 +325,4 @@ class Minify_HTML { { return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str)); } -} +} \ No newline at end of file