From 44bde5c6765317294af317f7bbbdfa70d0d40b77 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 15 Dec 2019 20:48:52 -0500 Subject: [PATCH] Reorganize popup-only public functions --- ext/fg/js/popup-proxy-host.js | 2 +- ext/fg/js/popup.js | 94 ++++++++++++++++++----------------- 2 files changed, 49 insertions(+), 47 deletions(-) diff --git a/ext/fg/js/popup-proxy-host.js b/ext/fg/js/popup-proxy-host.js index ea343c19..bf6604e5 100644 --- a/ext/fg/js/popup-proxy-host.js +++ b/ext/fg/js/popup-proxy-host.js @@ -101,7 +101,7 @@ class PopupProxyHost { async _onApiShowContent(id, elementRect, writingMode, type, details) { const popup = this._getPopup(id); elementRect = PopupProxyHost._convertJsonRectToDOMRect(popup, elementRect); - if (!PopupProxyHost._popupCanShow(popup)) { return Promise.resolve(false); } + if (!PopupProxyHost._popupCanShow(popup)) { return; } return await popup.showContent(elementRect, writingMode, type, details); } diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index 8226a13a..9040d568 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -105,6 +105,54 @@ class Popup { } } + // Popup-only public functions + + isVisible() { + return this.isInjected && (this.visibleOverride !== null ? this.visibleOverride : this.visible); + } + + updateTheme() { + this.container.dataset.yomichanTheme = this.options.general.popupOuterTheme; + this.container.dataset.yomichanSiteColor = this.getSiteColor(); + } + + async setCustomOuterCss(css, injectDirectly) { + // Cannot repeatedly inject stylesheets using web extension APIs since there is no way to remove them. + if (this.stylesheetInjectedViaApi) { return; } + + if (injectDirectly || Popup.isOnExtensionPage()) { + Popup.injectOuterStylesheet(css); + } else { + if (!css) { return; } + try { + await apiInjectStylesheet(css); + this.stylesheetInjectedViaApi = true; + } catch (e) { + // NOP + } + } + } + + static injectOuterStylesheet(css) { + if (Popup.outerStylesheet === null) { + if (!css) { return; } + Popup.outerStylesheet = document.createElement('style'); + Popup.outerStylesheet.id = 'yomichan-popup-outer-stylesheet'; + } + + const outerStylesheet = Popup.outerStylesheet; + if (css) { + outerStylesheet.textContent = css; + + const par = document.head; + if (par && outerStylesheet.parentNode !== par) { + par.appendChild(outerStylesheet); + } + } else { + outerStylesheet.textContent = ''; + } + } + inject() { if (this.injectPromise === null) { this.injectPromise = this.createInjectPromise(); @@ -183,10 +231,6 @@ class Popup { } } - isVisible() { - return this.isInjected && (this.visibleOverride !== null ? this.visibleOverride : this.visible); - } - setVisible(visible) { this.visible = visible; this.updateVisibility(); @@ -212,11 +256,6 @@ class Popup { } } - updateTheme() { - this.container.dataset.yomichanTheme = this.options.general.popupOuterTheme; - this.container.dataset.yomichanSiteColor = this.getSiteColor(); - } - getSiteColor() { const color = [255, 255, 255]; Popup.addColor(color, Popup.getColorInfo(window.getComputedStyle(document.documentElement).backgroundColor)); @@ -225,23 +264,6 @@ class Popup { return dark ? 'dark' : 'light'; } - async setCustomOuterCss(css, injectDirectly) { - // Cannot repeatedly inject stylesheets using web extension APIs since there is no way to remove them. - if (this.stylesheetInjectedViaApi) { return; } - - if (injectDirectly || Popup.isOnExtensionPage()) { - Popup.injectOuterStylesheet(css); - } else { - if (!css) { return; } - try { - await apiInjectStylesheet(css); - this.stylesheetInjectedViaApi = true; - } catch (e) { - // NOP - } - } - } - invokeApi(action, params={}) { this.container.contentWindow.postMessage({action, params}, '*'); } @@ -400,26 +422,6 @@ class Popup { // NOP } } - - static injectOuterStylesheet(css) { - if (Popup.outerStylesheet === null) { - if (!css) { return; } - Popup.outerStylesheet = document.createElement('style'); - Popup.outerStylesheet.id = 'yomichan-popup-outer-stylesheet'; - } - - const outerStylesheet = Popup.outerStylesheet; - if (css) { - outerStylesheet.textContent = css; - - const par = document.head; - if (par && outerStylesheet.parentNode !== par) { - par.appendChild(outerStylesheet); - } - } else { - outerStylesheet.textContent = ''; - } - } } Popup.outerStylesheet = null;