diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-10-04 22:04:44 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-04 22:04:44 -0400 | 
| commit | 54810510fa24c41f5c227d23c4f383052ce63a62 (patch) | |
| tree | 50c1f15e1dad92edc377727e220d58b269f44558 /ext/mixed/js | |
| parent | 2d3cf89b490d09bc66138ba200148283be52d191 (diff) | |
Fix primary audio source (#886)
* Add abstraction: _getDefinitionPrimaryExpressionAndReading
* Reuse existing definitions in a sequence
* Revert change to related definition source/rawSource/sourceTerm
* Update _getDefinitionPrimaryExpressionAndReading to return best match
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}; +    }  } |