1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-23 07:08:00 +01:00

Make things not be broken on FF<29.

This commit is contained in:
Kris Maglione
2014-03-16 21:43:36 -07:00
parent 6d36b7f374
commit 3ea3dcb3db

View File

@@ -111,24 +111,58 @@ var Modules = function Modules(window) {
const BASES = [BASE, "resource://dactyl-local-content/"];
let proxyCache = {};
let proxy = new Proxy(window, {
get: function window_get(target, prop) {
// `in`, not `hasOwnProperty`, because we want to return
// unbound methods in `Object.prototype`
if (prop in proxyCache)
return proxyCache[prop];
if (config.haveGecko(29))
var proxy = new Proxy(window, {
get: function window_get(target, prop) {
// `in`, not `hasOwnProperty`, because we want to return
// unbound methods in `Object.prototype`
if (prop in proxyCache)
return proxyCache[prop];
let p = target[prop];
if (callable(p))
return proxyCache[prop] = p.bind(target);
let p = target[prop];
if (callable(p))
return proxyCache[prop] = p.bind(target);
return p;
},
return p;
},
set: function window_set(target, prop, val) {
return target[prop] = val;
}
});
set: function window_set(target, prop, val) {
return target[prop] = val;
}
});
else {
// Bug 814892
let o = {};
// Oh, the brokenness... See bug 793210
Object.preventExtensions(o);
proxy = new Proxy(o, {
get: function window_get(target, prop) {
// `in`, not `hasOwnProperty`, because we want to return
// unbound methods in `Object.prototype`
if (prop in proxyCache)
return proxyCache[prop];
let p = window[prop];
if (callable(p))
return proxyCache[prop] = p.bind(window);
return p;
},
set: function window_set(target, prop, val) {
return window[prop] = val;
},
getOwnPropertyDescriptor: function (target, prop) Object.getOwnPropertyDescriptor(window, prop),
getOwnPropertyNames: function (target, prop) Object.getOwnPropertyNames(window),
defineProperty: function (target, prop, desc) Object.defineProperty(window, prop, desc),
deleteProperty: function (target, prop) { delete window[prop]; },
has: function (target, prop) prop in window,
hasOwn: function (target, prop) hasOwnProperty(window, prop),
enumerate: function (target) (p for (p in window)),
iterate: function (target) (p for (p of window))
});
}
var jsmodules = newContext(proxy, false, "Dactyl `jsmodules`");
jsmodules.NAME = "jsmodules";