diff options
Diffstat (limited to 'devtools/client/inspector/inspector-commands.js')
-rw-r--r-- | devtools/client/inspector/inspector-commands.js | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/devtools/client/inspector/inspector-commands.js b/devtools/client/inspector/inspector-commands.js new file mode 100644 index 000000000..ff26e4b94 --- /dev/null +++ b/devtools/client/inspector/inspector-commands.js @@ -0,0 +1,114 @@ +/* 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"; + +const l10n = require("gcli/l10n"); +const {gDevTools} = require("devtools/client/framework/devtools"); +/* eslint-disable mozilla/reject-some-requires */ +const {EyeDropper, HighlighterEnvironment} = require("devtools/server/actors/highlighters"); +/* eslint-enable mozilla/reject-some-requires */ +const Telemetry = require("devtools/client/shared/telemetry"); + +const windowEyeDroppers = new WeakMap(); + +exports.items = [{ + item: "command", + runAt: "client", + name: "inspect", + description: l10n.lookup("inspectDesc"), + manual: l10n.lookup("inspectManual"), + params: [ + { + name: "selector", + type: "string", + description: l10n.lookup("inspectNodeDesc"), + manual: l10n.lookup("inspectNodeManual") + } + ], + exec: function* (args, context) { + let target = context.environment.target; + let toolbox = yield gDevTools.showToolbox(target, "inspector"); + let walker = toolbox.getCurrentPanel().walker; + let rootNode = yield walker.getRootNode(); + let nodeFront = yield walker.querySelector(rootNode, args.selector); + toolbox.getCurrentPanel().selection.setNodeFront(nodeFront, "gcli"); + }, +}, { + item: "command", + runAt: "client", + name: "eyedropper", + description: l10n.lookup("eyedropperDesc"), + manual: l10n.lookup("eyedropperManual"), + params: [{ + // This hidden parameter is only set to true when the eyedropper browser menu item is + // used. It is useful to log a different telemetry event whether the tool was used + // from the menu, or from the gcli command line. + group: "hiddengroup", + params: [{ + name: "frommenu", + type: "boolean", + hidden: true + }, { + name: "hide", + type: "boolean", + hidden: true + }] + }], + exec: function* (args, context) { + if (args.hide) { + context.updateExec("eyedropper_server_hide").catch(e => console.error(e)); + return; + } + + // If the inspector is already picking a color from the page, cancel it. + let target = context.environment.target; + let toolbox = gDevTools.getToolbox(target); + if (toolbox) { + let inspector = toolbox.getPanel("inspector"); + if (inspector) { + yield inspector.hideEyeDropper(); + } + } + + let telemetry = new Telemetry(); + telemetry.toolOpened(args.frommenu ? "menueyedropper" : "eyedropper"); + context.updateExec("eyedropper_server").catch(e => console.error(e)); + } +}, { + item: "command", + runAt: "server", + name: "eyedropper_server", + hidden: true, + exec: function (args, {environment}) { + let eyeDropper = windowEyeDroppers.get(environment.window); + + if (!eyeDropper) { + let env = new HighlighterEnvironment(); + env.initFromWindow(environment.window); + + eyeDropper = new EyeDropper(env); + eyeDropper.once("hidden", () => { + eyeDropper.destroy(); + env.destroy(); + windowEyeDroppers.delete(environment.window); + }); + + windowEyeDroppers.set(environment.window, eyeDropper); + } + + eyeDropper.show(environment.document.documentElement, {copyOnSelect: true}); + } +}, { + item: "command", + runAt: "server", + name: "eyedropper_server_hide", + hidden: true, + exec: function (args, {environment}) { + let eyeDropper = windowEyeDroppers.get(environment.window); + if (eyeDropper) { + eyeDropper.hide(); + } + } +}]; |