Bug 1303384 - Allow changing command shortcuts on extension detail page
MozReview-Commit-ID: KeZsoB6qj88
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -19,16 +19,18 @@ ChromeUtils.import("resource://gre/modul
ChromeUtils.defineModuleGetter(this, "E10SUtils", "resource://gre/modules/E10SUtils.jsm");
ChromeUtils.defineModuleGetter(this, "Extension",
"resource://gre/modules/Extension.jsm");
ChromeUtils.defineModuleGetter(this, "ExtensionParent",
"resource://gre/modules/ExtensionParent.jsm");
ChromeUtils.defineModuleGetter(this, "Preferences",
"resource://gre/modules/Preferences.jsm");
+ChromeUtils.defineModuleGetter(this, "ShortcutUtils",
+ "resource://gre/modules/ShortcutUtils.jsm");
ChromeUtils.defineModuleGetter(this, "PluralForm",
"resource://gre/modules/PluralForm.jsm");
ChromeUtils.defineModuleGetter(this, "Preferences",
"resource://gre/modules/Preferences.jsm");
XPCOMUtils.defineLazyPreferenceGetter(this, "WEBEXT_PERMISSION_PROMPTS",
@@ -2715,16 +2717,62 @@ var gDetailView = {
gridRow.removeAttribute("first-row");
}
}
this.fillSettingsRows(aScrollToPreferences, () => {
this.updateState();
gViewController.notifyViewChanged();
});
+
+ if (aAddon.isWebExtension) {
+ let extension = ExtensionParent.GlobalManager.extensionMap.get(aAddon.id);
+ let {shortcuts} = extension;
+ let commandsSection = document.getElementById("commands-grid");
+ let commandsRows = document.getElementById("commands-rows");
+ commandsRows.textContent = "";
+ let setPlaceholder = (input, name, value) => {
+ let placeholder;
+ if (value) {
+ let key = shortcuts.buildKeyFromShortcut(document, name, value);
+ placeholder = ShortcutUtils.prettifyShortcut(key);
+ } else {
+ placeholder = "Not set";
+ }
+ input.setAttribute("placeholder", placeholder);
+ };
+ shortcuts.allCommands().then(commands => {
+ commandsSection.hidden = commands.length == 0;
+ for (let command of commands) {
+ let row = document.createElement("row");
+ // FIXME: Update the class names.
+ row.setAttribute("class", "detail-row-complex");
+
+ let label = document.createElement("label");
+ label.setAttribute("class", "detail-row-label");
+ label.setAttribute("value", command.description || command.name);
+ row.appendChild(label);
+
+ let shortcut = document.createElement("textbox");
+ setPlaceholder(shortcut, command.name, command.shortcut);
+ shortcut.addEventListener("keydown", async (e) => {
+ if (e.key != "Enter") return;
+ let value = e.target.value;
+
+ shortcut.value = "";
+ setPlaceholder(shortcut, command.name, value);
+
+ await shortcuts.updateCommand({name: command.name, shortcut: value});
+ });
+ row.appendChild(shortcut);
+
+ commandsRows.appendChild(row);
+ }
+ });
+ }
},
async show(aAddonId, aRequest) {
let index = aAddonId.indexOf("/preferences");
let scrollToPreferences = false;
if (index >= 0) {
aAddonId = aAddonId.substring(0, index);
scrollToPreferences = true;
--- a/toolkit/mozapps/extensions/content/extensions.xul
+++ b/toolkit/mozapps/extensions/content/extensions.xul
@@ -556,16 +556,23 @@
<hbox>
<label id="detail-rating" class="meta-value meta-rating"
showrating="average"/>
<label id="detail-reviews" class="text-link"/>
</hbox>
</row>
</rows>
</grid>
+ <grid id="commands-grid">
+ <columns>
+ <column flex="1"/>
+ <column flex="2"/>
+ </columns>
+ <rows id="commands-rows"/>
+ </grid>
<hbox id="detail-controls">
<button id="detail-prefs-btn" class="addon-control preferences"
#ifdef XP_WIN
label="&detail.showPreferencesWin.label;"
accesskey="&detail.showPreferencesWin.accesskey;"
tooltiptext="&detail.showPreferencesWin.tooltip;"
#else
label="&detail.showPreferencesUnix.label;"