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

« back to all changes in this revision

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

  • Committer: mattgiuca
  • Date: 2008-01-23 06:55:12 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:276
Console now runs inside IVLE (without requiring an IFRAME). The separate
console server is still spawned, but the client never directly communicates
with it.

apps/console: Writes the HTML code for the actual console (the 2 text boxes),
    instead of just a contained div for the IFRAME.

media/console/console.js:
    Removed code to create IFRAME and link to console server.
    Incorporated Tom's console.js code from trunk/console/console.js.
    Modified this code to:
        a) Use functions from util.js, such as make_query_string and
            ajax_call.
        b) Talk to consoleservice/chat instead of the console server.
        c) Pass host and port as arguments (needed by IVLE to talk to the
            console server).
    Also had the "startup" code save the host, port and magic, needed for
    communication with the console server.

media/console/console.css: Added CSS file (derived from Tom's inline CSS in
    the original index.html).

apps/consoleservice: Fixed bugs which caused the wrong text to be sent, and
    also avoid throwing an error for empty text.

Note that trunk/console will still serve the HTML, JavaScript and CSS files if
needed. The next step is to make this just a service and not actually a web
server as well.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
digest_constant = "hello";
2
2
 
 
3
var server_host;
 
4
var server_port;
 
5
var server_magic;
 
6
 
3
7
/* Starts the console server.
4
8
 * Returns an object with fields "host", "port", "magic" describing the
5
9
 * server.
6
10
 */
7
11
function start_server()
8
12
{
9
 
    var xhr = ajax_call("consoleservice", "start", "", "POST");
 
13
    var xhr = ajax_call("consoleservice", "start", {}, "POST");
10
14
    var json_text = xhr.responseText;
11
15
    return JSON.parse(json_text);
12
16
}
13
17
 
14
18
function onload()
15
19
{
16
 
    var consolebody = document.getElementById("consolebody");
17
 
    var iframe = document.createElement("iframe");
18
 
    consolebody.appendChild(iframe);
19
 
    iframe.setAttribute("width", "100%");
20
 
    /* TODO: Height 100%, once CSS is working */
21
 
    iframe.setAttribute("height", "600px");
22
 
 
23
20
    /* Start the server */
24
21
    var server_info = start_server();
25
 
 
26
 
    var digest = hex_md5(digest_constant + server_info.magic);
27
 
 
28
 
    var url = "http://"
29
 
        + server_info.host.toString() + ":"
30
 
        + server_info.port.toString() + "?digest=" + digest;
31
 
 
32
 
    iframe.setAttribute("src", url);
 
22
    server_host = server_info.host;
 
23
    server_port = server_info.port;
 
24
    server_magic = server_info.magic;
 
25
}
 
26
 
 
27
/* Below here imported from trunk/console/console.js
 
28
 * (Tom Conway)
 
29
 */
 
30
 
 
31
var magic = 'xyzzy';
 
32
 
 
33
function historyUp()
 
34
{
 
35
    if (this.cursor >= 0)
 
36
    {
 
37
        this.cursor--;
 
38
    }
 
39
}
 
40
 
 
41
function historyDown()
 
42
{
 
43
    if (this.cursor < this.items.length)
 
44
    {
 
45
        this.cursor++;
 
46
    }
 
47
}
 
48
 
 
49
function historyCurr()
 
50
{
 
51
    if (this.cursor < 0 || this.cursor >= this.items.length)
 
52
    {
 
53
        return "";
 
54
    }
 
55
    return this.items[this.cursor];
 
56
}
 
57
 
 
58
function historyAdd(text)
 
59
{
 
60
    this.items[this.items.length] = text;
 
61
    this.cursor = this.items.length;
 
62
}
 
63
 
 
64
function historyShow()
 
