From 621aa354e77a5f0e7825ff0ad7a66c41154f2511 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 13 Sep 2020 13:25:03 -0400 Subject: Add scan dictionary type filters (#822) * Add options for searchTerms and searchKanji * Add settings HTML * Add options to TextScanner * Update _search/_findDefinitions to include searchTerms/searchKanji args * Update _searchAtFromMouseMove args * Change argument structure for _searchAt * Use scanning options for searchTerms and searchKanji --- ext/bg/data/options-schema.json | 20 ++++++++-- ext/bg/js/options.js | 4 +- ext/bg/js/settings/scan-inputs-controller.js | 4 +- ext/bg/settings.html | 2 + ext/mixed/js/text-scanner.js | 56 +++++++++++++++------------- 5 files changed, 56 insertions(+), 30 deletions(-) (limited to 'ext') diff --git a/ext/bg/data/options-schema.json b/ext/bg/data/options-schema.json index 0f310f6e..93dde1e0 100644 --- a/ext/bg/data/options-schema.json +++ b/ext/bg/data/options-schema.json @@ -352,7 +352,9 @@ "showAdvanced": false, "scanOnPenHover": true, "scanOnPenPress": true, - "scanOnPenRelease": false + "scanOnPenRelease": false, + "searchTerms": true, + "searchKanji": true } }, { @@ -367,7 +369,9 @@ "showAdvanced": false, "scanOnPenHover": true, "scanOnPenPress": true, - "scanOnPenRelease": false + "scanOnPenRelease": false, + "searchTerms": true, + "searchKanji": true } } ], @@ -415,7 +419,9 @@ "showAdvanced", "scanOnPenHover", "scanOnPenPress", - "scanOnPenRelease" + "scanOnPenRelease", + "searchTerms", + "searchKanji" ], "properties": { "showAdvanced": { @@ -433,6 +439,14 @@ "scanOnPenRelease": { "type": "boolean", "default": false + }, + "searchTerms": { + "type": "boolean", + "default": true + }, + "searchKanji": { + "type": "boolean", + "default": true } } } diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 673666bb..ccb1f256 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -522,7 +522,9 @@ class OptionsUtil { showAdvanced: false, scanOnPenHover: true, scanOnPenPress: true, - scanOnPenRelease: false + scanOnPenRelease: false, + searchTerms: true, + searchKanji: true }); for (const {options: profileOptions} of options.profiles) { profileOptions.general.usePopupWindow = false; diff --git a/ext/bg/js/settings/scan-inputs-controller.js b/ext/bg/js/settings/scan-inputs-controller.js index 09decaf3..b6498d7c 100644 --- a/ext/bg/js/settings/scan-inputs-controller.js +++ b/ext/bg/js/settings/scan-inputs-controller.js @@ -101,7 +101,9 @@ class ScanInputsController { showAdvanced: false, scanOnPenHover: true, scanOnPenPress: true, - scanOnPenRelease: false + scanOnPenRelease: false, + searchTerms: true, + searchKanji: true } }] }]); diff --git a/ext/bg/settings.html b/ext/bg/settings.html index cc209c8a..8eeda187 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -472,6 +472,8 @@
Options
+
+
diff --git a/ext/mixed/js/text-scanner.js b/ext/mixed/js/text-scanner.js index 8ba27be7..f38ca1de 100644 --- a/ext/mixed/js/text-scanner.js +++ b/ext/mixed/js/text-scanner.js @@ -119,12 +119,12 @@ class TextScanner extends EventDispatcher { include, exclude, types, - options: {scanOnPenHover, scanOnPenPress, scanOnPenRelease} + options: {scanOnPenHover, scanOnPenPress, scanOnPenRelease, searchTerms, searchKanji} }) => ({ include: this._getInputArray(include), exclude: this._getInputArray(exclude), types: this._getInputTypeSet(types), - options: {scanOnPenHover, scanOnPenPress, scanOnPenRelease} + options: {scanOnPenHover, scanOnPenPress, scanOnPenRelease, searchTerms, searchKanji} })); } if (typeof deepContentScan === 'boolean') { @@ -206,19 +206,19 @@ class TextScanner extends EventDispatcher { async searchLast() { if (this._textSourceCurrent !== null && this._inputCurrent !== null) { - await this._search(this._textSourceCurrent, this._inputCurrent); + await this._search(this._textSourceCurrent, this._searchTerms, this._searchKanji, this._inputCurrent); return true; } return false; } async search(textSource) { - return await this._search(textSource, {cause: 'script', index: -1, empty: false}); + return await this._search(textSource, this._searchTerms, this._searchKanji, {cause: 'script', index: -1, empty: false}); } // Private - async _search(textSource, input) { + async _search(textSource, searchTerms, searchKanji, input) { let definitions = null; let sentence = null; let type = null; @@ -234,7 +234,7 @@ class TextScanner extends EventDispatcher { optionsContext = await this._getOptionsContext(); searched = true; - const result = await this._findDefinitions(textSource, optionsContext); + const result = await this._findDefinitions(textSource, searchTerms, searchKanji, optionsContext); if (result !== null) { ({definitions, sentence, type} = result); this._inputCurrent = input; @@ -274,8 +274,7 @@ class TextScanner extends EventDispatcher { const inputInfo = this._getMatchingInputGroupFromEvent(e, 'mouse'); if (inputInfo === null) { return; } - const {index, empty} = inputInfo; - this._searchAtFromMouseMove(e.clientX, e.clientY, index, empty); + this._searchAtFromMouseMove(e.clientX, e.clientY, inputInfo); } _onMouseDown(e) { @@ -299,7 +298,7 @@ class TextScanner extends EventDispatcher { _onClick(e) { if (this._searchOnClick) { - this._searchAt(e.clientX, e.clientY, {type: 'mouse', cause: 'click', index: -1, empty: false}); + this._searchAt(e.clientX, e.clientY, 'mouse', 'click', {index: -1, empty: false, input: null}); } if (this._preventNextClick) { @@ -384,8 +383,7 @@ class TextScanner extends EventDispatcher { const inputInfo = this._getMatchingInputGroupFromEvent(e, type); if (inputInfo === null) { return; } - const {index, empty} = inputInfo; - this._searchAt(primaryTouch.clientX, primaryTouch.clientY, {type, cause: 'touchMove', index, empty}); + this._searchAt(primaryTouch.clientX, primaryTouch.clientY, type, 'touchMove', inputInfo); e.preventDefault(); // Disable scroll } @@ -492,8 +490,7 @@ class TextScanner extends EventDispatcher { const inputInfo = this._getMatchingInputGroupFromEvent(e, 'touch'); if (inputInfo === null) { return; } - const {index, empty} = inputInfo; - this._searchAt(e.clientX, e.clientY, {type: 'touch', cause: 'touchMove', index, empty}); + this._searchAt(e.clientX, e.clientY, 'touch', 'touchMove', inputInfo); } _onTouchPointerUp() { @@ -638,15 +635,15 @@ class TextScanner extends EventDispatcher { return null; } - async _findDefinitions(textSource, optionsContext) { + async _findDefinitions(textSource, searchTerms, searchKanji, optionsContext) { if (textSource === null) { return null; } - if (this._searchTerms) { + if (searchTerms) { const results = await this._findTerms(textSource, optionsContext); if (results !== null) { return results; } } - if (this._searchKanji) { + if (searchKanji) { const results = await this._findKanji(textSource, optionsContext); if (results !== null) { return results; } } @@ -684,10 +681,20 @@ class TextScanner extends EventDispatcher { return {definitions, sentence, type: 'kanji'}; } - async _searchAt(x, y, input) { + async _searchAt(x, y, type, cause, inputInfo) { if (this._pendingLookup) { return; } try { + const {index, empty, input: sourceInput} = inputInfo; + let searchTerms = this._searchTerms; + let searchKanji = this._searchKanji; + if (sourceInput !== null) { + if (searchTerms && !sourceInput.options.searchTerms) { searchTerms = false; } + if (searchKanji && !sourceInput.options.searchKanji) { searchKanji = false; } + } + + const input = {type, cause, index, empty}; + this._pendingLookup = true; this._scanTimerClear(); @@ -697,7 +704,7 @@ class TextScanner extends EventDispatcher { const textSource = this._documentUtil.getRangeFromPoint(x, y, this._deepContentScan); try { - await this._search(textSource, input); + await this._search(textSource, searchTerms, searchKanji, input); } finally { if (textSource !== null) { textSource.cleanup(); @@ -710,17 +717,17 @@ class TextScanner extends EventDispatcher { } } - async _searchAtFromMouseMove(x, y, inputIndex, inputEmpty) { + async _searchAtFromMouseMove(x, y, inputInfo) { if (this._pendingLookup) { return; } - if (inputEmpty) { + if (inputInfo.empty) { if (!await this._scanTimerWait()) { // Aborted return; } } - await this._searchAt(x, y, {type: 'mouse', cause: 'mouseMove', index: inputIndex, empty: inputEmpty}); + await this._searchAt(x, y, 'mouse', 'mouseMove', inputInfo); } async _searchAtFromTouchStart(e, x, y) { @@ -731,10 +738,9 @@ class TextScanner extends EventDispatcher { const inputInfo = this._getMatchingInputGroupFromEvent(e, type); if (inputInfo === null) { return; } - const {index, empty} = inputInfo; const textSourceCurrentPrevious = this._textSourceCurrent !== null ? this._textSourceCurrent.clone() : null; - await this._searchAt(x, y, {type, cause, index, empty}); + await this._searchAt(x, y, type, cause, inputInfo); if ( this._textSourceCurrent !== null && @@ -753,7 +759,7 @@ class TextScanner extends EventDispatcher { const inputInfo = this._getMatchingInputGroupFromEvent(e, type); if (inputInfo === null) { return; } - const {index, empty, input: {options}} = inputInfo; + const {input: {options}} = inputInfo; if ( (!options.scanOnPenRelease && this._penPointerReleased) || !(this._penPointerPressed ? options.scanOnPenPress : options.scanOnPenHover) @@ -761,7 +767,7 @@ class TextScanner extends EventDispatcher { return; } - await this._searchAt(x, y, {type, cause, index, empty}); + await this._searchAt(x, y, type, cause, inputInfo); if ( prevent && -- cgit v1.2.3