1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-02-05 20:05:45 +01:00

Fix live update issues.

This commit is contained in:
Kris Maglione
2011-03-07 17:45:22 -05:00
parent c08c0dc19f
commit f002825d10
9 changed files with 52 additions and 29 deletions

View File

@@ -287,27 +287,33 @@ function deprecated(alternative, fn) {
let name, func = callable(fn) ? fn : function () this[fn].apply(this, arguments);
function deprecatedMethod() {
let frame = Components.stack.caller;
let obj = this.className ? this.className + "#" :
this.constructor.className ? this.constructor.className + "#" :
"";
let filename = util.fixURI(frame.filename || "unknown");
if (!set.add(deprecatedMethod.seen, filename))
util.dactyl(fn).warn(
util.urlPath(filename) + ":" + frame.lineNumber + ": " +
obj + (fn.name || name) + " is deprecated: Please use " + alternative + " instead");
deprecated.warn(func, obj + (fn.name || name), alternative);
return func.apply(this, arguments);
}
memoize(deprecatedMethod, "seen", function () set([
"resource://dactyl" + JSMLoader.suffix + "/javascript.jsm",
"resource://dactyl" + JSMLoader.suffix + "/util.jsm"
]));
return callable(fn) ? deprecatedMethod : Class.Property({
get: function () deprecatedMethod,
init: function (prop) { name = prop; }
});
}
deprecated.warn = function warn(func, name, alternative, frame) {
if (!func.seenCaller)
func.seenCaller = set([
"resource://dactyl" + JSMLoader.suffix + "/javascript.jsm",
"resource://dactyl" + JSMLoader.suffix + "/util.jsm"
]);
frame = frame || Components.stack.caller.caller;
let filename = util.fixURI(frame.filename || "unknown");
if (!set.add(func.seenCaller, filename))
util.dactyl(func).warn(
util.urlPath(filename) + ":" + frame.lineNumber + ": " +
name + " is deprecated: Please use " + alternative + " instead");
}
/**
* Iterates over all of the top-level, iterable property names of an

View File

@@ -12,6 +12,11 @@ var BOOTSTRAP_CONTRACT = "@dactyl.googlecode.com/base/bootstrap";
var JSMLoader = BOOTSTRAP_CONTRACT in Components.classes &&
Components.classes[BOOTSTRAP_CONTRACT].getService().wrappedJSObject.loader;
if (!JSMLoader && "@mozilla.org/fuel/application;1" in Components.classes)
JSMLoader = Components.classes["@mozilla.org/fuel/application;1"]
.getService(Components.interfaces.extIApplication)
.storage.get("dactyl.JSMLoader", null);
if (JSMLoader && JSMLoader.bump === 4)
JSMLoader.global = this;
else

View File

@@ -692,9 +692,13 @@ var Commands = Module("commands", {
repeat: null,
add: function add() {
util.assert(util.isDactyl(Components.stack.caller),
"User scripts may not add builtin commands. Please use group.commands.add instead.");
return this.builtin._add.apply(this.builtin, arguments);
let group = this.builtin;
if (!util.isDactyl(Components.stack.caller)) {
deprecated.warn(add, "commands.add", "group.commands.add");
group = this.user;
}
return group._add.apply(group, arguments);
},
addUserCommand: deprecated("group.commands.add", { get: function addUserCommand() this.user.closure._add }),
getUserCommands: deprecated("iter(group.commands)", function getUserCommands() iter(this.user).toArray()),

View File

@@ -24,7 +24,7 @@ var Messages = Module("messages", {
init: function _(message) {
this.args = arguments;
},
value: Class.memoize(function () {
message: Class.memoize(function () {
let message = this.args[0];
if (this.args.length > 1) {
@@ -33,8 +33,8 @@ var Messages = Module("messages", {
}
return self.get(message);
}),
valueOf: function valueOf() this.value,
toString: function toString() this.value
valueOf: function valueOf() this.message,
toString: function toString() this.message
});
let seen = {};

View File

@@ -292,7 +292,7 @@ var Overlay = Module("Overlay", {
defineModule.modules.forEach(function defModule({ lazyInit, constructor: { className } }) {
if (!lazyInit) {
frob(className);
modules[className] = modules[className];
Class.replaceProperty(modules, className, modules[className]);
}
else
modules.__defineGetter__(className, function () {

View File

@@ -864,7 +864,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
*/
isDactyl: Class.memoize(function () {
let base = util.regexp.escape(Components.stack.filename.replace(/[^\/]+$/, ""));
let re = RegExp("^(resource://dactyl|" + base + ")\\S+( -> resource://dactyl(?!-content/eval.js)\\S+)?$");
let re = RegExp("^(?:.* -> )?(?:resource://dactyl(?!-content/eval.js)|" + base + ")\\S+$");
return function isDactyl(frame) re.test(frame.filename);
}),