/* * view-scale * (c) 2020 SP12893678 (https://github.com/SP12893678) * under the MIT license */ 'use strict'; const electron = require('electron'); const { createElement } = require('../../pkg/helpers.js'); module.exports = { id: 'e71ce1e0-024c-435e-a25e-7dd50448d1df', tags: ['extension'], name: 'view-scale', desc: 'scale the notion view', version: '1.0.0', author: 'SP12893678', options: [ { key: 'showUI', label: 'show scale ui', type: 'toggle', value: true, }, { key: 'canMouseWheel', label: 'use mouse wheel to scale', type: 'toggle', value: true, }, { key: 'canHotkey', label: 'use keyboard hotkey to scale', type: 'toggle', value: true, }, { key: 'offset', label: 'set scale plus and minus offset', type: 'input', value: 10, }, { key: 'zoom', label: 'set scale default value', type: 'input', value: 100, } ], hacks: { 'renderer/preload.js'(store, __exports) { document.addEventListener('readystatechange', (event) => { if (document.readyState !== 'complete') return false; const attempt_interval = setInterval(enhance, 500); function enhance() { if (!document.querySelector('.notion-frame')) return; if (!document.querySelector('.notion-topbar-actions')) return; clearInterval(attempt_interval); electron.webFrame.setZoomFactor(store().zoom / 100) let zoom = store().zoom / 100 let offset = store().offset / 100 let minZoom = 0.5 let maxZoom = 2 const $topBarActionShareMenu = document.querySelector('.notion-topbar-share-menu'); const $scaleSet = createElement('
'); const $scalePlusButton = createElement('
'); const $scaleView = createElement('
100%
'); const $scaleMinusButton = createElement('
'); if(store().showUI){ $scalePlusButton.addEventListener('click',()=>{ zoomPlus() if(store().showUI) changeScaleViewUIValue() }) $scaleMinusButton.addEventListener('click',()=>{ zoomMinus() if(store().showUI) changeScaleViewUIValue() }) $scaleSet.append($scalePlusButton) $scaleSet.append($scaleView) $scaleSet.append($scaleMinusButton) $topBarActionShareMenu.before($scaleSet); changeScaleViewUIValue() } if(store().canMouseWheel){ document.defaultView.addEventListener('wheel', (event)=>{ if (event.ctrlKey && event.deltaY < 0){ zoomPlus() if(store().showUI) changeScaleViewUIValue() } if (event.ctrlKey && event.deltaY > 0){ zoomMinus() if(store().showUI) changeScaleViewUIValue() } }); } if(store().canHotkey){ document.defaultView.addEventListener('keydown', (event) => { if (event.key == '+' && event.ctrlKey){ zoomPlus() if(store().showUI) changeScaleViewUIValue() } if (event.key == '-' && event.ctrlKey){ zoomMinus() if(store().showUI) changeScaleViewUIValue() } }) } const observer = new MutationObserver((list, observer) => { electron.webFrame.setZoomFactor(zoom) if(store().showUI) changeScaleViewUIValue() }); observer.observe(document.querySelector('.notion-frame'), { childList: true }); function zoomPlus() { if(zoom + offset > maxZoom) return zoom += offset electron.webFrame.setZoomFactor(zoom) } function zoomMinus() { if(zoom + offset < minZoom) return zoom -= offset electron.webFrame.setZoomFactor(zoom) } function changeScaleViewUIValue() { $scaleView.innerHTML = Math.round(zoom * 100) + "%" } } }) }, }, };