diff --git a/phantomas_custom/modules/domComplexYLT/domComplexYLT.js b/phantomas_custom/modules/domComplexYLT/domComplexYLT.js
index f35bf9d..a64f3c6 100644
--- a/phantomas_custom/modules/domComplexYLT/domComplexYLT.js
+++ b/phantomas_custom/modules/domComplexYLT/domComplexYLT.js
@@ -3,7 +3,7 @@
*/
/* global document: true, Node: true, window: true */
-exports.version = '0.4.a';
+exports.version = '1.0.a';
exports.module = function(phantomas) {
'use strict';
@@ -18,11 +18,23 @@ exports.module = function(phantomas) {
phantomas.setMetric('DOMelementsCount'); // @desc total number of HTML element nodes
phantomas.setMetric('DOMelementMaxDepth'); // @desc maximum level on nesting of HTML element node
- phantomas.setMetric('DOMidDuplicated'); // @desc duplicated id found in DOM
-
// nodes with inlines CSS (style attribute)
phantomas.setMetric('nodesWithInlineCSS'); // @desc number of nodes with inline CSS styling (with style attribute) @offenders
+ // images
+ phantomas.setMetric('imagesScaledDown'); // @desc number of
nodes that have images scaled down in HTML @offenders
+ phantomas.setMetric('imagesWithoutDimensions'); // @desc number of
nodes without both width and height attribute @offenders
+
+ // duplicated ID (issue #392)
+ phantomas.setMetric('DOMidDuplicated'); // @desc number of duplicated IDs found in DOM
+
+ var Collection = require('../../../node_modules/phantomas/lib/collection'),
+ DOMids = new Collection();
+
+ phantomas.on('domId', function(id) {
+ DOMids.push(id);
+ });
+
// HTML size
phantomas.on('report', function() {
phantomas.setMetricEvaluate('bodyHTMLSize', function() { // @desc the size of body tag content (document.body.innerHTML.length)
@@ -37,11 +49,6 @@ exports.module = function(phantomas) {
DOMelementMaxDepthElts = [],
size = 0;
- // include all nodes
- runner.isSkipped = function(node) {
- return false;
- };
-
runner.walk(document.body, function(node, depth) {
switch (node.nodeType) {
case Node.COMMENT_NODE:
@@ -64,8 +71,8 @@ exports.module = function(phantomas) {
DOMelementMaxDepthElts.push(phantomas.getDOMPath(node));
}
+ // report duplicated ID (issue #392)
if (node.id) {
- // Send id to a collection so that duplicated ids can be counted
phantomas.emit('domId', node.id);
}
@@ -74,6 +81,20 @@ exports.module = function(phantomas) {
return false;
}
+ // images
+ if (node.nodeName === 'IMG') {
+ if (!node.hasAttribute('width') || !node.hasAttribute('height')) {
+ phantomas.incrMetric('imagesWithoutDimensions');
+ phantomas.addOffender('imagesWithoutDimensions', '%s <%s>', phantomas.getDOMPath(node), node.src);
+ }
+ if (node.naturalHeight && node.naturalWidth && node.height && node.width) {
+ if (node.naturalHeight > node.height || node.naturalWidth > node.width) {
+ phantomas.incrMetric('imagesScaledDown');
+ phantomas.addOffender('imagesScaledDown', '%s (%dx%d -> %dx%d)', node.src, node.naturalWidth, node.naturalHeight, node.width, node.height);
+ }
+ }
+ }
+
// count nodes with inline CSS
if (node.hasAttribute('style')) {
phantomas.incrMetric('nodesWithInlineCSS');
@@ -100,44 +121,15 @@ exports.module = function(phantomas) {
// count