diff options
Diffstat (limited to 'ext/js/display')
| -rw-r--r-- | ext/js/display/display-audio.js | 49 | 
1 files changed, 35 insertions, 14 deletions
| diff --git a/ext/js/display/display-audio.js b/ext/js/display/display-audio.js index b7ec6ba1..6d2504e4 100644 --- a/ext/js/display/display-audio.js +++ b/ext/js/display/display-audio.js @@ -146,7 +146,7 @@ class DisplayAudio {      _onOptionsUpdated({options}) {          if (options === null) { return; } -        const {enabled, autoPlay, textToSpeechVoice, customSourceUrl, volume, sources} = options.audio; +        const {enabled, autoPlay, volume, sources} = options.audio;          this._autoPlay = enabled && autoPlay;          this._playbackVolume = Number.isFinite(volume) ? Math.max(0.0, Math.min(1.0, volume / 100.0)) : 1.0; @@ -155,13 +155,14 @@ class DisplayAudio {              'jpod101-alternate',              'jisho'          ]); +        const nameMap = new Map();          this._audioSources.length = 0; -        for (const type of sources) { -            this._addAudioSourceInfo(type, customSourceUrl, textToSpeechVoice, true); +        for (const {type, url, voice} of sources) { +            this._addAudioSourceInfo(type, url, voice, true, nameMap);              requiredAudioSources.delete(type);          }          for (const type of requiredAudioSources) { -            this._addAudioSourceInfo(type, '', '', false); +            this._addAudioSourceInfo(type, '', '', false, nameMap);          }          const data = document.documentElement.dataset; @@ -170,20 +171,36 @@ class DisplayAudio {          this._cache.clear();      } -    _addAudioSourceInfo(type, url, voice, isInOptions) { +    _addAudioSourceInfo(type, url, voice, isInOptions, nameMap) {          const index = this._audioSources.length;          const downloadable = this._sourceIsDownloadable(type); -        let displayName = this._audioSourceTypeNames.get(type); -        if (typeof displayName === 'undefined') { displayName = 'Unknown'; } -        this._audioSources.push({ +        let name = this._audioSourceTypeNames.get(type); +        if (typeof name === 'undefined') { name = 'Unknown'; } + +        let entries = nameMap.get(name); +        if (typeof entries === 'undefined') { +            entries = []; +            nameMap.set(name, entries); +        } +        const nameIndex = entries.length; +        if (nameIndex === 1) { +            entries[0].nameUnique = false; +        } + +        const source = {              index,              type,              url,              voice,              isInOptions,              downloadable, -            displayName -        }); +            name, +            nameIndex, +            nameUnique: (nameIndex === 0) +        }; + +        entries.push(source); +        this._audioSources.push(source);      }      _onAudioPlayButtonClick(dictionaryEntryIndex, headwordIndex, e) { @@ -580,19 +597,23 @@ class DisplayAudio {          let showIcons = false;          const currentItems = [...menuItemContainer.children];          for (const source of this._audioSources) { -            const {index, displayName, isInOptions, downloadable} = source; +            const {index, name, nameIndex, nameUnique, isInOptions, downloadable} = source;              const entries = this._getMenuItemEntries(source, term, reading);              for (let i = 0, ii = entries.length; i < ii; ++i) { -                const {valid, index: subIndex, name} = entries[i]; +                const {valid, index: subIndex, name: subName} = entries[i];                  let node = this._getOrCreateMenuItem(currentItems, index, subIndex);                  if (node === null) {                      node = displayGenerator.instantiateTemplate('audio-button-popup-menu-item');                  }                  const labelNode = node.querySelector('.popup-menu-item-audio-button .popup-menu-item-label'); -                let label = displayName; +                let label = name; +                if (!nameUnique) { +                    label = `${label} ${nameIndex + 1}`; +                    if (ii > 1) { label = `${label} -`; } +                }                  if (ii > 1) { label = `${label} ${i + 1}`; } -                if (typeof name === 'string' && name.length > 0) { label += `: ${name}`; } +                if (typeof subName === 'string' && subName.length > 0) { label += `: ${subName}`; }                  labelNode.textContent = label;                  const cardButton = node.querySelector('.popup-menu-item-set-primary-audio-button'); |