diff options
Diffstat (limited to 'ext/mixed/js')
| -rw-r--r-- | ext/mixed/js/display.js | 23 | ||||
| -rw-r--r-- | ext/mixed/js/util.js | 31 | 
2 files changed, 36 insertions, 18 deletions
| diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 29a292c1..050caf4e 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -251,24 +251,13 @@ class Display {      noteAdd(definition, mode) {          this.spinner.show(); - -        let promise = Promise.resolve(); -        if (mode !== 'kanji') { -            const filename = Display.audioBuildFilename(definition); -            if (filename) { -                promise = audioBuildUrl(definition, this.responseCache).then(url => definition.audio = {url, filename}).catch(() => {}); +        return this.definitionAdd(definition, mode).then(success => { +            if (success) { +                const index = this.definitions.indexOf(definition); +                Display.adderButtonFind(index, mode).addClass('disabled'); +            } else { +                this.handleError('note could not be added');              } -        } - -        promise.then(() => { -            return this.definitionAdd(definition, mode).then(success => { -                if (success) { -                    const index = this.definitions.indexOf(definition); -                    Display.adderButtonFind(index, mode).addClass('disabled'); -                } else { -                    this.handleError('note could not be added'); -                } -            });          }).catch(this.handleError.bind(this)).then(() => this.spinner.hide());      } diff --git a/ext/mixed/js/util.js b/ext/mixed/js/util.js index 13f124a0..1289455c 100644 --- a/ext/mixed/js/util.js +++ b/ext/mixed/js/util.js @@ -21,7 +21,7 @@   * Audio   */ -function audioBuildUrl(definition, cache) { +function audioBuildUrl(definition, cache={}) {      return new Promise((resolve, reject) => {          const response = cache[definition.expression];          if (response) { @@ -78,3 +78,32 @@ function audioBuildFilename(definition) {          return filename += '.mp3';      }  } + +function audioInject(definition, fields) { +    const filename = audioBuildFilename(definition); +    if (!filename) { +        return Promise.resolve(true); +    } + +    const audio = { +        filename, +        skipHash: '7e2c2f954ef6051373ba916f000168dc', +        fields: [] +    }; + +    for (const name in fields) { +        if (fields[name].includes('{audio}')) { +            audio.fields.push(name); +        } +    } + +    if (audio.fields.length === 0) { +        return Promise.resolve(true); +    } + +    return audioBuildUrl(definition).then(url => { +        audio.url = url; +        note.audio = audio; +        return true; +    }).catch(() => false); +} |