From 4ea27e604f1a013cdc92f3ddf9765be13d32e072 Mon Sep 17 00:00:00 2001 From: zadam Date: Tue, 7 May 2019 21:34:01 +0200 Subject: [PATCH] context menu on tab and "close all except for this tab" --- libraries/chrome-tabs/chrome-tabs.js | 8 ++++++++ .../javascripts/services/context_menu.js | 4 ++++ src/public/javascripts/services/note_detail.js | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/libraries/chrome-tabs/chrome-tabs.js b/libraries/chrome-tabs/chrome-tabs.js index 011967e6a..eca713115 100644 --- a/libraries/chrome-tabs/chrome-tabs.js +++ b/libraries/chrome-tabs/chrome-tabs.js @@ -277,6 +277,14 @@ this.setupDraggabilly() } + removeAllTabsExceptForThis(remainingTabEl) { + for (const tabEl of this.tabEls) { + if (remainingTabEl !== tabEl) { + this.removeTab(tabEl); + } + } + } + updateTab(tabEl, tabProperties) { tabEl.querySelector('.chrome-tab-title').textContent = tabProperties.title diff --git a/src/public/javascripts/services/context_menu.js b/src/public/javascripts/services/context_menu.js index 74f31d6f4..b4b81ec6f 100644 --- a/src/public/javascripts/services/context_menu.js +++ b/src/public/javascripts/services/context_menu.js @@ -2,6 +2,10 @@ const $contextMenuContainer = $("#context-menu-container"); let dateContextMenuOpenedMs = 0; +/** + * @param event - originating click event (used to get coordinates to display menu at position) + * @param {object} contextMenu - needs to have getContextMenuItems() and selectContextMenuItem(e, cmd) + */ async function initContextMenu(event, contextMenu) { event.stopPropagation(); diff --git a/src/public/javascripts/services/note_detail.js b/src/public/javascripts/services/note_detail.js index f1f1a31a2..d4ac2a856 100644 --- a/src/public/javascripts/services/note_detail.js +++ b/src/public/javascripts/services/note_detail.js @@ -8,6 +8,7 @@ import NoteFull from "../entities/note_full.js"; import bundleService from "./bundle.js"; import utils from "./utils.js"; import importDialog from "../dialogs/import.js"; +import contextMenuService from "./context_menu.js"; const chromeTabsEl = document.querySelector('.chrome-tabs'); const chromeTabs = new ChromeTabs(); @@ -263,6 +264,23 @@ chromeTabsEl.addEventListener('tabRemove', ({ detail }) => { console.log(`Removed tab ${tabId}`); }); +$(chromeTabsEl).on('contextmenu', '.chrome-tab', e => { + const tab = $(e.target).closest(".chrome-tab"); + + contextMenuService.initContextMenu(e, { + getContextMenuItems: () => { + return [ + {title: "Close all tabs except for this", cmd: "removeAllTabsExceptForThis", uiIcon: "empty"} + ]; + }, + selectContextMenuItem: (e, cmd) => { + if (cmd === 'removeAllTabsExceptForThis') { + chromeTabs.removeAllTabsExceptForThis(tab[0]); + } + } + }); +}); + if (utils.isElectron()) { utils.bindShortcut('ctrl+w', () => { if (noteContexts.length === 1) {