aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuuuube <61125188+Kuuuube@users.noreply.github.com>2024-04-14 12:48:25 -0400
committerGitHub <noreply@github.com>2024-04-14 16:48:25 +0000
commit7df7e1b2bf475edd771a73a950004ab8d5f85ccb (patch)
treea4aa178c144780968477a105d29eeeffe215c7ed
parentf2b3eb4eddb282d4eb88488b3dbc47c948891a6d (diff)
Add scanOnTouchTap and improve touch scanning defaults (#791)24.4.14.0
* Add scanOnTouchTap * Update version to 30 * Cleanup if statement
-rw-r--r--ext/data/schemas/options-schema.json19
-rw-r--r--ext/js/data/options-util.js19
-rw-r--r--ext/js/display/display.js1
-rw-r--r--ext/js/language/text-scanner.js13
-rw-r--r--ext/js/pages/settings/scan-inputs-controller.js5
-rw-r--r--ext/templates-settings.html4
-rw-r--r--test/options-util.test.js17
-rw-r--r--types/ext/settings.d.ts1
-rw-r--r--types/ext/text-scanner.d.ts2
9 files changed, 61 insertions, 20 deletions
diff --git a/ext/data/schemas/options-schema.json b/ext/data/schemas/options-schema.json
index d86eedf7..660961a8 100644
--- a/ext/data/schemas/options-schema.json
+++ b/ext/data/schemas/options-schema.json
@@ -463,8 +463,9 @@
"showAdvanced": false,
"searchTerms": true,
"searchKanji": true,
- "scanOnTouchMove": true,
- "scanOnTouchPress": true,
+ "scanOnTouchTap": true,
+ "scanOnTouchMove": false,
+ "scanOnTouchPress": false,
"scanOnTouchRelease": false,
"scanOnPenMove": true,
"scanOnPenHover": true,
@@ -487,8 +488,9 @@
"showAdvanced": false,
"searchTerms": true,
"searchKanji": true,
- "scanOnTouchMove": true,
- "scanOnTouchPress": true,
+ "scanOnTouchTap": true,
+ "scanOnTouchMove": false,
+ "scanOnTouchPress": false,
"scanOnTouchRelease": false,
"scanOnPenMove": true,
"scanOnPenHover": true,
@@ -545,6 +547,7 @@
"showAdvanced",
"searchTerms",
"searchKanji",
+ "scanOnTouchTap",
"scanOnTouchMove",
"scanOnTouchPress",
"scanOnTouchRelease",
@@ -569,13 +572,17 @@
"type": "boolean",
"default": true
},
- "scanOnTouchMove": {
+ "scanOnTouchTap": {
"type": "boolean",
"default": true
},
+ "scanOnTouchMove": {
+ "type": "boolean",
+ "default": false
+ },
"scanOnTouchPress": {
"type": "boolean",
- "default": true
+ "default": false
},
"scanOnTouchRelease": {
"type": "boolean",
diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js
index af81f29e..4e468aea 100644
--- a/ext/js/data/options-util.js
+++ b/ext/js/data/options-util.js
@@ -535,7 +535,8 @@ export class OptionsUtil {
this._updateVersion26,
this._updateVersion27,
this._updateVersion28,
- this._updateVersion29
+ this._updateVersion29,
+ this._updateVersion30
];
/* eslint-enable @typescript-eslint/unbound-method */
if (typeof targetVersion === 'number' && targetVersion < result.length) {
@@ -605,7 +606,7 @@ export class OptionsUtil {
showAdvanced: false,
searchTerms: true,
searchKanji: true,
- scanOnTouchMove: true,
+ scanOnTouchMove: false,
scanOnPenHover: true,
scanOnPenPress: true,
scanOnPenRelease: false,
@@ -1217,6 +1218,20 @@ export class OptionsUtil {
await this._applyAnkiFieldTemplatesPatch(options, '/data/templates/anki-field-templates-upgrade-v29.handlebars');
}
+ /**
+ * - Added scanning.inputs[].options.scanOnTouchTap.
+ * - Set touch settings to be more sensible.
+ * @type {import('options-util').UpdateFunction}
+ */
+ async _updateVersion30(options) {
+ for (const profile of options.profiles) {
+ for (const input of profile.options.scanning.inputs) {
+ input.options.scanOnTouchTap = true;
+ input.options.scanOnTouchPress = false;
+ input.options.scanOnTouchRelease = false;
+ }
+ }
+ }
/**
* @param {string} url
diff --git a/ext/js/display/display.js b/ext/js/display/display.js
index 80f5e9ae..10c1545c 100644
--- a/ext/js/display/display.js
+++ b/ext/js/display/display.js
@@ -1844,6 +1844,7 @@ export class Display extends EventDispatcher {
options: {
searchTerms: true,
searchKanji: true,
+ scanOnTouchTap: true,
scanOnTouchMove: false,
scanOnTouchPress: false,
scanOnTouchRelease: false,
diff --git a/ext/js/language/text-scanner.js b/ext/js/language/text-scanner.js
index ad5ba12b..bdbc117e 100644
--- a/ext/js/language/text-scanner.js
+++ b/ext/js/language/text-scanner.js
@@ -137,6 +137,8 @@ export class TextScanner extends EventDispatcher {
/** @type {() => void} */
this._preventNextClickScanTimerCallback = this._onPreventNextClickScanTimeout.bind(this);
+ /** @type {boolean} */
+ this._touchTapValid = false;
/** @type {?number} */
this._primaryTouchIdentifier = null;
/** @type {boolean} */
@@ -662,6 +664,7 @@ export class TextScanner extends EventDispatcher {
this._preventNextContextMenu = false;
this._preventNextMouseDown = false;
this._preventNextClick = false;
+ this._touchTapValid = true;
const selection = window.getSelection();
if (selection !== null && isPointInSelection(x, y, selection)) {
@@ -707,9 +710,10 @@ export class TextScanner extends EventDispatcher {
if (!allowSearch) { return; }
const inputInfo = this._getMatchingInputGroupFromEvent('touch', 'touchEnd', e);
- if (inputInfo === null || !(inputInfo.input !== null && inputInfo.input.scanOnTouchRelease)) { return; }
-
- void this._searchAtFromTouchEnd(x, y, inputInfo);
+ if (inputInfo === null || inputInfo.input === null) { return; }
+ if (inputInfo.input.scanOnTouchRelease || (inputInfo.input.scanOnTouchTap && this._touchTapValid)) {
+ void this._searchAtFromTouchEnd(x, y, inputInfo);
+ }
}
/**
@@ -728,6 +732,8 @@ export class TextScanner extends EventDispatcher {
* @param {TouchEvent} e
*/
_onTouchMove(e) {
+ this._touchTapValid = false;
+
if (this._primaryTouchIdentifier === null) { return; }
if (!e.cancelable) {
@@ -1477,6 +1483,7 @@ export class TextScanner extends EventDispatcher {
scanOnTouchMove: this._getInputBoolean(options.scanOnTouchMove),
scanOnTouchPress: this._getInputBoolean(options.scanOnTouchPress),
scanOnTouchRelease: this._getInputBoolean(options.scanOnTouchRelease),
+ scanOnTouchTap: this._getInputBoolean(options.scanOnTouchTap),
scanOnPenMove: this._getInputBoolean(options.scanOnPenMove),
scanOnPenHover: this._getInputBoolean(options.scanOnPenHover),
scanOnPenReleaseHover: this._getInputBoolean(options.scanOnPenReleaseHover),
diff --git a/ext/js/pages/settings/scan-inputs-controller.js b/ext/js/pages/settings/scan-inputs-controller.js
index fcaad589..839a6896 100644
--- a/ext/js/pages/settings/scan-inputs-controller.js
+++ b/ext/js/pages/settings/scan-inputs-controller.js
@@ -208,8 +208,9 @@ export class ScanInputsController {
showAdvanced: false,
searchTerms: true,
searchKanji: true,
- scanOnTouchMove: true,
- scanOnTouchPress: true,
+ scanOnTouchTap: true,
+ scanOnTouchMove: false,
+ scanOnTouchPress: false,
scanOnTouchRelease: false,
scanOnPenMove: true,
scanOnPenHover: true,
diff --git a/ext/templates-settings.html b/ext/templates-settings.html
index a3a3febe..0fb29c22 100644
--- a/ext/templates-settings.html
+++ b/ext/templates-settings.html
@@ -190,6 +190,10 @@
<div class="scan-input-prefix-cell scan-input-options-cell scan-input-advanced-only" data-property="touch-options"><span>Touch options:</span></div>
<div class="scan-input-content-cell scan-input-options-cell scan-input-advanced-only" data-property="touch-options">
<label class="scan-input-checkbox-item">
+ <label class="checkbox"><input type="checkbox" class="scan-input-settings-checkbox" data-property="options.scanOnTouchTap"><span class="checkbox-body"><span class="checkbox-fill"></span><span class="checkbox-border"></span><span class="checkbox-check"></span></span></label>
+ <span>Scan on touch tap</span>
+ </label>
+ <label class="scan-input-checkbox-item">
<label class="checkbox"><input type="checkbox" class="scan-input-settings-checkbox" data-property="options.scanOnTouchPress"><span class="checkbox-body"><span class="checkbox-fill"></span><span class="checkbox-border"></span><span class="checkbox-check"></span></span></label>
<span>Scan on touch press</span>
</label>
diff --git a/test/options-util.test.js b/test/options-util.test.js
index ebee0765..d1e9389c 100644
--- a/test/options-util.test.js
+++ b/test/options-util.test.js
@@ -343,8 +343,9 @@ function createProfileOptionsUpdatedTestData1() {
showAdvanced: false,
searchTerms: true,
searchKanji: true,
- scanOnTouchMove: true,
- scanOnTouchPress: true,
+ scanOnTouchTap: true,
+ scanOnTouchMove: false,
+ scanOnTouchPress: false,
scanOnTouchRelease: false,
scanOnPenMove: true,
scanOnPenHover: true,
@@ -367,8 +368,9 @@ function createProfileOptionsUpdatedTestData1() {
showAdvanced: false,
searchTerms: true,
searchKanji: true,
- scanOnTouchMove: true,
- scanOnTouchPress: true,
+ scanOnTouchTap: true,
+ scanOnTouchMove: false,
+ scanOnTouchPress: false,
scanOnTouchRelease: false,
scanOnPenMove: true,
scanOnPenHover: true,
@@ -391,8 +393,9 @@ function createProfileOptionsUpdatedTestData1() {
showAdvanced: false,
searchTerms: true,
searchKanji: true,
- scanOnTouchMove: true,
- scanOnTouchPress: true,
+ scanOnTouchTap: true,
+ scanOnTouchMove: false,
+ scanOnTouchPress: false,
scanOnTouchRelease: false,
scanOnPenMove: true,
scanOnPenHover: true,
@@ -599,7 +602,7 @@ function createOptionsUpdatedTestData1() {
}
],
profileCurrent: 0,
- version: 29,
+ version: 30,
global: {
database: {
prefixWildcardsSupported: false
diff --git a/types/ext/settings.d.ts b/types/ext/settings.d.ts
index 45466c3d..8075476b 100644
--- a/types/ext/settings.d.ts
+++ b/types/ext/settings.d.ts
@@ -211,6 +211,7 @@ export type ScanningInputOptions = {
scanOnTouchMove: boolean;
scanOnTouchPress: boolean;
scanOnTouchRelease: boolean;
+ scanOnTouchTap: boolean;
scanOnPenMove: boolean;
scanOnPenHover: boolean;
scanOnPenReleaseHover: boolean;
diff --git a/types/ext/text-scanner.d.ts b/types/ext/text-scanner.d.ts
index 8acc780d..21ca8f24 100644
--- a/types/ext/text-scanner.d.ts
+++ b/types/ext/text-scanner.d.ts
@@ -60,6 +60,7 @@ export type InputOptions = {
scanOnTouchMove: boolean;
scanOnTouchPress: boolean;
scanOnTouchRelease: boolean;
+ scanOnTouchTap: boolean;
scanOnPenMove: boolean;
scanOnPenHover: boolean;
scanOnPenReleaseHover: boolean;
@@ -84,6 +85,7 @@ export type InputConfig = {
scanOnTouchMove: boolean;
scanOnTouchPress: boolean;
scanOnTouchRelease: boolean;
+ scanOnTouchTap: boolean;
scanOnPenMove: boolean;
scanOnPenHover: boolean;
scanOnPenReleaseHover: boolean;