~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/media/console/console.js

  • Committer: dcoles
  • Date: 2008-02-25 02:26:39 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:562
Added new app: Diff (SVN diff application)
setup.py: Added diffservice script to jail scripts

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
windowpane_mode = false;
35
35
server_started = false;
36
36
 
37
 
interrupted = false;
38
 
 
39
37
/* Starts the console server, if it isn't already.
40
38
 * This can be called any number of times - it only starts the one server.
41
39
 * Note that this is asynchronous. It will return after signalling to start
86
84
        windowpane_mode = true;
87
85
        console_minimize();
88
86
    }
 
87
    /* TEMP: Start the server now.
 
88
     * Ultimately we want the server to start only when a line is typed, but
 
89
     * it currently does it asynchronously and doesn't start in time for the
 
90
     * first line. */
 
91
    start_server();
89
92
}
90
93
 
91
94
/** Hide the main console panel, so the console minimizes to just an input box
104
107
    if (!windowpane_mode) return;
105
108
    console_body.setAttribute("class", "windowpane maximal");
106
109
    console_filler.setAttribute("class", "windowpane maximal");
 
110
    /* Focus the input box by default */
 
111
    document.getElementById("console_inputText").focus()
107
112
}
108
113
 
109
114
/* current_text is the string currently on the command line.
206
211
 
207
212
var hist = new History();
208
213
 
209
 
function set_interrupt()
210
 
{
211
 
    interrupted = true;
212
 
}
213
 
 
214
 
function clear_output()
215
 
{
216
 
    var output = document.getElementById("console_output");
217
 
    while (output.firstChild)
218
 
    {
219
 
        output.removeChild(output.firstChild);
220
 
    }
221
 
}
222
 
 
223
214
/** Send a line of text to the Python server, wait for its return, and react
224
215
 * to its response by writing to the output box.
225
216
 * Also maximize the console window if not already.
226
217
 */
227
 
function console_enter_line(inputbox, which)
 
218
function console_enter_line(inputline, which)
228
219
{
229
 
    interrupted = false;
230
 
 
231
 
    if (typeof(inputbox) == "string")
232
 
    {
233
 
        var inputline = inputbox;
234
 
        inputbox = null;
235
 
        var graytimer = null;
236
 
    }
237
 
    else
238
 
    {
239
 
        GLOBAL_inputbox = inputbox;     /* For timer */
240
 
        var inputline = inputbox.value;
241
 
        var graytimer = setTimeout("GLOBAL_inputbox.setAttribute(\"class\", "
242
 
            + "\"disabled\");", 100);
243
 
    }
244
 
    var output = document.getElementById("console_output");
245
 
    {
246
 
        // Print ">>>" span
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);
256
 
    }
257
220
    var args = {"key": server_key, "text":inputline};
258
221
    var callback = function(xhr)
259
222
        {
260
 
            console_response(inputbox, graytimer, inputline, xhr.responseText);
 
223
            console_response(inputline, xhr.responseText);
261
224
        }
262
 
    /* Disable the text box */
263
 
    if (inputbox != null)
264
 
        inputbox.setAttribute("disabled", "disabled");
265
225
    ajax_call(callback, "consoleservice", which, args, "POST");
266
226
}
267
227
 
268
 
function console_response(inputbox, graytimer, inputline, responseText)
 
228
function console_response(inputline, responseText)
269
229
{
270
 
    try
271
 
    {
272
 
        var res = JSON.parse(responseText);
273
 
    }
274
 
    catch (e)
275
 
    {
276
 
        alert("An internal error occurred in the python console.");
277
 
        return;
278
 
    }
 
230
    var res = JSON.parse(responseText);
279
231
    var output = document.getElementById("console_output");
 
232
    {
 
233
        var pre = document.createElement("pre");
 
234
        pre.setAttribute("class", "inputMsg");
 
235
        pre.appendChild(document.createTextNode(inputline + "\n"));
 
236
        output.appendChild(pre);
 
237
    }
280
238
    if (res.hasOwnProperty('okay'))
281
239
    {
282
240
        // Success!
283
 
        if (res.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])
 
247
        if (res.okay[1])
284
248
        {
285
 
            output.appendChild(document.createTextNode(res.okay + "\n"));
286
 
            output.appendChild(span);
 
249
            var pre = document.createElement("pre");
 
250
            pre.setAttribute("class", "outputMsg");
 
251
            pre.appendChild(document.createTextNode(res.okay[1] + "\n"));
 
252
            output.appendChild(pre);
287
253
        }
288
254
        // set the prompt to >>>
289
255
        var prompt = document.getElementById("console_prompt");
292
258
    else if (res.hasOwnProperty('exc'))
293
259
    {
294
260
        // Failure!
 
261
        // print out any output that came before the error
 
262
        if (res.exc[0].length > 0)
 
263
        {
 
264
            var pre = document.createElement("pre");
 
265
            pre.setAttribute("class", "outputMsg");
 
266
            pre.appendChild(document.createTextNode(res.exc[0]));
 
267
            output.appendChild(pre);
 
268
        }
 
269
 
295
270
        // print out the error message (res.exc)
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);
 
271
        var pre = document.createElement("pre");
 
272
        pre.setAttribute("class", "errorMsg");
 
273
        pre.appendChild(document.createTextNode(res.exc[1]));
 
274
        output.appendChild(pre);
303
275
    }
