Merge branch '2.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / js / 3rdParty / codemirror / addon / tern / worker.js
1 // declare global: tern, server
2
3 var server;
4
5 this.onmessage = function(e) {
6 var data = e.data;
7 switch (data.type) {
8 case "init": return startServer(data.defs, data.plugins, data.scripts);
9 case "add": return server.addFile(data.name, data.text);
10 case "del": return server.delFile(data.name);
11 case "req": return server.request(data.body, function(err, reqData) {
12 postMessage({id: data.id, body: reqData, err: err && String(err)});
13 });
14 case "getFile":
15 var c = pending[data.id];
16 delete pending[data.id];
17 return c(data.err, data.text);
18 default: throw new Error("Unknown message type: " + data.type);
19 }
20 };
21
22 var nextId = 0, pending = {};
23 function getFile(file, c) {
24 postMessage({type: "getFile", name: file, id: ++nextId});
25 pending[nextId] = c;
26 }
27
28 function startServer(defs, plugins, scripts) {
29 if (scripts) importScripts.apply(null, scripts);
30
31 server = new tern.Server({
32 getFile: getFile,
33 async: true,
34 defs: defs,
35 plugins: plugins
36 });
37 }
38
39 var console = {
40 log: function(v) { postMessage({type: "debug", message: v}); }
41 };