From fa36d2e8c6b122752f5a58a326f82894f79b8675 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 12 Jul 2016 11:54:45 -0700 Subject: [PATCH] Add standard edit items to text context menus --- lib/renderer/inspector.js | 45 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/lib/renderer/inspector.js b/lib/renderer/inspector.js index 962fd12e5a52..3192aa160edb 100644 --- a/lib/renderer/inspector.js +++ b/lib/renderer/inspector.js @@ -40,7 +40,12 @@ const convertToMenuTemplate = function (items) { const createMenu = function (x, y, items) { const {remote} = require('electron') const {Menu} = remote - const menu = Menu.buildFromTemplate(convertToMenuTemplate(items)) + + let template = convertToMenuTemplate(items) + if (useEditMenuItems(x, y, template)) { + template = getEditMenuItems() + } + const menu = Menu.buildFromTemplate(template) // The menu is expected to show asynchronously. setTimeout(function () { @@ -48,6 +53,44 @@ const createMenu = function (x, y, items) { }) } +const useEditMenuItems = function (x, y, items) { + return items.length === 0 && document.elementsFromPoint(x, y).some(function (element) { + return element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA' || element.isContentEditable + }) +} + +const getEditMenuItems = function () { + return [ + { + role: 'undo' + }, + { + role: 'redo' + }, + { + type: 'separator' + }, + { + role: 'cut' + }, + { + role: 'copy' + }, + { + role: 'paste' + }, + { + role: 'pasteandmatchstyle' + }, + { + role: 'delete' + }, + { + role: 'selectall' + } + ] +} + const showFileChooserDialog = function (callback) { const {dialog} = require('electron').remote const files = dialog.showOpenDialog({})