Commit | Line | Data |
---|---|---|
837afb80 TD |
1 | (function(mod) { |
2 | if (typeof exports == "object" && typeof module == "object") // CommonJS | |
3 | mod(require("../../lib/codemirror")); | |
4 | else if (typeof define == "function" && define.amd) // AMD | |
5 | define(["../../lib/codemirror"], mod); | |
6 | else // Plain browser env | |
7 | mod(CodeMirror); | |
8 | })(function(CodeMirror) { | |
77b7b761 TD |
9 | if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; |
10 | ||
11 | var loading = {}; | |
12 | function splitCallback(cont, n) { | |
13 | var countDown = n; | |
14 | return function() { if (--countDown == 0) cont(); }; | |
15 | } | |
16 | function ensureDeps(mode, cont) { | |
17 | var deps = CodeMirror.modes[mode].dependencies; | |
18 | if (!deps) return cont(); | |
19 | var missing = []; | |
20 | for (var i = 0; i < deps.length; ++i) { | |
21 | if (!CodeMirror.modes.hasOwnProperty(deps[i])) | |
22 | missing.push(deps[i]); | |
23 | } | |
24 | if (!missing.length) return cont(); | |
25 | var split = splitCallback(cont, missing.length); | |
26 | for (var i = 0; i < missing.length; ++i) | |
27 | CodeMirror.requireMode(missing[i], split); | |
28 | } | |
29 | ||
30 | CodeMirror.requireMode = function(mode, cont) { | |
31 | if (typeof mode != "string") mode = mode.name; | |
32 | if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); | |
33 | if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); | |
34 | ||
35 | var script = document.createElement("script"); | |
36 | script.src = CodeMirror.modeURL.replace(/%N/g, mode); | |
37 | var others = document.getElementsByTagName("script")[0]; | |
38 | others.parentNode.insertBefore(script, others); | |
39 | var list = loading[mode] = [cont]; | |
40 | var count = 0, poll = setInterval(function() { | |
41 | if (++count > 100) return clearInterval(poll); | |
42 | if (CodeMirror.modes.hasOwnProperty(mode)) { | |
43 | clearInterval(poll); | |
44 | loading[mode] = null; | |
45 | ensureDeps(mode, function() { | |
46 | for (var i = 0; i < list.length; ++i) list[i](); | |
47 | }); | |
48 | } | |
49 | }, 200); | |
50 | }; | |
51 | ||
52 | CodeMirror.autoLoadMode = function(instance, mode) { | |
53 | if (!CodeMirror.modes.hasOwnProperty(mode)) | |
54 | CodeMirror.requireMode(mode, function() { | |
55 | instance.setOption("mode", instance.getOption("mode")); | |
56 | }); | |
57 | }; | |
837afb80 | 58 | }); |