diff options
Diffstat (limited to 'ext/fg/js')
| -rw-r--r-- | ext/fg/js/frame.js | 21 | ||||
| -rw-r--r-- | ext/fg/js/util.js | 40 | 
2 files changed, 55 insertions, 6 deletions
| diff --git a/ext/fg/js/frame.js b/ext/fg/js/frame.js index ca0636f9..1028f0f6 100644 --- a/ext/fg/js/frame.js +++ b/ext/fg/js/frame.js @@ -113,7 +113,16 @@ class Frame {          const index = link.data('index');          const mode = link.data('mode'); -        addDefinition(this.definitions[index], mode).then(success => { +        const definition = this.definitions[index]; +        if (mode !== 'kanji') { +            const url = buildAudioUrl(definition); +            const filename = buildAudioFilename(definition); +            if (url && filename) { +                definition.audio = {url, filename}; +            } +        } + +        addDefinition(definition, mode).then(success => {              if (success) {                  const button = this.findAddNoteButton(index, mode);                  button.addClass('disabled'); @@ -164,11 +173,6 @@ class Frame {      }      playAudio(definition) { -        let url = `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?kanji=${encodeURIComponent(definition.expression)}`; -        if (definition.reading) { -            url += `&kana=${encodeURIComponent(definition.reading)}`; -        } -          for (const key in this.audioCache) {              const audio = this.audioCache[key];              if (audio !== null) { @@ -176,6 +180,11 @@ class Frame {              }          } +        const url = buildAudioUrl(definition); +        if (!url) { +            return; +        } +          let audio = this.audioCache[url];          if (audio) {              audio.currentTime = 0; diff --git a/ext/fg/js/util.js b/ext/fg/js/util.js index aeda36b5..c9ee4ed7 100644 --- a/ext/fg/js/util.js +++ b/ext/fg/js/util.js @@ -166,3 +166,43 @@ function extractSentence(source, extent) {      return content.substring(startPos, endPos).trim();  } + +function buildAudioUrl(definition) { +    let kana = definition.reading; +    let kanji = definition.expression; + +    if (!kana && !kanji) { +        return null; +    } + +    if (!kana && wanakana.isHiragana(kanji)) { +        kana = kanji; +        kanji = null; +    } + +    const params = []; +    if (kanji) { +        params.push(`kanji=${encodeURIComponent(kanji)}`); +    } +    if (kana) { +        params.push(`kana=${encodeURIComponent(kana)}`); +    } + +    return `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?${params.join('&')}`; +} + +function buildAudioFilename(definition) { +    if (!definition.reading && !definition.expression) { +        return null; +    } + +    let filename = 'yomichan'; +    if (definition.reading) { +        filename += `_${definition.reading}`; +    } +    if (definition.expression) { +        filename += `_${definition.expression}`; +    } + +    return filename += '.mp3'; +} |