-
Notifications
You must be signed in to change notification settings - Fork 0
/
terrae.js
80 lines (64 loc) · 1.52 KB
/
terrae.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
var term = null;
var shell = null;
var id = -1;
var parser = null;
var timerid = null;
// Callback for messages from the terminal.
function readCallback(result)
{
var payload = eval('(' + result.type + ')');
if ("idle" in payload) {
// Wait
timerid = setTimeout("timerid = null; readData()", 200);
} else if (payload.data) {
parser.acceptData(payload.data);
// Read more!
readData();
} else {
console.info("No data!?");
}
}
function readData(result) {
if (timerid) {
clearTimeout(timerid);
timerid = null;
}
lunaService("luna://com.palm.terrae/read", "{\"id\": " + id + "}", readCallback);
}
function shellCallback(result)
{
var payload = eval('(' + result.type + ')');
if (payload.shell) {
shell = payload.shell;
open();
} else {
console.info("Error getting shell.");
}
}
function openDone(result)
{
var payload = eval('(' + result.type + ')');
if ("id" in payload) {
id = payload.id;
readData();
} else {
console.info("Error: No ID received: " + result.type);
}
}
function open()
{
if (shell == null) {
lunaService("luna://com.palm.terrae/getShell", "{}", shellCallback);
return;
}
lunaService("luna://com.palm.terrae/open", "{}", openDone);
}
function keyhandler(e) {
lunaService("luna://com.palm.terrae/write", "{\"id\": " + id + ", \"data\": \"" + String.fromCharCode(e.which) + "\" }");
}
function terminalInit() {
parser = new VT100Parser();
open();
document.captureEvents(Event.KEYPRESS);
document.onkeypress = keyhandler;
}