diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-12-18 12:38:39 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-18 12:38:39 -0500 | 
| commit | 0e52a1f509155673d26a2a1ad00987389a05fea6 (patch) | |
| tree | 726344c15a28e6d7a43be6df34fbe201d6fee018 | |
| parent | 851014a404c6db2b07699382726fd10d028f4828 (diff) | |
Scanning wildcards (#2042)
* Add scanning.matchTypePrefix option
* Update TextScanner to use matchTypePrefix option
* Add setting
* Update warning
| -rw-r--r-- | ext/data/schemas/options-schema.json | 7 | ||||
| -rw-r--r-- | ext/js/app/frontend.js | 1 | ||||
| -rw-r--r-- | ext/js/data/options-util.js | 12 | ||||
| -rw-r--r-- | ext/js/display/display.js | 1 | ||||
| -rw-r--r-- | ext/js/language/text-scanner.js | 11 | ||||
| -rw-r--r-- | ext/settings.html | 26 | ||||
| -rw-r--r-- | test/test-options-util.js | 3 | 
7 files changed, 56 insertions, 5 deletions
| diff --git a/ext/data/schemas/options-schema.json b/ext/data/schemas/options-schema.json index 2dd3981d..d15b533b 100644 --- a/ext/data/schemas/options-schema.json +++ b/ext/data/schemas/options-schema.json @@ -435,7 +435,8 @@                                      "enableOnPopupExpressions",                                      "enableOnSearchPage",                                      "enableSearchTags", -                                    "layoutAwareScan" +                                    "layoutAwareScan", +                                    "matchTypePrefix"                                  ],                                  "properties": {                                      "inputs": { @@ -658,6 +659,10 @@                                      "layoutAwareScan": {                                          "type": "boolean",                                          "default": false +                                    }, +                                    "matchTypePrefix": { +                                        "type": "boolean", +                                        "default": false                                      }                                  }                              }, diff --git a/ext/js/app/frontend.js b/ext/js/app/frontend.js index 3b482ad2..97d9e750 100644 --- a/ext/js/app/frontend.js +++ b/ext/js/app/frontend.js @@ -397,6 +397,7 @@ class Frontend {              pointerEventsEnabled: scanningOptions.pointerEventsEnabled,              scanLength: scanningOptions.length,              layoutAwareScan: scanningOptions.layoutAwareScan, +            matchTypePrefix: scanningOptions.matchTypePrefix,              preventMiddleMouse,              sentenceParsingOptions          }); diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js index c8ab2d01..7a725005 100644 --- a/ext/js/data/options-util.js +++ b/ext/js/data/options-util.js @@ -464,7 +464,8 @@ class OptionsUtil {              {async: true,  update: this._updateVersion12.bind(this)},              {async: true,  update: this._updateVersion13.bind(this)},              {async: false, update: this._updateVersion14.bind(this)}, -            {async: false, update: this._updateVersion15.bind(this)} +            {async: false, update: this._updateVersion15.bind(this)}, +            {async: false, update: this._updateVersion16.bind(this)}          ];          if (typeof targetVersion === 'number' && targetVersion < result.length) {              result.splice(targetVersion); @@ -888,4 +889,13 @@ class OptionsUtil {          }          return options;      } + +    _updateVersion16(options) { +        // Version 16 changes: +        //  Added scanning.matchTypePrefix. +        for (const profile of options.profiles) { +            profile.options.scanning.matchTypePrefix = false; +        } +        return options; +    }  } diff --git a/ext/js/display/display.js b/ext/js/display/display.js index cd60488d..42b7c111 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -325,6 +325,7 @@ class Display extends EventDispatcher {                  scanLength: scanningOptions.length,                  layoutAwareScan: scanningOptions.layoutAwareScan,                  preventMiddleMouse: scanningOptions.preventMiddleMouse.onSearchQuery, +                matchTypePrefix: false,                  sentenceParsingOptions              }          }); diff --git a/ext/js/language/text-scanner.js b/ext/js/language/text-scanner.js index 5d37c84b..cdcec257 100644 --- a/ext/js/language/text-scanner.js +++ b/ext/js/language/text-scanner.js @@ -61,6 +61,7 @@ class TextScanner extends EventDispatcher {          this._scanLength = 1;          this._layoutAwareScan = false;          this._preventMiddleMouse = false; +        this._matchTypePrefix = false;          this._sentenceScanExtent = 0;          this._sentenceTerminateAtNewlines = true;          this._sentenceTerminatorMap = new Map(); @@ -155,7 +156,8 @@ class TextScanner extends EventDispatcher {          scanLength,          layoutAwareScan,          preventMiddleMouse, -        sentenceParsingOptions +        sentenceParsingOptions, +        matchTypePrefix      }) {          if (Array.isArray(inputs)) {              this._inputs = inputs.map(({ @@ -210,6 +212,9 @@ class TextScanner extends EventDispatcher {          if (typeof preventMiddleMouse === 'boolean') {              this._preventMiddleMouse = preventMiddleMouse;          } +        if (typeof matchTypePrefix === 'boolean') { +            this._matchTypePrefix = matchTypePrefix; +        }          if (typeof sentenceParsingOptions === 'object' && sentenceParsingOptions !== null) {              const {scanExtent, terminationCharacterMode, terminationCharacters} = sentenceParsingOptions;              if (typeof scanExtent === 'number') { @@ -854,7 +859,9 @@ class TextScanner extends EventDispatcher {          const searchText = this.getTextSourceContent(textSource, scanLength, layoutAwareScan);          if (searchText.length === 0) { return null; } -        const {dictionaryEntries, originalTextLength} = await yomichan.api.termsFind(searchText, {}, optionsContext); +        const details = {}; +        if (this._matchTypePrefix) { details.matchType = 'prefix'; } +        const {dictionaryEntries, originalTextLength} = await yomichan.api.termsFind(searchText, details, optionsContext);          if (dictionaryEntries.length === 0) { return null; }          textSource.setEndOffset(originalTextLength, layoutAwareScan); diff --git a/ext/settings.html b/ext/settings.html index 9309c889..6452a335 100644 --- a/ext/settings.html +++ b/ext/settings.html @@ -484,6 +484,32 @@                  <label class="toggle"><input type="checkbox" data-setting="scanning.deepDomScan"><span class="toggle-body"><span class="toggle-track"></span><span class="toggle-knob"></span></span></label>              </div>          </div></div> +        <div class="settings-item advanced-only"> +            <div class="settings-item-inner"> +                <div class="settings-item-left"> +                    <div class="settings-item-label">Wildcard scanning</div> +                    <div class="settings-item-description"> +                        Enable suffix wildcard when looking up scanned webpage text. +                        <a tabindex="0" class="more-toggle more-only" data-parent-distance="4">More…</a> +                    </div> +                </div> +                <div class="settings-item-right"> +                    <label class="toggle"><input type="checkbox" data-setting="scanning.matchTypePrefix"><span class="toggle-body"><span class="toggle-track"></span><span class="toggle-knob"></span></span></label> +                </div> +            </div> +            <div class="settings-item-children more" hidden> +                <p> +                    Rather than searching for the source text exactly, the text will only be required to be a prefix of an existing term. +                    For example, scanning 読み will effectively search for 読み*, which may bring up additional results such as 読み方. +                </p> +                <p class="danger-text"> +                    This will likely cause scanning and lookup to be slower, and the results may not be as relevant. +                </p> +                <p> +                    <a tabindex="0" class="more-toggle" data-parent-distance="3">Less…</a> +                </p> +            </div> +        </div>          <div class="settings-item advanced-only"><div class="settings-item-inner settings-item-inner-wrappable">              <div class="settings-item-left">                  <div class="settings-item-label">Text scan length</div> diff --git a/test/test-options-util.js b/test/test-options-util.js index 70229683..b1d56b28 100644 --- a/test/test-options-util.js +++ b/test/test-options-util.js @@ -344,6 +344,7 @@ function createProfileOptionsUpdatedTestData1() {              layoutAwareScan: false,              hideDelay: 0,              pointerEventsEnabled: false, +            matchTypePrefix: false,              preventMiddleMouse: {                  onWebPages: false,                  onPopupPages: false, @@ -595,7 +596,7 @@ function createOptionsUpdatedTestData1() {              }          ],          profileCurrent: 0, -        version: 15, +        version: 16,          global: {              database: {                  prefixWildcardsSupported: false |