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.

Conflicts:
	www/common/convert.js
pull/1/head
ansuz 9 years ago
parent 475ca9bea8
commit c047d5310f

@ -1,14 +1,16 @@
define([ define([
'/common/virtual-dom.js',
'/common/hyperjson.js', '/common/hyperjson.js',
'/common/hyperscript.js' '/common/hyperscript.js'
], function (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 (!(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,
convert.dom.to.vdom, convert.vdom.to.dom, convert.dom.to.vdom, convert.vdom.to.dom,
convert.vdom.to.hjson, convert.hjson.to.vdom
and of course, identify functions in case you try to and of course, identify functions in case you try to
convert a datatype to itself convert a datatype to itself
@ -20,13 +22,28 @@ define([
methods = { methods = {
dom:{ dom:{
dom: Self, dom: Self,
hjson: hyperjson.fromDOM hjson: hyperjson.fromDOM,
vdom: function (D) {
return hyperjson.callOn(hyperjson.fromDOM(D), vdom.h);
}
}, },
hjson:{ hjson:{
hjson: Self, hjson: Self,
dom: function (H) { dom: function (H) {
// hyperjson.fromDOM, // hyperjson.fromDOM,
return hyperjson.callOn(H, hyperscript); return hyperjson.callOn(H, hyperscript);
},
vdom: function (H) {
return hyperjson.callOn(H, vdom.h);
}
},
vdom:{
vdom: Self,
dom: function (V) {
return vdom.create(V);
},
hjson: function (V) {
return hyperjson.fromDOM(vdom.create(V));
} }
} }
}, },
@ -38,6 +55,7 @@ define([
}()); }());
convert.core = { convert.core = {
vdom: vdom,
hyperjson: hyperjson, hyperjson: hyperjson,
hyperscript: hyperscript hyperscript: hyperscript
}; };

@ -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;
}; };

Loading…
Cancel
Save