diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-08-09 13:19:42 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-09 13:19:42 -0400 |
commit | e87cc5c37d6ae2f845af7bd28720cb47372589bc (patch) | |
tree | 6dcee5e3975cb4deab514eaca7fa24aaf9a6250e /ext/mixed | |
parent | b3eb2cb1ef9fd28ea2dadb9eda8568a3b6958e9c (diff) |
Query parser text scanner options refactor (#717)
* Add _setSelectedParser helper
* Update TextScanner internal options representation
* Update QueryParser internal options representation
Diffstat (limited to 'ext/mixed')
-rw-r--r-- | ext/mixed/js/display.js | 28 | ||||
-rw-r--r-- | ext/mixed/js/text-scanner.js | 45 |
2 files changed, 56 insertions, 17 deletions
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 418707ca..927c2c2c 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -218,11 +218,29 @@ class Display extends EventDispatcher { } async updateOptions() { - this._options = await api.optionsGet(this.getOptionsContext()); - this._updateDocumentOptions(this._options); - this._updateTheme(this._options.general.popupTheme); - this.setCustomCss(this._options.general.customPopupCss); - this._queryParser.setOptions(this._options); + const options = await api.optionsGet(this.getOptionsContext()); + const scanning = options.scanning; + this._options = options; + + this._updateDocumentOptions(options); + this._updateTheme(options.general.popupTheme); + this.setCustomCss(options.general.customPopupCss); + + this._queryParser.setOptions({ + selectedParser: options.parsing.selectedParser, + scanLength: scanning.length, + sentenceExtent: options.anki.sentenceExt, + layoutAwareScan: scanning.layoutAwareScan, + termSpacing: options.parsing.termSpacing, + scanning: { + deepContentScan: scanning.deepDomScan, + selectText: scanning.selectText, + modifier: scanning.modifier, + useMiddleMouse: scanning.middleMouse, + delay: scanning.delay, + touchInputEnabled: scanning.touchInputEnabled + } + }); } addMultipleEventListeners(selector, type, listener, options) { diff --git a/ext/mixed/js/text-scanner.js b/ext/mixed/js/text-scanner.js index 7c705fc8..61e9256d 100644 --- a/ext/mixed/js/text-scanner.js +++ b/ext/mixed/js/text-scanner.js @@ -36,7 +36,13 @@ class TextScanner extends EventDispatcher { this._textSourceCurrent = null; this._textSourceCurrentSelected = false; this._pendingLookup = false; - this._options = null; + + this._deepContentScan = false; + this._selectText = false; + this._modifier = 'none'; + this._useMiddleMouse = false; + this._delay = 0; + this._touchInputEnabled = false; this._enabled = false; this._eventListeners = new EventListenerCollection(); @@ -85,8 +91,25 @@ class TextScanner extends EventDispatcher { } } - setOptions(options) { - this._options = options; + setOptions({deepContentScan, selectText, modifier, useMiddleMouse, delay, touchInputEnabled}) { + if (typeof deepContentScan === 'boolean') { + this._deepContentScan = deepContentScan; + } + if (typeof selectText === 'boolean') { + this._selectText = selectText; + } + if (typeof modifier === 'string') { + this._modifier = modifier; + } + if (typeof useMiddleMouse === 'boolean') { + this._useMiddleMouse = useMiddleMouse; + } + if (typeof delay === 'number') { + this._delay = delay; + } + if (typeof touchInputEnabled === 'boolean') { + this._touchInputEnabled = false; + } } async searchAt(x, y, cause) { @@ -101,7 +124,7 @@ class TextScanner extends EventDispatcher { return; } - const textSource = docRangeFromPoint(x, y, this._options.scanning.deepDomScan); + const textSource = docRangeFromPoint(x, y, this._deepContentScan); try { if (this._textSourceCurrent !== null && this._textSourceCurrent.equals(textSource)) { return; @@ -162,7 +185,7 @@ class TextScanner extends EventDispatcher { setCurrentTextSource(textSource) { this._textSourceCurrent = textSource; - if (this._options.scanning.selectText) { + if (this._selectText) { this._textSourceCurrent.select(); this._textSourceCurrentSelected = true; } else { @@ -188,17 +211,15 @@ class TextScanner extends EventDispatcher { const modifiers = DOM.getActiveModifiers(e); this.trigger('activeModifiersChanged', {modifiers}); - const scanningOptions = this._options.scanning; - const scanningModifier = scanningOptions.modifier; if (!( - this._isScanningModifierPressed(scanningModifier, e) || - (scanningOptions.middleMouse && DOM.isMouseButtonDown(e, 'auxiliary')) + this._isScanningModifierPressed(this._modifier, e) || + (this._useMiddleMouse && DOM.isMouseButtonDown(e, 'auxiliary')) )) { return; } const search = async () => { - if (scanningModifier === 'none') { + if (this._modifier === 'none') { if (!await this._scanTimerWait()) { // Aborted return; @@ -325,7 +346,7 @@ class TextScanner extends EventDispatcher { } async _scanTimerWait() { - const delay = this._options.scanning.delay; + const delay = this._delay; const promise = promiseTimeout(delay, true); this._scanTimerPromise = promise; try { @@ -346,7 +367,7 @@ class TextScanner extends EventDispatcher { _hookEvents() { const eventListenerInfos = this._getMouseEventListeners(); - if (this._options.scanning.touchInputEnabled) { + if (this._touchInputEnabled) { eventListenerInfos.push(...this._getTouchEventListeners()); } |