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@601
|
16 function sg(s) {
|
adamc@601
|
17 return s.v;
|
adamc@601
|
18 }
|
adamc@579
|
19
|
adamc@580
|
20 function ss(s) {
|
adamc@580
|
21 return s;
|
adamc@580
|
22 }
|
adamc@580
|
23 function sr(v) {
|
adamc@580
|
24 return {v : v, h : null};
|
adamc@580
|
25 }
|
adamc@580
|
26 function sb(x,y) {
|
adamc@580
|
27 var z = y(x.v);
|
adamc@580
|
28 var s = {v : z.v, h : null};
|
adamc@580
|
29
|
adamc@580
|
30 function reZ() {
|
adamc@580
|
31 z.h = cons(function() { s.v = z.v; callAll(s.h); }, z.h);
|
adamc@580
|
32 }
|
adamc@580
|
33
|
adamc@580
|
34 x.h = cons(function() { z = y(x.v); reZ(); s.v = z.v; callAll(s.h); }, x.h);
|
adamc@580
|
35 reZ();
|
adamc@580
|
36
|
adamc@580
|
37 return s;
|
adamc@580
|
38 }
|
adamc@571
|
39
|
adamc@604
|
40 function lastParent() {
|
adamc@604
|
41 var pos = document;
|
adamc@604
|
42
|
adamc@600
|
43 while (pos.lastChild && pos.lastChild.nodeType == 1)
|
adamc@600
|
44 pos = pos.lastChild;
|
adamc@600
|
45
|
adamc@600
|
46 return pos.parentNode;
|
adamc@600
|
47 }
|
adamc@600
|
48
|
adamc@604
|
49 var thisScript = null;
|
adamc@603
|
50
|
adamc@604
|
51 function addNode(node) {
|
adamc@604
|
52 if (thisScript) {
|
adamc@604
|
53 thisScript.parentNode.appendChild(node);
|
adamc@604
|
54 thisScript.parentNode.removeChild(thisScript);
|
adamc@604
|
55 } else
|
adamc@604
|
56 lastParent().appendChild(node);
|
adamc@603
|
57 }
|
adamc@603
|
58
|
adamc@604
|
59 function runScripts(node) {
|
adamc@604
|
60 var savedScript = thisScript;
|
adamc@603
|
61
|
adamc@646
|
62 var scripts = node.getElementsByTagName("script"), scriptsCopy = {};
|
adamc@604
|
63 var len = scripts.length;
|
adamc@646
|
64 for (var i = 0; i < len; ++i)
|
adamc@646
|
65 scriptsCopy[i] = scripts[i];
|
adamc@604
|
66 for (var i = 0; i < len; ++i) {
|
adamc@646
|
67 thisScript = scriptsCopy[i];
|
adamc@604
|
68 eval(thisScript.textContent);
|
adamc@604
|
69 }
|
adamc@604
|
70
|
adamc@604
|
71 thisScript = savedScript;
|
adamc@603
|
72 }
|
adamc@603
|
73
|
adamc@603
|
74 function populate(node, html) {
|
adamc@603
|
75 node.innerHTML = html;
|
adamc@604
|
76 runScripts(node);
|
adamc@603
|
77 }
|
adamc@603
|
78
|
adamc@571
|
79 function dyn(s) {
|
adamc@571
|
80 var x = document.createElement("span");
|
adamc@604
|
81 populate(x, s.v);
|
adamc@604
|
82 addNode(x);
|
adamc@603
|
83 s.h = cons(function() { populate(x, s.v) }, s.h);
|
adamc@571
|
84 }
|
adamc@582
|
85
|
adamc@598
|
86 function inp(t, s) {
|
adamc@598
|
87 var x = document.createElement(t);
|
adamc@598
|
88 x.value = s.v;
|
adamc@604
|
89 addNode(x);
|
adamc@598
|
90 s.h = cons(function() { x.value = s.v }, s.h);
|
adamc@598
|
91 x.onkeyup = function() { sv(s, x.value) };
|
adamc@606
|
92 return x;
|
adamc@598
|
93 }
|
adamc@598
|
94
|
adamc@597
|
95 function eh(x) {
|
adamc@597
|
96 return x.split("&").join("&").split("<").join("<").split(">").join(">");
|
adamc@597
|
97 }
|
adamc@597
|
98
|
adamc@582
|
99 function ts(x) { return x.toString() }
|
adamc@586
|
100 function bs(b) { return (b ? "True" : "False") }
|
adamc@586
|
101
|
adamc@584
|
102 function pf() { alert("Pattern match failure") }
|
adamc@589
|
103
|
adamc@603
|
104 var closures = [];
|
adamc@603
|
105
|
adamc@603
|
106 function ca(f) {
|
adamc@603
|
107 var n = closures.length;
|
adamc@603
|
108 closures[n] = f;
|
adamc@603
|
109 return n;
|
adamc@603
|
110 }
|
adamc@603
|
111
|
adamc@603
|
112 function cr(n) {
|
adamc@603
|
113 return closures[n]();
|
adamc@603
|
114 }
|
adamc@603
|
115
|
adamc@609
|
116
|
adamc@609
|
117 function getXHR()
|
adamc@609
|
118 {
|
adamc@609
|
119 try {
|
adamc@609
|
120 return new XMLHttpRequest();
|
adamc@609
|
121 } catch (e) {
|
adamc@609
|
122 try {
|
adamc@609
|
123 return new ActiveXObject("Msxml2.XMLHTTP");
|
adamc@609
|
124 } catch (e) {
|
adamc@609
|
125 try {
|
adamc@609
|
126 return new ActiveXObject("Microsoft.XMLHTTP");
|
adamc@609
|
127 } catch (e) {
|
adamc@609
|
128 throw "Your browser doesn't seem to support AJAX.";
|
adamc@609
|
129 }
|
adamc@609
|
130 }
|
adamc@609
|
131 }
|
adamc@609
|
132 }
|
adamc@609
|
133
|
adamc@613
|
134 function rc(uri, parse, k) {
|
adamc@609
|
135 var xhr = getXHR();
|
adamc@609
|
136
|
adamc@609
|
137 xhr.onreadystatechange = function() {
|
adamc@612
|
138 if (xhr.readyState == 4) {
|
adamc@612
|
139 var isok = false;
|
adamc@612
|
140
|
adamc@612
|
141 try {
|
adamc@612
|
142 if (xhr.status == 200)
|
adamc@612
|
143 isok = true;
|
adamc@612
|
144 } catch (e) { }
|
adamc@612
|
145
|
adamc@612
|
146 if (isok)
|
adamc@613
|
147 k(parse(xhr.responseText));
|
adamc@612
|
148 else
|
adamc@612
|
149 alert("Error querying remote server!");
|
adamc@612
|
150 }
|
adamc@609
|
151 };
|
adamc@609
|
152
|
adamc@609
|
153 xhr.open("GET", uri, true);
|
adamc@609
|
154 xhr.send(null);
|
adamc@609
|
155 }
|