add config.loadModule

This commit is contained in:
nightwing 2012-12-06 00:22:42 +04:00
commit ffadbe44bf
3 changed files with 51 additions and 59 deletions

View file

@ -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;