304
276
    else if (res.hasOwnProperty('more'))
305
277
    {
307
279
        var prompt = document.getElementById("console_prompt");
308
280
        prompt.replaceChild(document.createTextNode("... "), prompt.firstChild);
309
281
    }
310
 
    else if (res.hasOwnProperty('output'))
311
 
    {
312
 
        if (res.output.length > 0)
313
 
        {
314
 
            output.appendChild(document.createTextNode(res.output));
315
 
        }
316
 
        var callback = function(xhr)
317
 
            {
318
 
                console_response(inputbox, graytimer,
319
 
                                 null, xhr.responseText);
320
 
            }
321
 
        if (interrupted)
322
 
        {
323
 
            var kind = "interrupt";
324
 
        }
325
 
        else
326
 
        {
327
 
            var kind = "chat";
328
 
        }
329
 
        var args = {"key": server_key, "text":''};
330
 
        ajax_call(callback, "consoleservice", kind, args, "POST");
331
 
 
332
 
        // Open up the console so we can see the output
333
 
        // FIXME: do we need to maximize here?
334
 
        console_maximize();
335
 
 
336
 
        /* Auto-scrolling */
337
 
        divScroll.activeScroll();
338
 
 
339
 
        // Return early, so we don't re-enable the input box.
340
 
        return;
341
 
    }
342
282
    else {
343
283
        // assert res.hasOwnProperty('input')
344
284
        var prompt = document.getElementById("console_prompt");
345
285
        prompt.replaceChild(document.createTextNode("+++ "), prompt.firstChild);
346
286
    }
347
 
 
348
 
    if (inputbox != null)
349
 
    {
350
 
        /* Re-enable the text box */
351
 
        clearTimeout(graytimer);
352
 
        inputbox.removeAttribute("disabled");
353
 
        inputbox.removeAttribute("class");
354
 
        interrupted = false;
355
 
    }
356
 
 
357
287
    /* Open up the console so we can see the output */
358
288
    console_maximize();
359
 
    /* Auto-scrolling */
360
 
    divScroll.activeScroll();
361
 
 
362
 
    // Focus the input box by default
363
 
    document.getElementById("console_output").focus()
364
 
    document.getElementById("console_inputText").focus()
365
289
}
366
290
 
367
291
function catch_input(key)
402
326
        var callback = function()
403
327
        {
404
328
            /* Send the line of text to the server */
405
 
            console_enter_line(inp, "chat");
 
329
            console_enter_line(inp.value, "chat");
406
330
            hist.submit(inp.value);
407
331
            inp.value = hist.curr();
408
332
        }
419
343
        break;
420
344
    }
421
345
}
422
 
 
423
 
/**** Following Code modified from ******************************************/
424
 
/**** http://radio.javaranch.com/pascarello/2006/08/17/1155837038219.html ***/
425
 
/****************************************************************************/
426
 
var chatscroll = new Object();
427
 
 
428
 
chatscroll.Pane = function(scrollContainerId)
429
 
{
430
 
    this.scrollContainerId = scrollContainerId;
431
 
}
432
 
 
433
 
chatscroll.Pane.prototype.activeScroll = function()
434
 
{
435
 
    var scrollDiv = document.getElementById(this.scrollContainerId);
436
 
    var currentHeight = 0;
437
 
        
438
 
    if (scrollDiv.scrollHeight > 0)
439
 
        currentHeight = scrollDiv.scrollHeight;
440
 
    else 
441
 
        if (objDiv.offsetHeight > 0)
442
 
            currentHeight = scrollDiv.offsetHeight;
443
 
 
444
 
    scrollDiv.scrollTop = currentHeight;
445
 
 
446
 
    scrollDiv = null;
447
 
}
448
 
 
449
 
var divScroll = new chatscroll.Pane('console_output');