diff options
Diffstat (limited to 'devtools/client/menus.js')
-rw-r--r-- | devtools/client/menus.js | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/devtools/client/menus.js b/devtools/client/menus.js new file mode 100644 index 000000000..1aee85095 --- /dev/null +++ b/devtools/client/menus.js @@ -0,0 +1,195 @@ +/* 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_webide", + l10nKey: "webide", + disabled: true, + oncommand() { + gDevToolsBrowser.openWebIDE(); + }, + key: { + id: "webide", + modifiers: "shift" + } + }, + { 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: "devToolsEndSeparator" + }, + { id: "getMoreDevtools", + l10nKey: "getMoreDevtoolsCmd", + oncommand(event) { + let window = event.target.ownerDocument.defaultView; + window.openUILinkIn("https://addons.mozilla.org/firefox/collections/mozilla/webdeveloper/", "tab"); + } + }, +]; |