diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-12-20 13:44:33 -0500 |
---|---|---|
committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-12-20 13:44:33 -0500 |
commit | 2519f99f54412933beed8b2c753c76662099f8e0 (patch) | |
tree | 4fc453e375394749ad1cd5d1e1fb72cafef84048 /ext | |
parent | 2a95f1420f08b034ae8e12ecffed86aa6f33e53a (diff) |
Update how orphan state is observed
Diffstat (limited to 'ext')
-rw-r--r-- | ext/fg/js/float.js | 9 | ||||
-rw-r--r-- | ext/fg/js/frontend.js | 8 | ||||
-rw-r--r-- | ext/mixed/js/api.js | 2 | ||||
-rw-r--r-- | 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; } |