From c26c4ae0cb2e8516d79e827e7f76a5974fffdae4 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 16 Aug 2020 16:16:18 -0400 Subject: [PATCH] Frontend initialization refactor (#737) * Fix incorrect popup depth reassignment * Rename variable * Rename property * Use explicit parameter values * Refactor setupNestedPopups * Refactor frontend initialization --- ext/bg/js/search.js | 2 +- ext/bg/js/settings/popup-preview-frame.js | 17 ++++++++------- ext/fg/js/content-script-main.js | 11 +++++++--- ext/fg/js/float.js | 13 ++++++------ ext/fg/js/frontend.js | 25 +++++++++++------------ ext/mixed/js/display.js | 13 ++++++++++-- 6 files changed, 48 insertions(+), 33 deletions(-) diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 0a0699a9..2aa6d249 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -330,7 +330,7 @@ class DisplaySearch extends Display { try { await this.setupNestedPopups({ depth: 1, - proxy: false, + useProxyPopup: false, isSearchPage: true }); } catch (e) { diff --git a/ext/bg/js/settings/popup-preview-frame.js b/ext/bg/js/settings/popup-preview-frame.js index 98630503..eb174917 100644 --- a/ext/bg/js/settings/popup-preview-frame.js +++ b/ext/bg/js/settings/popup-preview-frame.js @@ -55,13 +55,16 @@ class PopupPreviewFrame { api.optionsGet = this._apiOptionsGet.bind(this); // Overwrite frontend - this._frontend = new Frontend( - this._frameId, - this._popupFactory, - { - allowRootFramePopupProxy: false - } - ); + this._frontend = new Frontend({ + frameId: this._frameId, + popupFactory: this._popupFactory, + depth: 0, + parentPopupId: null, + parentFrameId: null, + useProxyPopup: false, + isSearchPage: false, + allowRootFramePopupProxy: false + }); this._frontendGetOptionsContextOld = this._frontend.getOptionsContext.bind(this._frontend); this._frontend.getOptionsContext = this._getOptionsContext.bind(this); await this._frontend.prepare(); diff --git a/ext/fg/js/content-script-main.js b/ext/fg/js/content-script-main.js index 4db41cb9..84e78392 100644 --- a/ext/fg/js/content-script-main.js +++ b/ext/fg/js/content-script-main.js @@ -34,11 +34,16 @@ const popupFactory = new PopupFactory(frameId); popupFactory.prepare(); - const frontend = new Frontend( + const frontend = new Frontend({ frameId, popupFactory, - {} - ); + depth: 0, + parentPopupId: null, + parentFrameId: null, + useProxyPopup: false, + isSearchPage: false, + allowRootFramePopupProxy: true + }); await frontend.prepare(); yomichan.ready(); diff --git a/ext/fg/js/float.js b/ext/fg/js/float.js index 8a17a437..8526c9c1 100644 --- a/ext/fg/js/float.js +++ b/ext/fg/js/float.js @@ -105,8 +105,8 @@ class DisplayFloat extends Display { await this.updateOptions(); if (childrenSupported && !this._nestedPopupsPrepared) { - const {depth, url} = optionsContext; - this._prepareNestedPopups(popupId, depth, frameId, url); + const {depth} = optionsContext; + this._prepareNestedPopups(depth + 1, popupId, frameId); this._nestedPopupsPrepared = true; } @@ -168,13 +168,13 @@ class DisplayFloat extends Display { body.style.fontSize = `${scale}em`; } - async _prepareNestedPopups(id, depth, parentFrameId, url) { + async _prepareNestedPopups(depth, parentPopupId, parentFrameId) { let complete = false; const onOptionsUpdated = async () => { const optionsContext = this.getOptionsContext(); const options = await api.optionsGet(optionsContext); - const maxPopupDepthExceeded = !(typeof depth === 'number' && depth < options.scanning.popupNestingMaxDepth); + const maxPopupDepthExceeded = !(typeof depth === 'number' && depth <= options.scanning.popupNestingMaxDepth); if (maxPopupDepthExceeded || complete) { return; } complete = true; @@ -182,11 +182,10 @@ class DisplayFloat extends Display { try { await this.setupNestedPopups({ - id, depth, + parentPopupId, parentFrameId, - url, - proxy: true + useProxyPopup: true }); } catch (e) { yomichan.logError(e); diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js index 21fbc718..36b1898b 100644 --- a/ext/fg/js/frontend.js +++ b/ext/fg/js/frontend.js @@ -25,7 +25,16 @@ */ class Frontend { - constructor(frameId, popupFactory, frontendInitializationData) { + constructor({ + frameId, + popupFactory, + depth, + parentPopupId, + parentFrameId, + useProxyPopup, + isSearchPage, + allowRootFramePopupProxy + }) { this._id = yomichan.generateId(16); this._popup = null; this._disabledOverride = false; @@ -43,16 +52,7 @@ class Frontend { search: this._search.bind(this), documentUtil: this._documentUtil }); - - const { - depth=0, - id: proxyPopupId, - parentFrameId, - proxy: useProxyPopup=false, - isSearchPage=false, - allowRootFramePopupProxy=true - } = frontendInitializationData; - this._proxyPopupId = proxyPopupId; + this._parentPopupId = parentPopupId; this._parentFrameId = parentFrameId; this._useProxyPopup = useProxyPopup; this._isSearchPage = isSearchPage; @@ -320,7 +320,6 @@ class Frontend { this._textScanner.clearSelection(true); this._popup = popup; - this._depth = popup.depth; } async _getDefaultPopup() { @@ -328,7 +327,7 @@ class Frontend { } async _getProxyPopup() { - const popup = new PopupProxy(null, this._depth + 1, this._proxyPopupId, this._parentFrameId, this._frameId); + const popup = new PopupProxy(null, this._depth, this._parentPopupId, this._parentFrameId, this._frameId); await popup.prepare(); return popup; } diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 08ececc7..1cc08bc7 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -348,7 +348,7 @@ class Display extends EventDispatcher { } } - async setupNestedPopups(frontendInitializationData) { + async setupNestedPopups({depth, parentPopupId, parentFrameId, useProxyPopup}) { await dynamicLoader.loadScripts([ '/mixed/js/text-scanner.js', '/mixed/js/frame-client.js', @@ -364,7 +364,16 @@ class Display extends EventDispatcher { const popupFactory = new PopupFactory(frameId); popupFactory.prepare(); - const frontend = new Frontend(frameId, popupFactory, frontendInitializationData); + const frontend = new Frontend({ + frameId, + popupFactory, + depth, + parentPopupId, + parentFrameId, + useProxyPopup, + isSearchPage: false, + allowRootFramePopupProxy: true + }); await frontend.prepare(); }