From 2519f99f54412933beed8b2c753c76662099f8e0 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Fri, 20 Dec 2019 13:44:33 -0500 Subject: [PATCH] Update how orphan state is observed --- ext/fg/js/float.js | 9 ++++++++- ext/fg/js/frontend.js | 8 +++++++- ext/mixed/js/api.js | 2 +- ext/mixed/js/core.js | 8 ++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ext/fg/js/float.js b/ext/fg/js/float.js index 74bc58b0..8c7de906 100644 --- a/ext/fg/js/float.js +++ b/ext/fg/js/float.js @@ -27,17 +27,24 @@ class DisplayFloat extends Display { url: window.location.href }; + this._orphaned = false; + + yomichan.on('orphaned', () => this.onOrphaned()); window.addEventListener('message', (e) => this.onMessage(e), false); } onError(error) { - if (window.yomichan_orphaned) { + if (this._orphaned) { this.setContentOrphaned(); } else { logError(error, true); } } + onOrphaned() { + this._orphaned = true; + } + onSearchClear() { window.parent.postMessage('popupClose', '*'); } diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js index 1d63d928..6b41138f 100644 --- a/ext/fg/js/frontend.js +++ b/ext/fg/js/frontend.js @@ -37,6 +37,7 @@ class Frontend extends TextScanner { this.isPreparedPromiseResolve = null; this.isPreparedPromise = new Promise((resolve) => { this.isPreparedPromiseResolve = resolve; }); + this._orphaned = true; this._lastShowPromise = Promise.resolve(); } @@ -54,6 +55,7 @@ class Frontend extends TextScanner { try { await this.updateOptions(); + yomichan.on('orphaned', () => this.onOrphaned()); yomichan.on('optionsUpdate', () => this.updateOptions()); chrome.runtime.onMessage.addListener(this.onRuntimeMessage.bind(this)); this.isPreparedPromiseResolve(); @@ -93,6 +95,10 @@ class Frontend extends TextScanner { return false; } + onOrphaned() { + this._orphaned = true; + } + getMouseEventListeners() { return [ ...super.getMouseEventListeners(), @@ -122,7 +128,7 @@ class Frontend extends TextScanner { } } } catch (e) { - if (window.yomichan_orphaned) { + if (this._orphaned) { if (textSource !== null && this.options.scanning.modifier !== 'none') { this._lastShowPromise = this.popup.showContent( textSource.getRect(), diff --git a/ext/mixed/js/api.js b/ext/mixed/js/api.js index ae74b8dc..18b360a3 100644 --- a/ext/mixed/js/api.js +++ b/ext/mixed/js/api.js @@ -115,8 +115,8 @@ function _apiInvoke(action, params={}) { } }); } catch (e) { - window.yomichan_orphaned = true; reject(e); + yomichan.triggerOrphaned(e); } }); } diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js index a3c8c0b0..5e560a58 100644 --- a/ext/mixed/js/core.js +++ b/ext/mixed/js/core.js @@ -244,6 +244,14 @@ const yomichan = (() => { chrome.runtime.onMessage.addListener(this._onMessage.bind(this)); } + // Public + + triggerOrphaned(error) { + this.trigger('orphaned', {error}); + } + + // Private + _onMessage({action, params}, sender, callback) { const handler = this._messageHandlers.get(action); if (typeof handler !== 'function') { return false; }