11
function historyDown()
13
if (this.cursor < this.items.length)
19
function historyCurr()
21
if (this.cursor < 0 || this.cursor >= this.items.length)
25
return this.items[this.cursor];
28
function historyAdd(text)
30
this.items[this.items.length] = text;
31
this.cursor = this.items.length
34
function historyShow()
37
if (this.cursor == -1)
41
for (var i = 0; i < this.items.length; i++)
47
res += this.items[i].toString();
54
if (this.cursor == this.items.length)
63
this.items = new Array();
66
this.down = historyDown;
67
this.curr = historyCurr;
68
this.add = historyAdd;
69
this.show = historyShow;
72
var hist = new History();
74
function make_query_string(pagename, args)
81
// vals can be an array, to make multiple args with the same name
82
// To handle this, make non-array objects into an array, then loop
83
if (!(vals instanceof Array))
85
for each (val in vals)
96
qs += encodeURI(key) + "=" + encodeURI(val);
102
function make_post_body(args)
109
// vals can be an array, to make multiple args with the same name
110
// To handle this, make non-array objects into an array, then loop
111
if (!(vals instanceof Array))
113
for each (val in vals)
123
qs += encodeURI(key) + "=" + encodeURI(val);
129
function enter_line()
131
var inp = document.getElementById('inputText');
132
var digest = hex_md5(inp.value + magic);
133
var xmlhttp = new XMLHttpRequest();
134
xmlhttp.open("POST", "chat", false);
135
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
136
xmlhttp.send(make_post_body({"digest":digest, "text":inp.value}))
137
var res = JSON.parse(xmlhttp.responseText);
138
var output = document.getElementById("output")
140
var pre = document.createElement("pre");
141
pre.setAttribute("class", "inputMsg");
142
pre.appendChild(document.createTextNode(inp.value + "\n"));
143
output.appendChild(pre);
145
if (res.hasOwnProperty('okay'))
148
// print out the output (res.okay[0])
149
var pre = document.createElement("pre");
150
pre.setAttribute("class", "outputMsg");
151
pre.appendChild(document.createTextNode(res.okay[0]));
152
output.appendChild(pre);
153
// print out the return value (res.okay[1])
156
var pre = document.createElement("pre");
157
pre.setAttribute("class", "outputMsg");
158
pre.appendChild(document.createTextNode(res.okay[1] + "\n"));
159
output.appendChild(pre);
161
// set the prompt to >>>
162
var prompt = document.getElementById("prompt");
163
prompt.replaceChild(document.createTextNode(">>> "), prompt.firstChild);
165
else if (res.hasOwnProperty('exc'))
168
// print out the error message (res.exc)
169
var pre = document.createElement("pre");
170
pre.setAttribute("class", "errorMsg");
171
pre.appendChild(document.createTextNode(res.exc));
172
output.appendChild(pre);
174
else if (res.hasOwnProperty('more'))
176
// Need more input, so set the prompt to ...
177
var prompt = document.getElementById("prompt");
178
prompt.replaceChild(document.createTextNode("... "), prompt.firstChild);
181
// assert res.hasOwnProperty('input')
182
var prompt = document.getElementById("prompt");
183
prompt.replaceChild(document.createTextNode("+++ "), prompt.firstChild);
187
function catch_input(key)
189
var inp = document.getElementById('inputText');
194
inp.value = hist.curr();
199
inp.value = hist.curr();
204
inp.value = hist.curr();