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

« back to all changes in this revision

Viewing changes to ivle/webapp/console/media/console.js

  • Committer: Matt Giuca
  • Date: 2009-12-01 04:27:58 UTC
  • mfrom: (1164.2.46 sphinx-docs)
  • Revision ID: matt.giuca@gmail.com-20091201042758-wuxd9bdec00c283i
Merged sphinx-docs branch. This adds Sphinx documentation for the entire IVLE system (for system administrators and developers), and removes all of our random old document files (all either irrelevant, or moved into the Sphinx docs nicely). Currently incomplete, but ready to merge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
 
37
37
interrupted = false;
38
38
 
39
 
 
40
 
function get_console_start_directory()
41
 
{
42
 
    if((typeof(current_path) != 'undefined') && current_file)
43
 
    {
44
 
        // We have a current_path - give a suggestion to the server
45
 
        var path;
46
 
        if (current_file.isdir)
47
 
        {
48
 
            // Browser
49
 
            return path_join("/home", current_path);
50
 
        }
51
 
        else
52
 
        {
53
 
            // Editor - need to chop off filename
54
 
            var tmp_path = current_path.split('/');
55
 
            tmp_path.pop();
56
 
            return path_join("/home", tmp_path.join('/'));
57
 
        }
58
 
    }
59
 
    else
60
 
    {
61
 
        // No current_path - let the server decide
62
 
        return '';
63
 
    }
64
 
}
65
 
 
66
39
/* Starts the console server, if it isn't already.
67
40
 * This can be called any number of times - it only starts the one server.
68
41
 * Note that this is asynchronous. It will return after signalling to start
85
58
    var callback1 = function(xhr)
86
59
        {
87
60
            var json_text = xhr.responseText;
88
 
            try
89
 
            {
90
 
                server_key = JSON.parse(json_text).key;
91
 
                server_started = true;
92
 
                var args = {
93
 
                    "ivle.op": "chat", "kind": "splash", "key": server_key
94
 
                };
95
 
                var callback2 = function(xhr)
96
 
                {
97
 
                    console_response(null, null, xhr.responseText);
98
 
                    if (callback != null)
99
 
                        callback();
100
 
                };
101
 
                ajax_call(callback2, "console", "service", args, "POST");
102
 
            }
103
 
            catch (e)
104
 
            {
105
 
                alert("An error occured when starting the IVLE console. " +
106
 
                    "Please refresh the page and try again.\n" +
107
 
                    "Details have been logged for further examination.")
108
 
            }
109
 
        }
110
 
 
111
 
    $("#console_output").append(
112
 
        '<span class="console_message">IVLE console starting up...</span>\n');
113
 
    console_maximize(true);
114
 
    ajax_call(
115
 
        callback1, "console", "service",
116
 
        {"ivle.op": "start", "cwd": get_console_start_directory()}, 
117
 
        "POST");
118
 
}
119
 
 
120
 
/** Start up the console backend before the user has entered text.
121
 
 * This will disable the text input, start a backend, and enable the input
122
 
 * again.
123
 
 */
124
 
function start_server_early()
125
 
{
126
 
    var inputbox = document.getElementById("console_inputText");
127
 
    inputbox.setAttribute("disabled", "disabled");
128
 
    var callback = function(xhr)
129
 
    {
130
 
        inputbox.removeAttribute("disabled")
131
 
    }
132
 
    start_server(callback);
 
61
            server_key = JSON.parse(json_text).key;
 
62
            server_started = true;
 
63
            if (callback != null)
 
64
                callback();
 
65
        }
 
66
 
 
67
    //var current_path;
 
68
    if((typeof(current_path) != 'undefined') && current_file)
 
69
    {
 
70
        // We have a current_path - give a suggestion to the server
 
71
        var path;
 
72
        if (current_file.isdir)
 
73
        {
 
74
            // Browser
 
75
            path = path_join("/home", current_path);
 
76
        }
 
77
        else
 
78
        {
 
79
            // Editor - need to chop off filename
 
80
            var tmp_path = current_path.split('/');
 
81
            tmp_path.pop();
 
82
            path = path_join("/home", tmp_path.join('/'));
 
83
        }
 
84
        ajax_call(callback1, "console", "service", {"ivle.op": "start", "cwd": path}, "POST");
 
85
    }
 
86
    else
 
87
    {
 
88
        // No current_path - let the server decide
 
89
        ajax_call(callback1, "console", "service", {"ivle.op": "start"}, "POST");
 
90
    }
133
91
}
134
92
 
135
93
/** Initialises the console. All apps which import console are required to
159
117
function console_minimize()
160
118
{
161
119
    if (!windowpane_mode) return;
162
 
    console_body.setAttribute("class", "console_body windowpane minimal");
 
120
    console_body.setAttribute("class", "windowpane minimal");
163
121
    console_filler.setAttribute("class", "windowpane minimal");
164
122
}
165
123
 
166
124
/** Show the main console panel, so it enlarges out to its full size.
167
125
 */
168
 
function console_maximize(do_not_start)
 
