1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-21 04:47:58 +01:00

Fix hints on Firefox 4.

This commit is contained in:
Kris Maglione
2011-03-12 11:58:16 -05:00
parent 45ba165366
commit 71d9a51442
3 changed files with 74 additions and 52 deletions

View File

@@ -346,7 +346,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
echoerr: function echoerr(str, flags) { echoerr: function echoerr(str, flags) {
flags |= commandline.APPEND_TO_MESSAGES; flags |= commandline.APPEND_TO_MESSAGES;
if (isinstance(str, ["Error", "Exception"])) if (isinstance(str, ["Error", "Exception"]) || isinstance(str, [XPCWrappedNative_NoHelper]) && /^\[Exception/.test(str))
dactyl.reportError(str); dactyl.reportError(str);
if (isObject(str) && "echoerr" in str) if (isObject(str) && "echoerr" in str)
str = str.echoerr; str = str.echoerr;

View File

@@ -506,7 +506,9 @@ var HintSession = Class("HintSession", CommandMode, {
*/ */
removeHints: function _removeHints(timeout) { removeHints: function _removeHints(timeout) {
for (let { doc, start, end } in values(this.docs)) { for (let { doc, start, end } in values(this.docs)) {
delete doc.dactylLabels; // Goddamn stupid fucking Gecko 1.x security manager bullshit.
try { delete doc.dactylLabels; } catch (e) { doc.dactylLabels = undefined; }
for (let elem in util.evaluateXPath("//*[@dactyl:highlight='hints']", doc)) for (let elem in util.evaluateXPath("//*[@dactyl:highlight='hints']", doc))
elem.parentNode.removeChild(elem); elem.parentNode.removeChild(elem);
for (let i in util.range(start, end + 1)) for (let i in util.range(start, end + 1))

View File

@@ -37,24 +37,29 @@ if (!Object.create)
}; };
if (!Object.defineProperty) if (!Object.defineProperty)
Object.defineProperty = function defineProperty(obj, prop, desc) { Object.defineProperty = function defineProperty(obj, prop, desc) {
let value = desc.value; try {
if ("value" in desc) let value = desc.value;
if (desc.writable && !__lookupGetter__.call(obj, prop) if ("value" in desc)
&& !__lookupSetter__.call(obj, prop)) if (desc.writable && !__lookupGetter__.call(obj, prop)
try { && !__lookupSetter__.call(obj, prop))
obj[prop] = value; try {
obj[prop] = value;
}
catch (e if e instanceof TypeError) {}
else {
objproto.__defineGetter__.call(obj, prop, function () value);
if (desc.writable)
objproto.__defineSetter__.call(obj, prop, function (val) { value = val; });
} }
catch (e if e instanceof TypeError) {}
else {
objproto.__defineGetter__.call(obj, prop, function () value);
if (desc.writable)
objproto.__defineSetter__.call(obj, prop, function (val) { value = val; });
}
if ("get" in desc) if ("get" in desc)
objproto.__defineGetter__.call(obj, prop, desc.get); objproto.__defineGetter__.call(obj, prop, desc.get);
if ("set" in desc) if ("set" in desc)
objproto.__defineSetter__.call(obj, prop, desc.set); objproto.__defineSetter__.call(obj, prop, desc.set);
}
catch (e) {
throw e.stack ? e : Error(e);
}
}; };
if (!Object.defineProperties) if (!Object.defineProperties)
Object.defineProperties = function defineProperties(obj, props) { Object.defineProperties = function defineProperties(obj, props) {
@@ -65,37 +70,47 @@ if (!Object.freeze)
Object.freeze = function freeze(obj) {}; Object.freeze = function freeze(obj) {};
if (!Object.getOwnPropertyDescriptor) if (!Object.getOwnPropertyDescriptor)
Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(obj, prop) { Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(obj, prop) {
if (!hasOwnProperty.call(obj, prop)) try {
return undefined; if (!hasOwnProperty.call(obj, prop))
let desc = { return undefined;
configurable: true, let desc = {
enumerable: propertyIsEnumerable.call(obj, prop) configurable: true,
}; enumerable: propertyIsEnumerable.call(obj, prop)
var get = __lookupGetter__.call(obj, prop), };
set = __lookupSetter__.call(obj, prop); var get = __lookupGetter__.call(obj, prop),
if (!get && !set) { set = __lookupSetter__.call(obj, prop);
desc.value = obj[prop]; if (!get && !set) {
desc.writable = true; desc.value = obj[prop];
desc.writable = true;
}
if (get)
desc.get = get;
if (set)
desc.set = set;
return desc;
}
catch (e) {
throw e.stack ? e : Error(e);
} }
if (get)
desc.get = get;
if (set)
desc.set = set;
return desc;
}; };
if (!Object.getOwnPropertyNames) if (!Object.getOwnPropertyNames)
Object.getOwnPropertyNames = function getOwnPropertyNames(obj, _debugger) { Object.getOwnPropertyNames = function getOwnPropertyNames(obj, _debugger) {
// This is an ugly and unfortunately necessary hack. try {
if (hasOwnProperty.call(obj, "__iterator__")) { // This is an ugly and unfortunately necessary hack.
var oldIter = obj.__iterator__; if (hasOwnProperty.call(obj, "__iterator__")) {
delete obj.__iterator__; var oldIter = obj.__iterator__;
delete obj.__iterator__;
}
let res = [k for (k in obj) if (hasOwnProperty.call(obj, k))];
if (oldIter !== undefined) {
obj.__iterator__ = oldIter;
res.push("__iterator__");
}
return res;
} }
let res = [k for (k in obj) if (hasOwnProperty.call(obj, k))]; catch (e) {
if (oldIter !== undefined) { throw e.stack ? e : Error(e);
obj.__iterator__ = oldIter;
res.push("__iterator__");
} }
return res;
}; };
if (!Object.getPrototypeOf) if (!Object.getPrototypeOf)
Object.getPrototypeOf = function getPrototypeOf(obj) obj.__proto__; Object.getPrototypeOf = function getPrototypeOf(obj) obj.__proto__;
@@ -591,17 +606,22 @@ function memoize(obj, key, getter) {
return obj; return obj;
} }
Object.defineProperty(obj, key, { try {
configurable: true, Object.defineProperty(obj, key, {
enumerable: true, configurable: true,
enumerable: true,
get: function g_replaceProperty() ( get: function g_replaceProperty() (
Class.replaceProperty(this.instance || this, key, null), Class.replaceProperty(this.instance || this, key, null),
Class.replaceProperty(this.instance || this, key, getter.call(this, key))), Class.replaceProperty(this.instance || this, key, getter.call(this, key))),
set: function s_replaceProperty(val) set: function s_replaceProperty(val)
Class.replaceProperty(this.instance || this, key, val) Class.replaceProperty(this.instance || this, key, val)
}); });
}
catch (e) {
obj[key] = getter.call(obj, key);
}
} }
let sandbox = Cu.Sandbox(this); let sandbox = Cu.Sandbox(this);