diff options
Diffstat (limited to 'ext/mixed/js')
| -rw-r--r-- | ext/mixed/js/display.js | 19 | 
1 files changed, 17 insertions, 2 deletions
| diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index c7ad8894..19634525 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -1386,8 +1386,7 @@ class Display extends EventDispatcher {              const timestamp = Date.now();              const ownerFrameId = this._ownerFrameId;              const {fields} = modeOptions; -            const definitionExpressions = definition.expressions; -            const {expression, reading} = Array.isArray(definitionExpressions) ? definitionExpressions[0] : definition; +            const {expression, reading} = this._getDefinitionPrimaryExpressionAndReading(definition);              const audioDetails = (mode !== 'kanji' && this._ankiNoteBuilder.containsMarker(fields, 'audio') ? {sources, customSourceUrl} : null);              const screenshotDetails = (this._ankiNoteBuilder.containsMarker(fields, 'screenshot') ? {ownerFrameId, format, quality} : null);              const clipboardDetails = { @@ -1424,4 +1423,20 @@ class Display extends EventDispatcher {      async _getAudioInfo(source, expression, reading, details) {          return await api.getDefinitionAudioInfo(source, expression, reading, details);      } + +    _getDefinitionPrimaryExpressionAndReading(definition) { +        const termDetailsList = definition.expressions; +        let bestIndex = -1; +        for (let i = 0, ii = termDetailsList.length; i < ii; ++i) { +            const {sourceTerm, expression, reading} = termDetailsList[i]; +            if (expression === sourceTerm) { +                bestIndex = i; +                break; +            } else if (reading === sourceTerm && bestIndex < 0) { +                bestIndex = i; +            } +        } +        const {expression, reading} = termDetailsList[Math.max(0, bestIndex)]; +        return {expression, reading}; +    }  } |