summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-09-13 13:25:03 -0400
committerGitHub <noreply@github.com>2020-09-13 13:25:03 -0400
commit621aa354e77a5f0e7825ff0ad7a66c41154f2511 (patch)
tree194717396918d27c0ebadc21e62a32714b27886f
parentb180ebc3bc5182712fe33e5af3bea64b06204dcc (diff)
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
-rw-r--r--ext/bg/data/options-schema.json20
-rw-r--r--ext/bg/js/options.js4
-rw-r--r--ext/bg/js/settings/scan-inputs-controller.js4
-rw-r--r--ext/bg/settings.html2
-rw-r--r--ext/mixed/js/text-scanner.js56
5 files changed, 56 insertions, 30 deletions
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 @@
<div class="scan-input-prefix-cell" data-property="options"><div class="scan-input-prefix">Options</div></div>
<div class="scan-input-content-cell" data-property="options"><div class="scan-input-input-cell-inner">
<div class="scan-input-type-list-container form-control"><div>
+ <div><label class="scan-input-toggle"><input type="checkbox" class="scan-input-settings-checkbox" data-property="options.searchTerms"><span>Search for terms</span></label></div>
+ <div><label class="scan-input-toggle"><input type="checkbox" class="scan-input-settings-checkbox" data-property="options.searchKanji"><span>Search for kanji</span></label></div>
<div><label class="scan-input-toggle"><input type="checkbox" class="scan-input-settings-checkbox" data-property="options.scanOnPenHover"><span>Scan on pen hover</span></label></div>
<div><label class="scan-input-toggle"><input type="checkbox" class="scan-input-settings-checkbox" data-property="options.scanOnPenPress"><span>Scan on pen press</span></label></div>
<div><label class="scan-input-toggle"><input type="checkbox" class="scan-input-settings-checkbox" data-property="options.scanOnPenRelease"><span>Scan on pen release</span></label></div>
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 &&