-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathjavascript_data.go
More file actions
99 lines (83 loc) · 2.21 KB
/
Copy pathjavascript_data.go
File metadata and controls
99 lines (83 loc) · 2.21 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package goui
const javascript = `
(function(goui) {
var messageHandlers = {};
var messageQueue = [];
var windowId = 0;
var jsReady = false;
goui.SetMessageHandler = function(message, handler) {
messageHandlers[message] = handler;
}
goui.Init = function() {
windowId = window.location.hash.substr(1) - 0;
asyncLongPoll();
for (var i = 0; i < messageQueue.length; i++)
goui.Send(messageQueue[i].type, messageQueue[i].params, messageQueue[i].options);
messageQueue = [];
}
goui.Send = function(type, params, options) {
var messageSpec = {
type: type,
params: params,
options: options
};
if ( windowId > 0 )
internalSend(messageSpec);
else
messageQueue.push(messageSpec);
}
goui.CloseWindow = function() {
goui.Send('goui.closeWindow')
}
function internalSend(messageSpec) {
var params = messageSpec.params || {};
var options = messageSpec.options || {};
var type = messageSpec.type;
var xhr = new XMLHttpRequest();
if (options.timeout) {
xhr.timeout = options.timeout;
if (options.complete)
xhr.ontimeout = options.complete;
}
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
if(xhr.status == 200) {
if (options.success) {
var object = JSON.parse(xhr.responseText);
options.success(object);
}
}
if (options.complete)
options.complete();
}
};
params.windowId = windowId;
data = JSON.stringify({
Type: type,
Params: params
});
xhr.open('POST', '/callback', true);
xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
xhr.send(data);
}
function asyncLongPoll() {
setTimeout(longPoll, 0);
}
function longPoll() {
goui.Send('goui.longPoll', {}, {
timeout: 300000000,
complete: asyncLongPoll,
success: function(message) {
if (messageHandlers[message.Type])
messageHandlers[message.Type](message.Params);
else
log("Warning: unknown message received: " + data.message);
}
});
}
function log(message) {
if (console && console.log)
console.log(message);
}
})(window.goui = window.goui || {});
`