diff options
Diffstat (limited to 'ext/js/display/display.js')
-rw-r--r-- | ext/js/display/display.js | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/ext/js/display/display.js b/ext/js/display/display.js index b5dd4ba6..f86d7b8c 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -1215,28 +1215,45 @@ export class Display extends EventDispatcher { * @returns {Promise<import('dictionary').DictionaryEntry[]>} */ async _findDictionaryEntries(isKanji, source, wildcardsEnabled, optionsContext) { + /** @type {import('dictionary').DictionaryEntry[]} */ + let dictionaryEntries = []; + const {findDetails, source: source2} = this._getFindDetails(source, wildcardsEnabled); if (isKanji) { - return await this._application.api.kanjiFind(source, optionsContext); + dictionaryEntries = await this._application.api.kanjiFind(source, optionsContext); + if (dictionaryEntries.length > 0) { return dictionaryEntries; } + + dictionaryEntries = (await this._application.api.termsFind(source2, findDetails, optionsContext)).dictionaryEntries; } else { - /** @type {import('api').FindTermsDetails} */ - const findDetails = {}; - if (wildcardsEnabled) { - const match = /^([*\uff0a]*)([\w\W]*?)([*\uff0a]*)$/.exec(source); - if (match !== null) { - if (match[1]) { - findDetails.matchType = 'suffix'; - findDetails.deinflect = false; - } else if (match[3]) { - findDetails.matchType = 'prefix'; - findDetails.deinflect = false; - } - source = match[2]; + dictionaryEntries = (await this._application.api.termsFind(source2, findDetails, optionsContext)).dictionaryEntries; + if (dictionaryEntries.length > 0) { return dictionaryEntries; } + + dictionaryEntries = await this._application.api.kanjiFind(source, optionsContext); + } + return dictionaryEntries; + } + + /** + * @param {string} source + * @param {boolean} wildcardsEnabled + * @returns {{findDetails: import('api').FindTermsDetails, source: string}} + */ + _getFindDetails(source, wildcardsEnabled) { + /** @type {import('api').FindTermsDetails} */ + const findDetails = {}; + if (wildcardsEnabled) { + const match = /^([*\uff0a]*)([\w\W]*?)([*\uff0a]*)$/.exec(source); + if (match !== null) { + if (match[1]) { + findDetails.matchType = 'suffix'; + findDetails.deinflect = false; + } else if (match[3]) { + findDetails.matchType = 'prefix'; + findDetails.deinflect = false; } + source = match[2]; } - - const {dictionaryEntries} = await this._application.api.termsFind(source, findDetails, optionsContext); - return dictionaryEntries; } + return {findDetails, source}; } /** |