From 7da813265f0601380cdc23e5f89b01dd187a4458 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Tue, 27 Dec 2011 16:20:48 -0500 Subject: 'dynClass' pseudo-attribute --- lib/js/urweb.js | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'lib/js') diff --git a/lib/js/urweb.js b/lib/js/urweb.js index a3976fef..ba73e744 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -47,7 +47,7 @@ function cons(v, ls) { function rev(ls) { var acc = null; for (; ls; ls = ls.next) - acc = cons(ls.data, acc); + acc = cons(ls.data, acc); return acc; } function concat(ls1, ls2) { @@ -562,7 +562,6 @@ function flattenLocal(s) { } - // Dynamic tree management function populate(node) { @@ -899,6 +898,37 @@ function tbx(s) { return x; } +function dynClass(html, s) { + var htmlCls = {v : null}; + html = flatten(htmlCls, html); + htmlCls = htmlCls.v; + + var dummy = document.createElement("body"); + dummy.innerHTML = html; + runScripts(dummy); + var html = dummy.firstChild; + dummy.removeChild(html); + addNode(html); + + var x = document.createElement("script"); + x.dead = false; + x.signal = s; + x.sources = null; + x.closures = htmlCls; + + x.recreate = function(v) { + for (var ls = x.closures; ls != htmlCls; ls = ls.next) + freeClosure(ls.data); + + var cls = {v : null}; + html.className = flatten(cls, v); + x.closures = concat(cls.v, htmlCls); + }; + + addNode(x); + populate(x); +} + function addOnChange(x, f) { var old = x.onchange; if (old == null) -- cgit v1.2.3