diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-09-13 13:25:03 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-13 13:25:03 -0400 | 
| commit | 621aa354e77a5f0e7825ff0ad7a66c41154f2511 (patch) | |
| tree | 194717396918d27c0ebadc21e62a32714b27886f | |
| parent | b180ebc3bc5182712fe33e5af3bea64b06204dcc (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.json | 20 | ||||
| -rw-r--r-- | ext/bg/js/options.js | 4 | ||||
| -rw-r--r-- | ext/bg/js/settings/scan-inputs-controller.js | 4 | ||||
| -rw-r--r-- | ext/bg/settings.html | 2 | ||||
| -rw-r--r-- | ext/mixed/js/text-scanner.js | 56 | 
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 && |