summaryrefslogtreecommitdiffstats
path: root/devtools/client/styleeditor/styleeditor-commands.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/styleeditor/styleeditor-commands.js')
-rw-r--r--devtools/client/styleeditor/styleeditor-commands.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/devtools/client/styleeditor/styleeditor-commands.js b/devtools/client/styleeditor/styleeditor-commands.js
new file mode 100644
index 000000000..ded63e499
--- /dev/null
+++ b/devtools/client/styleeditor/styleeditor-commands.js
@@ -0,0 +1,72 @@
+/* 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/. */
+
+/* globals gDevTools */
+
+"use strict";
+
+const l10n = require("gcli/l10n");
+loader.lazyRequireGetter(this, "gDevTools",
+ "devtools/client/framework/devtools", true);
+
+/**
+ * The `edit` command opens the toolbox to the style editor, with a given
+ * stylesheet open.
+ *
+ * This command is tricky. The 'edit' command uses the toolbox, so it's
+ * clearly runAt:client, but it uses the 'resource' type which accesses the
+ * DOM, so it must also be runAt:server.
+ *
+ * Our solution is to have the command technically be runAt:server, but to not
+ * actually do anything other than basically `return args;`, and have the
+ * converter (all converters are runAt:client) do the actual work of opening
+ * a toolbox.
+ *
+ * For alternative solutions that we considered, see the comment on commit
+ * 2645af7.
+ */
+exports.items = [{
+ item: "command",
+ runAt: "server",
+ name: "edit",
+ description: l10n.lookup("editDesc"),
+ manual: l10n.lookup("editManual2"),
+ params: [
+ {
+ name: "resource",
+ type: {
+ name: "resource",
+ include: "text/css"
+ },
+ description: l10n.lookup("editResourceDesc")
+ },
+ {
+ name: "line",
+ defaultValue: 1,
+ type: {
+ name: "number",
+ min: 1,
+ step: 10
+ },
+ description: l10n.lookup("editLineToJumpToDesc")
+ }
+ ],
+ returnType: "editArgs",
+ exec: args => {
+ return { href: args.resource.name, line: args.line };
+ }
+}, {
+ item: "converter",
+ from: "editArgs",
+ to: "dom",
+ exec: function (args, context) {
+ let target = context.environment.target;
+ let toolboxOpened = gDevTools.showToolbox(target, "styleeditor");
+ return toolboxOpened.then(function (toolbox) {
+ let styleEditor = toolbox.getCurrentPanel();
+ styleEditor.selectStyleSheet(args.href, args.line);
+ return null;
+ });
+ }
+}];