diff options
| -rw-r--r-- | ext/data/schemas/options-schema.json | 5 | ||||
| -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 | 2 | ||||
| -rw-r--r-- | ext/js/language/text-scanner.js | 13 | ||||
| -rw-r--r-- | ext/settings.html | 9 | ||||
| -rw-r--r-- | test/options-util.test.js | 4 | ||||
| -rw-r--r-- | types/ext/settings.d.ts | 1 | ||||
| -rw-r--r-- | types/ext/text-scanner.d.ts | 1 | 
9 files changed, 46 insertions, 2 deletions
diff --git a/ext/data/schemas/options-schema.json b/ext/data/schemas/options-schema.json index 2fb1c9c3..85e02c02 100644 --- a/ext/data/schemas/options-schema.json +++ b/ext/data/schemas/options-schema.json @@ -437,6 +437,7 @@                                      "hideDelay",                                      "length",                                      "deepDomScan", +                                    "scanAltText",                                      "popupNestingMaxDepth",                                      "enablePopupSearch",                                      "enableOnPopupExpressions", @@ -688,6 +689,10 @@                                          "type": "boolean",                                          "default": false                                      }, +                                    "scanAltText": { +                                        "type": "boolean", +                                        "default": true +                                    },                                      "popupNestingMaxDepth": {                                          "type": "integer",                                          "minimum": 0, diff --git a/ext/js/app/frontend.js b/ext/js/app/frontend.js index 8ac27979..c3022908 100644 --- a/ext/js/app/frontend.js +++ b/ext/js/app/frontend.js @@ -513,6 +513,7 @@ export class Frontend {              matchTypePrefix: scanningOptions.matchTypePrefix,              preventMiddleMouse,              sentenceParsingOptions, +            scanAltText: scanningOptions.scanAltText,          });          this._updateTextScannerEnabled(); diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js index 8af299d8..850ac81d 100644 --- a/ext/js/data/options-util.js +++ b/ext/js/data/options-util.js @@ -349,6 +349,7 @@ export class OptionsUtil {                  enableOnSearchPage: true,                  enableSearchTags: false,                  layoutAwareScan: false, +                scanAltText: true,              },              translation: { @@ -549,6 +550,7 @@ export class OptionsUtil {              this._updateVersion39,              this._updateVersion40,              this._updateVersion41, +            this._updateVersion42,          ];          /* eslint-enable @typescript-eslint/unbound-method */          if (typeof targetVersion === 'number' && targetVersion < result.length) { @@ -1349,6 +1351,16 @@ export class OptionsUtil {      }      /** +     * - Added scanning.scanAltText +     * @type {import('options-util').UpdateFunction} +     */ +    async _updateVersion42(options) { +        for (const profile of options.profiles) { +            profile.options.scanning.scanAltText = true; +        } +    } + +    /**       * @param {string} url       * @returns {Promise<chrome.tabs.Tab>}       */ diff --git a/ext/js/display/display.js b/ext/js/display/display.js index 3d18e416..01406382 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -461,6 +461,7 @@ export class Display extends EventDispatcher {                  preventMiddleMouse: scanningOptions.preventMiddleMouse.onSearchQuery,                  matchTypePrefix: false,                  sentenceParsingOptions, +                scanAltText: scanningOptions.scanAltText,              },          }); @@ -1984,6 +1985,7 @@ export class Display extends EventDispatcher {              layoutAwareScan: scanningOptions.layoutAwareScan,              preventMiddleMouse: false,              sentenceParsingOptions, +            scanAltText: scanningOptions.scanAltText,          });          this._contentTextScanner.setEnabled(true); diff --git a/ext/js/language/text-scanner.js b/ext/js/language/text-scanner.js index 249a2eda..759adf20 100644 --- a/ext/js/language/text-scanner.js +++ b/ext/js/language/text-scanner.js @@ -124,6 +124,8 @@ export class TextScanner extends EventDispatcher {          this._sentenceBackwardQuoteMap = new Map();          /** @type {import('text-scanner').InputConfig[]} */          this._inputs = []; +        /** @type {boolean} */ +        this._scanAltText = true;          /** @type {boolean} */          this._enabled = false; @@ -255,6 +257,7 @@ export class TextScanner extends EventDispatcher {          preventMiddleMouse,          sentenceParsingOptions,          matchTypePrefix, +        scanAltText,      }) {          if (Array.isArray(inputs)) {              this._inputs = inputs.map((input) => this._convertInput(input)); @@ -289,6 +292,9 @@ export class TextScanner extends EventDispatcher {          if (typeof matchTypePrefix === 'boolean') {              this._matchTypePrefix = matchTypePrefix;          } +        if (typeof scanAltText === 'boolean') { +            this._scanAltText = scanAltText; +        }          if (typeof sentenceParsingOptions === 'object' && sentenceParsingOptions !== null) {              const {scanExtent, terminationCharacterMode, terminationCharacters} = sentenceParsingOptions;              if (typeof scanExtent === 'number') { @@ -443,6 +449,11 @@ export class TextScanner extends EventDispatcher {       */      async _search(textSource, searchTerms, searchKanji, inputInfo, showEmpty = false) {          try { +            const isAltText = textSource instanceof TextSourceElement; +            if (isAltText && !this._scanAltText) { +                return; +            } +              const inputInfoDetail = inputInfo.detail;              const selectionRestoreInfo = (                  (typeof inputInfoDetail === 'object' && inputInfoDetail !== null && inputInfoDetail.restoreSelection) ? @@ -468,7 +479,7 @@ export class TextScanner extends EventDispatcher {              const result = await this._findDictionaryEntries(textSource, searchTerms, searchKanji, optionsContext);              if (result !== null) {                  ({dictionaryEntries, sentence, type} = result); -            } else if (showEmpty || (textSource !== null && textSource instanceof TextSourceElement && await this._isTextLookupWorthy(textSource.fullContent))) { +            } else if (showEmpty || (textSource !== null && isAltText && await this._isTextLookupWorthy(textSource.fullContent))) {                  // Shows a "No results found" message                  dictionaryEntries = [];                  sentence = {text: '', offset: 0}; diff --git a/ext/settings.html b/ext/settings.html index dfd562a9..ccd6dc9b 100644 --- a/ext/settings.html +++ b/ext/settings.html @@ -415,6 +415,15 @@                  <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"><div class="settings-item-inner"> +            <div class="settings-item-left"> +                <div class="settings-item-label">Scan alt text</div> +                <div class="settings-item-description">Scan text that is used for image and button descriptions.</div> +            </div> +            <div class="settings-item-right"> +                <label class="toggle"><input type="checkbox" data-setting="scanning.scanAltText"><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"> diff --git a/test/options-util.test.js b/test/options-util.test.js index 253b9650..60d44470 100644 --- a/test/options-util.test.js +++ b/test/options-util.test.js @@ -95,6 +95,7 @@ function createProfileOptionsTestData1() {              enableOnSearchPage: true,              enableSearchTags: false,              layoutAwareScan: false, +            scanAltText: true,          },          translation: {              convertHalfWidthCharacters: 'false', @@ -325,6 +326,7 @@ function createProfileOptionsUpdatedTestData1() {              hidePopupOnCursorExit: false,              hidePopupOnCursorExitDelay: 0,              normalizeCssZoom: true, +            scanAltText: true,              preventMiddleMouse: {                  onWebPages: false,                  onPopupPages: false, @@ -606,7 +608,7 @@ function createOptionsUpdatedTestData1() {              },          ],          profileCurrent: 0, -        version: 41, +        version: 42,          global: {              database: {                  prefixWildcardsSupported: false, diff --git a/types/ext/settings.d.ts b/types/ext/settings.d.ts index 559a27c4..b84942b1 100644 --- a/types/ext/settings.d.ts +++ b/types/ext/settings.d.ts @@ -190,6 +190,7 @@ export type ScanningOptions = {      hidePopupOnCursorExit: boolean;      hidePopupOnCursorExitDelay: number;      normalizeCssZoom: boolean; +    scanAltText: boolean;  };  export type ScanningInput = { diff --git a/types/ext/text-scanner.d.ts b/types/ext/text-scanner.d.ts index 4277d49a..0af55d72 100644 --- a/types/ext/text-scanner.d.ts +++ b/types/ext/text-scanner.d.ts @@ -41,6 +41,7 @@ export type Options = {      preventMiddleMouse?: boolean;      matchTypePrefix?: boolean;      sentenceParsingOptions?: SentenceParsingOptions; +    scanAltText?: boolean;  };  export type InputOptionsOuter = {  |