annotate jslib/urweb.js @ 600:d1cce194180d

Do proper insertion of dynamic content within nested DOM containers
author Adam Chlipala <adamc@hcoop.net>
date Sun, 11 Jan 2009 10:41:38 -0500
parents 4c2c740c6931
children 7c3c21eb5b4c
rev   line source
adamc@580 1 function cons(v, ls) {
adamc@580 2 return { n : ls, v : v };
adamc@580 3 }
adamc@579 4 function callAll(ls) {
adamc@585 5 for (; ls; ls = ls.n)
adamc@579 6 ls.v();
adamc@579 7 }
adamc@574 8
adamc@580 9 function sc(v) {
adamc@580 10 return {v : v, h : null};
adamc@580 11 }
adamc@580 12 function sv(s, v) {
adamc@580 13 s.v = v;
adamc@580 14 callAll(s.h);
adamc@580 15 }
adamc@579 16
adamc@580 17 function ss(s) {
adamc@580 18 return s;
adamc@580 19 }
adamc@580 20 function sr(v) {
adamc@580 21 return {v : v, h : null};
adamc@580 22 }
adamc@580 23 function sb(x,y) {
adamc@580 24 var z = y(x.v);
adamc@580 25 var s = {v : z.v, h : null};
adamc@580 26
adamc@580 27 function reZ() {
adamc@580 28 z.h = cons(function() { s.v = z.v; callAll(s.h); }, z.h);
adamc@580 29 }
adamc@580 30
adamc@580 31 x.h = cons(function() { z = y(x.v); reZ(); s.v = z.v; callAll(s.h); }, x.h);
adamc@580 32 reZ();
adamc@580 33
adamc@580 34 return s;
adamc@580 35 }
adamc@571 36
adamc@600 37 function myParent() {
adamc@600 38 var pos = document;
adamc@600 39
adamc@600 40 while (pos.lastChild && pos.lastChild.nodeType == 1)
adamc@600 41 pos = pos.lastChild;
adamc@600 42
adamc@600 43 return pos.parentNode;
adamc@600 44 }
adamc@600 45
adamc@571 46 function dyn(s) {
adamc@571 47 var x = document.createElement("span");
adamc@571 48 x.innerHTML = s.v;
adamc@600 49 myParent().appendChild(x);
adamc@580 50 s.h = cons(function() { x.innerHTML = s.v }, s.h);
adamc@571 51 }
adamc@582 52
adamc@598 53 function inp(t, s) {
adamc@598 54 var x = document.createElement(t);
adamc@598 55 x.value = s.v;
adamc@600 56 myParent().appendChild(x);
adamc@598 57 s.h = cons(function() { x.value = s.v }, s.h);
adamc@598 58 x.onkeyup = function() { sv(s, x.value) };
adamc@598 59 }
adamc@598 60
adamc@597 61 function eh(x) {
adamc@597 62 return x.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;");
adamc@597 63 }
adamc@597 64
adamc@582 65 function ts(x) { return x.toString() }
adamc@586 66 function bs(b) { return (b ? "True" : "False") }
adamc@586 67
adamc@584 68 function pf() { alert("Pattern match failure") }
adamc@589 69