summaryrefslogtreecommitdiff
path: root/ext/fg/js/frontend.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/fg/js/frontend.js')
-rw-r--r--ext/fg/js/frontend.js102
1 files changed, 52 insertions, 50 deletions
diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js
index 37389766..de5fa953 100644
--- a/ext/fg/js/frontend.js
+++ b/ext/fg/js/frontend.js
@@ -32,29 +32,17 @@ window.yomichan_frontend = new class {
async prepare() {
try {
this.options = await apiOptionsGet();
- } catch (e) {
- this.onError(e);
- }
-
- window.addEventListener('message', this.onFrameMessage.bind(this));
- window.addEventListener('mousedown', this.onMouseDown.bind(this));
- window.addEventListener('mousemove', this.onMouseMove.bind(this));
- window.addEventListener('mouseover', this.onMouseOver.bind(this));
- window.addEventListener('mouseup', this.onMouseUp.bind(this));
- window.addEventListener('resize', this.onResize.bind(this));
- chrome.runtime.onMessage.addListener(this.onBgMessage.bind(this));
- }
-
- popupTimerSet(callback) {
- this.popupTimerClear();
- this.popupTimer = window.setTimeout(callback, this.options.scanning.delay);
- }
+ window.addEventListener('message', e => this.onFrameMessage(e));
+ window.addEventListener('mousedown', e => this.onMouseDown(e));
+ window.addEventListener('mousemove', e => this.onMouseMove(e));
+ window.addEventListener('mouseover', e => this.onMouseOver(e));
+ window.addEventListener('mouseup', e => this.onMouseUp(e));
+ window.addEventListener('resize', e => this.onResize(e));
- popupTimerClear() {
- if (this.popupTimer) {
- window.clearTimeout(this.popupTimer);
- this.popupTimer = null;
+ chrome.runtime.onMessage.addListener(({action, params}, sender, callback) => this.onBgMessage(action, params, sender, callback));
+ } catch (e) {
+ this.onError(e);
}
}
@@ -132,7 +120,11 @@ window.yomichan_frontend = new class {
}
}
- onBgMessage({action, params}, sender, callback) {
+ onResize() {
+ this.onSearchClear();
+ }
+
+ onBgMessage(action, params, sender, callback) {
const handlers = {
optionsSet: options => {
this.options = options;
@@ -150,37 +142,55 @@ window.yomichan_frontend = new class {
callback();
}
- onResize() {
- this.onSearchClear();
+ onError(error) {
+ if (window.yomichan_orphaned) {
+ if (this.lastTextSource && this.options.scanning.modifier !== 'none') {
+ this.popup.showOrphaned(this.lastTextSource.getRect(), this.options);
+ }
+ } else {
+ window.alert(`Error: ${error}`);
+ }
}
- async searchAt(point) {
- if (this.pendingLookup) {
- return;
- }
+ popupTimerSet(callback) {
+ this.popupTimerClear();
+ this.popupTimer = window.setTimeout(callback, this.options.scanning.delay);
+ }
- const textSource = docRangeFromPoint(point);
- if (!textSource || !textSource.containsPoint(point)) {
- docImposterDestroy();
- return;
+ popupTimerClear() {
+ if (this.popupTimer) {
+ window.clearTimeout(this.popupTimer);
+ this.popupTimer = null;
}
+ }
- if (this.lastTextSource && this.lastTextSource.equals(textSource)) {
- return;
- }
+ async searchAt(point) {
+ try {
+ if (this.pendingLookup) {
+ return;
+ }
- this.pendingLookup = true;
+ const textSource = docRangeFromPoint(point);
+ if (!textSource || !textSource.containsPoint(point)) {
+ docImposterDestroy();
+ return;
+ }
+
+ if (this.lastTextSource && this.lastTextSource.equals(textSource)) {
+ return;
+ }
+
+ this.pendingLookup = true;
- try {
if (!await this.searchTerms(textSource)) {
await this.searchKanji(textSource);
}
} catch (e) {
this.onError(e);
+ } finally {
+ docImposterDestroy();
+ this.pendingLookup = false;
}
-
- docImposterDestroy();
- this.pendingLookup = false;
}
async searchTerms(textSource) {
@@ -245,14 +255,6 @@ window.yomichan_frontend = new class {
this.lastTextSource = null;
}
+}();
- handleError(error, textSource) {
- if (window.yomichan_orphaned) {
- if (textSource && this.options.scanning.modifier !== 'none') {
- this.popup.showOrphaned(textSource.getRect(), this.options);
- }
- } else {
- window.alert(`Error: ${error}`);
- }
- }
-};
+window.yomichan_frontend.prepare();