From 8b3f4b77e8d8386de684da55c78043ef451698b4 Mon Sep 17 00:00:00 2001 From: Jakub Szwacz Date: Thu, 8 Apr 2021 14:55:36 +0200 Subject: [PATCH] final touches --- package.json | 1 + src/app.js | 3 +- src/helpers/context_menu.js | 59 ------------------- ...ternal_links_main.js => external_links.js} | 0 src/helpers/window.js | 4 +- src/main.js | 28 +++++---- src/menu/app_menu_template.js | 14 +++++ src/menu/dev_menu_template.js | 11 +--- src/menu/edit_menu_template.js | 2 +- 9 files changed, 37 insertions(+), 85 deletions(-) delete mode 100644 src/helpers/context_menu.js rename src/helpers/{external_links_main.js => external_links.js} (100%) create mode 100644 src/menu/app_menu_template.js diff --git a/package.json b/package.json index 7119a34fc..f4aff27da 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "release": "npm test && webpack --config=build/webpack.app.config.js --env=production && electron-builder" }, "dependencies": { + "electron-context-menu": "^2.5.0", "fs-jetpack": "^4.1.0" }, "devDependencies": { diff --git a/src/app.js b/src/app.js index 79c37fbc2..caf92232f 100644 --- a/src/app.js +++ b/src/app.js @@ -1,7 +1,6 @@ import "./stylesheets/main.css"; -// Small helpers you might want to keep -// import "./helpers/context_menu.js"; +// Small helper you might want to keep import "./helpers/external_links_renderer.js"; // ---------------------------------------------------------------------------- diff --git a/src/helpers/context_menu.js b/src/helpers/context_menu.js deleted file mode 100644 index 44cd54d58..000000000 --- a/src/helpers/context_menu.js +++ /dev/null @@ -1,59 +0,0 @@ -// This gives you default context menu (cut, copy, paste) -// in all input fields and textareas across your app. - -import { remote } from "electron"; - -const Menu = remote.Menu; -const MenuItem = remote.MenuItem; - -const isAnyTextSelected = () => { - return window.getSelection().toString() !== ""; -}; - -const cut = new MenuItem({ - label: "Cut", - click: () => { - document.execCommand("cut"); - } -}); - -const copy = new MenuItem({ - label: "Copy", - click: () => { - document.execCommand("copy"); - } -}); - -const paste = new MenuItem({ - label: "Paste", - click: () => { - document.execCommand("paste"); - } -}); - -const normalMenu = new Menu(); -normalMenu.append(copy); - -const textEditingMenu = new Menu(); -textEditingMenu.append(cut); -textEditingMenu.append(copy); -textEditingMenu.append(paste); - -document.addEventListener( - "contextmenu", - event => { - switch (event.target.nodeName) { - case "TEXTAREA": - case "INPUT": - event.preventDefault(); - textEditingMenu.popup(remote.getCurrentWindow()); - break; - default: - if (isAnyTextSelected()) { - event.preventDefault(); - normalMenu.popup(remote.getCurrentWindow()); - } - } - }, - false -); diff --git a/src/helpers/external_links_main.js b/src/helpers/external_links.js similarity index 100% rename from src/helpers/external_links_main.js rename to src/helpers/external_links.js diff --git a/src/helpers/window.js b/src/helpers/window.js index 17e5e8f9f..4a9d7898f 100644 --- a/src/helpers/window.js +++ b/src/helpers/window.js @@ -1,5 +1,5 @@ -// This helper remembers the size and position of your windows (and restores -// them in that place after app relaunch). +// This helper remembers the size and position of your windows, and restores +// them in that place after app relaunch. // Can be used for more than one window, just construct many // instances of it and give each different name. diff --git a/src/main.js b/src/main.js index 21356aee1..522e92e15 100644 --- a/src/main.js +++ b/src/main.js @@ -5,18 +5,28 @@ import path from "path"; import url from "url"; +import contextMenu from "electron-context-menu"; import { app, Menu, ipcMain } from "electron"; -import { devMenuTemplate } from "./menu/dev_menu_template"; -import { editMenuTemplate } from "./menu/edit_menu_template"; -import initExternalLinks from "./helpers/external_links_main"; +import appMenuTemplate from "./menu/app_menu_template"; +import editMenuTemplate from "./menu/edit_menu_template"; +import devMenuTemplate from "./menu/dev_menu_template"; +import externalLinks from "./helpers/external_links"; import createWindow from "./helpers/window"; // Special module holding environment variables which you declared // in config/env_xxx.json file. import env from "env"; +// Save userData in separate folders for each environment. +// Thanks to this you can use production and development versions of the app +// on same machine like those are two separate apps. +if (env.name !== "production") { + const userDataPath = app.getPath("userData"); + app.setPath("userData", `${userDataPath} (${env.name})`); +} + const setApplicationMenu = () => { - const menus = [editMenuTemplate]; + const menus = [appMenuTemplate, editMenuTemplate]; if (env.name !== "production") { menus.push(devMenuTemplate); } @@ -30,18 +40,12 @@ const initIpc = () => { }); }; -// Save userData in separate folders for each environment. -// Thanks to this you can use production and development versions of the app -// on same machine like those are two separate apps. -if (env.name !== "production") { - const userDataPath = app.getPath("userData"); - app.setPath("userData", `${userDataPath} (${env.name})`); -} +contextMenu(); +externalLinks(); app.on("ready", () => { setApplicationMenu(); initIpc(); - initExternalLinks(); const mainWindow = createWindow("main", { width: 1000, diff --git a/src/menu/app_menu_template.js b/src/menu/app_menu_template.js new file mode 100644 index 000000000..9c0da631d --- /dev/null +++ b/src/menu/app_menu_template.js @@ -0,0 +1,14 @@ +import { app } from "electron"; + +export default { + label: "App", + submenu: [ + { + label: "Quit", + accelerator: "CmdOrCtrl+Q", + click: () => { + app.quit(); + } + } + ] +}; diff --git a/src/menu/dev_menu_template.js b/src/menu/dev_menu_template.js index 1bc1b7557..7f730591b 100644 --- a/src/menu/dev_menu_template.js +++ b/src/menu/dev_menu_template.js @@ -1,6 +1,6 @@ -import { app, BrowserWindow } from "electron"; +import { BrowserWindow } from "electron"; -export const devMenuTemplate = { +export default { label: "Development", submenu: [ { @@ -16,13 +16,6 @@ export const devMenuTemplate = { click: () => { BrowserWindow.getFocusedWindow().toggleDevTools(); } - }, - { - label: "Quit", - accelerator: "CmdOrCtrl+Q", - click: () => { - app.quit(); - } } ] }; diff --git a/src/menu/edit_menu_template.js b/src/menu/edit_menu_template.js index 5a5e1f5e7..89d2d1cac 100644 --- a/src/menu/edit_menu_template.js +++ b/src/menu/edit_menu_template.js @@ -1,4 +1,4 @@ -export const editMenuTemplate = { +export default { label: "Edit", submenu: [ { label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" },