From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- devtools/client/framework/toolbox-context-menu.js | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 devtools/client/framework/toolbox-context-menu.js (limited to 'devtools/client/framework/toolbox-context-menu.js') diff --git a/devtools/client/framework/toolbox-context-menu.js b/devtools/client/framework/toolbox-context-menu.js new file mode 100644 index 0000000000..b02aed14d0 --- /dev/null +++ b/devtools/client/framework/toolbox-context-menu.js @@ -0,0 +1,119 @@ +/* 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 Menu = require("resource://devtools/client/framework/menu.js"); +const MenuItem = require("resource://devtools/client/framework/menu-item.js"); + +// This WeakMap will be used to know if strings have already been loaded in a given +// window, which will be used as key. +const stringsLoaded = new WeakMap(); + +/** + * Lazily load strings for the edit menu. + */ +function loadEditMenuStrings(win) { + if (stringsLoaded.has(win)) { + return; + } + + if (win.MozXULElement) { + stringsLoaded.set(win, true); + win.MozXULElement.insertFTLIfNeeded("toolkit/global/textActions.ftl"); + } +} + +/** + * Return an 'edit' menu for a input field. This integrates directly + * with docshell commands to provide the right enabled state and editor + * functionality. + * + * You'll need to call menu.popup() yourself, this just returns the Menu instance. + * + * @param {Window} win parent window reference + * @param {String} id menu ID + * + * @returns {Menu} + */ +function createEditContextMenu(win, id) { + // Localized strings for the menu are loaded lazily. + loadEditMenuStrings(win); + + const docshell = win.docShell; + const menu = new Menu({ id }); + menu.append( + new MenuItem({ + id: "editmenu-undo", + l10nID: "text-action-undo", + disabled: !docshell.isCommandEnabled("cmd_undo"), + click: () => { + docshell.doCommand("cmd_undo"); + }, + }) + ); + menu.append( + new MenuItem({ + type: "separator", + }) + ); + menu.append( + new MenuItem({ + id: "editmenu-cut", + l10nID: "text-action-cut", + disabled: !docshell.isCommandEnabled("cmd_cut"), + click: () => { + docshell.doCommand("cmd_cut"); + }, + }) + ); + menu.append( + new MenuItem({ + id: "editmenu-copy", + l10nID: "text-action-copy", + disabled: !docshell.isCommandEnabled("cmd_copy"), + click: () => { + docshell.doCommand("cmd_copy"); + }, + }) + ); + menu.append( + new MenuItem({ + id: "editmenu-paste", + l10nID: "text-action-paste", + disabled: !docshell.isCommandEnabled("cmd_paste"), + click: () => { + docshell.doCommand("cmd_paste"); + }, + }) + ); + menu.append( + new MenuItem({ + id: "editmenu-delete", + l10nID: "text-action-delete", + disabled: !docshell.isCommandEnabled("cmd_delete"), + click: () => { + docshell.doCommand("cmd_delete"); + }, + }) + ); + menu.append( + new MenuItem({ + type: "separator", + }) + ); + menu.append( + new MenuItem({ + id: "editmenu-selectAll", + l10nID: "text-action-select-all", + disabled: !docshell.isCommandEnabled("cmd_selectAll"), + click: () => { + docshell.doCommand("cmd_selectAll"); + }, + }) + ); + return menu; +} + +module.exports.createEditContextMenu = createEditContextMenu; -- cgit v1.2.3