annotate .cms/lib/codemirror/addon/mode/loadmode.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"), "cjs");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 else if (typeof define == "function" && define.amd) // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 else // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror, "plain");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 })(function(CodeMirror, env) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 var loading = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 function splitCallback(cont, n) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 var countDown = n;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 return function() { if (--countDown == 0) cont(); };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 function ensureDeps(mode, cont, options) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 var modeObj = CodeMirror.modes[mode], deps = modeObj && modeObj.dependencies;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 if (!deps) return cont();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 var missing = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 for (var i = 0; i < deps.length; ++i) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 if (!CodeMirror.modes.hasOwnProperty(deps[i]))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 missing.push(deps[i]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 if (!missing.length) return cont();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 var split = splitCallback(cont, missing.length);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 for (var i = 0; i < missing.length; ++i)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 CodeMirror.requireMode(missing[i], split, options);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 CodeMirror.requireMode = function(mode, cont, options) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 if (typeof mode != "string") mode = mode.name;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont, options);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 if (loading.hasOwnProperty(mode)) return loading[mode].push(cont);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 var file = options && options.path ? options.path(mode) : CodeMirror.modeURL.replace(/%N/g, mode);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 if (options && options.loadMode) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 options.loadMode(file, function() { ensureDeps(mode, cont, options) })
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 } else if (env == "plain") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 var script = document.createElement("script");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 script.src = file;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 var others = document.getElementsByTagName("script")[0];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 var list = loading[mode] = [cont];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 CodeMirror.on(script, "load", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 ensureDeps(mode, function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 for (var i = 0; i < list.length; ++i) list[i]();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 }, options);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 others.parentNode.insertBefore(script, others);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 } else if (env == "cjs") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 require(file);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 cont();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 } else if (env == "amd") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 requirejs([file], cont);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 CodeMirror.autoLoadMode = function(instance, mode, options) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 if (!CodeMirror.modes.hasOwnProperty(mode))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 CodeMirror.requireMode(mode, function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 instance.setOption("mode", instance.getOption("mode"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 }, options);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 });