X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=common%2Fmodules%2Faddons.jsm;fp=common%2Fmodules%2Faddons.jsm;h=c1e4e335514f8627d69e40dd70fdcc58b78ada50;hb=9044153cb63835e39b9de8ec4ade237c03e3888a;hp=6f43950c46b44649bcb836869c4ecddb1ce5335b;hpb=70740024f9c028c1fd63e1a1850ab062ff956054;p=dactyl.git
diff --git a/common/modules/addons.jsm b/common/modules/addons.jsm
index 6f43950..c1e4e33 100644
--- a/common/modules/addons.jsm
+++ b/common/modules/addons.jsm
@@ -3,15 +3,14 @@
//
// This work is licensed for reuse under an MIT license. Details are
// given in the LICENSE.txt file included with this file.
-"use strict";
+/* use strict */
try {
Components.utils.import("resource://dactyl/bootstrap.jsm");
defineModule("addons", {
exports: ["AddonManager", "Addons", "Addon", "addons"],
- require: ["services"],
- use: ["completion", "config", "io", "messages", "prefs", "template", "util"]
+ require: ["services"]
}, this);
var callResult = function callResult(method) {
@@ -59,7 +58,6 @@ var updateAddons = Class("UpgradeListener", AddonListener, {
},
onUpdateAvailable: function (addon, install) {
- util.dump("onUpdateAvailable");
this.upgrade.push(addon);
install.addListener(this);
install.install();
@@ -76,7 +74,7 @@ var updateAddons = Class("UpgradeListener", AddonListener, {
var actions = {
delete: {
- name: "extde[lete]",
+ name: ["extde[lete]", "extrm"],
description: "Uninstall an extension",
action: callResult("uninstall"),
perm: "uninstall"
@@ -111,15 +109,16 @@ var actions = {
name: "extr[ehash]",
description: "Reload an extension",
action: function (addon) {
- util.assert(util.haveGecko("2b"), _("command.notUseful", config.host));
+ util.assert(config.haveGecko("2b"), _("command.notUseful", config.host));
+ util.flushCache();
util.timeout(function () {
addon.userDisabled = true;
addon.userDisabled = false;
});
},
get filter() {
- let ids = Set(keys(JSON.parse(prefs.get("extensions.bootstrappedAddons", "{}"))));
- return function ({ item }) !item.userDisabled && Set.has(ids, item.id);
+ return function ({ item }) !item.userDisabled &&
+ !(item.operationsRequiringRestart & (AddonManager.OP_NEEDS_RESTART_ENABLE | AddonManager.OP_NEEDS_RESTART_DISABLE))
},
perm: "disable"
},
@@ -150,7 +149,6 @@ var Addon = Class("Addon", {
|
|
- |
{_("addon.action.On")}
{_("addon.action.Off")}
@@ -158,6 +156,7 @@ var Addon = Class("Addon", {
{_("addon.action.Update")}
{_("addon.action.Options")}
|
+ |
|
,
this.list.document, this.nodes);
@@ -225,6 +224,7 @@ var Addon = Class("Addon", {
this.nodes.version.textContent = this.version;
update("status", this.statusInfo);
this.nodes.description.textContent = this.description;
+ DOM(this.nodes.row).attr("active", this.isActive || null);
for (let node in values(this.nodes))
if (node.update && node.update !== callee)
@@ -278,15 +278,15 @@ var AddonList = Class("AddonList", {
this.update();
},
- message: Class.memoize(function () {
+ message: Class.Memoize(function () {
XML.ignoreWhitespace = true;
util.xmlToDom(
{_("title.Name")} |
{_("title.Version")} |
- {_("title.Status")} |
|
+ {_("title.Status")} |
{_("title.Description")} |
, this.document, this.nodes);
@@ -348,7 +348,7 @@ var AddonList = Class("AddonList", {
});
var Addons = Module("addons", {
- errors: Class.memoize(function ()
+ errors: Class.Memoize(function ()
array(["ERROR_NETWORK_FAILURE", "ERROR_INCORRECT_HASH",
"ERROR_CORRUPT_FILE", "ERROR_FILE_ACCESS"])
.map(function (e) [AddonManager[e], _("AddonManager." + e)])
@@ -425,11 +425,10 @@ var Addons = Module("addons", {
AddonManager.getAddonsByTypes(args["-types"], dactyl.wrapCallback(function (list) {
if (!args.bang || command.bang) {
- list = list.filter(function (extension) extension.name == name);
- if (list.length == 0)
- return void dactyl.echoerr(_("error.invalidArgument", name));
- if (!list.every(ok))
- return void dactyl.echoerr(_("error.invalidOperation"));
+ list = list.filter(function (addon) addon.id == name || addon.name == name);
+ dactyl.assert(list.length, _("error.invalidArgument", name));
+ dactyl.assert(list.some(ok), _("error.invalidOperation"));
+ list = list.filter(ok);
}
if (command.actions)
command.actions(list, this.modules);
@@ -440,7 +439,7 @@ var Addons = Module("addons", {
argCount: "?", // FIXME: should be "1"
bang: true,
completer: function (context, args) {
- completion.extension(context, args["-types"]);
+ completion.addon(context, args["-types"]);
context.filters.push(function ({ item }) ok(item));
if (command.filter)
context.filters.push(command.filter);
@@ -478,10 +477,14 @@ var Addons = Module("addons", {
};
};
- completion.extension = function extension(context, types) {
- context.title = ["Extension"];
+ completion.addon = function addon(context, types) {
+ context.title = ["Add-on"];
context.anchored = false;
- context.keys = { text: "name", description: "description", icon: "iconURL" },
+ context.keys = {
+ text: function (addon) [addon.name, addon.id],
+ description: "description",
+ icon: "iconURL"
+ };
context.generate = function () {
context.incomplete = true;
AddonManager.getAddonsByTypes(types || ["extension"], function (addons) {
@@ -539,7 +542,7 @@ else
return "";
},
- installLocation: Class.memoize(function () services.extensionManager.getInstallLocation(this.id)),
+ installLocation: Class.Memoize(function () services.extensionManager.getInstallLocation(this.id)),
getResourceURI: function getResourceURI(path) {
let file = this.installLocation.getItemFile(this.id, path);
return services.io.newFileURI(file);