Skip to content

Commit 13af2af

Browse files
committed
[loadmode addon] Work with requirejs
See http://discuss.codemirror.net/t/loadmode-js
1 parent ccddb1e commit 13af2af

File tree

2 files changed

+20
-17
lines changed

2 files changed

+20
-17
lines changed

addon/mode/loadmode.js

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33

44
(function(mod) {
55
if (typeof exports == "object" && typeof module == "object") // CommonJS
6-
mod(require("../../lib/codemirror"));
6+
mod(require("../../lib/codemirror"), "cjs");
77
else if (typeof define == "function" && define.amd) // AMD
8-
define(["../../lib/codemirror"], mod);
8+
define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); });
99
else // Plain browser env
10-
mod(CodeMirror);
11-
})(function(CodeMirror) {
10+
mod(CodeMirror, "plain");
11+
})(function(CodeMirror, env) {
1212
if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js";
1313

1414
var loading = {};
@@ -35,21 +35,24 @@
3535
if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont);
3636
if (loading.hasOwnProperty(mode)) return loading[mode].push(cont);
3737

38-
var script = document.createElement("script");
39-
script.src = CodeMirror.modeURL.replace(/%N/g, mode);
40-
var others = document.getElementsByTagName("script")[0];
41-
others.parentNode.insertBefore(script, others);
42-
var list = loading[mode] = [cont];
43-
var count = 0, poll = setInterval(function() {
44-
if (++count > 100) return clearInterval(poll);
45-
if (CodeMirror.modes.hasOwnProperty(mode)) {
46-
clearInterval(poll);
47-
loading[mode] = null;
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() {
4845
ensureDeps(mode, function() {
4946
for (var i = 0; i < list.length; ++i) list[i]();
5047
});
51-
}
52-
}, 200);
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+
}
5356
};
5457

5558
CodeMirror.autoLoadMode = function(instance, mode) {

test/lint/lint.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var topAllowedGlobals = Object.create(null);
2222
"screen FileReader Worker postMessage importScripts " +
2323
"setInterval clearInterval setTimeout clearTimeout " +
2424
"CodeMirror " +
25-
"test exports require module define")
25+
"test exports require module define requirejs")
2626
.split(" ").forEach(function(n) { topAllowedGlobals[n] = true; });
2727

2828
var fs = require("fs"), acorn = require("./acorn.js"), walk = require("./walk.js");

0 commit comments

Comments
 (0)