1 |
|
2 |
|
3 |
|
4 | (function(mod) {
|
5 | if (typeof exports == "object" && typeof module == "object")
|
6 | mod(require("../../lib/codemirror"), "cjs");
|
7 | else if (typeof define == "function" && define.amd)
|
8 | define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); });
|
9 | else
|
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 | });
|