aboutsummaryrefslogtreecommitdiff
path: root/ext/js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/js')
-rw-r--r--ext/js/background/backend.js11
-rw-r--r--ext/js/data/options-util.js15
-rw-r--r--ext/js/language/translator.js5
-rw-r--r--ext/js/pages/settings/dictionary-controller.js12
4 files changed, 34 insertions, 9 deletions
diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js
index 3f3c6063..a5a42272 100644
--- a/ext/js/background/backend.js
+++ b/ext/js/background/backend.js
@@ -2427,7 +2427,8 @@ export class Backend {
enabledDictionaryMap.set(mainDictionary, {
index: enabledDictionaryMap.size,
priority: 0,
- allowSecondarySearches: false
+ allowSecondarySearches: false,
+ partsOfSpeechFilter: true
});
excludeDictionaryDefinitions = new Set();
excludeDictionaryDefinitions.add(mainDictionary);
@@ -2473,10 +2474,12 @@ export class Backend {
const enabledDictionaryMap = new Map();
for (const dictionary of options.dictionaries) {
if (!dictionary.enabled) { continue; }
- enabledDictionaryMap.set(dictionary.name, {
+ const {name, priority, allowSecondarySearches, partsOfSpeechFilter} = dictionary;
+ enabledDictionaryMap.set(name, {
index: enabledDictionaryMap.size,
- priority: dictionary.priority,
- allowSecondarySearches: dictionary.allowSecondarySearches
+ priority,
+ allowSecondarySearches,
+ partsOfSpeechFilter
});
}
return enabledDictionaryMap;
diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js
index c6acf373..c93e261d 100644
--- a/ext/js/data/options-util.js
+++ b/ext/js/data/options-util.js
@@ -555,7 +555,8 @@ export class OptionsUtil {
this._updateVersion19,
this._updateVersion20,
this._updateVersion21,
- this._updateVersion22
+ this._updateVersion22,
+ this._updateVersion23
];
if (typeof targetVersion === 'number' && targetVersion < result.length) {
result.splice(targetVersion);
@@ -1140,8 +1141,18 @@ export class OptionsUtil {
for (const {options: profileOptions} of options.profiles) {
profileOptions.translation.searchResolution = 'letter';
}
+ }
- return options;
+ /**
+ * - Added dictionaries[].partsOfSpeechFilter.
+ * @type {import('options-util').UpdateFunction}
+ */
+ _updateVersion23(options) {
+ for (const {options: profileOptions} of options.profiles) {
+ for (const dictionary of profileOptions.dictionaries) {
+ dictionary.partsOfSpeechFilter = true;
+ }
+ }
}
/**
diff --git a/ext/js/language/translator.js b/ext/js/language/translator.js
index 36ed8b43..5441294b 100644
--- a/ext/js/language/translator.js
+++ b/ext/js/language/translator.js
@@ -269,10 +269,13 @@ export class Translator {
const databaseEntries = await this._database.findTermsBulk(uniqueDeinflectionTerms, enabledDictionaryMap, matchType);
for (const databaseEntry of databaseEntries) {
+ const entryDictionary = /** @type {import('translation').FindTermDictionary} */ (enabledDictionaryMap.get(databaseEntry.dictionary));
+ const partsOfSpeechFilter = entryDictionary.partsOfSpeechFilter;
+
const definitionRules = Deinflector.rulesToRuleFlags(databaseEntry.rules);
for (const deinflection of uniqueDeinflectionArrays[databaseEntry.index]) {
const deinflectionRules = deinflection.rules;
- if (deinflectionRules === 0 || (definitionRules & deinflectionRules) !== 0) {
+ if (!partsOfSpeechFilter || deinflectionRules === 0 || (definitionRules & deinflectionRules) !== 0) {
deinflection.databaseEntries.push(databaseEntry);
}
}
diff --git a/ext/js/pages/settings/dictionary-controller.js b/ext/js/pages/settings/dictionary-controller.js
index 81b781da..18a802be 100644
--- a/ext/js/pages/settings/dictionary-controller.js
+++ b/ext/js/pages/settings/dictionary-controller.js
@@ -164,7 +164,7 @@ class DictionaryEntry {
/** */
_showDetails() {
- const {title, revision, version, prefixWildcardsSupported} = this._dictionaryInfo;
+ const {title, revision, version, counts, prefixWildcardsSupported} = this._dictionaryInfo;
const modal = this._dictionaryController.modalController.getModal('dictionary-details');
if (modal === null) { return; }
@@ -181,12 +181,19 @@ class DictionaryEntry {
const wildcardSupportedElement = querySelectorNotNull(modal.node, '.dictionary-prefix-wildcard-searches-supported');
/** @type {HTMLElement} */
const detailsTableElement = querySelectorNotNull(modal.node, '.dictionary-details-table');
+ /** @type {HTMLElement} */
+ const partsOfSpeechFilterSetting = querySelectorNotNull(modal.node, '.dictionary-parts-of-speech-filter-setting');
+ /** @type {HTMLElement} */
+ const partsOfSpeechFilterToggle = querySelectorNotNull(partsOfSpeechFilterSetting, '.dictionary-parts-of-speech-filter-toggle');
titleElement.textContent = title;
versionElement.textContent = `rev.${revision}`;
outdateElement.hidden = (version >= 3);
countsElement.textContent = this._counts !== null ? JSON.stringify(this._counts, null, 4) : '';
wildcardSupportedElement.checked = prefixWildcardsSupported;
+ partsOfSpeechFilterSetting.hidden = !counts.terms.total;
+ partsOfSpeechFilterToggle.dataset.setting = `dictionaries[${this._index}].partsOfSpeechFilter`;
+
this._setupDetails(detailsTableElement);
modal.setVisible(true);
@@ -513,7 +520,8 @@ export class DictionaryController {
priority: 0,
enabled,
allowSecondarySearches: false,
- definitionsCollapsible: 'not-collapsible'
+ definitionsCollapsible: 'not-collapsible',
+ partsOfSpeechFilter: true
};
}