212
207
var hist = new History();
209
function set_interrupt()
214
function clear_output()
216
var output = document.getElementById("console_output");
217
while (output.firstChild)
219
output.removeChild(output.firstChild);
214
223
/** Send a line of text to the Python server, wait for its return, and react
215
224
* to its response by writing to the output box.
216
225
* Also maximize the console window if not already.
218
function console_enter_line(inputline, which)
227
function console_enter_line(inputbox, which)
231
if (typeof(inputbox) == "string")
233
var inputline = inputbox;
235
var graytimer = null;
239
GLOBAL_inputbox = inputbox; /* For timer */
240
var inputline = inputbox.value;
241
var graytimer = setTimeout("GLOBAL_inputbox.setAttribute(\"class\", "
242
+ "\"disabled\");", 100);
244
var output = document.getElementById("console_output");
247
var span = document.createElement("span");
248
span.setAttribute("class", "inputPrompt");
249
span.appendChild(document.createTextNode(">>> "));
250
output.appendChild(span);
251
// Print input line itself in a span
252
var span = document.createElement("span");
253
span.setAttribute("class", "inputMsg");
254
span.appendChild(document.createTextNode(inputline + "\n"));
255
output.appendChild(span);
220
257
var args = {"key": server_key, "text":inputline};
221
258
var callback = function(xhr)
223
console_response(inputline, xhr.responseText);
260
console_response(inputbox, graytimer, inputline, xhr.responseText);
262
/* Disable the text box */
263
if (inputbox != null)
264
inputbox.setAttribute("disabled", "disabled");
225
265
ajax_call(callback, "consoleservice", which, args, "POST");
228
function console_response(inputline, responseText)
268
function console_response(inputbox, graytimer, inputline, responseText)
230
var res = JSON.parse(responseText);
272
var res = JSON.parse(responseText);
276
alert("An internal error occurred in the python console.");
231
279
var output = document.getElementById("console_output");
233
var pre = document.createElement("pre");
234
pre.setAttribute("class", "inputMsg");
235
pre.appendChild(document.createTextNode(inputline + "\n"));
236
output.appendChild(pre);
238
280
if (res.hasOwnProperty('okay'))
241
// print out the output (res.okay[0])
242
var pre = document.createElement("pre");
243
pre.setAttribute("class", "outputMsg");
244
pre.appendChild(document.createTextNode(res.okay[0]));
245
output.appendChild(pre);
246
// print out the return value (res.okay[1])
249
var pre = document.createElement("pre");
250
pre.setAttribute("class", "outputMsg");
251
pre.appendChild(document.createTextNode(res.okay[1] + "\n"));
252
output.appendChild(pre);
285
output.appendChild(document.createTextNode(res.okay + "\n"));
286
output.appendChild(span);
254
288
// set the prompt to >>>
255
289
var prompt = document.getElementById("console_prompt");
258
292
else if (res.hasOwnProperty('exc'))
261
// print out any output that came before the error
262
if (res.exc[0].length > 0)
264
var pre = document.createElement("pre");
265
pre.setAttribute("class", "outputMsg");
266
pre.appendChild(document.createTextNode(res.exc[0]));
267
output.appendChild(pre);
270
295
// print out the error message (res.exc)
271
var pre = document.createElement("pre");
272
pre.setAttribute("class", "errorMsg");
273
pre.appendChild(document.createTextNode(res.exc[1]));
274
output.appendChild(pre);
296
var span = document.createElement("span");
297
span.setAttribute("class", "errorMsg");
298
span.appendChild(document.createTextNode(res.exc + "\n"));
299
output.appendChild(span);
300
// set the prompt to >>>
301
var prompt = document.getElementById("console_prompt");
302
prompt.replaceChild(document.createTextNode(">>> "), prompt.firstChild);
276
304
else if (res.hasOwnProperty('more'))
279
307
var prompt = document.getElementById("console_prompt");
280
308
prompt.replaceChild(document.createTextNode("... "), prompt.firstChild);
310
else if (res.hasOwnProperty('output'))
312
if (res.output.length > 0)
314
output.appendChild(document.createTextNode(res.output));
316
var callback = function(xhr)
318
console_response(inputbox, graytimer,
319
null, xhr.responseText);
323
var kind = "interrupt";
329
var args = {"key": server_key, "text":''};
330
ajax_call(callback, "consoleservice", kind, args, "POST");
332
// Open up the console so we can see the output
333
// FIXME: do we need to maximize here?
337
divScroll.activeScroll();
339
// Return early, so we don't re-enable the input box.
283
343
// assert res.hasOwnProperty('input')
284
344
var prompt = document.getElementById("console_prompt");
285
345
prompt.replaceChild(document.createTextNode("+++ "), prompt.firstChild);
348
if (inputbox != null)
350
/* Re-enable the text box */
351
clearTimeout(graytimer);
352
inputbox.removeAttribute("disabled");
353
inputbox.removeAttribute("class");
287
357
/* Open up the console so we can see the output */
288
358
console_maximize();
360
divScroll.activeScroll();
362
// Focus the input box by default
363
document.getElementById("console_output").focus()
364
document.getElementById("console_inputText").focus()
291
367
function catch_input(key)
423
/**** Following Code modified from ******************************************/
424
/**** http://radio.javaranch.com/pascarello/2006/08/17/1155837038219.html ***/
425
/****************************************************************************/
426
var chatscroll = new Object();
428
chatscroll.Pane = function(scrollContainerId)
430
this.scrollContainerId = scrollContainerId;
433
chatscroll.Pane.prototype.activeScroll = function()
435
var scrollDiv = document.getElementById(this.scrollContainerId);
436
var currentHeight = 0;
438
if (scrollDiv.scrollHeight > 0)
439
currentHeight = scrollDiv.scrollHeight;
441
if (objDiv.offsetHeight > 0)
442
currentHeight = scrollDiv.offsetHeight;
444
scrollDiv.scrollTop = currentHeight;
449
var divScroll = new chatscroll.Pane('console_output');