Fix: merge conflict
[myslice.git] / to-be-integrated / third-party / codemirror-3.15 / addon / mode / loadmode.js
1 (function() {
2   if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js";
3
4   var loading = {};
5   function splitCallback(cont, n) {
6     var countDown = n;
7     return function() { if (--countDown == 0) cont(); };
8   }
9   function ensureDeps(mode, cont) {
10     var deps = CodeMirror.modes[mode].dependencies;
11     if (!deps) return cont();
12     var missing = [];
13     for (var i = 0; i < deps.length; ++i) {
14       if (!CodeMirror.modes.hasOwnProperty(deps[i]))
15         missing.push(deps[i]);
16     }
17     if (!missing.length) return cont();
18     var split = splitCallback(cont, missing.length);
19     for (var i = 0; i < missing.length; ++i)
20       CodeMirror.requireMode(missing[i], split);
21   }
22
23   CodeMirror.requireMode = function(mode, cont) {
24     if (typeof mode != "string") mode = mode.name;
25     if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont);
26     if (loading.hasOwnProperty(mode)) return loading[mode].push(cont);
27
28     var script = document.createElement("script");
29     script.src = CodeMirror.modeURL.replace(/%N/g, mode);
30     var others = document.getElementsByTagName("script")[0];
31     others.parentNode.insertBefore(script, others);
32     var list = loading[mode] = [cont];
33     var count = 0, poll = setInterval(function() {
34       if (++count > 100) return clearInterval(poll);
35       if (CodeMirror.modes.hasOwnProperty(mode)) {
36         clearInterval(poll);
37         loading[mode] = null;
38         ensureDeps(mode, function() {
39           for (var i = 0; i < list.length; ++i) list[i]();
40         });
41       }
42     }, 200);
43   };
44
45   CodeMirror.autoLoadMode = function(instance, mode) {
46     if (!CodeMirror.modes.hasOwnProperty(mode))
47       CodeMirror.requireMode(mode, function() {
48         instance.setOption("mode", instance.getOption("mode"));
49       });
50   };
51 }());