Framework for applying filters, and one filter to start with.

This commit is contained in:
Ian Gulliver
2014-06-30 22:59:08 -07:00
parent 7d7345b9ec
commit 241a27c9c1
3 changed files with 55 additions and 7 deletions

View File

@@ -716,10 +716,51 @@ rr.SingleLineText = function() {
/* ============ Filters ============ */
rr.SplitTagAndNest = function() {
var hierarchy = Array.prototype.slice.call(arguments);
return function(node) {
var outerNode, innerNode;
for (var i = 0; i < hierarchy.length; i++) {
var newNode = document.createElement(hierarchy[i]);
if (i == 0) {
outerNode = innerNode = newNode;
} else {
innerNode.appendChild(newNode);
innerNode = newNode;
}
}
for (var i = 0; i < node.childNodes.length; i++) {
innerNode.appendChild(node.childNodes[i]);
}
node.parentNode.replaceChild(outerNode, node);
}
};
/* ============ Scaffolding ============ */
/**
* @param {Node} node
* @param {Object.<string, rr.typeFilter>} filters
*/
rr.ApplyFilters = function(node, filters) {
var filter = filters[node.nodeName.toLowerCase()];
if (filter) {
filter(node);
}
for (var i = 0; i < node.childNodes.length; i++) {
rr.ApplyFilters(node.childNodes[i], filters);
}
};
/**
* @constructor
*