6 <script language="JavaScript">
19 locked = document.getElementById("locked");
20 unlocked = document.getElementById("unlocked");
21 workarea = document.getElementById("workarea");
22 scriptcell = document.getElementById("scriptcell");
23 goalcell = document.getElementById("goalcell");
24 goals = document.getElementById("goals");
25 goalview = document.getElementById("goalview");
26 filename = document.getElementById("filename");
27 status = document.getElementById("status");
32 var status = document.getElementById("status");
33 status.innerHTML = txt + "\n" + status.innerHTML;
39 debug("hd of '" + l + "' = '" + ar[0] + "'");
47 debug("tl of '" + l + "' = '" + tl + "'");
51 function listcons(x,l)
53 debug("cons '" + x + "' on '" + l + "'");
67 function fold_left (f,acc,l)
70 { debug("'" + l + "' is fold end");
73 { debug("'" + l + "' is fold cons");
74 return(fold_left (f,f(acc,(listhd(l))),listtl(l))); }
77 function listiter (f,l)
80 { debug("'" + l + "' is nil");
85 debug("'" + l + "' is not nil");
87 listiter(f,listtl(l));
91 function listmap (f,l)
93 debug("listmap on " + l);
95 { debug("returning listnil");
99 { debug("cons f(hd) map(f,tl)");
100 return(f(listhd(l)) + "#" + listmap(f,listtl(l)));
104 var statements = listnil();
107 var metalist = listnil();
109 function pairmap (f,p)
111 debug("pairmap of '" + p + "'");
113 return (f(ar[0],ar[1]));
116 function tripletmap (f,p)
118 debug("tripletmap of '" + p + "'");
120 return (f(ar[0],ar[1],ar[2]));
126 return (pairmap (function (a,b) { return (a); }, p));
132 return (tripletmap (function (a,b,c) { return (a); }, p));
138 return (tripletmap (function (a,b,c) { return (b); }, p));
144 return (tripletmap (function (a,b,c) { return (c); }, p));
147 function populate_goalarray(txt)
149 debug("populate with '" + txt + "'");
150 goalarray = new Array();
151 metalist = listnil();
152 var tmp_goallist = "";
153 listiter (function(item)
155 debug ("item is '" + item + "'");
156 tripletmap (function(a,ahtml,b) {
157 debug ("found meta n. " + a);
158 debug ("found goal\nBEGIN" + unescape(b) + "\nEND");
159 goalarray[a] = unescape(b);
160 tmp_goallist = " <A href=\"javascript:switch_goal(" + a + ")\">" + unescape(ahtml) + "</A>" + tmp_goallist;
161 metalist = listcons(a,metalist);
162 debug ("goalarray[\"" + a + "\"] = " + goalarray[a]);
165 // metalist = listmap (p13,txt);
166 document.getElementById("goals").innerHTML = tmp_goallist;
167 debug("new metalist is '" + metalist + "'");
168 if (is_nil(metalist)) {
172 switch_goal(listhd(metalist));
176 function switch_goal(meta)
178 goalview = document.getElementById("goalview");
179 if (typeof meta == "undefined") {
180 goalview.innerHTML = "";
183 debug("switch_goal " + meta + "\n" + goalarray[meta]);
184 goalview.innerHTML = "<B>Goal ?" + meta + ":</B>\n\n" + goalarray[meta];
188 String.prototype.unescapeHTML = function()
190 var patt1 = /<br(\/|)>/gi;
191 var patt2 = /</gi;
192 var patt3 = />/gi;
194 result = result.replace(patt1,"\n");
195 result = result.replace(patt2,"<");
196 result = result.replace(patt3,">");
197 return (unescape(result));
202 var advanceButton = document.getElementById("advance");
203 var retractButton = document.getElementById("retract");
204 advanceButton.disabled = true;
205 retractButton.disabled = true;
210 var advanceButton = document.getElementById("advance");
211 var retractButton = document.getElementById("retract");
212 advanceButton.disabled = false;
213 retractButton.disabled = false;
216 function advanceForm1()
219 unlocked = document.getElementById("unlocked");
220 locked = document.getElementById("locked");
221 goalview = document.getElementById("goalview");
223 if (window.XMLHttpRequest)
225 req = new XMLHttpRequest();
227 else if (window.ActiveXObject)
230 req = new ActiveXObject("Msxml2.XMLHTTP");
234 req = new ActiveXObject("Microsoft.XMLHTTP");
238 req.onreadystatechange = function()
243 stxt = req.statusText;
249 debug("advance: received response\nBEGIN\n" + req.responseText + "\nEND");
250 response = req.responseText.split("@");
251 len = parseInt(response[0]);
252 len0 = unlocked.innerHTML.length;
253 unescaped = unlocked.innerHTML.unescapeHTML();
254 parsedtxt = unescaped.substr(0,len);
255 unparsedtxt = unescaped.substr(len);
256 locked.innerHTML = locked.innerHTML + parsedtxt;
257 unlocked.innerHTML = unparsedtxt;
258 len1 = unlocked.innerHTML.length;
260 populate_goalarray(response[1]);
261 statements = listcons(len,statements);
262 unlocked.scrollIntoView(true);
266 debug("advance error: returned status code " + req.status + " " + req.statusText + "\n" +
272 req.open("POST", "advance"); // + escape(document.getElementById("unlocked").innerHTML), true);
273 req.send(unlocked.innerHTML.unescapeHTML());
280 unlocked = document.getElementById("unlocked");
281 locked = document.getElementById("locked");
282 goalview = document.getElementById("goalview");
283 if (window.XMLHttpRequest)
285 req = new XMLHttpRequest();
287 else if (window.ActiveXObject)
290 req = new ActiveXObject("Msxml2.XMLHTTP");
294 req = new ActiveXObject("Microsoft.XMLHTTP");
298 req.onreadystatechange = function()
303 stxt = req.statusText;
309 debug("retract: received response\nBEGIN\n" + req.responseText + "\nEND");
310 response = req.responseText;
311 statementlen = parseInt(listhd(statements));
312 statements = listtl(statements);
313 lockedlen = locked.innerHTML.length - statementlen;
314 statement = locked.innerHTML.substr(lockedlen, statementlen);
315 locked.innerHTML = locked.innerHTML.substr(0,lockedlen);
316 unlocked.innerHTML = statement + unlocked.innerHTML;
317 populate_goalarray(response);
318 unlocked.scrollIntoView(true);
322 debug("retract error: returned status code " + req.status + " " + req.statusText + "\n" +
328 req.open("GET", "retract"); // + escape(document.getElementById("unlocked").innerHTML), true);
335 unlocked = document.getElementById("unlocked");
336 locked = document.getElementById("locked");
338 if (window.XMLHttpRequest)
340 req = new XMLHttpRequest();
342 else if (window.ActiveXObject)
345 req = new ActiveXObject("Msxml2.XMLHTTP");
349 req = new ActiveXObject("Microsoft.XMLHTTP");
353 req.onreadystatechange = function()
358 stxt = req.statusText;
364 locked.innerHTML = "";
365 unlocked.innerHTML = req.responseText;
369 debug("open error: returned status code " + req.status + " " + req.statusText + "\n" +
374 req.open("GET", "open?file=" + escape(document.getElementById("filename").value), true);
380 function hideSequent() {
381 goalcell = document.getElementById("goalcell");
382 goalcell.parentNode.removeChild(goalcell);
383 document.getElementById("scriptcell").setAttribute("colspan","2");
386 function showSequent() {
387 document.getElementById("scriptcell").setAttribute("colspan","1");
388 document.getElementById("workarea").appendChild(goalcell);
391 function removeElement(id) {
392 var element = document.getElementById(id);
393 element.parentNode.removeChild(element);
398 <table style="table-layout: fixed; width:100%; height:100%; border-spacing: 0px; border-style: none;">
400 <td style="padding: 0px; width:67%; border-style: none;">
401 <textarea id="unescape" style="display:none;"></textarea>
402 <p><INPUT type="BUTTON" value="advance" id="advance" ONCLICK="advanceForm1()">
403 <INPUT type="BUTTON" value="go back" id="retract" ONCLICK="retract()">
404 <INPUT type="TEXT" id="filename" value=""><INPUT type="BUTTON" value="Open" ONCLICK="openFile()"></p>
405 <INPUT type="BUTTON" value="show sequent" id="showseq" ONCLICK="showSequent()">
406 <INPUT type="BUTTON" value="hide sequent" id="hideseq" ONCLICK="hideSequent()">
408 <td style="width:33%;"></td>
410 <tr id="workarea" style="height:80%;">
411 <td id="scriptcell" style="padding: 0px; border-style: none; padding: 0px;">
414 The two DIVs "locked" and "unlocked" MUST be on the same line (since they are
415 inside a PRE tag, a CR will be reflected in the document presentation)
417 <div style="width:100%; height:100%; overflow:auto;">
419 <div contentEditable="false" id="locked" style="background-color:#bfbfff; display:inline;"></div><div contentEditable="true" id="unlocked" style="display:inline">(* script lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo *)</div></pre></div>
420 <!-- the script (end) -->
422 <td id="goalcell" style="padding: 0px; width:33%; border-style: none;">
423 <div id="goals"></div>
424 <div contentEditable="true" style="border-style:solid; height:100%; width:100%; overflow:auto;">
425 <pre id="goalview">lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo </pre>
429 <tr style="height:15%">
430 <td colspan="2" style="padding: 0px; border-style: none;">
431 <textarea id="status" style="width:100%; height:100%"></textarea>