1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /**
- * Lists the number of different characters
- */
- /* global document: true, Node: true, window: true */
- exports.version = '1.0';
- exports.module = function(phantomas) {
- 'use strict';
- //phantomas.setMetric('differentCharacters'); // @desc the number of different characters in the body @offenders
- phantomas.on('report', function() {
- phantomas.log("charactersCount: starting to analyze characters on page...");
- phantomas.evaluate(function() {
- (function(phantomas) {
- phantomas.spyEnabled(false, 'analyzing characters on page');
- function getLetterCount(arr){
- return arr.reduce(function(prev, next){
- prev[next] = 1;
- return prev;
- }, {});
- }
- if (document.body && document.body.textContent) {
- var allText = '';
- // Traverse all DOM Tree to read text
- var runner = new phantomas.nodeRunner();
- runner.walk(document.body, function(node, depth) {
- switch (node.nodeType) {
- // Grabing text nodes
- case Node.TEXT_NODE:
- if (node.parentNode.tagName !== 'SCRIPT' && node.parentNode.tagName !== 'STYLE') {
- allText += node.nodeValue;
- }
- break;
- // Grabing CSS content properties
- case Node.ELEMENT_NODE:
- if (node.tagName !== 'SCRIPT' && node.tagName !== 'STYLE') {
- allText += window.getComputedStyle(node).getPropertyValue('content');
- allText += window.getComputedStyle(node, ':before').getPropertyValue('content');
- allText += window.getComputedStyle(node, ':after').getPropertyValue('content');
- }
- break;
- }
- });
- // Reduce all text found in page into a string of unique chars
- var charactersList = getLetterCount(allText.split(''));
- var charsetString = Object.keys(charactersList).sort().join('');
-
- // Remove blank characters
- charsetString = charsetString.replace(/\s/g, '');
- phantomas.setMetric('differentCharacters', charsetString.length);
- phantomas.addOffender('differentCharacters', charsetString);
- }
- phantomas.spyEnabled(true);
- }(window.__phantomas));
- });
- phantomas.log("charactersCount: analyzing characters done.");
- });
- };
|