summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2019-12-20 13:44:33 -0500
committertoasted-nutbread <toasted-nutbread@users.noreply.github.com>2019-12-20 13:44:33 -0500
commit2519f99f54412933beed8b2c753c76662099f8e0 (patch)
tree4fc453e375394749ad1cd5d1e1fb72cafef84048
parent2a95f1420f08b034ae8e12ecffed86aa6f33e53a (diff)
Update how orphan state is observed
-rw-r--r--ext/fg/js/float.js9
-rw-r--r--ext/fg/js/frontend.js8
-rw-r--r--ext/mixed/js/api.js2
-rw-r--r--ext/mixed/js/core.js8
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; }