diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-05-19 20:09:37 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-19 20:09:37 -0400 | 
| commit | 6184bcb812686f5498ee982ae89da88792b9a880 (patch) | |
| tree | b64fd9b45fe8909c3c5e553af701e6ae18fc0170 | |
| parent | eddd0288643f08d2a2c85f73575bc7ee1c157539 (diff) | |
Selection clear improvements (#1690)
* Update selection clear process
* Clean up old clearSelection API
* Update clear order
* Add clear event handling
| -rw-r--r-- | ext/js/app/frontend.js | 19 | ||||
| -rw-r--r-- | ext/js/display/display.js | 8 | ||||
| -rw-r--r-- | ext/js/display/query-parser.js | 5 | ||||
| -rw-r--r-- | ext/js/language/text-scanner.js | 11 | 
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}); +    }  } |