65
{
 
66
    var res = "";
 
67
    if (this.cursor == -1)
 
68
    {
 
69
        res += "[]";
 
70
    }
 
71
    for (var i = 0; i < this.items.length; i++)
 
72
    {
 
73
        if (i == this.cursor)
 
74
        {
 
75
            res += "["
 
76
        }
 
77
        res += this.items[i].toString();
 
78
        if (i == this.cursor)
 
79
        {
 
80
            res += "]"
 
81
        }
 
82
        res += " "
 
83
    }
 
84
    if (this.cursor == this.items.length)
 
85
    {
 
86
        res += "[]";
 
87
    }
 
88
    return res;
 
89
}
 
90
 
 
91
function History()
 
92
{
 
93
    this.items = new Array();
 
94
    this.cursor = -1;
 
95
    this.up = historyUp;
 
96
    this.down = historyDown;
 
97
    this.curr = historyCurr;
 
98
    this.add = historyAdd;
 
99
    this.show = historyShow;
 
100
}
 
101
 
 
102
var hist = new History();
 
103
 
 
104
function enter_line()
 
105
{
 
106
    var inp = document.getElementById('inputText');
 
107
    var digest = hex_md5(inp.value + magic);
 
108
    var args = {"host": server_host, "port": server_port,
 
109
                    "digest":digest, "text":inp.value};
 
110
    var xmlhttp = ajax_call("consoleservice", "chat", args, "POST");
 
111
 
 
112
    var res = JSON.parse(xmlhttp.responseText);
 
113
    var output = document.getElementById("output");
 
114
    {
 
115
        var pre = document.createElement("pre");
 
116
        pre.setAttribute("class", "inputMsg");
 
117
        pre.appendChild(document.createTextNode(inp.value + "\n"));
 
118
        output.appendChild(pre);
 
119
    }
 
120
    if (res.hasOwnProperty('okay'))
 
121
    {
 
122
        // Success!
 
123
        // print out the output (res.okay[0])
 
124
        var pre = document.createElement("pre");
 
125
        pre.setAttribute("class", "outputMsg");
 
126
        pre.appendChild(document.createTextNode(res.okay[0]));
 
127
        output.appendChild(pre);
 
128
        // print out the return value (res.okay[1])
 
129
        if (res.okay[1])
 
130
        {
 
131
            var pre = document.createElement("pre");
 
132
            pre.setAttribute("class", "outputMsg");
 
133
            pre.appendChild(document.createTextNode(res.okay[1] + "\n"));
 
134
            output.appendChild(pre);
 
135
        }
 
136
        // set the prompt to >>>
 
137
        var prompt = document.getElementById("prompt");
 
138
        prompt.replaceChild(document.createTextNode(">>> "), prompt.firstChild);
 
139
    }
 
140
    else if (res.hasOwnProperty('exc'))
 
141
    {
 
142
        // Failure!
 
143
        // print out the error message (res.exc)
 
144
        var pre = document.createElement("pre");
 
145
        pre.setAttribute("class", "errorMsg");
 
146
        pre.appendChild(document.createTextNode(res.exc));
 
147
        output.appendChild(pre);
 
148
    }
 
149
    else if (res.hasOwnProperty('more'))
 
150
    {
 
151
        // Need more input, so set the prompt to ...
 
152
        var prompt = document.getElementById("prompt");
 
153
        prompt.replaceChild(document.createTextNode("... "), prompt.firstChild);
 
154
    }
 
155
    else {
 
156
        // assert res.hasOwnProperty('input')
 
157
        var prompt = document.getElementById("prompt");
 
158
        prompt.replaceChild(document.createTextNode("+++ "), prompt.firstChild);
 
159
    }
 
160
}
 
161
 
 
162
function catch_input(key)
 
163
{
 
164
    var inp = document.getElementById('inputText');
 
165
    if (key == 13)
 
166
    {
 
167
        enter_line();
 
168
        hist.add(inp.value);
 
169
        inp.value = hist.curr();
 
170
    }
 
171
    if (key == 38)
 
172
    {
 
173
        hist.up();
 
174
        inp.value = hist.curr();
 
175
    }
 
176
    if (key == 40)
 
177
    {
 
178
        hist.down();
 
179
        inp.value = hist.curr();
 
180
    }
33
181
}