126
function console_maximize()
169
127
{
170
128
    if (!windowpane_mode) return;
171
 
    if (!do_not_start && !server_started) start_server_early();
172
 
    console_body.setAttribute("class", "console_body windowpane maximal");
 
129
    console_body.setAttribute("class", "windowpane maximal");
173
130
    console_filler.setAttribute("class", "windowpane maximal");
174
131
}
175
132
 
295
252
{
296
253
    interrupted = false;
297
254
 
298
 
    // Open up the console so we can see the output
299
 
    console_maximize();
300
 
 
301
255
    if (typeof(inputbox) == "string")
302
256
    {
303
257
        var inputline = inputbox + "\n";
324
278
        span.setAttribute("class", "inputMsg");
325
279
        span.appendChild(document.createTextNode(inputline));
326
280
        output.appendChild(span);
327
 
        divScroll.activeScroll();
328
281
    }
329
 
    var args = {
330
 
        "ivle.op": "chat", "kind": which, "key": server_key,
331
 
        "text": inputline, "cwd": get_console_start_directory()
332
 
        };
 
282
    var args = {"ivle.op": "chat", "kind": which, "key": server_key, "text":inputline};
333
283
    var callback = function(xhr)
334
284
        {
335
285
            console_response(inputbox, inputline, xhr.responseText);
356
306
        {
357
307
            output.appendChild(document.createTextNode(res.okay + "\n"));
358
308
            output.appendChild(span);
359
 
            divScroll.activeScroll();
360
309
        }
361
310
        // set the prompt to >>>
362
311
        set_prompt(">>>");
379
328
 
380
329
        // Print a reason to explain why we'd do such a horrible thing
381
330
        // (console timeout, server error etc.)
382
 
        print_error(
383
 
            "IVLE console restarted: " + res.restart, "console_message");
 
331
        print_error("Console Restart: " + res.restart);
384
332
        
385
333
        // set the prompt to >>>
386
334
        set_prompt(">>>");
395
343
        if (res.output.length > 0)
396
344
        {
397
345
            output.appendChild(document.createTextNode(res.output));
398
 
            divScroll.activeScroll();
399
346
        }
400
347
        var callback = function(xhr)
401
348
            {
409
356
        {
410
357
            var kind = "chat";
411
358
        }
412
 
        var args = {
413
 
            "ivle.op": "chat", "kind": kind, "key": server_key,
414
 
            "text": '', "cwd": get_console_start_directory()
415
 
            };
 
359
        var args = {"ivle.op": "chat", "kind": kind, "key": server_key, "text":''};
416
360
        ajax_call(callback, "console", "service", args, "POST");
417
361
 
418
362
        // Open up the console so we can see the output
 
363
        // FIXME: do we need to maximize here?
419
364
        console_maximize();
420
365
 
 
366
        /* Auto-scrolling */
 
367
        divScroll.activeScroll();
 
368
 
421
369
        // Return early, so we don't re-enable the input box.
422
370
        return;
423
371
    }
424
 
    else if (res.hasOwnProperty('input'))
425
 
    {
426
 
        set_prompt("+++");
427
 
    }
428
372
    else
429
373
    {
430
 
        alert("An internal error occurred in the python console.");
431
 
        return;
 
374
        // assert res.hasOwnProperty('input')
 
375
        set_prompt("...");
432
376
    }
433
377
 
434
378
    if (inputbox != null)
438
382
        interrupted = false;
439
383
    }
440
384
 
 
385
    /* Open up the console so we can see the output */
 
386
    console_maximize();
441
387
    /* Auto-scrolling */
442
388
    divScroll.activeScroll();
443
389
 
488
434
            hist.submit(inp.value);
489
435
            inp.value = hist.curr();
490
436
        }
491
 
 
492
 
        /* Disable the text box. This will be redone by
493
 
         * console_enter_line, but we do it here too in case start_server
494
 
         * takes a while.
495
 
         */
496
 
        inp.setAttribute("disabled", "disabled");
497
437
        /* Start the server if it hasn't already been started */
498
438
        start_server(callback);
499
439
        break;
527
467
    }
528
468
    else
529
469
    {
530
 
        xhr = ajax_call(null, "console", "service", {"ivle.op": "chat", "kind": "terminate", "key": server_key, "cwd": get_console_start_directory()}, "POST");
 
470
        xhr = ajax_call(null, "console", "service", {"ivle.op": "chat", "kind": "terminate", "key": server_key}, "POST");
531
471
        console_response(null, null, xhr.responseText);
532
472
    }
533
473
}
534
474
 
535
475
/** Prints an error line in the console **/
536
 
function print_error(error, class)
 
476
function print_error(error)
537
477
538
 
    if (!class)
539
 
        class = "errorMsg";
540
 
 
541
478
    var output = document.getElementById("console_output");
542
479
  
543
480
    // Create text block
544
481
    var span = document.createElement("span");
545
 
    span.setAttribute("class", class);
 
482
    span.setAttribute("class", "errorMsg");
546
483
    span.appendChild(document.createTextNode(error + "\n"));
547
484
    output.appendChild(span);
548
485