| (function() { |
| if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; |
| |
| var loading = {}; |
| function splitCallback(cont, n) { |
| var countDown = n; |
| return function() { if (--countDown == 0) cont(); }; |
| } |
| function ensureDeps(mode, cont) { |
| var deps = CodeMirror.modes[mode].dependencies; |
| if (!deps) return cont(); |
| var missing = []; |
| for (var i = 0; i < deps.length; ++i) { |
| if (!CodeMirror.modes.hasOwnProperty(deps[i])) |
| missing.push(deps[i]); |
| } |
| if (!missing.length) return cont(); |
| var split = splitCallback(cont, missing.length); |
| for (var i = 0; i < missing.length; ++i) |
| CodeMirror.requireMode(missing[i], split); |
| } |
| |
| CodeMirror.requireMode = function(mode, cont) { |
| if (typeof mode != "string") mode = mode.name; |
| if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); |
| if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); |
| |
| var script = document.createElement("script"); |
| script.src = CodeMirror.modeURL.replace(/%N/g, mode); |
| var others = document.getElementsByTagName("script")[0]; |
| others.parentNode.insertBefore(script, others); |
| var list = loading[mode] = [cont]; |
| var count = 0, poll = setInterval(function() { |
| if (++count > 100) return clearInterval(poll); |
| if (CodeMirror.modes.hasOwnProperty(mode)) { |
| clearInterval(poll); |
| loading[mode] = null; |
| ensureDeps(mode, function() { |
| for (var i = 0; i < list.length; ++i) list[i](); |
| }); |
| } |
| }, 200); |
| }; |
| |
| CodeMirror.autoLoadMode = function(instance, mode) { |
| if (!CodeMirror.modes.hasOwnProperty(mode)) |
| CodeMirror.requireMode(mode, function() { |
| instance.setOption("mode", instance.getOption("mode")); |
| }); |
| }; |
| }()); |