From 8c9389e07d21c3f71184f453c0db11ca7cfb8121 Mon Sep 17 00:00:00 2001 From: siikamiika Date: Fri, 10 Apr 2020 01:42:02 +0300 Subject: listen to optionsUpdated in search-frontend.js --- ext/bg/js/search-frontend.js | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/search-frontend.js b/ext/bg/js/search-frontend.js index 9cc1436f..48326caf 100644 --- a/ext/bg/js/search-frontend.js +++ b/ext/bg/js/search-frontend.js @@ -19,18 +19,7 @@ * apiOptionsGet */ -async function searchFrontendSetup() { - await yomichan.prepare(); - - const optionsContext = { - depth: 0, - url: window.location.href - }; - const options = await apiOptionsGet(optionsContext); - if (!options.scanning.enableOnSearchPage) { return; } - - window.frontendInitializationData = {depth: 1, proxy: false}; - +function injectSearchFrontend() { const scriptSrcs = [ '/mixed/js/text-scanner.js', '/fg/js/frontend-api-receiver.js', @@ -62,4 +51,26 @@ async function searchFrontendSetup() { } } -searchFrontendSetup(); +async function main() { + await yomichan.prepare(); + + const applyOptions = async () => { + const optionsContext = { + depth: 0, + url: window.location.href + }; + const options = await apiOptionsGet(optionsContext); + if (!options.scanning.enableOnSearchPage) { return; } + + window.frontendInitializationData = {depth: 1, proxy: false}; + injectSearchFrontend(); + + yomichan.off('optionsUpdated', applyOptions); + }; + + yomichan.on('optionsUpdated', applyOptions); + + await applyOptions(); +} + +main(); -- cgit v1.2.3 From 61a96e327a815bda7fea4c5d2096dead901fdf33 Mon Sep 17 00:00:00 2001 From: siikamiika Date: Fri, 10 Apr 2020 02:15:24 +0300 Subject: prevent injecting frontend multiple times --- ext/bg/js/search-frontend.js | 5 ++++- ext/fg/js/popup-nested.js | 11 ++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/search-frontend.js b/ext/bg/js/search-frontend.js index 48326caf..18cb6060 100644 --- a/ext/bg/js/search-frontend.js +++ b/ext/bg/js/search-frontend.js @@ -54,13 +54,16 @@ function injectSearchFrontend() { async function main() { await yomichan.prepare(); + let optionsApplied = false; + const applyOptions = async () => { const optionsContext = { depth: 0, url: window.location.href }; const options = await apiOptionsGet(optionsContext); - if (!options.scanning.enableOnSearchPage) { return; } + if (!options.scanning.enableOnSearchPage || optionsApplied) { return; } + optionsApplied = true; window.frontendInitializationData = {depth: 1, proxy: false}; injectSearchFrontend(); diff --git a/ext/fg/js/popup-nested.js b/ext/fg/js/popup-nested.js index f193aa36..3ecdf50c 100644 --- a/ext/fg/js/popup-nested.js +++ b/ext/fg/js/popup-nested.js @@ -44,15 +44,24 @@ async function popupNestedInitialize(id, depth, parentFrameId, url) { } popupNestedInitialized = true; + let optionsApplied = false; + const applyOptions = async () => { const optionsContext = {depth, url}; const options = await apiOptionsGet(optionsContext); const popupNestingMaxDepth = options.scanning.popupNestingMaxDepth; - if (!(typeof popupNestingMaxDepth === 'number' && typeof depth === 'number' && depth < popupNestingMaxDepth)) { + const maxPopupDepthExceeded = !( + typeof popupNestingMaxDepth === 'number' && + typeof depth === 'number' && + depth < popupNestingMaxDepth + ); + if (maxPopupDepthExceeded || optionsApplied) { return; } + optionsApplied = true; + window.frontendInitializationData = {id, depth, parentFrameId, url, proxy: true}; injectPopupNested(); -- cgit v1.2.3 From 92109bb5d25db99033b0bb9f7f3806883f79218d Mon Sep 17 00:00:00 2001 From: siikamiika Date: Fri, 10 Apr 2020 03:55:25 +0300 Subject: allow disabling scan on search page live --- ext/bg/js/search-frontend.js | 2 +- ext/fg/js/frontend-initialize.js | 15 +++++++++++++-- ext/fg/js/frontend.js | 18 ++++++++++++++++-- 3 files changed, 30 insertions(+), 5 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/search-frontend.js b/ext/bg/js/search-frontend.js index 18cb6060..e534e771 100644 --- a/ext/bg/js/search-frontend.js +++ b/ext/bg/js/search-frontend.js @@ -65,7 +65,7 @@ async function main() { if (!options.scanning.enableOnSearchPage || optionsApplied) { return; } optionsApplied = true; - window.frontendInitializationData = {depth: 1, proxy: false}; + window.frontendInitializationData = {depth: 1, proxy: false, isSearchPage: true}; injectSearchFrontend(); yomichan.off('optionsUpdated', applyOptions); diff --git a/ext/fg/js/frontend-initialize.js b/ext/fg/js/frontend-initialize.js index 5af7fdf0..3fe5ac5b 100644 --- a/ext/fg/js/frontend-initialize.js +++ b/ext/fg/js/frontend-initialize.js @@ -28,7 +28,18 @@ async function main() { await yomichan.prepare(); const data = window.frontendInitializationData || {}; - const {id, depth=0, parentFrameId, url, proxy=false} = data; + const {id, depth=0, parentFrameId, url, proxy=false, isSearchPage=false} = data; + + const initEventDispatcher = new EventDispatcher(); + + yomichan.on('optionsUpdated', async () => { + const optionsContext = {depth: isSearchPage ? 0 : depth, url}; + const options = await apiOptionsGet(optionsContext); + if (isSearchPage) { + const disabled = !options.scanning.enableOnSearchPage; + initEventDispatcher.trigger('setDisabledOverride', {disabled}); + } + }); const optionsContext = {depth, url}; const options = await apiOptionsGet(optionsContext); @@ -65,7 +76,7 @@ async function main() { popup = popupHost.getOrCreatePopup(null, null, depth); } - const frontend = new Frontend(popup); + const frontend = new Frontend(popup, initEventDispatcher); await frontend.prepare(); } diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js index a6b24c76..a6df4b4c 100644 --- a/ext/fg/js/frontend.js +++ b/ext/fg/js/frontend.js @@ -26,15 +26,19 @@ */ class Frontend extends TextScanner { - constructor(popup) { + constructor(popup, initEventDispatcher) { super( window, popup.isProxy() ? [] : [popup.getContainer()], [(x, y) => this.popup.containsPoint(x, y)], - () => this.popup.depth <= this.options.scanning.popupNestingMaxDepth + () => this.popup.depth <= this.options.scanning.popupNestingMaxDepth && !this._disabledOverride ); this.popup = popup; + this.initEventDispatcher = initEventDispatcher; + + this._disabledOverride = false; + this.options = null; this.optionsContext = { @@ -73,6 +77,8 @@ class Frontend extends TextScanner { window.visualViewport.addEventListener('resize', this.onVisualViewportResize.bind(this)); } + this.initEventDispatcher.on('setDisabledOverride', this.onSetDisabledOverride.bind(this)); + yomichan.on('orphaned', this.onOrphaned.bind(this)); yomichan.on('optionsUpdated', this.updateOptions.bind(this)); yomichan.on('zoomChanged', this.onZoomChanged.bind(this)); @@ -228,6 +234,14 @@ class Frontend extends TextScanner { super.onSearchClear(changeFocus); } + onSetDisabledOverride({disabled}) { + this._disabledOverride = disabled; + // other cases handed by regular options update + if (disabled && this.enabled) { + this.setEnabled(false); + } + } + getOptionsContext() { this.optionsContext.url = this.popup.url; return this.optionsContext; -- cgit v1.2.3 From ba97e72c8bde6d7c5467e60645c637a0836b9a31 Mon Sep 17 00:00:00 2001 From: siikamiika Date: Sat, 11 Apr 2020 16:41:03 +0300 Subject: fix ignoreElements in QueryParser --- ext/bg/js/search-query-parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/search-query-parser.js b/ext/bg/js/search-query-parser.js index 01a0ace5..f90c68ee 100644 --- a/ext/bg/js/search-query-parser.js +++ b/ext/bg/js/search-query-parser.js @@ -27,7 +27,7 @@ class QueryParser extends TextScanner { constructor({getOptionsContext, setContent, setSpinnerVisible}) { - super(document.querySelector('#query-parser-content'), [], []); + super(document.querySelector('#query-parser-content'), () => [], []); this.getOptionsContext = getOptionsContext; this.setContent = setContent; -- cgit v1.2.3