summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/fg/js/frontend.js170
1 files changed, 86 insertions, 84 deletions
diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js
index f6cce123..9de6597e 100644
--- a/ext/fg/js/frontend.js
+++ b/ext/fg/js/frontend.js
@@ -95,6 +95,58 @@ class Frontend {
}
}
+ async setPopup(popup) {
+ this._textScanner.clearSelection(true);
+ this._popup = popup;
+ await popup.setOptionsContext(await this.getOptionsContext(), this._id);
+ }
+
+ setDisabledOverride(disabled) {
+ this._disabledOverride = disabled;
+ this._updateTextScannerEnabled();
+ }
+
+ async setTextSource(textSource) {
+ await this._onSearchSource(textSource, 'script');
+ this._textScanner.setCurrentTextSource(textSource);
+ }
+
+ async getOptionsContext() {
+ const url = this._getUrl !== null ? await this._getUrl() : window.location.href;
+ const depth = this._popup.depth;
+ const modifierKeys = [...this._activeModifiers];
+ return {depth, url, modifierKeys};
+ }
+
+ async updateOptions() {
+ const optionsContext = await this.getOptionsContext();
+ this._options = await apiOptionsGet(optionsContext);
+ this._textScanner.setOptions(this._options);
+ this._updateTextScannerEnabled();
+
+ const ignoreNodes = ['.scan-disable', '.scan-disable *'];
+ if (!this._options.scanning.enableOnPopupExpressions) {
+ ignoreNodes.push('.source-text', '.source-text *');
+ }
+ this._textScanner.ignoreNodes = ignoreNodes.join(',');
+
+ await this._popup.setOptionsContext(optionsContext, this._id);
+
+ this._updateContentScale();
+
+ const textSourceCurrent = this._textScanner.getCurrentTextSource();
+ const causeCurrent = this._textScanner.causeCurrent;
+ if (textSourceCurrent !== null && causeCurrent !== null) {
+ await this._onSearchSource(textSourceCurrent, causeCurrent);
+ }
+ }
+
+ showContentCompleted() {
+ return this._lastShowPromise;
+ }
+
+ // Private
+
_onResize() {
this._updatePopupPosition();
}
@@ -136,50 +188,20 @@ class Frontend {
this._updateContentScale();
}
- setDisabledOverride(disabled) {
- this._disabledOverride = disabled;
- this._updateTextScannerEnabled();
- }
-
- async setPopup(popup) {
- this._textScanner.clearSelection(true);
- this._popup = popup;
- await popup.setOptionsContext(await this.getOptionsContext(), this._id);
- }
-
- async updateOptions() {
- const optionsContext = await this.getOptionsContext();
- this._options = await apiOptionsGet(optionsContext);
- this._textScanner.setOptions(this._options);
- this._updateTextScannerEnabled();
-
- const ignoreNodes = ['.scan-disable', '.scan-disable *'];
- if (!this._options.scanning.enableOnPopupExpressions) {
- ignoreNodes.push('.source-text', '.source-text *');
- }
- this._textScanner.ignoreNodes = ignoreNodes.join(',');
-
- await this._popup.setOptionsContext(optionsContext, this._id);
-
- this._updateContentScale();
-
- const textSourceCurrent = this._textScanner.getCurrentTextSource();
- const causeCurrent = this._textScanner.causeCurrent;
- if (textSourceCurrent !== null && causeCurrent !== null) {
- await this._onSearchSource(textSourceCurrent, causeCurrent);
- }
+ _onClearSelection({passive}) {
+ this._popup.hide(!passive);
+ this._popup.clearAutoPlayTimer();
+ this._updatePendingOptions();
}
- async _updatePendingOptions() {
- if (this._optionsUpdatePending) {
- this._optionsUpdatePending = false;
- await this.updateOptions();
+ async _onActiveModifiersChanged({modifiers}) {
+ if (areSetsEqual(modifiers, this._activeModifiers)) { return; }
+ this._activeModifiers = modifiers;
+ if (await this._popup.isVisible()) {
+ this._optionsUpdatePending = true;
+ return;
}
- }
-
- async setTextSource(textSource) {
- await this._onSearchSource(textSource, 'script');
- this._textScanner.setCurrentTextSource(textSource);
+ await this.updateOptions();
}
async _onSearchSource(textSource, cause) {
@@ -216,21 +238,6 @@ class Frontend {
return results;
}
- _showContent(textSource, focus, definitions, type, optionsContext) {
- const {url} = optionsContext;
- const sentence = docSentenceExtract(textSource, this._options.anki.sentenceExt);
- this._showPopupContent(
- textSource,
- optionsContext,
- type,
- {definitions, context: {sentence, url, focus, disableHistory: true}}
- );
- }
-
- showContentCompleted() {
- return this._lastShowPromise;
- }
-
async _findTerms(textSource, optionsContext) {
const searchText = this._textScanner.getTextSourceContent(textSource, this._options.scanning.length);
if (searchText.length === 0) { return null; }
@@ -255,27 +262,15 @@ class Frontend {
return {definitions, type: 'kanji'};
}
- _onClearSelection({passive}) {
- this._popup.hide(!passive);
- this._popup.clearAutoPlayTimer();
- this._updatePendingOptions();
- }
-
- async _onActiveModifiersChanged({modifiers}) {
- if (areSetsEqual(modifiers, this._activeModifiers)) { return; }
- this._activeModifiers = modifiers;
- if (await this._popup.isVisible()) {
- this._optionsUpdatePending = true;
- return;
- }
- await this.updateOptions();
- }
-
- async getOptionsContext() {
- const url = this._getUrl !== null ? await this._getUrl() : window.location.href;
- const depth = this._popup.depth;
- const modifierKeys = [...this._activeModifiers];
- return {depth, url, modifierKeys};
+ _showContent(textSource, focus, definitions, type, optionsContext) {
+ const {url} = optionsContext;
+ const sentence = docSentenceExtract(textSource, this._options.anki.sentenceExt);
+ this._showPopupContent(
+ textSource,
+ optionsContext,
+ type,
+ {definitions, context: {sentence, url, focus, disableHistory: true}}
+ );
}
_showPopupContent(textSource, optionsContext, type=null, details=null) {
@@ -290,6 +285,13 @@ class Frontend {
return this._lastShowPromise;
}
+ async _updatePendingOptions() {
+ if (this._optionsUpdatePending) {
+ this._optionsUpdatePending = false;
+ await this.updateOptions();
+ }
+ }
+
_updateTextScannerEnabled() {
const enabled = (
this._options.general.enable &&
@@ -321,6 +323,13 @@ class Frontend {
this._updatePopupPosition();
}
+ async _updatePopupPosition() {
+ const textSource = this._textScanner.getCurrentTextSource();
+ if (textSource !== null && await this._popup.isVisible()) {
+ this._showPopupContent(textSource, await this.getOptionsContext());
+ }
+ }
+
_broadcastRootPopupInformation() {
if (!this._popup.isProxy() && this._popup.depth === 0 && this._popup.frameId === 0) {
apiBroadcastTab('rootPopupInformation', {popupId: this._popup.id, frameId: this._popup.frameId});
@@ -334,11 +343,4 @@ class Frontend {
title: document.title
});
}
-
- async _updatePopupPosition() {
- const textSource = this._textScanner.getCurrentTextSource();
- if (textSource !== null && await this._popup.isVisible()) {
- this._showPopupContent(textSource, await this.getOptionsContext());
- }
- }
}