diff options
Diffstat (limited to 'ext/js')
-rw-r--r-- | ext/js/background/backend.js | 11 | ||||
-rw-r--r-- | ext/js/data/options-util.js | 15 | ||||
-rw-r--r-- | ext/js/language/translator.js | 5 | ||||
-rw-r--r-- | ext/js/pages/settings/dictionary-controller.js | 12 |
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 }; } |