aboutsummaryrefslogtreecommitdiff
path: root/ext/mixed/js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mixed/js')
-rw-r--r--ext/mixed/js/display.js23
-rw-r--r--ext/mixed/js/util.js31
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);
+}