mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-20 00:38:00 +01:00
Localitize deprecation warnings.
This commit is contained in:
@@ -39,7 +39,7 @@ var Map = Class("Map", {
|
|||||||
Object.freeze(this.modes);
|
Object.freeze(this.modes);
|
||||||
|
|
||||||
if (extraInfo)
|
if (extraInfo)
|
||||||
update(this, extraInfo);
|
this.update(extraInfo);
|
||||||
},
|
},
|
||||||
|
|
||||||
name: Class.memoize(function () this.names[0]),
|
name: Class.memoize(function () this.names[0]),
|
||||||
|
|||||||
@@ -438,10 +438,9 @@ var Modes = Module("modes", {
|
|||||||
util.assert(options.bases.every(function (m) m instanceof this, this.constructor),
|
util.assert(options.bases.every(function (m) m instanceof this, this.constructor),
|
||||||
_("mode.invalidBases"), true);
|
_("mode.invalidBases"), true);
|
||||||
|
|
||||||
this.description = options.description || name;
|
this.update({
|
||||||
|
|
||||||
update(this, {
|
|
||||||
id: 1 << Modes.Mode._id++,
|
id: 1 << Modes.Mode._id++,
|
||||||
|
description: name,
|
||||||
name: name,
|
name: name,
|
||||||
params: params || {}
|
params: params || {}
|
||||||
}, options);
|
}, options);
|
||||||
|
|||||||
@@ -235,6 +235,7 @@ error.charsOutsideRange-1 = Character list outside the range %S
|
|||||||
error.invalidCharRange = Invalid character range: %S
|
error.invalidCharRange = Invalid character range: %S
|
||||||
error.notWriteable-1 = Could not write to %S: %S
|
error.notWriteable-1 = Could not write to %S: %S
|
||||||
|
|
||||||
|
warn.deprecated-2 = %S is deprecated: Please use %S instead.
|
||||||
warn.notDefaultBranch-2 = You are running %S from a testing branch: %S. Please do not report errors which do not also occur in the default branch.
|
warn.notDefaultBranch-2 = You are running %S from a testing branch: %S. Please do not report errors which do not also occur in the default branch.
|
||||||
|
|
||||||
# vim:se ft=jproperties tw=0:
|
# vim:se ft=jproperties tw=0:
|
||||||
|
|||||||
@@ -331,9 +331,8 @@ deprecated.warn = function warn(func, name, alternative, frame) {
|
|||||||
frame = frame || Components.stack.caller.caller;
|
frame = frame || Components.stack.caller.caller;
|
||||||
let filename = util.fixURI(frame.filename || "unknown");
|
let filename = util.fixURI(frame.filename || "unknown");
|
||||||
if (!set.add(func.seenCaller, filename))
|
if (!set.add(func.seenCaller, filename))
|
||||||
util.dactyl(func).warn(
|
util.dactyl(func).warn([util.urlPath(filename), frame.lineNumber, " "].join(":")
|
||||||
util.urlPath(filename) + ":" + frame.lineNumber + ": " +
|
+ require("messages")._("warn.deprecated", name, alternative));
|
||||||
name + " is deprecated: Please use " + alternative + " instead");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -904,6 +903,41 @@ Class.prototype = {
|
|||||||
util.trapErrors(callback, self);
|
util.trapErrors(callback, self);
|
||||||
}
|
}
|
||||||
return services.Timer(timeout_notify, timeout || 0, services.Timer.TYPE_ONE_SHOT);
|
return services.Timer(timeout_notify, timeout || 0, services.Timer.TYPE_ONE_SHOT);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates this instance with the properties of the given objects.
|
||||||
|
* Like the update function, but with special semantics for
|
||||||
|
* localized properties.
|
||||||
|
*/
|
||||||
|
update: function update() {
|
||||||
|
// XXX: Duplication.
|
||||||
|
|
||||||
|
for (let i = 0; i < arguments.length; i++) {
|
||||||
|
let src = arguments[i];
|
||||||
|
Object.getOwnPropertyNames(src || {}).forEach(function (k) {
|
||||||
|
let desc = Object.getOwnPropertyDescriptor(src, k);
|
||||||
|
if (desc.value instanceof Class.Property)
|
||||||
|
desc = desc.value.init(k, this) || desc.value;
|
||||||
|
|
||||||
|
if (typeof desc.value === "function") {
|
||||||
|
let func = desc.value.wrapped || desc.value;
|
||||||
|
func.__defineGetter__("super", function () Object.getPrototypeOf(this)[k]);
|
||||||
|
func.superapply = function superapply(self, args)
|
||||||
|
let (meth = Object.getPrototypeOf(this)[k])
|
||||||
|
meth && meth.apply(self, args);
|
||||||
|
func.supercall = function supercall(self)
|
||||||
|
func.superapply(self, Array.slice(arguments, 1));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if ("value" in desc && set.has(this.localizedProperties, k))
|
||||||
|
this[k] = desc.value;
|
||||||
|
else
|
||||||
|
Object.defineProperty(this, k, desc);
|
||||||
|
}
|
||||||
|
catch (e) {}
|
||||||
|
}, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Class.makeClosure = function makeClosure() {
|
Class.makeClosure = function makeClosure() {
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ var Command = Class("Command", {
|
|||||||
this.action = action;
|
this.action = action;
|
||||||
|
|
||||||
if (extraInfo)
|
if (extraInfo)
|
||||||
update(this, extraInfo);
|
this.update(extraInfo);
|
||||||
if (this.options)
|
if (this.options)
|
||||||
this.options = this.options.map(CommandOption.fromArray, CommandOption);
|
this.options = this.options.map(CommandOption.fromArray, CommandOption);
|
||||||
for each (let option in this.options)
|
for each (let option in this.options)
|
||||||
@@ -155,11 +155,8 @@ var Command = Class("Command", {
|
|||||||
const { dactyl } = this.modules;
|
const { dactyl } = this.modules;
|
||||||
|
|
||||||
let context = args.context;
|
let context = args.context;
|
||||||
if (this.deprecated && !set.add(this.complained, context ? context.file : "[Command Line]")) {
|
if (this.deprecated)
|
||||||
let loc = contexts.context ? context.file + ":" + context.line + ": " : "";
|
this.warn(context, "deprecated", _("warn.deprecated", ":" + this.name, this.deprecated));
|
||||||
dactyl.echoerr(loc + ":" + this.name + " is deprecated" +
|
|
||||||
(isString(this.deprecated) ? ": " + this.deprecated : ""));
|
|
||||||
}
|
|
||||||
|
|
||||||
modifiers = modifiers || {};
|
modifiers = modifiers || {};
|
||||||
|
|
||||||
@@ -229,6 +226,10 @@ var Command = Class("Command", {
|
|||||||
|
|
||||||
/** @property {string} This command's description, as shown in :listcommands */
|
/** @property {string} This command's description, as shown in :listcommands */
|
||||||
description: Messages.Localized(""),
|
description: Messages.Localized(""),
|
||||||
|
|
||||||
|
/** @property {string|null} If set, the deprecation message for this command. */
|
||||||
|
deprecated: Messages.Localized(null),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property {function (Args)} The function called to execute this command.
|
* @property {function (Args)} The function called to execute this command.
|
||||||
*/
|
*/
|
||||||
@@ -356,7 +357,21 @@ var Command = Class("Command", {
|
|||||||
* @property {string} For commands defined via :command, contains the Ex
|
* @property {string} For commands defined via :command, contains the Ex
|
||||||
* command line to be executed upon invocation.
|
* command line to be executed upon invocation.
|
||||||
*/
|
*/
|
||||||
replacementText: null
|
replacementText: null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Warns of a misuse of this command once per warning type per file.
|
||||||
|
*
|
||||||
|
* @param {object} context The calling context.
|
||||||
|
* @param {string} type The type of warning.
|
||||||
|
* @param {string} warning The warning message.
|
||||||
|
*/
|
||||||
|
warn: function warn(context, type, message) {
|
||||||
|
let loc = !context ? "" : [context.file, context.line, " "].join(":");
|
||||||
|
|
||||||
|
if (!set.add(this.complained, type + ":" + (context ? context.file : "[Command Line]")))
|
||||||
|
this.modules.dactyl.warn(loc + message);
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
// TODO: do we really need more than longNames as a convenience anyway?
|
// TODO: do we really need more than longNames as a convenience anyway?
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -88,13 +88,17 @@ var Messages = Module("messages", {
|
|||||||
}, {
|
}, {
|
||||||
Localized: Class("Localized", Class.Property, {
|
Localized: Class("Localized", Class.Property, {
|
||||||
init: function init(prop, obj) {
|
init: function init(prop, obj) {
|
||||||
let _prop = "localized_" + prop;
|
let _prop = "unlocalized_" + prop;
|
||||||
if (this.initialized) {
|
if (this.initialized) {
|
||||||
/*
|
/*
|
||||||
if (config.locale === "en-US")
|
if (config.locale === "en-US")
|
||||||
return { configurable: true, enumerable: true, value: null, writable: true };
|
return { configurable: true, enumerable: true, value: this.default, writable: true };
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (!set.has(obj, "localizedProperties"))
|
||||||
|
obj.localizedProperties = { __proto__: obj.localizedProperties };
|
||||||
|
obj.localizedProperties[prop] = true;
|
||||||
|
|
||||||
obj[_prop] = this.default;
|
obj[_prop] = this.default;
|
||||||
return {
|
return {
|
||||||
get: function get() {
|
get: function get() {
|
||||||
@@ -103,6 +107,7 @@ var Messages = Module("messages", {
|
|||||||
|
|
||||||
function getter(key, default_) function getter() messages.get([name, key].join("."), default_);
|
function getter(key, default_) function getter() messages.get([name, key].join("."), default_);
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
let name = [this.constructor.className.toLowerCase(), this.identifier || this.name, prop].join(".");
|
let name = [this.constructor.className.toLowerCase(), this.identifier || this.name, prop].join(".");
|
||||||
if (!isObject(value))
|
if (!isObject(value))
|
||||||
value = messages.get(name, value)
|
value = messages.get(name, value)
|
||||||
@@ -118,9 +123,11 @@ var Messages = Module("messages", {
|
|||||||
iter(value).forEach(function ([k, v]) {
|
iter(value).forEach(function ([k, v]) {
|
||||||
memoize(value, k, function () messages.get([name, k].join("."), v));
|
memoize(value, k, function () messages.get([name, k].join("."), v));
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return Class.replaceProperty(this, prop, value);
|
return Class.replaceProperty(this, prop, value);
|
||||||
},
|
},
|
||||||
|
|
||||||
set: function set(val) this[_prop] = val
|
set: function set(val) this[_prop] = val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,14 +51,8 @@ var Option = Class("Option", {
|
|||||||
this.realNames = names;
|
this.realNames = names;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
|
|
||||||
// Need to trigger setter
|
|
||||||
if (extraInfo && "values" in extraInfo && !extraInfo.__lookupGetter__("values")) {
|
|
||||||
this.values = extraInfo.values;
|
|
||||||
delete extraInfo.values;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (extraInfo)
|
if (extraInfo)
|
||||||
update(this, extraInfo);
|
this.update(extraInfo);
|
||||||
|
|
||||||
if (set.has(this.modules.config.defaults, this.name))
|
if (set.has(this.modules.config.defaults, this.name))
|
||||||
defaultValue = this.modules.config.defaults[this.name];
|
defaultValue = this.modules.config.defaults[this.name];
|
||||||
|
|||||||
Reference in New Issue
Block a user