-// Copyright (c) 2009-2011 by Kris Maglione <maglione.k@gmail.com>
+// Copyright (c) 2009-2013 Kris Maglione <maglione.k@gmail.com>
//
// This work is licensed for reuse under an MIT license. Details are
// given in the LICENSE.txt file included with this file.
-/* use strict */
+"use strict";
try {
-Components.utils.import("resource://dactyl/bootstrap.jsm");
defineModule("main", {
exports: ["ModuleBase"],
require: ["config", "overlay", "services", "util"]
-}, this);
+});
var BASE = "resource://dactyl-content/";
*
* @returns {function} The constructor for the resulting module.
*/
- function Module(name) {
- let args = Array.slice(arguments);
+ function Module(name, ...args) {
var base = ModuleBase;
- if (callable(args[1]))
- base = args.splice(1, 1)[0];
+ if (callable(args[0]))
+ base = args.shift();
- let [, prototype, classProperties, moduleInit] = args;
+ let [prototype, classProperties, moduleInit] = args;
prototype._metaInit_ = function () {
delete module.prototype._metaInit_;
Class.replaceProperty(modules, module.className, this);
Module.list = [];
Module.constructors = {};
- const create = window.Object.create || (function () {
- window.__dactyl_eval_string = "(function (proto) ({ __proto__: proto }))";
- JSMLoader.loadSubScript(BASE + "eval.js", window);
-
- let res = window.__dactyl_eval_result;
- delete window.__dactyl_eval_string;
- delete window.__dactyl_eval_result;
- return res;
- })();
-
+ const create = window.Object.create.bind(window.Object);
const BASES = [BASE, "resource://dactyl-local-content/"];
- const jsmodules = { NAME: "jsmodules" };
+ jsmodules = Cu.createObjectIn(window);
+ jsmodules.NAME = "jsmodules";
const modules = update(create(jsmodules), {
yes_i_know_i_should_not_report_errors_in_these_branches_thanks: [],
}
}
try {
- require(jsmodules, script);
+ require(script, jsmodules);
}
catch (e) {
util.dump("Loading script " + script + ":");
wantXrays: false });
// Hack:
- sandbox.Object = jsmodules.Object;
+ // sandbox.Object = jsmodules.Object;
sandbox.File = jsmodules.File;
sandbox.Math = jsmodules.Math;
sandbox.__proto__ = proto || modules;
defineModule.time("load", null, function _load() {
config.modules.global
- .forEach(function (name) defineModule.time("load", name, require, null, modules.jsmodules, name));
+ .forEach(function (name) {
+ if (!isArray(name))
+ defineModule.time("load", name, require, null, name, modules.jsmodules);
+ else
+ lazyRequire(name[0], name.slice(1), modules.jsmodules);
+ });
config.modules.window
.forEach(function (name) defineModule.time("load", name, modules.load, modules, name));
},
scanModules: function scanModules() {
- let self = this;
let { Module, modules } = this.modules;
- defineModule.modules.forEach(function defModule(mod) {
+ defineModule.modules.forEach((mod) => {
let names = Set(Object.keys(mod.INIT));
if ("init" in mod.INIT)
Set.add(names, "init");
- keys(names).forEach(function (name) { self.deferInit(name, mod.INIT, mod); });
+ keys(names).forEach((name) => { this.deferInit(name, mod.INIT, mod); });
});
- Module.list.forEach(function frobModule(mod) {
+ Module.list.forEach((mod) => {
if (!mod.frobbed) {
- modules.__defineGetter__(mod.className, function () {
+ modules.__defineGetter__(mod.className, () => {
delete modules[mod.className];
- return self.loadModule(mod.className, null, Components.stack.caller);
+ return this.loadModule(mod.className, null, Components.stack.caller);
});
Object.keys(mod.prototype.INIT)
- .forEach(function (name) { self.deferInit(name, mod.prototype.INIT, mod); });
+ .forEach((name) => { this.deferInit(name, mod.prototype.INIT, mod); });
}
mod.frobbed = true;
});
} catch(e){ if (!e.stack) e = Error(e); dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack); }
-// vim: set fdm=marker sw=4 ts=4 et ft=javascript:
+// vim: set fdm=marker sw=4 sts=4 ts=8 et ft=javascript: