Browse Source

Offenders layout for DOM queries without results

Gaël Métais 10 years ago
parent
commit
6fc502b0b2
3 changed files with 32 additions and 1 deletions
  1. 24 1
      lib/metadata/policies.js
  2. 3 0
      lib/offendersHelpers.js
  3. 5 0
      test/core/offendersHelpersTest.js

+ 24 - 1
lib/metadata/policies.js

@@ -39,6 +39,12 @@ var policies = {
         "offendersTransformFn": function(offenders) {
         "offendersTransformFn": function(offenders) {
             return offenders.map(function(offender) {
             return offenders.map(function(offender) {
                 var parts = /^(.*): (\d) occurrences$/.exec(offender);
                 var parts = /^(.*): (\d) occurrences$/.exec(offender);
+
+                if (!parts) {
+                    debug('DOMidDuplicated offenders transform function error with "%s"', offender);
+                    return offender;
+                }
+                
                 return '<b>#' + parts[1] + '</b>: ' + parts[2] + ' occurrences';
                 return '<b>#' + parts[1] + '</b>: ' + parts[2] + ' occurrences';
             });
             });
         }
         }
@@ -54,6 +60,11 @@ var policies = {
             return offenders.map(function(offender) {
             return offenders.map(function(offender) {
                 var parts = /^"(.*)" appended to "(.*)"$/.exec(offender);
                 var parts = /^"(.*)" appended to "(.*)"$/.exec(offender);
 
 
+                if (!parts) {
+                    debug('DOMinserts offenders transform function error with "%s"', offender);
+                    return offender;
+                }
+
                 return offendersHelpers.domPathToButton(parts[1]) + ' appended to ' + offendersHelpers.domPathToButton(parts[2]);
                 return offendersHelpers.domPathToButton(parts[1]) + ' appended to ' + offendersHelpers.domPathToButton(parts[2]);
             });
             });
         }
         }
@@ -81,7 +92,19 @@ var policies = {
         "message": "<p>Number of queries that return no result.</p><p>It suggests the query is not used on the page, probably because it is some dead code.</p><p>Or maybe the code is trying to find an HTML block that is not always here. Look at the JS Timeline to see if the scripts correctly figures out the HTML block is not here and immediatly stops interacting further with the DOM.</p>",
         "message": "<p>Number of queries that return no result.</p><p>It suggests the query is not used on the page, probably because it is some dead code.</p><p>Or maybe the code is trying to find an HTML block that is not always here. Look at the JS Timeline to see if the scripts correctly figures out the HTML block is not here and immediatly stops interacting further with the DOM.</p>",
         "isOkThreshold": 0,
         "isOkThreshold": 0,
         "isBadThreshold": 100,
         "isBadThreshold": 100,
-        "isAbnormalThreshold": 200
+        "isAbnormalThreshold": 200,
+        "offendersTransformFn": function(offenders) {
+            return offenders.map(function(offender) {
+                var parts = /^(.*) \(in (.*)\) using (.*)$/.exec(offender);
+
+                if (!parts) {
+                    debug('DOMqueriesWithoutResults offenders transform function error with "%s"', offender);
+                    return offender;
+                }
+
+                return '<b>' + parts[1] + '</b> (in ' + offendersHelpers.domPathToButton(parts[2]) + ') using <b>' + parts[3] + '</b>';
+            });
+        }
     },
     },
     "eventsBound": {
     "eventsBound": {
         "tool": "phantomas",
         "tool": "phantomas",

+ 3 - 0
lib/offendersHelpers.js

@@ -76,6 +76,9 @@ var OffendersHelpers = function() {
         if (domArray[0] === 'head') {
         if (domArray[0] === 'head') {
             return '<div class="eltButton headButton"><b>head</b></div>';
             return '<div class="eltButton headButton"><b>head</b></div>';
         }
         }
+        if (domArray[0] === '#document') {
+            return '<div class="eltButton documentButton"><b>document</b></div>';
+        }
         if (domArray[0] === 'DocumentFragment') {
         if (domArray[0] === 'DocumentFragment') {
             if (domArray.length === 1) {
             if (domArray.length === 1) {
                 return '<div class="eltButton fragButton">Fragment</div>';
                 return '<div class="eltButton fragButton">Fragment</div>';

+ 5 - 0
test/core/offendersHelpersTest.js

@@ -97,6 +97,11 @@ describe('offendersHelpers', function() {
             result.should.equal('<div class="eltButton headButton"><b>head</b></div>');
             result.should.equal('<div class="eltButton headButton"><b>head</b></div>');
         });
         });
 
 
+        it('should transform #document', function() {
+            var result = offendersHelpers.domPathToButton('#document');
+            result.should.equal('<div class="eltButton documentButton"><b>document</b></div>');
+        });
+
         it('should transform a standard in-body element', function() {
         it('should transform a standard in-body element', function() {
             var result = offendersHelpers.domPathToButton('body > div#colorbox > div#cboxContent');
             var result = offendersHelpers.domPathToButton('body > div#colorbox > div#cboxContent');
             result.should.equal('<div class="eltButton domButton opens">DOM element <b>div#cboxContent</b><div class="domTree"><div><span>body</span><div><span>div#colorbox</span><div><span>div#cboxContent</span></div></div></div></div></div>');
             result.should.equal('<div class="eltButton domButton opens">DOM element <b>div#cboxContent</b><div class="domTree"><div><span>body</span><div><span>div#colorbox</span><div><span>div#cboxContent</span></div></div></div></div></div>');