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

126 by drtomc
A basic version of the console going!
1
var magic = 'xyzzy';
2
3
function historyUp()
4
{
5
    if (this.cursor >= 0)
6
    {
7
        this.cursor--;
8
    }
9
}
10
11
function historyDown()
12
{
13
    if (this.cursor < this.items.length)
14
    {
15
        this.cursor++;
16
    }
17
}
18
19
function historyCurr()
20
{
21
    if (this.cursor < 0 || this.cursor >= this.items.length)
22
    {
23
        return "";
24
    }
25
    return this.items[this.cursor];
26
}
27
28
function historyAdd(text)
29
{
30
    this.items[this.items.length] = text;
31
    this.cursor = this.items.length
32
}
33
34
function historyShow()
35
{
36
    var res = "";
37
    if (this.cursor == -1)
38
    {
39
        res += "[]";
40
    }
41
    for (var i = 0; i < this.items.length; i++)
42
    {
43
        if (i == this.cursor)
44
        {
45
            res += "["
46
        }
47
        res += this.items[i].toString();
48
        if (i == this.cursor)
49
        {
50
            res += "]"
51
        }
52
        res += " "
53
    }
54
    if (this.cursor == this.items.length)
55
    {
56
        res += "[]";
57
    }
58
    return res;
59
}
60
61
function History()
62
{
63
    this.items = new Array();
64
    this.cursor = -1;
65
    this.up = historyUp;
66
    this.down = historyDown;
67
    this.curr = historyCurr;
68
    this.add = historyAdd;
69
    this.show = historyShow;
70
}
71
72
var hist = new History();
111 by drtomc
Checkpoint work on the console.
73
74
function make_query_string(pagename, args)
75
{
76
    var first = true;
77
    var qs = pagename;
126 by drtomc
A basic version of the console going!
78
    for (key in args)
111 by drtomc
Checkpoint work on the console.
79
    {
126 by drtomc
A basic version of the console going!
80
        vals = args[key];
111 by drtomc
Checkpoint work on the console.
81
        // vals can be an array, to make multiple args with the same name
82
        // To handle this, make non-array objects into an array, then loop
83
        if (!(vals instanceof Array))
84
            vals = [vals];
85
        for each (val in vals)
86
        {
126 by drtomc
A basic version of the console going!
87
            if (first)
111 by drtomc
Checkpoint work on the console.
88
            {
89
                qs += "?";
90
                first = false;
91
            }
92
            else
93
            {
94
                qs += "&";
95
            }
96
            qs += encodeURI(key) + "=" + encodeURI(val);
97
        }
98
    }
99
    return qs;
100
}
101
126 by drtomc
A basic version of the console going!
102
function make_post_body(args)
103
{
104
    var first = true;
105
    var qs = '';
106
    for (key in args)
107
    {
108
        vals = args[key];
109
        // vals can be an array, to make multiple args with the same name
110
        // To handle this, make non-array objects into an array, then loop
111
        if (!(vals instanceof Array))
112
            vals = [vals];
113
        for each (val in vals)
114
        {
115
            if (first)
116
            {
117
                first = false;
118
            }
119
            else
120
            {
121
                qs += "&";
122
            }
123
            qs += encodeURI(key) + "=" + encodeURI(val);
124
        }
125
    }
126
    return qs;
127
}
128
129
function enter_line()
130
{
131
    var inp = document.getElementById('inputText');
132
    var digest = hex_md5(inp.value + magic);
133
    var xmlhttp = new XMLHttpRequest();
128 by drtomc
A couple of bug fixes.
134
    alert(inp.value);
126 by drtomc
A basic version of the console going!
135
    xmlhttp.open("POST", "chat", false);
136
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
137
    xmlhttp.send(make_post_body({"digest":digest, "text":inp.value}))
138
    var res = JSON.parse(xmlhttp.responseText);
127 by drtomc
A bit of simplification - unify the output areas and use colours to
139
    var output = document.getElementById("output")
140
    {
141
        var pre = document.createElement("pre");
142
        pre.setAttribute("class", "inputMsg");
143
        pre.appendChild(document.createTextNode(inp.value + "\n"));
144
        output.appendChild(pre);
145
    }
111 by drtomc
Checkpoint work on the console.
146
    if (res && res[0])
147
    {
148
        // Success!
149
        // print out the output (res[0])
127 by drtomc
A bit of simplification - unify the output areas and use colours to
150
        var pre = document.createElement("pre");
151
        pre.setAttribute("class", "outputMsg");
152
        pre.appendChild(document.createTextNode(res[0]));
153
        output.appendChild(pre);
111 by drtomc
Checkpoint work on the console.
154
        // print out the return value (res[1])
126 by drtomc
A basic version of the console going!
155
        if (res[1])
156
        {
127 by drtomc
A bit of simplification - unify the output areas and use colours to
157
            var pre = document.createElement("pre");
158
            pre.setAttribute("class", "outputMsg");
159
            pre.appendChild(document.createTextNode(res[1] + "\n"));
160
            output.appendChild(pre);
126 by drtomc
A basic version of the console going!
161
        }
111 by drtomc
Checkpoint work on the console.
162
        // set the prompt to >>>
126 by drtomc
A basic version of the console going!
163
        var prompt = document.getElementById("prompt");
164
        prompt.replaceChild(document.createTextNode(">>> "), prompt.firstChild);
111 by drtomc
Checkpoint work on the console.
165
    }
166
    else if (res)
167
    {
168
        // Failure!
169
        // print out the error message (res[2])
127 by drtomc
A bit of simplification - unify the output areas and use colours to
170
        var pre = document.createElement("pre");
171
        pre.setAttribute("class", "errorMsg");
172
        pre.appendChild(document.createTextNode(res[2]));
173
        output.appendChild(pre);
111 by drtomc
Checkpoint work on the console.
174
    }
175
    else
176
    {
177
        // Need more input, so set the prompt to ...
126 by drtomc
A basic version of the console going!
178
        var prompt = document.getElementById("prompt");
179
        prompt.replaceChild(document.createTextNode("... "), prompt.firstChild);
180
    }
181
}
182
183
function catch_input(key)
184
{
185
    var inp = document.getElementById('inputText');
186
    if (key == 13)
187
    {
188
        enter_line();
189
        hist.add(inp.value);
127 by drtomc
A bit of simplification - unify the output areas and use colours to
190
        inp.value = hist.curr();
126 by drtomc
A basic version of the console going!
191
    }
192
    if (key == 38)
193
    {
194
        hist.up();
127 by drtomc
A bit of simplification - unify the output areas and use colours to
195
        inp.value = hist.curr();
126 by drtomc
A basic version of the console going!
196
    }
197
    if (key == 40)
198
    {
199
        hist.down();
127 by drtomc
A bit of simplification - unify the output areas and use colours to
200
        inp.value = hist.curr();
126 by drtomc
A basic version of the console going!
201
    }
111 by drtomc
Checkpoint work on the console.
202
}