浏览代码

Offenders layout for DOM queries without results

Gaël Métais 10 年之前
父节点
当前提交
6fc502b0b2
共有 3 个文件被更改,包括 32 次插入1 次删除
  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) {
             return offenders.map(function(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';
             });
         }
@@ -54,6 +60,11 @@ var policies = {
             return offenders.map(function(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]);
             });
         }
@@ -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>",
         "isOkThreshold": 0,
         "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": {
         "tool": "phantomas",

+ 3 - 0
lib/offendersHelpers.js

@@ -76,6 +76,9 @@ var OffendersHelpers = function() {
         if (domArray[0] === 'head') {
             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.length === 1) {
                 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>');
         });
 
+        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() {
             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>');