summaryrefslogtreecommitdiff
path: root/lib/js
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2011-12-27 16:20:48 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2011-12-27 16:20:48 -0500
commit7da813265f0601380cdc23e5f89b01dd187a4458 (patch)
treeb79292fd3c487498c7837ad6008636a1ed5163cf /lib/js
parent0bd86cec8a712d19d4378d84584c7d0ba4e5a7af (diff)
'dynClass' pseudo-attribute
Diffstat (limited to 'lib/js')
-rw-r--r--lib/js/urweb.js34
1 files changed, 32 insertions, 2 deletions
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)