summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/data/schemas/options-schema.json7
-rw-r--r--ext/js/app/frontend.js1
-rw-r--r--ext/js/data/options-util.js12
-rw-r--r--ext/js/display/display.js1
-rw-r--r--ext/js/language/text-scanner.js11
-rw-r--r--ext/settings.html26
-rw-r--r--test/test-options-util.js3
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&hellip;</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&hellip;</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