/** * notion-enhancer: theming * (c) 2021 dragonwocky (https://dragonwocky.me/) * (https://notion-enhancer.github.io/) under the MIT license */ 'use strict'; export default async function ({ web, electron }, db) { const newTabHotkey = await db.get(['new_tab']), closeTabHotkey = await db.get(['close_tab']), restoreTabHotkey = await db.get(['restore_tab']), selectTabModifier = await db.get(['select_modifier']); web.addHotkeyListener(newTabHotkey, () => { electron.sendMessageToHost('new-tab'); console.log('new-tab'); }); web.addHotkeyListener(restoreTabHotkey, () => { electron.sendMessageToHost('restore-tab'); console.log('restore-tab'); }); web.addHotkeyListener(closeTabHotkey, () => electron.sendMessageToHost('close-tab')); for (let i = 1; i < 10; i++) { web.addHotkeyListener([selectTabModifier, i.toString()], () => { electron.sendMessageToHost('select-tab', i); }); } const breadcrumbSelector = '.notion-topbar > div > :nth-child(2) > .notion-focusable:last-child', imgIconSelector = `${breadcrumbSelector} .notion-record-icon img`, nativeIconSelector = `${breadcrumbSelector} .notion-record-icon [role="image"]`, titleSelector = `${breadcrumbSelector} > :not(.notion-record-icon)`, viewSelector = '.notion-collection-view-select'; let title = '', icon = ''; const notionSetWindowTitle = __electronApi.setWindowTitle, getIcon = () => { const $imgIcon = document.querySelector(imgIconSelector), $nativeIcon = document.querySelector(nativeIconSelector); if ($imgIcon) { return $imgIcon.style.background.replace( /url\("\/images/, 'url("notion://www.notion.so/images' ); } if ($nativeIcon) return $nativeIcon.ariaLabel; return ''; }, updateTitle = (newTitle = title) => { if (!newTitle) return; title = newTitle; icon = getIcon(); electron.sendMessageToHost('set-tab-title', title); electron.sendMessageToHost('set-tab-icon', icon); notionSetWindowTitle(title); }; __electronApi.setWindowTitle = (newTitle) => updateTitle(newTitle); document.addEventListener('focus', updateTitle); electron.onMessage('trigger-title-update', () => updateTitle()); await web.whenReady([titleSelector]); const $title = document.querySelector(titleSelector), $view = document.querySelector(viewSelector); if (!title && $title) { if ($view) { updateTitle(`${$title.innerText} | ${$view.innerText}`); } else updateTitle($title.innerText); } }