-
Notifications
You must be signed in to change notification settings - Fork 305
Expand file tree
/
Copy pathqueue.js
More file actions
85 lines (72 loc) · 2.12 KB
/
queue.js
File metadata and controls
85 lines (72 loc) · 2.12 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
var sharpmap = {};
sharpmap.queue = (function () {
var queued = [], active = 0, size = 6;
function init() {
webdb.check();
}
function process() {
if ((active >= size) || !queued.length)
return;
active++;
queued.pop()();
}
function dequeue(send) {
for (var i = 0; i < queued.length; i++) {
if (queued[i] == send) {
queued.splice(i, 1);
return true;
}
}
return false;
}
function request(url, callback, mimeType) {
var req;
function send() {
req = new XMLHttpRequest();
if (mimeType && req.overrideMimeType) {
req.overrideMimeType(mimeType);
}
req.open("GET", url, true);
req.onreadystatechange = function () {
if (req.readyState == 4) {
active--;
if (req.status < 300)
callback(req);
process();
}
};
req.send(null);
}
function abort(hard) {
if (dequeue(send))
return true;
if (hard && req) {
req.abort();
return true;
}
return false;
}
queued.push(send);
process();
return { abort: abort };
}
function json(url, callback) {
var data = webdb.get(url), parse;
if (data) {
parse = JSON.parse(data);
console.log('retrieved from webdb ' + url);
return callback(parse);
}
return request(url, function (req) {
var text;
if (req.responseText) {
text = req.responseText;
webdb.add(url, text);
data = JSON.parse(text);
console.log('added to webdb ' + url);
callback(data);
}
}, "application/json");
}
return { init: init, json: json };
})();