diff options
| -rw-r--r-- | ext/data/schemas/options-schema.json | 19 | ||||
| -rw-r--r-- | ext/js/data/options-util.js | 19 | ||||
| -rw-r--r-- | ext/js/display/display.js | 1 | ||||
| -rw-r--r-- | ext/js/language/text-scanner.js | 13 | ||||
| -rw-r--r-- | ext/js/pages/settings/scan-inputs-controller.js | 5 | ||||
| -rw-r--r-- | ext/templates-settings.html | 4 | ||||
| -rw-r--r-- | test/options-util.test.js | 17 | ||||
| -rw-r--r-- | types/ext/settings.d.ts | 1 | ||||
| -rw-r--r-- | types/ext/text-scanner.d.ts | 2 | 
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; |