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); }; }; module.exports = new OffendersHelpers();