aboutsummaryrefslogtreecommitdiff
path: root/ext/mixed/js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mixed/js')
-rw-r--r--ext/mixed/js/display.js41
1 files changed, 21 insertions, 20 deletions
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js
index aa2b5be9..f8c419b4 100644
--- a/ext/mixed/js/display.js
+++ b/ext/mixed/js/display.js
@@ -23,7 +23,7 @@ class Display {
this.container = container;
this.definitions = [];
this.audioCache = {};
- this.resultCache = {};
+ this.responseCache = {};
this.sequence = 0;
}
@@ -168,20 +168,22 @@ class Display {
const index = Display.entryIndexFind(link);
const definition = this.definitions[index];
+ let promise = Promise.resolve();
if (mode !== 'kanji') {
- const url = Display.audioBuildUrlOld(definition);
const filename = Display.audioBuildFilename(definition);
- if (url && filename) {
- definition.audio = {url, filename};
+ if (filename) {
+ promise = this.audioBuildUrl(definition).then(url => definition.audio = {url, filename});
}
}
- this.definitionAdd(definition, mode).then(success => {
- if (success) {
- 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) {
+ Display.adderButtonFind(index, mode).addClass('disabled');
+ } else {
+ this.handleError('note could not be added');
+ }
+ });
}).catch(this.handleError.bind(this)).then(() => this.spinner.hide());
}
@@ -189,13 +191,14 @@ class Display {
this.spinner.show();
for (const key in this.audioCache) {
- const audio = this.audioCache[key];
- if (audio !== null) {
- audio.pause();
- }
+ this.audioCache[key].pause();
}
this.audioBuildUrl(definition).then(url => {
+ if (!url) {
+ url = '/mixed/mp3/button.mp3';
+ }
+
let audio = this.audioCache[url];
if (audio) {
audio.currentTime = 0;
@@ -216,7 +219,7 @@ class Display {
audioBuildUrl(definition) {
return new Promise((resolve, reject) => {
- const response = this.resultCache[definition.expression];
+ const response = this.responseCache[definition.expression];
if (response) {
resolve(response);
return;
@@ -236,9 +239,9 @@ class Display {
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.japanesepod101.com/learningcenter/reference/dictionary_post');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- xhr.addEventListener('error', () => reject('failed to execute network request'));
+ xhr.addEventListener('error', () => reject('failed to scrape audio data'));
xhr.addEventListener('load', () => {
- this.resultCache[definition.expression] = xhr.responseText;
+ this.responseCache[definition.expression] = xhr.responseText;
resolve(xhr.responseText);
});
@@ -268,14 +271,12 @@ class Display {
return entry.url;
}
}
-
- return '/mixed/mp3/button.mp3';
});
}
static audioBuildFilename(definition) {
if (!definition.reading && !definition.expression) {
- return null;
+ return;
}
let filename = 'yomichan';