mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-20 02:57:59 +01:00
Use Object.defineProperty instead of __defineGetter__/__defineSetter__
In Firefox 48+, the __defineSetter__/__defineSetter__ is deprecated, so use Object.defineProperty instead.
This commit is contained in:
6
common/bootstrap.js
vendored
6
common/bootstrap.js
vendored
@@ -17,7 +17,11 @@ function module(uri) {
|
||||
|
||||
const DEBUG = true;
|
||||
|
||||
__defineGetter__("BOOTSTRAP", () => "resource://" + moduleName + "/bootstrap.jsm");
|
||||
Object.defineProperty(global, "BOOTSTRAP", {
|
||||
get: () => "resource://" + moduleName + "/bootstrap.jsm",
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
var { AddonManager } = module("resource://gre/modules/AddonManager.jsm");
|
||||
var { XPCOMUtils } = module("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
@@ -180,8 +180,16 @@ var CommandWidgets = Class("CommandWidgets", {
|
||||
return (obj.getElement || identity)(map[id] || document.getElementById(prefix + id));
|
||||
}
|
||||
|
||||
this.active.__defineGetter__(obj.name, () => this.activeGroup[obj.name][obj.name]);
|
||||
this.activeGroup.__defineGetter__(obj.name, () => this.getGroup(obj.name));
|
||||
Object.defineProperty(this.active, obj.name, {
|
||||
get: () => this.activeGroup[obj.name][obj.name],
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
});
|
||||
Object.defineProperty(this.activeGroup, obj.name, {
|
||||
get: () => this.getGroup(obj.name),
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
memoize(this.statusbar, obj.name, () => get("dactyl-statusline-field-", statusline.widgets, (obj.id || obj.name)));
|
||||
memoize(this.commandbar, obj.name, () => get("dactyl-", {}, (obj.id || obj.name)));
|
||||
|
||||
@@ -16,13 +16,17 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
|
||||
if (elem)
|
||||
this.element = elem;
|
||||
else
|
||||
this.__defineGetter__("element", () => {
|
||||
Object.defineProperty(this, "element", {
|
||||
get: () => {
|
||||
let elem = dactyl.focusedElement;
|
||||
if (elem)
|
||||
return elem.inputField || elem;
|
||||
|
||||
let win = document.commandDispatcher.focusedWindow;
|
||||
return DOM(win).isEditable && win || null;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
@@ -762,9 +762,13 @@ var Hints = Module("hints", {
|
||||
events.listen(appContent, "scroll", this.resizeTimer.bound.tell, false);
|
||||
|
||||
const Mode = Hints.Mode;
|
||||
Mode.prototype.__defineGetter__("matcher", function () {
|
||||
Object.defineProperty(Mode.prototype, "matcher", {
|
||||
get() {
|
||||
return options.get("extendedhinttags")
|
||||
.getKey(this.name, options.get("hinttags").matcher);
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
function cleanLoc(loc) {
|
||||
|
||||
@@ -63,8 +63,12 @@ var History = Module("history", {
|
||||
let sh = webNav.sessionHistory;
|
||||
|
||||
let obj = [];
|
||||
obj.__defineGetter__("index", () => sh.index);
|
||||
obj.__defineSetter__("index", val => { webNav.gotoIndex(val); });
|
||||
Object.defineProperty(obj, "index", {
|
||||
get: () => sh.index,
|
||||
set: val => webNav.gotoIndex(val),
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
obj[Symbol.iterator] = function () { return this.entries(); };
|
||||
|
||||
for (let item of iter(sh.SHistoryEnumerator, Ci.nsISHEntry))
|
||||
|
||||
@@ -26,8 +26,7 @@ try {
|
||||
catch (e) {}
|
||||
|
||||
let objproto = Object.prototype;
|
||||
var { __lookupGetter__, __lookupSetter__, __defineGetter__, __defineSetter__,
|
||||
hasOwnProperty, propertyIsEnumerable } = objproto;
|
||||
var { hasOwnProperty, propertyIsEnumerable } = objproto;
|
||||
|
||||
var hasOwnProp = Function.call.bind(hasOwnProperty);
|
||||
|
||||
@@ -780,7 +779,7 @@ function memoize(obj, key, getter) {
|
||||
if (arguments.length == 1) {
|
||||
let res = update(Object.create(obj), obj);
|
||||
for (let prop of Object.getOwnPropertyNames(obj)) {
|
||||
let get = __lookupGetter__.call(obj, prop);
|
||||
let get = Object.getOwnPropertyDescriptor(obj, prop).get;
|
||||
if (get)
|
||||
memoize(res, prop, get);
|
||||
}
|
||||
@@ -847,8 +846,12 @@ function update(target) {
|
||||
|
||||
let func = desc.value.wrapped || desc.value;
|
||||
if (!func.superapply) {
|
||||
func.__defineGetter__("super", function get_super() {
|
||||
Object.defineProperty(func, "super", {
|
||||
get: function get_super() {
|
||||
return Object.getPrototypeOf(target)[k];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
func.superapply = function superapply(self, args) {
|
||||
@@ -1169,7 +1172,11 @@ Class.prototype = {
|
||||
if (typeof desc.value === "function") {
|
||||
let func = desc.value.wrapped || desc.value;
|
||||
if (!func.superapply) {
|
||||
func.__defineGetter__("super", () => Object.getPrototypeOf(this)[k]);
|
||||
Object.defineProperty(func, "super", {
|
||||
get: () => Object.getPrototypeOf(this)[k],
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
func.superapply = function superapply(self, args) {
|
||||
let meth = Object.getPrototypeOf(self)[k];
|
||||
@@ -1403,11 +1410,15 @@ function Struct(...args) {
|
||||
members: Ary.toObject(args.map((v, k) => [v, k])),
|
||||
});
|
||||
args.forEach(function (name, i) {
|
||||
Struct.prototype.__defineGetter__(name, function () {
|
||||
Object.defineProperty(Struct.prototype, name, {
|
||||
get() {
|
||||
return this[i];
|
||||
});
|
||||
Struct.prototype.__defineSetter__(name, function (val) {
|
||||
},
|
||||
set(val) {
|
||||
this[i] = val;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
});
|
||||
return Struct;
|
||||
@@ -1467,11 +1478,15 @@ var StructBase = Class("StructBase", Array, {
|
||||
*/
|
||||
defaultValue: function defaultValue(key, val) {
|
||||
let i = this.prototype.members[key];
|
||||
this.prototype.__defineGetter__(i, function () {
|
||||
Object.defineProperty(this.prototype, i, {
|
||||
get() {
|
||||
return this[i] = val.call(this);
|
||||
});
|
||||
this.prototype.__defineSetter__(i, function (value) {
|
||||
return Class.replaceProperty(this, i, value);
|
||||
},
|
||||
set(value) {
|
||||
Class.replaceProperty(this, i, value);
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
return this;
|
||||
},
|
||||
|
||||
@@ -61,7 +61,13 @@ update(Bookmark.prototype, {
|
||||
}
|
||||
});
|
||||
Bookmark.prototype.members.uri = Bookmark.prototype.members.url;
|
||||
Bookmark.setter = function (key, func) { return this.prototype.__defineSetter__(key, func); };
|
||||
Bookmark.setter = function (key, func) {
|
||||
return Object.defineProperty(this.prototype, key, {
|
||||
set: func,
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
};
|
||||
Bookmark.setter("url", function (val) { this.uri = isString(val) ? newURI(val) : val; });
|
||||
Bookmark.setter("title", function (val) { services.bookmarks.setItemTitle(this.id, val); });
|
||||
Bookmark.setter("post", function (val) { bookmarkcache.annotate(this.id, bookmarkcache.POST, val); });
|
||||
|
||||
@@ -62,8 +62,12 @@ var CompletionContext = Class("CompletionContext", {
|
||||
["anchored", "compare", "editor", "_filter", "filterFunc", "forceAnchored", "top"]
|
||||
.forEach(key => self[key] = parent[key]);
|
||||
|
||||
self.__defineGetter__("value", function get_value() {
|
||||
Object.defineProperty(self, "value", {
|
||||
get() {
|
||||
return this.top.value;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
self.offset = parent.offset;
|
||||
@@ -90,11 +94,15 @@ var CompletionContext = Class("CompletionContext", {
|
||||
if (self != this)
|
||||
return self;
|
||||
["_caret", "contextList", "maxItems", "onUpdate", "selectionTypes", "tabPressed", "updateAsync", "value"].forEach(function fe(key) {
|
||||
self.__defineGetter__(key, function () {
|
||||
Object.defineProperty(self, key, {
|
||||
get() {
|
||||
return this.top[key];
|
||||
});
|
||||
self.__defineSetter__(key, function (val) {
|
||||
},
|
||||
set(val) {
|
||||
this.top[key] = val;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -175,19 +183,29 @@ var CompletionContext = Class("CompletionContext", {
|
||||
* @property {CompletionContext} The top-level completion context.
|
||||
*/
|
||||
this.top = this;
|
||||
this.__defineGetter__("incomplete", function get_incomplete() {
|
||||
Object.defineProperties(this, {
|
||||
"incomplete": {
|
||||
get() {
|
||||
return this._incomplete ||
|
||||
this.contextList.some(c => c.parent && c.incomplete);
|
||||
});
|
||||
this.__defineGetter__("waitingForTab", function get_waitingForTab() {
|
||||
},
|
||||
set(val) {
|
||||
this._incomplete = val;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
},
|
||||
"waitingForTab": {
|
||||
get() {
|
||||
return this._waitingForTab ||
|
||||
this.contextList.some(c => c.parent && c.waitingForTab);
|
||||
});
|
||||
this.__defineSetter__("incomplete", function get_incomplete(val) {
|
||||
this._incomplete = val;
|
||||
});
|
||||
this.__defineSetter__("waitingForTab", function get_waitingForTab(val) {
|
||||
},
|
||||
set(val) {
|
||||
this._waitingForTab = val;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
}
|
||||
});
|
||||
this.reset();
|
||||
}
|
||||
@@ -432,17 +450,22 @@ var CompletionContext = Class("CompletionContext", {
|
||||
// This is only allowed to be a simple accessor, and shouldn't
|
||||
// reference any variables. Don't bother with eval context.
|
||||
v = Function("i", "return i" + v);
|
||||
let descriptor = {
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
};
|
||||
if (typeof v == "function")
|
||||
res.__defineGetter__(k, function p_gf() {
|
||||
descriptor.get = function p_gf() {
|
||||
return Class.replaceProperty(this, k, v.call(this, this.item, self));
|
||||
});
|
||||
};
|
||||
else
|
||||
res.__defineGetter__(k, function p_gp() {
|
||||
descriptor.get = function p_gp() {
|
||||
return Class.replaceProperty(this, k, this.item[v]);
|
||||
});
|
||||
res.__defineSetter__(k, function p_s(val) {
|
||||
};
|
||||
descriptor.set = function p_s(val) {
|
||||
Class.replaceProperty(this, k, val);
|
||||
});
|
||||
};
|
||||
Object.defineProperty(res, k, descriptor);
|
||||
}
|
||||
return res;
|
||||
},
|
||||
@@ -811,8 +834,12 @@ var CompletionContext = Class("CompletionContext", {
|
||||
split: function split(name, obj, fn, ...args) {
|
||||
let context = this.fork(name);
|
||||
let alias = prop => {
|
||||
context.__defineGetter__(prop, () => this[prop]);
|
||||
context.__defineSetter__(prop, val => this[prop] = val);
|
||||
Object.defineProperty(context, prop, {
|
||||
get: () => this[prop],
|
||||
set: val => this[prop] = val,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
});
|
||||
};
|
||||
alias("_cache");
|
||||
alias("_completions");
|
||||
|
||||
@@ -459,8 +459,12 @@ var Contexts = Module("contexts", {
|
||||
group = this.Group(name, description, filter, persist);
|
||||
this.groupList.unshift(group);
|
||||
this.groupMap[name] = group;
|
||||
this.hiveProto.__defineGetter__(name, function () {
|
||||
Object.defineProperty(this.hiveProto, name, {
|
||||
get() {
|
||||
return group[this._hive];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -17,10 +17,11 @@ var Highlight = Struct("class", "selector", "sites",
|
||||
"value", "extends", "agent",
|
||||
"base", "baseClass", "style");
|
||||
Highlight.liveProperty = function (name, prop) {
|
||||
this.prototype.__defineGetter__(name, function () {
|
||||
Object.defineProperty(this.prototype, name, {
|
||||
get() {
|
||||
return this.get(name);
|
||||
});
|
||||
this.prototype.__defineSetter__(name, function (val) {
|
||||
},
|
||||
set(val) {
|
||||
if (isObject(val) && name !== "style") {
|
||||
if (isArray(val))
|
||||
val = Array.slice(val);
|
||||
@@ -38,6 +39,9 @@ Highlight.liveProperty = function (name, prop) {
|
||||
this.style[prop || name] = this[prop || name];
|
||||
if (this.onChange)
|
||||
this.onChange();
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
});
|
||||
};
|
||||
Highlight.liveProperty("agent");
|
||||
@@ -155,7 +159,8 @@ var Highlights = Module("Highlight", {
|
||||
if (!old && obj.base && obj.base.style.enabled)
|
||||
obj.style.enabled = true;
|
||||
else
|
||||
this.loaded.__defineSetter__(obj.class, function () {
|
||||
Object.defineProperty(this.loaded, obj.class, {
|
||||
set() {
|
||||
Object.defineProperty(this, obj.class, {
|
||||
value: true,
|
||||
configurable: true,
|
||||
@@ -168,6 +173,9 @@ var Highlights = Module("Highlight", {
|
||||
if (h.baseClass === obj.class)
|
||||
this[h.class] = true;
|
||||
obj.style.enabled = true;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
return obj;
|
||||
},
|
||||
|
||||
@@ -886,8 +886,11 @@ unlet s:cpo_save
|
||||
sep = sep || " ";
|
||||
let width = 0;
|
||||
let lines = [];
|
||||
lines.__defineGetter__("last", function () {
|
||||
Object.defineProperty(lines, "last", {
|
||||
get() {
|
||||
return this[this.length - 1];
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
|
||||
for (let item of values(items.array || items)) {
|
||||
|
||||
@@ -253,15 +253,19 @@ overlay.overlayWindow(Object.keys(config.overlays),
|
||||
this.initDependencies(className);
|
||||
}
|
||||
else
|
||||
modules.__defineGetter__(className, () => {
|
||||
Object.defineProperty(modules, className, {
|
||||
get: () => {
|
||||
let module = modules.jsmodules[className];
|
||||
Class.replaceProperty(modules, className, module);
|
||||
if (module.reallyInit)
|
||||
module.reallyInit(); // :(
|
||||
|
||||
if (!module.lazyDepends)
|
||||
self.initDependencies(className);
|
||||
this.initDependencies(className);
|
||||
return module;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
});
|
||||
}, this);
|
||||
},
|
||||
@@ -380,9 +384,12 @@ overlay.overlayWindow(Object.keys(config.overlays),
|
||||
|
||||
Module.list.forEach(mod => {
|
||||
if (!mod.frobbed) {
|
||||
modules.__defineGetter__(mod.className, () => {
|
||||
delete modules[mod.className];
|
||||
Object.defineProperty(modules, mod.className, {
|
||||
get: () => {
|
||||
return this.loadModule(mod.className, null, Components.stack.caller);
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
Object.keys(mod.prototype.INIT)
|
||||
.forEach(name => { this.deferInit(name, mod.prototype.INIT, mod); });
|
||||
|
||||
@@ -1060,11 +1060,15 @@ var Options = Module("options", {
|
||||
memoize(this._options, this._options.length, closure);
|
||||
|
||||
// quickly access options with options["wildmode"]:
|
||||
this.__defineGetter__(name, function () {
|
||||
Object.defineProperty(this, name, {
|
||||
get() {
|
||||
return this._optionMap[name].value;
|
||||
});
|
||||
this.__defineSetter__(name, function (value) {
|
||||
},
|
||||
set(value) {
|
||||
this._optionMap[name].value = value;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -160,7 +160,7 @@ var Services = Module("Services", {
|
||||
add: function add(name, class_, ifaces, meth) {
|
||||
const self = this;
|
||||
this.services[name] = { method: meth, class: class_, interfaces: Array.concat(ifaces || []) };
|
||||
if (name in this && ifaces && !this.__lookupGetter__(name) && !(this[name] instanceof Ci.nsISupports))
|
||||
if (name in this && ifaces && !Object.getOwnPropertyDescriptor(this, name).get && !(this[name] instanceof Ci.nsISupports))
|
||||
throw TypeError();
|
||||
memoize(this, name, () => self._create(name));
|
||||
},
|
||||
|
||||
@@ -31,8 +31,20 @@ var StoreBase = Class("StoreBase", {
|
||||
this._load = load;
|
||||
this._options = options;
|
||||
|
||||
this.__defineGetter__("store", () => store);
|
||||
this.__defineGetter__("name", () => name);
|
||||
Object.defineProperties(this, {
|
||||
"store": {
|
||||
value: store,
|
||||
writable: false,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
},
|
||||
"name": {
|
||||
value: name,
|
||||
writable: false,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
}
|
||||
});
|
||||
for (let [k, v] of iter(options))
|
||||
if (this.OPTIONS.indexOf(k) >= 0)
|
||||
this[k] = v;
|
||||
@@ -301,8 +313,12 @@ var Storage = Module("Storage", {
|
||||
|
||||
this.keys[key] = new constructor(key, params.store, load, params);
|
||||
this.keys[key].timer = new Timer(1000, 10000, () => this.save(key));
|
||||
this.__defineGetter__(key, function () {
|
||||
Object.defineProperty(this, key, {
|
||||
get() {
|
||||
return this.keys[key];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
});
|
||||
}
|
||||
return this.keys[key];
|
||||
|
||||
@@ -19,14 +19,20 @@ var namespace = "@namespace html " + JSON.stringify(XHTML) + ";\n" +
|
||||
var Sheet = Struct("name", "id", "sites", "css", "hive", "agent");
|
||||
Sheet.liveProperty = function (name) {
|
||||
let i = this.prototype.members[name];
|
||||
this.prototype.__defineGetter__(name, function () { return this[i]; });
|
||||
this.prototype.__defineSetter__(name, function (val) {
|
||||
Object.defineProperty(this.prototype, name, {
|
||||
get() {
|
||||
return this[i];
|
||||
},
|
||||
set(val) {
|
||||
if (isArray(val))
|
||||
val = Array.slice(val);
|
||||
if (isArray(val))
|
||||
Object.freeze(val);
|
||||
this[i] = val;
|
||||
this.enabled = this.enabled;
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
};
|
||||
Sheet.liveProperty("agent");
|
||||
|
||||
@@ -283,8 +283,11 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
|
||||
|
||||
compileFormat: function compileFormat(format) {
|
||||
let stack = [frame()];
|
||||
stack.__defineGetter__("top", function () {
|
||||
Object.defineProperty(stack, "top", {
|
||||
get() {
|
||||
return this[this.length - 1];
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
|
||||
function frame() {
|
||||
@@ -370,8 +373,11 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
|
||||
*/
|
||||
compileMacro: function compileMacro(macro, keepUnknown) {
|
||||
let stack = [frame()];
|
||||
stack.__defineGetter__("top", function () {
|
||||
Object.defineProperty(stack, "top", {
|
||||
get() {
|
||||
return this[this.length - 1];
|
||||
},
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
let unknown = identity;
|
||||
|
||||
@@ -69,10 +69,13 @@ function privateBrowsing(controller) {
|
||||
this._pbMenuItem = new elementslib.Elem(this._controller.menus['tools-menu'].privateBrowsingItem);
|
||||
this._pbTransitionItem = new elementslib.ID(this._controller.window.document, "Tools:PrivateBrowsing");
|
||||
|
||||
this.__defineGetter__('_pbs', function() {
|
||||
delete this._pbs;
|
||||
return this._pbs = Cc["@mozilla.org/privatebrowsing;1"].
|
||||
Object.defineProperty(this, '_pbs', {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
get() {
|
||||
return Cc["@mozilla.org/privatebrowsing;1"].
|
||||
getService(Ci.nsIPrivateBrowsingService);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -62,9 +62,13 @@ let init = function init_() {
|
||||
UserAgent = Struct("name", "useragent", "appname", "appcodename",
|
||||
"appversion", "platform", "vendor", "vendorsub", "userset");
|
||||
|
||||
UserAgent.prototype.__defineGetter__("options", function () {
|
||||
Object.defineProperty(UserAgent.prototype, "options", {
|
||||
get() {
|
||||
return opts.slice(1).map(opt => [opt.name, this[opt.name]])
|
||||
.filter(opt => opt[1]);
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
useragents = array([
|
||||
|
||||
@@ -98,7 +98,8 @@ userContext.xpwrapper = function xpwrapper(obj, iface) {
|
||||
try {
|
||||
let shim = XPCOMShim([iface]);
|
||||
iter.forEach(properties(shim), function (prop) {
|
||||
res.__defineGetter__(prop, function () {
|
||||
Object.defineProperty(res, prop, {
|
||||
get() {
|
||||
let res = obj.QueryInterface(Ci[iface])[prop];
|
||||
if (callable(res)) {
|
||||
let fn = (...args) => res.apply(obj, args);
|
||||
@@ -107,7 +108,10 @@ userContext.xpwrapper = function xpwrapper(obj, iface) {
|
||||
return fn;
|
||||
}
|
||||
return res;
|
||||
})
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
});
|
||||
}
|
||||
catch (e if e === Cr.NS_ERROR_NO_INTERFACE) {
|
||||
@@ -146,7 +150,11 @@ memoize(userContext, "xpclasses", function () {
|
||||
return userContext.xpwrapper(cls);
|
||||
}
|
||||
Object.keys(Cc).forEach(function (k) {
|
||||
xpclasses.__defineGetter__(k, () => xpclasses(k));
|
||||
Object.defineProperty(xpclasses, k, {
|
||||
get: () => xpclasses(k),
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
});
|
||||
JavaScript.setCompleter([xpclasses], Completer(Cc));
|
||||
return xpclasses;
|
||||
@@ -179,7 +187,11 @@ memoize(userContext, "xpservices", function () {
|
||||
return userContext.xpwrapper(cls);
|
||||
}
|
||||
Object.keys(Cc).forEach(function (k) {
|
||||
xpservices.__defineGetter__(k, () => xpservices(k));
|
||||
Object.defineProperty(xpservices, k, {
|
||||
get: () => xpservices(k),
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
});
|
||||
JavaScript.setCompleter([xpservices], Completer(Cc));
|
||||
return xpservices;
|
||||
|
||||
Reference in New Issue
Block a user