diff --git a/repo/core/client.js b/repo/core/client.js index 3315093..7edcc75 100644 --- a/repo/core/client.js +++ b/repo/core/client.js @@ -16,18 +16,41 @@ module.exports = (store, __exports) => { )}/app/helpers/notionIpc.js`), { toKeyEvent } = require('keyboardevent-from-electron-accelerator'); - // additional hotkeys document.defaultView.addEventListener('keyup', (event) => { + // additional hotkeys if (event.code === 'F5') location.reload(); - if ( - !(store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled - ) { - // open menu on hotkey toggle - const hotkey = toKeyEvent(store().menu_toggle); + // open menu on hotkey toggle + const hotkey = toKeyEvent(store().menu_toggle); + let triggered = true; + for (let prop in hotkey) + if (hotkey[prop] !== event[prop]) triggered = false; + if (triggered) electron.ipcRenderer.send('enhancer:open-menu'); + if ((store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled) { + // switch between tabs via key modifier + const select_tab_modifier = toKeyEvent( + store('e1692c29-475e-437b-b7ff-3eee872e1a42').select_modifier + ); let triggered = true; - for (let prop in hotkey) - if (hotkey[prop] !== event[prop]) triggered = false; - if (triggered) electron.ipcRenderer.send('enhancer:open-menu'); + for (let prop in select_tab_modifier) + if (select_tab_modifier[prop] !== event[prop]) triggered = false; + if (triggered && [1, 2, 3, 4, 5, 6, 7, 8, 9].includes(+event.key)) + electron.ipcRenderer.sendToHost('enhancer:select-tab', event.key); + // create/close tab keybindings + const new_tab_keybinding = toKeyEvent( + store('e1692c29-475e-437b-b7ff-3eee872e1a42').new_tab + ); + triggered = true; + for (let prop in new_tab_keybinding) + if (new_tab_keybinding[prop] !== event[prop]) triggered = false; + if (triggered) electron.ipcRenderer.sendToHost('enhancer:new-tab'); + const close_tab_keybinding = toKeyEvent( + store('e1692c29-475e-437b-b7ff-3eee872e1a42').close_tab + ); + triggered = true; + for (let prop in close_tab_keybinding) + if (close_tab_keybinding[prop] !== event[prop]) triggered = false; + console.log(triggered, event); + if (triggered) electron.ipcRenderer.sendToHost('enhancer:close-tab'); } }); diff --git a/repo/core/create.js b/repo/core/create.js index 58437c8..fb37b5a 100644 --- a/repo/core/create.js +++ b/repo/core/create.js @@ -52,18 +52,6 @@ module.exports = (store, __exports) => { }, ...rect, }); - electron.session - .fromPartition('persist:notion') - .webRequest.onHeadersReceived((details, callback) => { - callback({ - responseHeaders: { - ...details.responseHeaders, - 'Content-Security-Policy': [ - "script-src 'self' 'unsafe-inline' 'unsafe-eval' enhancement: https://gist.github.com https://apis.google.com https://api.amplitude.com https://widget.intercom.io https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com https://analytics.pgncs.notion.so https://checkout.stripe.com https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com https://cdn.syndication.twimg.com; connect-src 'self' https://msgstore.www.notion.so wss://msgstore.www.notion.so https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io; font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com; img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com; style-src 'self' 'unsafe-inline' enhancement: https://cdnjs.cloudflare.com https://github.githubassets.com https://platform.twitter.com https://ton.twimg.com; frame-src https: http:; media-src https: http:", - ], - }, - }); - }); window.once('ready-to-show', function () { if ( !store().openhidden || diff --git a/repo/core/render.js b/repo/core/render.js index 4e40181..085ecc3 100644 --- a/repo/core/render.js +++ b/repo/core/render.js @@ -115,6 +115,33 @@ module.exports = (store, __exports) => { from[1].classList.remove('slideIn'); this.$dragging = null; }); + document.addEventListener('keyup', (event) => { + // switch between tabs via key modifier + const select_tab_modifier = toKeyEvent( + store('e1692c29-475e-437b-b7ff-3eee872e1a42').select_modifier + ); + let triggered = true; + for (let prop in select_tab_modifier) + if (select_tab_modifier[prop] !== event[prop]) triggered = false; + if (triggered && [1, 2, 3, 4, 5, 6, 7, 8, 9].includes(+event.key)) + this.selectTab(event.key); + // create/close tab keybindings + const new_tab_keybinding = toKeyEvent( + store('e1692c29-475e-437b-b7ff-3eee872e1a42').new_tab + ); + triggered = true; + for (let prop in new_tab_keybinding) + if (new_tab_keybinding[prop] !== event[prop]) triggered = false; + if (triggered) this.newTab(); + const close_tab_keybinding = toKeyEvent( + store('e1692c29-475e-437b-b7ff-3eee872e1a42').close_tab + ); + triggered = true; + for (let prop in close_tab_keybinding) + if (close_tab_keybinding[prop] !== event[prop]) triggered = false; + console.log(triggered, event); + if (triggered) this.closeTab(this.views.current.id); + }); } componentDidMount() { @@ -192,6 +219,7 @@ module.exports = (store, __exports) => { ? idToNotionURL(store().default_page) : this.views.current.$el().src ); + this.views.html[id].getWebContents().openDevTools(); } }); } @@ -228,24 +256,50 @@ module.exports = (store, __exports) => { } } } + selectTab(num) { + num = +num; + if (num == 9) { + document + .querySelector('#tabs') + .children[ + document.querySelector('#tabs').children.length - 2 + ].click(); + } else if ( + document.querySelector('#tabs').children[num - 1] && + document.querySelector('#tabs').children.length > num + ) { + document.querySelector('#tabs').children[num - 1].click(); + } + } communicateWithView(event) { - if (event.channel === 'enhancer:set-tab-theme') { - for (const style of event.args[0]) - document.body.style.setProperty(style[0], style[1]); - } - if ( - event.channel === 'enhancer:set-tab-title' && - this.views.tabs[event.target.id] - ) { - this.views.tabs[event.target.id].children[0].innerText = - event.args[0]; - const electronWindow = electron.remote.getCurrentWindow(); - if ( - event.target.id == this.views.current.id && - electronWindow.getTitle() !== event.args[0] - ) - electronWindow.setTitle(event.args[0]); + switch (event.channel) { + case 'enhancer:set-tab-theme': + for (const style of event.args[0]) + document.body.style.setProperty(style[0], style[1]); + break; + case 'enhancer:set-tab-title': + if (this.views.tabs[event.target.id]) { + this.views.tabs[event.target.id].children[0].innerText = + event.args[0]; + const electronWindow = electron.remote.getCurrentWindow(); + if ( + event.target.id == this.views.current.id && + electronWindow.getTitle() !== event.args[0] + ) + electronWindow.setTitle(event.args[0]); + } + break; + case 'enhancer:select-tab': + this.selectTab(event.args[0]); + break; + case 'enhancer:new-tab': + this.newTab(); + break; + case 'enhancer:close-tab': + if (event.target.id == this.views.current.id) + this.closeTab(+event.target.id); + break; } } startSearch(isPeekView) { diff --git a/repo/tabs/mod.js b/repo/tabs/mod.js index 1585c43..a738d00 100644 --- a/repo/tabs/mod.js +++ b/repo/tabs/mod.js @@ -16,4 +16,24 @@ module.exports = { desc: 'have multiple notion pages open in a single window.', version: '0.1.0', author: 'dragonwocky', + options: [ + { + key: 'select_modifier', + label: 'tab select modifier (key+1, +2, +3, ... +9):', + type: 'select', + value: ['Alt', 'Command', 'Control', 'Shift', 'Super'], + }, + { + key: 'new_tab', + label: 'new tab keybinding:', + type: 'input', + value: 'CommandOrControl+T', + }, + { + key: 'close_tab', + label: 'close tab keybinding:', + type: 'input', + value: 'CommandOrControl+W', + }, + ], };