aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarv <rotrobmin@gmail.com>2024-07-03 03:00:07 -0700
committerGitHub <noreply@github.com>2024-07-03 10:00:07 +0000
commit066ca66fc4033da39d0aecd73b0f5c200cb3f3ed (patch)
tree64d00048c4dd0b422141a72b9c6b1310f59fc496
parentc1f0343feeb8b8a8feaa942022150f971e118659 (diff)
Add Option for Scanning Alt Text (#1169)
* Add Option for Scanning Alt Text * Don't scan alt text if option disabled * Add scanAltText to Options Schema * Add `scanning.scanAltText` Update Function * Bump Options Test Version * Remove Param Annotation
-rw-r--r--ext/data/schemas/options-schema.json5
-rw-r--r--ext/js/app/frontend.js1
-rw-r--r--ext/js/data/options-util.js12
-rw-r--r--ext/js/display/display.js2
-rw-r--r--ext/js/language/text-scanner.js13
-rw-r--r--ext/settings.html9
-rw-r--r--test/options-util.test.js4
-rw-r--r--types/ext/settings.d.ts1
-rw-r--r--types/ext/text-scanner.d.ts1
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 = {