diff options
Diffstat (limited to 'ext/bg/js/settings-popup-preview.js')
-rw-r--r-- | ext/bg/js/settings-popup-preview.js | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/ext/bg/js/settings-popup-preview.js b/ext/bg/js/settings-popup-preview.js deleted file mode 100644 index 49409968..00000000 --- a/ext/bg/js/settings-popup-preview.js +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (C) 2019 Alex Yatskov <alex@foosoft.net> - * Author: Alex Yatskov <alex@foosoft.net> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - - -class SettingsPopupPreview { - constructor() { - this.frontend = null; - this.apiOptionsGetOld = apiOptionsGet; - this.popupInjectOuterStylesheetOld = Popup.injectOuterStylesheet; - this.popupShown = false; - this.themeChangeTimeout = null; - } - - static create() { - const instance = new SettingsPopupPreview(); - instance.prepare(); - return instance; - } - - async prepare() { - // Setup events - window.addEventListener('resize', (e) => this.onWindowResize(e), false); - window.addEventListener('message', (e) => this.onMessage(e), false); - - const themeDarkCheckbox = document.querySelector('#theme-dark-checkbox'); - if (themeDarkCheckbox !== null) { - themeDarkCheckbox.addEventListener('change', () => this.onThemeDarkCheckboxChanged(themeDarkCheckbox), false); - } - - // Overwrite API functions - window.apiOptionsGet = (...args) => this.apiOptionsGet(...args); - - // Overwrite frontend - this.frontend = Frontend.create(); - window.yomichan_frontend = this.frontend; - - this.frontend.setEnabled = function () {}; - this.frontend.searchClear = function () {}; - - this.frontend.popup.childrenSupported = false; - this.frontend.popup.interactive = false; - - await this.frontend.isPrepared(); - - // Overwrite popup - Popup.injectOuterStylesheet = (...args) => this.popupInjectOuterStylesheet(...args); - - // Update search - this.updateSearch(); - } - - async apiOptionsGet(...args) { - const options = await this.apiOptionsGetOld(...args); - options.general.enable = true; - options.general.debugInfo = false; - options.general.popupWidth = 400; - options.general.popupHeight = 250; - options.general.popupHorizontalOffset = 0; - options.general.popupVerticalOffset = 10; - options.general.popupHorizontalOffset2 = 10; - options.general.popupVerticalOffset2 = 0; - options.general.popupHorizontalTextPosition = 'below'; - options.general.popupVerticalTextPosition = 'before'; - options.scanning.selectText = false; - return options; - } - - popupInjectOuterStylesheet(...args) { - // This simulates the stylesheet priorities when injecting using the web extension API. - const result = this.popupInjectOuterStylesheetOld(...args); - - const outerStylesheet = Popup.outerStylesheet; - const node = document.querySelector('#client-css'); - if (node !== null && outerStylesheet !== null) { - node.parentNode.insertBefore(outerStylesheet, node); - } - - return result; - } - - onWindowResize() { - if (this.frontend === null) { return; } - const textSource = this.frontend.textSourceLast; - if (textSource === null) { return; } - - const elementRect = textSource.getRect(); - const writingMode = textSource.getWritingMode(); - this.frontend.popup.showContent(elementRect, writingMode); - } - - onMessage(e) { - const {action, params} = e.data; - const handlers = SettingsPopupPreview.messageHandlers; - if (hasOwn(handlers, action)) { - const handler = handlers[action]; - handler(this, params); - } - } - - onThemeDarkCheckboxChanged(node) { - document.documentElement.classList.toggle('dark', node.checked); - if (this.themeChangeTimeout !== null) { - clearTimeout(this.themeChangeTimeout); - } - this.themeChangeTimeout = setTimeout(() => { - this.themeChangeTimeout = null; - this.frontend.popup.updateTheme(); - }, 300); - } - - setText(text) { - const exampleText = document.querySelector('#example-text'); - if (exampleText === null) { return; } - - exampleText.textContent = text; - this.updateSearch(); - } - - setInfoVisible(visible) { - const node = document.querySelector('.placeholder-info'); - if (node === null) { return; } - - node.classList.toggle('placeholder-info-visible', visible); - } - - setCustomCss(css) { - if (this.frontend === null) { return; } - this.frontend.popup.setCustomCss(css); - } - - setCustomOuterCss(css) { - if (this.frontend === null) { return; } - this.frontend.popup.setCustomOuterCss(css, true); - } - - async updateSearch() { - const exampleText = document.querySelector('#example-text'); - if (exampleText === null) { return; } - - const textNode = exampleText.firstChild; - if (textNode === null) { return; } - - const range = document.createRange(); - range.selectNode(textNode); - const source = new TextSourceRange(range, range.toString(), null); - - try { - await this.frontend.searchSource(source, 'script'); - } finally { - source.cleanup(); - } - await this.frontend.lastShowPromise; - - if (this.frontend.popup.isVisible()) { - this.popupShown = true; - } - - this.setInfoVisible(!this.popupShown); - } -} - -SettingsPopupPreview.messageHandlers = { - setText: (self, {text}) => self.setText(text), - setCustomCss: (self, {css}) => self.setCustomCss(css), - setCustomOuterCss: (self, {css}) => self.setCustomOuterCss(css) -}; - -SettingsPopupPreview.instance = SettingsPopupPreview.create(); - - - |