Fix CRM_Utils_JS::dedupeClosures to ignore comments
authorColeman Watts <coleman@civicrm.org>
Tue, 30 Jun 2020 15:40:26 +0000 (11:40 -0400)
committerColeman Watts <coleman@civicrm.org>
Tue, 30 Jun 2020 15:40:26 +0000 (11:40 -0400)
This runs stripComments BEFORE dedupeClosures so that comments don't interfere with the deduping.
Also fixes stripComments to remove the line break as well as the comment line.

CRM/Utils/JS.php
Civi/Angular/Page/Modules.php
ang/crmUi.js
tests/phpunit/CRM/Utils/JSTest.php

index 0b46737714168ed50ccaa1539029299af5570177..27e52d0d1ffb0c86acaaa11ecd4a949654563178 100644 (file)
@@ -109,7 +109,7 @@ class CRM_Utils_JS {
    * @return string
    */
   public static function stripComments($script) {
-    return preg_replace(":^\\s*//[^\n]+$:m", "", $script);
+    return preg_replace("#^\\s*//[^\n]*$(?:\r\n|\n)?#m", "", $script);
   }
 
   /**
index 96d78867c44d8def951f7d825a6a6d537c38946d..d7957629ab9b62fdf50f1e2d73a56f6a463d4c0c 100644 (file)
@@ -106,15 +106,14 @@ class Modules extends \CRM_Core_Page {
   public function digestJs($files) {
     $scripts = [];
     foreach ($files as $file) {
-      $scripts[] = file_get_contents($file);
+      $scripts[] = \CRM_Utils_JS::stripComments(file_get_contents($file));
     }
     $scripts = \CRM_Utils_JS::dedupeClosures(
       $scripts,
       ['angular', '$', '_'],
       ['angular', 'CRM.$', 'CRM._']
     );
-    // This impl of stripComments currently adds 10-20ms and cuts ~7%
-    return \CRM_Utils_JS::stripComments(implode("\n", $scripts));
+    return implode("\n", $scripts);
   }
 
   /**
index 7482999091b9081a4681a8403c107f59ee9f3056..c6ba58b1464ef6d156cf5e3875a573b955a9f289 100644 (file)
     //         $scope.myOrder.setDir('field2', '');
     //   HTML: <tr ng-repeat="... | order:myOrder.get()">...</tr>
     .service('CrmUiOrderCtrl', function(){
-      //
       function CrmUiOrderCtrl(defaults){
         this.values = defaults;
       }
index 8cf3a7ab6af3deb0a6d1328d93d647914502e24e..36b6fef533f52e9fc2138b765135fcc91a9ae710 100644 (file)
@@ -155,11 +155,15 @@ class CRM_Utils_JSTest extends CiviUnitTestCase {
     $cases = [];
     $cases[] = [
       "a();\n//# sourceMappingURL=../foo/bar/baz.js\nb();",
-      "a();\n\nb();",
+      "a();\nb();",
     ];
     $cases[] = [
       "// foo\na();",
-      "\na();",
+      "a();",
+    ];
+    $cases[] = [
+      "// foo\n //\na();",
+      "a();",
     ];
     $cases[] = [
       "b();\n  // foo",
@@ -167,11 +171,11 @@ class CRM_Utils_JSTest extends CiviUnitTestCase {
     ];
     $cases[] = [
       "/// foo\na();\n\t \t//bar\nb();\n// whiz",
-      "\na();\n\nb();\n",
+      "a();\nb();\n",
     ];
     $cases[] = [
       "alert('//# sourceMappingURL=../foo/bar/baz.js');\n//zoop\na();",
-      "alert('//# sourceMappingURL=../foo/bar/baz.js');\n\na();",
+      "alert('//# sourceMappingURL=../foo/bar/baz.js');\na();",
     ];
     return $cases;
   }