summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/cases/lib/exe/js_js_compress.test.php20
-rw-r--r--lib/exe/js.php20
2 files changed, 29 insertions, 11 deletions
diff --git a/_test/cases/lib/exe/js_js_compress.test.php b/_test/cases/lib/exe/js_js_compress.test.php
index 0bfb62056..48b36af15 100644
--- a/_test/cases/lib/exe/js_js_compress.test.php
+++ b/_test/cases/lib/exe/js_js_compress.test.php
@@ -40,15 +40,25 @@ class js_js_compress_test extends UnitTestCase {
}
function test_dquot1(){
- $text = 'var foo="Now what \'do we//get /*here*/ ?";';
+ $text = 'var foo="Now what \\" \'do we//get /*here*/ ?";';
$this->assertEqual(js_compress($text), $text);
}
+ function test_dquotrunaway(){
+ $text = 'var foo="Now where does it end';
+ $this->assertEqual(js_compress($text), "$text\n"); //\n is added by compressor
+ }
+
function test_squot1(){
- $text = "var foo='Now what \"do we//get /*here*/ ?';";
+ $text = "var foo='Now what \\' \"do we//get /*here*/ ?';";
$this->assertEqual(js_compress($text), $text);
}
+ function test_squotrunaway(){
+ $text = "var foo='Now where does it end";
+ $this->assertEqual(js_compress($text), "$text\n"); //\n is added by compressor
+ }
+
function test_nl1(){
$text = "var foo=6;\nvar baz=7;";
$this->assertEqual(js_compress($text), 'var foo=6;var baz=7;');
@@ -63,6 +73,12 @@ class js_js_compress_test extends UnitTestCase {
$text = "var foo=6; \t ";
$this->assertEqual(js_compress($text), 'var foo=6;');
}
+
+ function test_shortcond(){
+ $text = "var foo = (baz) ? 'bar' : 'bla';";
+ $this->assertEqual(js_compress($text), "var foo=(baz)?'bar':'bla';");
+
+ }
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 7ff60710c..2aa9c4399 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -238,7 +238,7 @@ function js_compress($s){
$len = strlen($s);
// items that don't need spaces next to them
- $chars = '^&|!+\-*\/%=:;,{}()<>% \t\n\r';
+ $chars = '^&|!+\-*\/%=\?:;,{}()<>% \t\n\r';
ob_start();
while($i < $len){
@@ -286,11 +286,12 @@ function js_compress($s){
// double quote strings
if($ch == '"'){
$j = 1;
- while( $s{$i+$j} != '"' ){
- while( ($s{$i+$j} != '\\') && ($s{$i+$j} != '"') ){
- $j = $j + 1;
+ while( $s{$i+$j} != '"' && ($i+$j < $len)){
+ if( $s{$i+$j} == '\\' && $s{$i+$j+1} == '"' ){
+ $j += 2;
+ }else{
+ $j += 1;
}
- if($s{$i+$j} == '\\') $j = $j + 2;
}
echo substr($s,$i,$j+1);
$i = $i + $j + 1;
@@ -300,11 +301,12 @@ function js_compress($s){
// single quote strings
if($ch == "'"){
$j = 1;
- while( $s{$i+$j} != "'" ){
- while( ($s{$i+$j} != '\\') && ($s{$i+$j} != "'") ){
- $j = $j + 1;
+ while( $s{$i+$j} != "'" && ($i+$j < $len)){
+ if( $s{$i+$j} == '\\' && $s{$i+$j+1} == "'" ){
+ $j += 2;
+ }else{
+ $j += 1;
}
- if ($s{$i+$j} == '\\') $j = $j + 2;
}
echo substr($s,$i,$j+1);
$i = $i + $j + 1;