diff --git a/_test/tests/lib/exe/js_js_compress.test.php b/_test/tests/lib/exe/js_js_compress.test.php index 49f93cc54578b2ceaa350e06fd670126bc9eb7f7..b1ae2a84f3db92ba09215aeead9d9fc31d54f05e 100644 --- a/_test/tests/lib/exe/js_js_compress.test.php +++ b/_test/tests/lib/exe/js_js_compress.test.php @@ -118,6 +118,32 @@ class js_js_compress_test extends DokuWikiTest { $this->assertEquals("var foo='this is a multiline string';",js_compress($text)); } + function test_nocompress(){ + $text = <<<EOF +var meh = 'test' ; + +/* BEGIN NOCOMPRESS */ + + +var foo = 'test' ; + +var bar = 'test' ; + + +/* END NOCOMPRESS */ + +var moh = 'test' ; +EOF; + $out = <<<EOF +var meh='test'; +var foo = 'test' ; + +var bar = 'test' ; +var moh='test'; +EOF; + + $this->assertEquals($out, js_compress($text)); + } /** * Test the files provided with the original JsStrip diff --git a/lib/exe/js.php b/lib/exe/js.php index f84c07709d46aece3a3d642880f92754581d106c..634e212072e7c2b395526d0db8d60fcc7792e768 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -102,8 +102,12 @@ function js_out(){ // load files foreach($files as $file){ + $ismin = (substr($file,-7) == '.min.js'); + echo "\n\n/* XXXXXXXXXX begin of ".str_replace(DOKU_INC, '', $file) ." XXXXXXXXXX */\n\n"; + if($ismin) echo "\n/* BEGIN NOCOMPRESS */\n"; js_load($file); + if($ismin) echo "\n/* END NOCOMPRESS */\n"; echo "\n\n/* XXXXXXXXXX end of " . str_replace(DOKU_INC, '', $file) . " XXXXXXXXXX */\n\n"; } @@ -262,7 +266,18 @@ function js_compress($s){ if($ch == '/' && $s{$i+1} == '*' && $s{$i+2} != '@'){ $endC = strpos($s,'*/',$i+2); if($endC === false) trigger_error('Found invalid /*..*/ comment', E_USER_ERROR); - $i = $endC + 2; + + // check if this is a NOCOMPRESS comment + if(substr($s, $i, $endC+2-$i) == '/* BEGIN NOCOMPRESS */'){ + $endNC = strpos($s, '/* END NOCOMPRESS */', $endC+2); + if($endNC === false) trigger_error('Found invalid NOCOMPRESS comment', E_USER_ERROR); + + // verbatim copy contents, trimming but putting it on its own line + $result .= "\n".trim(substr($s, $i + 22, $endNC - ($i + 22)))."\n"; // BEGIN comment = 22 chars + $i = $endNC + 20; // END comment = 20 chars + }else{ + $i = $endC + 2; + } continue; }