toPresenterDefinitionTree = function toPresenterDefinitionTree(nodes) {
	return Array.from(nodes)
	// fix to allow nesting of tick counters
	// .filter(node => !node.classList.contains('tick'))
	.map(function (node) {

		var definition = mergeObjects(definitionOutline, { root: node });

		// get all properties above from attributes
		for (var key in node.dataset) {
			if (!node.dataset.hasOwnProperty(key)) {
				continue;
			}
			if (typeof definition[key] === 'undefined') {
				continue;
			}
			definition[key] = node.dataset[key];
		}

		// if is repeater set do not parse children as children but define as repeat
		if (definition.repeat) {

			// can only have one repeated child
			definition.repeat = toPresenterDefinitionTree(node.children).pop();

			// detach repeated elements from DOM
			Array.from(node.children).forEach(function (node) {
				node.parentNode.removeChild(node);
			});
		}
		// children are normal children
		else if (node.children.length) {
				definition.children = toPresenterDefinitionTree(node.children);
			}

		return definition;
	});
}
Parsing DOM to DefinitionTree
@param nodes