/* 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; }); } }];