add config.loadModule
This commit is contained in:
parent
66d8e37f4d
commit
ffadbe44bf
3 changed files with 51 additions and 59 deletions
|
|
@ -32,6 +32,8 @@ define(function(require, exports, module) {
|
|||
"no use strict";
|
||||
|
||||
var lang = require("./lib/lang");
|
||||
var oop = require("./lib/oop");
|
||||
var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
||||
|
||||
var global = (function() {
|
||||
return this;
|
||||
|
|
@ -65,6 +67,9 @@ exports.all = function() {
|
|||
return lang.copyObject(options);
|
||||
};
|
||||
|
||||
// module loading
|
||||
oop.implement(exports, EventEmitter);
|
||||
|
||||
exports.moduleUrl = function(name, component) {
|
||||
if (options.$moduleUrls[name])
|
||||
return options.$moduleUrls[name];
|
||||
|
|
@ -87,6 +92,32 @@ exports.setModuleUrl = function(name, subst) {
|
|||
return options.$moduleUrls[name] = subst;
|
||||
};
|
||||
|
||||
exports.loadModule = function(moduleName, onLoad) {
|
||||
var module, moduleType;
|
||||
if (Array.isArray(moduleName)) {
|
||||
moduleType = moduleName[0];
|
||||
moduleName = moduleName[1];
|
||||
}
|
||||
try {
|
||||
module = require(moduleName);
|
||||
} catch (e) {};
|
||||
if (module)
|
||||
return onLoad(module);
|
||||
|
||||
var afterLoad = function() {
|
||||
require([moduleName], function(module) {
|
||||
exports._emit("load.module", {name: moduleName, module: module});
|
||||
onLoad(module);
|
||||
});
|
||||
};
|
||||
|
||||
if (!exports.get("packaged"))
|
||||
return afterLoad();
|
||||
net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);
|
||||
};
|
||||
|
||||
|
||||
// initialization
|
||||
exports.init = function() {
|
||||
options.packaged = require.packaged || module.packaged || (global.define && define.packaged);
|
||||
|
||||
|
|
|
|||
|
|
@ -898,49 +898,27 @@ var EditSession = function(text, mode) {
|
|||
};
|
||||
|
||||
this.$modes = {};
|
||||
this._loadMode = function(mode, callback) {
|
||||
this._loadMode = function(name, callback) {
|
||||
if (!this.$modes["null"])
|
||||
this.$modes["null"] = this.$modes["ace/mode/text"] = new TextMode();
|
||||
|
||||
if (this.$modes[mode])
|
||||
return callback(this.$modes[mode]);
|
||||
if (this.$modes[name])
|
||||
return callback(this.$modes[name]);
|
||||
|
||||
var _self = this;
|
||||
var module;
|
||||
try {
|
||||
module = require(mode);
|
||||
} catch (e) {};
|
||||
// sometimes require returns empty object (this bug is present in requirejs 2 as well)
|
||||
if (module && module.Mode)
|
||||
return done(module);
|
||||
config.loadModule(["mode", name], function(module) {
|
||||
if (_self.$modes[name])
|
||||
return callback(_self.$modes[name]);
|
||||
if (module && module.Mode) {
|
||||
_self.$modes[name] = new module.Mode();
|
||||
_self.$modes[name].$id = name;
|
||||
callback(_self.$modes[name]);
|
||||
}
|
||||
});
|
||||
|
||||
// set mode to text until loading is finished
|
||||
if (!this.$mode)
|
||||
this.$setModePlaceholder();
|
||||
|
||||
fetch(mode, function() {
|
||||
require([mode], done);
|
||||
});
|
||||
|
||||
function done(module) {
|
||||
if (_self.$modes[mode])
|
||||
return callback(_self.$modes[mode]);
|
||||
|
||||
_self.$modes[mode] = new module.Mode();
|
||||
_self.$modes[mode].$id = mode;
|
||||
_self._emit("loadmode", {
|
||||
name: mode,
|
||||
mode: _self.$modes[mode]
|
||||
});
|
||||
callback(_self.$modes[mode]);
|
||||
}
|
||||
|
||||
function fetch(name, callback) {
|
||||
if (!config.get("packaged"))
|
||||
return callback();
|
||||
|
||||
net.loadScript(config.moduleUrl(name, "mode"), callback);
|
||||
}
|
||||
};
|
||||
|
||||
this.$setModePlaceholder = function() {
|
||||
|
|
@ -982,11 +960,13 @@ var EditSession = function(text, mode) {
|
|||
if (_self.$modeId !== mode)
|
||||
return;
|
||||
|
||||
_self.setMode(module);
|
||||
_self.$onChangeMode(module);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
} else
|
||||
_self.$onChangeMode(module);
|
||||
}
|
||||
|
||||
this.$onChangeMode = function(mode) {
|
||||
if (this.$mode === mode) return;
|
||||
this.$mode = mode;
|
||||
this.$modeId = mode.$id;
|
||||
|
|
|
|||
|
|
@ -1278,10 +1278,7 @@ var VirtualRenderer = function(container, theme) {
|
|||
};
|
||||
|
||||
this._loadTheme = function(name, callback) {
|
||||
if (!config.get("packaged"))
|
||||
return callback();
|
||||
|
||||
net.loadScript(config.moduleUrl(name, "theme"), callback);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -1292,28 +1289,12 @@ var VirtualRenderer = function(container, theme) {
|
|||
**/
|
||||
this.setTheme = function(theme) {
|
||||
var _self = this;
|
||||
|
||||
this.$themeValue = theme;
|
||||
_self._dispatchEvent('themeChange',{theme:theme});
|
||||
|
||||
if (!theme || typeof theme == "string") {
|
||||
var moduleName = theme || "ace/theme/textmate";
|
||||
|
||||
var module;
|
||||
try {
|
||||
module = require(moduleName);
|
||||
} catch (e) {};
|
||||
if (module)
|
||||
return afterLoad(module);
|
||||
|
||||
_self._loadTheme(moduleName, function() {
|
||||
require([moduleName], function(module) {
|
||||
if (_self.$themeValue !== theme)
|
||||
return;
|
||||
|
||||
afterLoad(module);
|
||||
});
|
||||
});
|
||||
config.loadModule(["theme", moduleName], afterLoad);
|
||||
} else {
|
||||
afterLoad(theme);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue