Mypal/devtools/client/menus.js

186 lines
5.8 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* This module defines the sorted list of menuitems inserted into the
* "Web Developer" menu.
* It also defines the key shortcuts that relates to them.
*
* Various fields are necessary for historical compatiblity with XUL/addons:
* - id:
* used as <xul:menuitem> id attribute
* - l10nKey:
* prefix used to locale localization strings from menus.properties
* - oncommand:
* function called when the menu item or key shortcut are fired
* - key:
* - id:
* prefixed by 'key_' to compute <xul:key> id attribute
* - modifiers:
* optional modifiers for the key shortcut
* - keytext:
* boolean, to set to true for key shortcut using regular character
* - additionalKeys:
* Array of additional keys, see `key` definition.
* - disabled:
* If true, the menuitem and key shortcut are going to be hidden and disabled
* on startup, until some runtime code eventually enable them.
* - checkbox:
* If true, the menuitem is prefixed by a checkbox and runtime code can
* toggle it.
*/
const Services = require("Services");
const isMac = Services.appinfo.OS === "Darwin";
loader.lazyRequireGetter(this, "gDevToolsBrowser", "devtools/client/framework/devtools-browser", true);
loader.lazyRequireGetter(this, "CommandUtils", "devtools/client/shared/developer-toolbar", true);
loader.lazyRequireGetter(this, "TargetFactory", "devtools/client/framework/target", true);
loader.lazyImporter(this, "BrowserToolboxProcess", "resource://devtools/client/framework/ToolboxProcess.jsm");
loader.lazyImporter(this, "ResponsiveUIManager", "resource://devtools/client/responsivedesign/responsivedesign.jsm");
loader.lazyImporter(this, "ScratchpadManager", "resource://devtools/client/scratchpad/scratchpad-manager.jsm");
exports.menuitems = [
{ id: "menu_devToolbox",
l10nKey: "devToolboxMenuItem",
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
gDevToolsBrowser.toggleToolboxCommand(window.gBrowser);
},
key: {
id: "devToolboxMenuItem",
modifiers: isMac ? "accel,alt" : "accel,shift",
// This is the only one with a letter key
// and needs to be translated differently
keytext: true,
},
additionalKeys: [{
id: "devToolboxMenuItemF12",
l10nKey: "devToolsCmd",
}],
checkbox: true
},
{ id: "menu_devtools_separator",
separator: true },
{ id: "menu_devToolbar",
l10nKey: "devToolbarMenu",
disabled: true,
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
// Distinguish events when selecting a menuitem, where we either open
// or close the toolbar and when hitting the key shortcut where we just
// focus the toolbar if it doesn't already has it.
if (event.target.tagName.toLowerCase() == "menuitem") {
window.DeveloperToolbar.toggle();
} else {
window.DeveloperToolbar.focusToggle();
}
},
key: {
id: "devToolbar",
modifiers: "shift"
},
checkbox: true
},
{ id: "menu_browserToolbox",
l10nKey: "browserToolboxMenu",
disabled: true,
oncommand() {
BrowserToolboxProcess.init();
},
key: {
id: "browserToolbox",
modifiers: "accel,alt,shift",
keytext: true
}
},
{ id: "menu_browserContentToolbox",
l10nKey: "browserContentToolboxMenu",
disabled: true,
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
gDevToolsBrowser.openContentProcessToolbox(window.gBrowser);
}
},
{ id: "menu_browserConsole",
l10nKey: "browserConsoleCmd",
oncommand() {
let {HUDService} = require("devtools/client/webconsole/hudservice");
HUDService.openBrowserConsoleOrFocus();
},
key: {
id: "browserConsole",
modifiers: "accel,shift",
keytext: true
}
},
{ id: "menu_responsiveUI",
l10nKey: "responsiveDesignMode",
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
ResponsiveUIManager.toggle(window, window.gBrowser.selectedTab);
},
key: {
id: "responsiveUI",
modifiers: isMac ? "accel,alt" : "accel,shift",
keytext: true
},
checkbox: true
},
{ id: "menu_eyedropper",
l10nKey: "eyedropper",
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
let target = TargetFactory.forTab(window.gBrowser.selectedTab);
CommandUtils.createRequisition(target, {
environment: CommandUtils.createEnvironment({target})
}).then(requisition => {
requisition.updateExec("eyedropper --frommenu");
}, e => console.error(e));
},
checkbox: true
},
{ id: "menu_scratchpad",
l10nKey: "scratchpad",
oncommand() {
ScratchpadManager.openScratchpad();
},
key: {
id: "scratchpad",
modifiers: "shift"
}
},
{ id: "menu_devtools_serviceworkers",
l10nKey: "devtoolsServiceWorkers",
disabled: true,
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
gDevToolsBrowser.openAboutDebugging(window.gBrowser, "workers");
}
},
{ id: "menu_devtools_connect",
l10nKey: "devtoolsConnect",
disabled: true,
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
gDevToolsBrowser.openConnectScreen(window.gBrowser);
}
},
{ separator: true,
id: "menu_devToolsEndSeparator"
},
{ id: "menu_getMoreDevtools",
l10nKey: "getMoreDevtoolsCmd",
oncommand(event) {
let window = event.target.ownerDocument.defaultView;
let getMoreURL = Services.prefs.getCharPref("browser.getdevtools.url");
window.openUILinkIn(getMoreURL, "tab");
}
},
];