implement optional filtering in hyperjson

Implemented via callback, return falsey if you want to filter an element
and all of its children from the serialized result.
This commit is contained in:
ansuz 2016-03-24 12:11:31 +01:00
parent 1bd5cb9e27
commit 0d33af773f
2 changed files with 14 additions and 5 deletions

View File

@ -5,7 +5,7 @@ define([
], function (vdom, hyperjson, hyperscript) { ], function (vdom, hyperjson, hyperscript) {
// complain if you don't find the required APIs // complain if you don't find the required APIs
if (!(vdom && hyperjson && hyperscript)) { throw new Error(); } if (!(vdom && hyperjson && hyperscript)) { throw new Error(); }
// Generate a matrix of conversions // Generate a matrix of conversions
/* /*
convert.dom.to.hjson, convert.hjson.to.dom, convert.dom.to.hjson, convert.hjson.to.dom,
@ -46,7 +46,7 @@ define([
return hyperjson.fromDOM(vdom.create(V)); return hyperjson.fromDOM(vdom.create(V));
} }
} }
}, },
convert = {}; convert = {};
Object.keys(methods).forEach(function (method) { Object.keys(methods).forEach(function (method) {
convert[method] = { to: methods[method] }; convert[method] = { to: methods[method] };

View File

@ -47,13 +47,20 @@ define([], function () {
return x; return x;
}; };
var DOM2HyperJSON = function(el){ var DOM2HyperJSON = function(el, predicate){
if(!el.tagName && el.nodeType === Node.TEXT_NODE){ if(!el.tagName && el.nodeType === Node.TEXT_NODE){
return el.textContent; return el.textContent;
} }
if(!el.attributes){ if(!el.attributes){
return; return;
} }
if (predicate) {
if (!predicate(el)) {
// shortcircuit
return;
}
}
var attributes = {}; var attributes = {};
var i = 0; var i = 0;
@ -102,10 +109,12 @@ define([], function () {
// js hint complains if we use 'var' here // js hint complains if we use 'var' here
i = 0; i = 0;
for(; i < el.childNodes.length; i++){ for(; i < el.childNodes.length; i++){
children.push(DOM2HyperJSON(el.childNodes[i])); children.push(DOM2HyperJSON(el.childNodes[i], predicate));
} }
result.push(children);
result.push(children.filter(isTruthy));
return result; return result;
}; };