aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/fg/js/frontend-initialize.js5
-rw-r--r--ext/fg/js/frontend.js15
-rw-r--r--ext/mixed/js/text-scanner.js16
3 files changed, 17 insertions, 19 deletions
diff --git a/ext/fg/js/frontend-initialize.js b/ext/fg/js/frontend-initialize.js
index 34be6bc6..e794c7c0 100644
--- a/ext/fg/js/frontend-initialize.js
+++ b/ext/fg/js/frontend-initialize.js
@@ -80,6 +80,7 @@ async function main() {
};
let frontend = null;
+ let frontendPreparePromise = null;
const applyOptions = async () => {
const optionsContext = {depth: isSearchPage ? 0 : depth, url};
@@ -99,8 +100,10 @@ async function main() {
if (frontend === null) {
frontend = new Frontend(popup);
- await frontend.prepare();
+ frontendPreparePromise = frontend.prepare();
+ await frontendPreparePromise;
} else {
+ await frontendPreparePromise;
if (isSearchPage) {
const disabled = !options.scanning.enableOnSearchPage;
frontend.setDisabledOverride(disabled);
diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js
index 288d3589..20bfc638 100644
--- a/ext/fg/js/frontend.js
+++ b/ext/fg/js/frontend.js
@@ -30,8 +30,7 @@ class Frontend extends TextScanner {
super(
window,
() => this.popup.isProxy() ? [] : [this.popup.getContainer()],
- [(x, y) => this.popup.containsPoint(x, y)],
- () => this.popup.depth <= this.options.scanning.popupNestingMaxDepth && !this._disabledOverride
+ [(x, y) => this.popup.containsPoint(x, y)]
);
this.popup = popup;
@@ -138,10 +137,7 @@ class Frontend extends TextScanner {
setDisabledOverride(disabled) {
this._disabledOverride = disabled;
- // other cases handed by regular options update
- if (disabled && this.enabled) {
- this.setEnabled(false);
- }
+ this.setEnabled(this.options.general.enable, this._canEnable());
}
async setPopup(popup) {
@@ -151,7 +147,7 @@ class Frontend extends TextScanner {
}
async updateOptions() {
- this.setOptions(await apiOptionsGet(this.getOptionsContext()));
+ this.setOptions(await apiOptionsGet(this.getOptionsContext()), this._canEnable());
const ignoreNodes = ['.scan-disable', '.scan-disable *'];
if (!this.options.scanning.enableOnPopupExpressions) {
@@ -290,6 +286,11 @@ class Frontend extends TextScanner {
});
}
+ _canEnable() {
+ if (this.options === null) { return true; } // called by updateOptions for the first time
+ return this.popup.depth <= this.options.scanning.popupNestingMaxDepth && !this._disabledOverride;
+ }
+
async _updatePopupPosition() {
const textSource = this.getCurrentTextSource();
if (textSource !== null && await this.popup.isVisible()) {
diff --git a/ext/mixed/js/text-scanner.js b/ext/mixed/js/text-scanner.js
index 85be7119..bff9544f 100644
--- a/ext/mixed/js/text-scanner.js
+++ b/ext/mixed/js/text-scanner.js
@@ -22,13 +22,11 @@
*/
class TextScanner {
- constructor(node, ignoreElements, ignorePoints, canEnable=null) {
+ constructor(node, ignoreElements, ignorePoints) {
this.node = node;
this.ignoreElements = ignoreElements;
this.ignorePoints = ignorePoints;
- this.canEnable = canEnable;
-
this.ignoreNodes = null;
this.scanTimerPromise = null;
@@ -226,12 +224,8 @@ class TextScanner {
}
}
- setEnabled(enabled) {
- if (this.canEnable !== null && !this.canEnable()) {
- enabled = false;
- }
-
- if (enabled) {
+ setEnabled(enabled, canEnable) {
+ if (enabled && canEnable) {
if (!this.enabled) {
this.hookEvents();
this.enabled = true;
@@ -277,9 +271,9 @@ class TextScanner {
];
}
- setOptions(options) {
+ setOptions(options, canEnable=true) {
this.options = options;
- this.setEnabled(this.options.general.enable);
+ this.setEnabled(this.options.general.enable, canEnable);
}
async searchAt(x, y, cause) {