summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2021-05-19 20:09:37 -0400
committerGitHub <noreply@github.com>2021-05-19 20:09:37 -0400
commit6184bcb812686f5498ee982ae89da88792b9a880 (patch)
treeb64fd9b45fe8909c3c5e553af701e6ae18fc0170 /ext
parenteddd0288643f08d2a2c85f73575bc7ee1c157539 (diff)
Selection clear improvements (#1690)
* Update selection clear process * Clean up old clearSelection API * Update clear order * Add clear event handling
Diffstat (limited to 'ext')
-rw-r--r--ext/js/app/frontend.js19
-rw-r--r--ext/js/display/display.js8
-rw-r--r--ext/js/display/query-parser.js5
-rw-r--r--ext/js/language/text-scanner.js11
4 files changed, 28 insertions, 15 deletions
diff --git a/ext/js/app/frontend.js b/ext/js/app/frontend.js
index 7913d7d8..e40b400d 100644
--- a/ext/js/app/frontend.js
+++ b/ext/js/app/frontend.js
@@ -121,7 +121,7 @@ class Frontend {
yomichan.on('closePopups', this._onClosePopups.bind(this));
chrome.runtime.onMessage.addListener(this._onRuntimeMessage.bind(this));
- this._textScanner.on('clearSelection', this._onClearSelection.bind(this));
+ this._textScanner.on('clear', this._onTextScannerClear.bind(this));
this._textScanner.on('searched', this._onSearched.bind(this));
yomichan.crossFrame.registerHandlers([
@@ -253,13 +253,8 @@ class Frontend {
this._updateContentScale();
}
- _onClearSelection({passive}) {
- this._stopClearSelectionDelayed();
- if (this._popup !== null) {
- this._popup.hide(!passive);
- this._popup.clearAutoPlayTimer();
- this._isPointerOverPopup = false;
- }
+ _onTextScannerClear() {
+ this._clearSelection(false);
}
_onSearched({type, dictionaryEntries, sentence, inputInfo: {eventType, passive, detail}, textSource, optionsContext, detail: {documentTitle}, error}) {
@@ -299,7 +294,12 @@ class Frontend {
_clearSelection(passive) {
this._stopClearSelectionDelayed();
- this._textScanner.clearSelection(passive);
+ if (this._popup !== null) {
+ this._popup.clearAutoPlayTimer();
+ this._popup.hide(!passive);
+ this._isPointerOverPopup = false;
+ }
+ this._textScanner.clearSelection();
}
_clearSelectionDelayed(delay, restart, passive) {
@@ -566,6 +566,7 @@ class Frontend {
_updateTextScannerEnabled() {
const enabled = (this._options !== null && this._options.general.enable && !this._disabledOverride);
this._textScanner.setEnabled(enabled);
+ this._clearSelection(true);
}
_updateContentScale() {
diff --git a/ext/js/display/display.js b/ext/js/display/display.js
index fe5b5c9a..bb089047 100644
--- a/ext/js/display/display.js
+++ b/ext/js/display/display.js
@@ -1771,6 +1771,7 @@ class Display extends EventDispatcher {
if (!options.scanning.enablePopupSearch) {
if (this._contentTextScanner !== null) {
this._contentTextScanner.setEnabled(false);
+ this._contentTextScanner.clearSelection();
}
return;
}
@@ -1788,6 +1789,7 @@ class Display extends EventDispatcher {
this._contentTextScanner.includeSelector = '.click-scannable,.click-scannable *';
this._contentTextScanner.excludeSelector = '.scan-disable,.scan-disable *';
this._contentTextScanner.prepare();
+ this._contentTextScanner.on('clear', this._onContentTextScannerClear.bind(this));
this._contentTextScanner.on('searched', this._onContentTextScannerSearched.bind(this));
}
@@ -1821,6 +1823,10 @@ class Display extends EventDispatcher {
this._contentTextScanner.setEnabled(true);
}
+ _onContentTextScannerClear() {
+ this._contentTextScanner.clearSelection();
+ }
+
_onContentTextScannerSearched({type, dictionaryEntries, sentence, textSource, optionsContext, error}) {
if (error !== null && !yomichan.isExtensionUnloaded) {
log.error(error);
@@ -1851,7 +1857,7 @@ class Display extends EventDispatcher {
contentOrigin: this.getContentOrigin()
}
};
- this._contentTextScanner.clearSelection(true);
+ this._contentTextScanner.clearSelection();
this.setContent(details);
}
diff --git a/ext/js/display/query-parser.js b/ext/js/display/query-parser.js
index 8c5ce331..39b09646 100644
--- a/ext/js/display/query-parser.js
+++ b/ext/js/display/query-parser.js
@@ -47,6 +47,7 @@ class QueryParser extends EventDispatcher {
prepare() {
this._textScanner.prepare();
+ this._textScanner.on('clear', this._onTextScannerClear.bind(this));
this._textScanner.on('searched', this._onSearched.bind(this));
this._queryParserModeSelect.addEventListener('change', this._onParserChange.bind(this), false);
}
@@ -86,6 +87,10 @@ class QueryParser extends EventDispatcher {
// Private
+ _onTextScannerClear() {
+ this._textScanner.clearSelection();
+ }
+
_onSearched(e) {
const {error} = e;
if (error !== null) {
diff --git a/ext/js/language/text-scanner.js b/ext/js/language/text-scanner.js
index 2ebf26e2..80887b8e 100644
--- a/ext/js/language/text-scanner.js
+++ b/ext/js/language/text-scanner.js
@@ -139,8 +139,6 @@ class TextScanner extends EventDispatcher {
if (value) {
this._hookEvents();
- } else {
- this.clearSelection(true);
}
}
@@ -259,7 +257,7 @@ class TextScanner extends EventDispatcher {
return (this._textSourceCurrent !== null);
}
- clearSelection(passive) {
+ clearSelection() {
if (!this._canClearSelection) { return; }
if (this._textSourceCurrent !== null) {
if (this._textSourceCurrentSelected) {
@@ -273,7 +271,6 @@ class TextScanner extends EventDispatcher {
this._textSourceCurrentSelected = false;
this._inputInfoCurrent = null;
}
- this.trigger('clearSelection', {passive});
}
getCurrentTextSource() {
@@ -431,7 +428,7 @@ class TextScanner extends EventDispatcher {
case 0: // Primary
if (this._searchOnClick) { this._resetPreventNextClickScan(); }
this._scanTimerClear();
- this.clearSelection(false);
+ this._triggerClear('mousedown');
break;
case 1: // Middle
if (this._preventMiddleMouse) {
@@ -1105,4 +1102,8 @@ class TextScanner extends EventDispatcher {
}
}
}
+
+ _triggerClear(reason) {
+ this.trigger('clear', {reason});
+ }
}