Bug 1444301 - Add help items to menu; r?jryans draft
authorBrian Birtles <birtles@gmail.com>
Thu, 05 Apr 2018 10:13:22 +0900
changeset 778573 d03b20042e8b70ed3ae17b9bf217504c010b67c3
parent 778572 6ac164723c8ebeeb3992bf39ee5a83ec00b678bf
child 778574 a39690183ccffebc97f150416343aa3c27133ba6
push id105521
push userbbirtles@mozilla.com
push dateFri, 06 Apr 2018 14:07:54 +0000
reviewersjryans
bugs1444301
milestone61.0a1
Bug 1444301 - Add help items to menu; r?jryans MozReview-Commit-ID: PwW9OK8eOV
devtools/client/framework/components/toolbox-toolbar.js
devtools/client/locales/en-US/toolbox.properties
devtools/client/shared/link.js
devtools/client/shared/moz.build
--- a/devtools/client/framework/components/toolbox-toolbar.js
+++ b/devtools/client/framework/components/toolbox-toolbar.js
@@ -2,16 +2,17 @@
  * 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";
 
 const { Component, createFactory } = require("devtools/client/shared/vendor/react");
 const dom = require("devtools/client/shared/vendor/react-dom-factories");
 const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
 const {div, button} = dom;
+const {openLink} = require("devtools/client/shared/link");
 
 const Menu = require("devtools/client/framework/menu");
 const MenuItem = require("devtools/client/framework/menu-item");
 const ToolboxTab = createFactory(require("devtools/client/framework/components/toolbox-tab"));
 const ToolboxTabs = createFactory(require("devtools/client/framework/components/toolbox-tabs"));
 
 /**
  * This is the overall component for the toolbox toolbar. It is designed to not know how
@@ -358,15 +359,37 @@ function showMeatballMenu(
   // Settings
   menu.append(new MenuItem({
     id: "toolbox-meatball-menu-settings",
     label: L10N.getStr("toolbox.meatballMenu.settings.label"),
     accelerator: L10N.getStr("toolbox.help.key"),
     click: () => selectTool("options"),
   }));
 
+  if (menu.items.length) {
+    menu.append(new MenuItem({ type: "separator" }));
+  }
+
+  // Getting started
+  menu.append(new MenuItem({
+    id: "toolbox-meatball-menu-gettingstarted",
+    label: L10N.getStr("toolbox.meatballMenu.gettingStarted.label"),
+    click: () => {
+      openLink("https://developer.mozilla.org/docs/Tools", toolbox);
+    },
+  }));
+
+  // Give feedback
+  menu.append(new MenuItem({
+    id: "toolbox-meatball-menu-feedback",
+    label: L10N.getStr("toolbox.meatballMenu.giveFeedback.label"),
+    click: () => {
+      openLink("https://discourse.mozilla.org/c/devtools", toolbox);
+    },
+  }));
+
   const rect = menuButton.getBoundingClientRect();
   const screenX = menuButton.ownerDocument.defaultView.mozInnerScreenX;
   const screenY = menuButton.ownerDocument.defaultView.mozInnerScreenY;
 
   // Display the popup below the button.
   menu.popup(rect.left + screenX, rect.bottom + screenY, toolbox);
 }
--- a/devtools/client/locales/en-US/toolbox.properties
+++ b/devtools/client/locales/en-US/toolbox.properties
@@ -172,16 +172,24 @@ toolbox.meatballMenu.hideconsole.label=H
 toolbox.meatballMenu.noautohide.label=Disable popup auto-hide
 
 # LOCALIZATION NOTE (toolbox.meatballMenu.settings.label): This is the label for
 # the item in the "..." menu in the toolbox that brings up the Settings
 # (Options) panel.
 # The keyboard shortcut will be shown to the side of the label.
 toolbox.meatballMenu.settings.label=Settings
 
+# LOCALIZATION NOTE (toolbox.meatballMenu.gettingStarted.label): This is the
+# label for the Getting Started menu item.
+toolbox.meatballMenu.gettingStarted.label=Getting started
+
+# LOCALIZATION NOTE (toolbox.meatballMenu.giveFeedback.label): This is the label
+# for the Give feedback menu item.
+toolbox.meatballMenu.giveFeedback.label=Give feedback
+
 # LOCALIZATION NOTE (toolbox.closebutton.tooltip): This is the tooltip for
 # the close button the developer tools toolbox.
 toolbox.closebutton.tooltip=Close Developer Tools
 
 # LOCALIZATION NOTE (toolbox.allToolsButton.tooltip): This is the tooltip for the
 # "all tools" button displayed when some tools are hidden by overflow of the toolbar.
 toolbox.allToolsButton.tooltip=Select another tool
 
new file mode 100644
--- /dev/null
+++ b/devtools/client/shared/link.js
@@ -0,0 +1,27 @@
+/* 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";
+
+/**
+ * Opens |url| in a new tab.
+ */
+exports.openLink = async function(url, toolbox) {
+  const parentDoc = toolbox.doc;
+  if (!parentDoc) {
+    return;
+  }
+
+  const win = parentDoc.querySelector("window");
+  if (!win) {
+    return;
+  }
+
+  const top = win.ownerDocument.defaultView.top;
+  if (!top || typeof top.openUILinkIn !== "function") {
+    return;
+  }
+
+  top.openUILinkIn(url, "tab");
+};
--- a/devtools/client/shared/moz.build
+++ b/devtools/client/shared/moz.build
@@ -31,16 +31,17 @@ DevToolsModules(
     'DOMHelpers.jsm',
     'doorhanger.js',
     'enum.js',
     'file-saver.js',
     'getjson.js',
     'inplace-editor.js',
     'key-shortcuts.js',
     'keycodes.js',
+    'link.js',
     'natural-sort.js',
     'network-throttling-profiles.js',
     'node-attribute-parser.js',
     'options-view.js',
     'output-parser.js',
     'poller.js',
     'prefs.js',
     'react-utils.js',