var OffendersHelpers = function() {
this.domPathToArray = function(str) {
return str.split(/\s?>\s?/);
};
this.listOfDomArraysToTree = function(listOfDomArrays) {
var result = {};
function recursiveTreeBuilder(tree, domArray) {
if (domArray.length > 0) {
var currentDomElement = domArray.shift(domArray);
if (tree === null) {
tree = {};
}
tree[currentDomElement] = recursiveTreeBuilder(tree[currentDomElement] || null, domArray);
return tree;
} else if (tree === null) {
return 1;
} else {
return tree + 1;
}
}
listOfDomArrays.forEach(function(domArray) {
result = recursiveTreeBuilder(result, domArray);
});
return result;
};
this.domTreeToHTML = function(domTree) {
function recursiveHtmlBuilder(tree) {
var html = '';
var keys = Object.keys(tree);
keys.forEach(function(key) {
if (isNaN(tree[key])) {
html += '
' + key + '' + recursiveHtmlBuilder(tree[key]) + '
';
} else if (tree[key] > 1) {
html += '' + key + ' (x' + tree[key] + ')
';
} else {
html += '' + key + '
';
}
});
return html;
}
return '' + recursiveHtmlBuilder(domTree) + '
';
};
this.listOfDomPathsToHTML = function(domPaths) {
var domArrays = domPaths.map(this.domPathToArray);
var domTree = this.listOfDomArraysToTree(domArrays);
return this.domTreeToHTML(domTree);
};
this.domPathToButton = function(domPath) {
var domArray = this.domPathToArray(domPath);
var domTree = this.listOfDomPathsToHTML([domPath]);
if (domArray[0] === 'html') {
return 'html
';
}
if (domArray[0] === 'body') {
if (domArray.length === 1) {
return 'body
';
} else {
return 'DOM element ' + domArray[domArray.length - 1] + '' + domTree + '
';
}
}
if (domArray[0] === 'head') {
return 'head
';
}
if (domArray[0] === 'DocumentFragment') {
if (domArray.length === 1) {
return 'Fragment
';
} else {
return 'Fragment element ' + domArray[domArray.length - 1] + '' + domTree + '
';
}
}
// Not attached element, such as just created with document.createElement()
if (domArray.length === 1) {
return 'Created element ' + domPath + '
';
} else {
return 'Created element ' + domArray[domArray.length - 1] + '' + domTree + '
';
}
};
};
module.exports = new OffendersHelpers();