1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others |
---|
2 | // Distributed under an MIT license: http://codemirror.net/LICENSE |
---|
3 | |
---|
4 | (function(mod) { |
---|
5 | if (typeof exports == "object" && typeof module == "object") // CommonJS |
---|
6 | mod(require("../../lib/codemirror"), "cjs"); |
---|
7 | else if (typeof define == "function" && define.amd) // AMD |
---|
8 | define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); }); |
---|
9 | else // Plain browser env |
---|
10 | mod(CodeMirror, "plain"); |
---|
11 | })(function(CodeMirror, env) { |
---|
12 | if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; |
---|
13 | |
---|
14 | var loading = {}; |
---|
15 | function splitCallback(cont, n) { |
---|
16 | var countDown = n; |
---|
17 | return function() { if (--countDown == 0) cont(); }; |
---|
18 | } |
---|
19 | function ensureDeps(mode, cont) { |
---|
20 | var deps = CodeMirror.modes[mode].dependencies; |
---|
21 | if (!deps) return cont(); |
---|
22 | var missing = []; |
---|
23 | for (var i = 0; i < deps.length; ++i) { |
---|
24 | if (!CodeMirror.modes.hasOwnProperty(deps[i])) |
---|
25 | missing.push(deps[i]); |
---|
26 | } |
---|
27 | if (!missing.length) return cont(); |
---|
28 | var split = splitCallback(cont, missing.length); |
---|
29 | for (var i = 0; i < missing.length; ++i) |
---|
30 | CodeMirror.requireMode(missing[i], split); |
---|
31 | } |
---|
32 | |
---|
33 | CodeMirror.requireMode = function(mode, cont) { |
---|
34 | if (typeof mode != "string") mode = mode.name; |
---|
35 | if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); |
---|
36 | if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); |
---|
37 | |
---|
38 | var file = CodeMirror.modeURL.replace(/%N/g, mode); |
---|
39 | if (env == "plain") { |
---|
40 | var script = document.createElement("script"); |
---|
41 | script.src = file; |
---|
42 | var others = document.getElementsByTagName("script")[0]; |
---|
43 | var list = loading[mode] = [cont]; |
---|
44 | CodeMirror.on(script, "load", function() { |
---|
45 | ensureDeps(mode, function() { |
---|
46 | for (var i = 0; i < list.length; ++i) list[i](); |
---|
47 | }); |
---|
48 | }); |
---|
49 | others.parentNode.insertBefore(script, others); |
---|
50 | } else if (env == "cjs") { |
---|
51 | require(file); |
---|
52 | cont(); |
---|
53 | } else if (env == "amd") { |
---|
54 | requirejs([file], cont); |
---|
55 | } |
---|
56 | }; |
---|
57 | |
---|
58 | CodeMirror.autoLoadMode = function(instance, mode) { |
---|
59 | if (!CodeMirror.modes.hasOwnProperty(mode)) |
---|
60 | CodeMirror.requireMode(mode, function() { |
---|
61 | instance.setOption("mode", instance.getOption("mode")); |
---|
62 | }); |
---|
63 | }; |
---|
64 | }); |
---|