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}; + } } |