loadmode.min.js (2277B)
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 });