diff options
| -rw-r--r-- | ext/mixed/js/display.js | 77 | 
1 files changed, 32 insertions, 45 deletions
| diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 45c1e08c..39ad41a3 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -55,8 +55,8 @@ class Display {          this.spinner.hide();          this.definitions = definitions; -        this.context = context;          this.options = options; +        this.context = context;          const sequence = ++this.sequence;          const params = { @@ -75,9 +75,7 @@ class Display {          this.templateRender('terms.html', params).then(content => {              this.container.html(content); - -            const index = context && context.hasOwnProperty('index') ? context.index : 0; -            this.entryScroll(index); +            this.entryScroll(context && context.index || 0);              $('.action-add-note').click(this.onAddNote.bind(this));              $('.action-play-audio').click(this.onPlayAudio.bind(this)); @@ -92,8 +90,8 @@ class Display {          this.spinner.hide();          this.definitions = definitions; -        this.context = context;          this.options = options; +        this.context = context;          const sequence = ++this.sequence;          const params = { @@ -111,9 +109,7 @@ class Display {          this.templateRender('kanji.html', params).then(content => {              this.container.html(content); - -            const index = context && context.hasOwnProperty('index') ? context.index : 0; -            this.entryScroll(index); +            this.entryScroll(context && context.index || 0);              $('.action-add-note').click(this.onAddNote.bind(this));              $('.source-term').click(this.onSourceTerm.bind(this)); @@ -183,34 +179,32 @@ class Display {          const link = $(e.target);          const context = {              source: { -                definitions, +                definitions: this.definitions,                  index: Display.entryIndexFind(link)              }          };          if (this.context) { -            context.sentence = this.context.sentence || ''; -            context.url = this.context.url || ''; +            context.sentence = this.context.sentence; +            context.url = this.context.url;          }          this.kanjiFind(link.text()).then(kanjiDefs => { -            this.showKanjiDefs(kanjiDefs, options, context); +            this.showKanjiDefs(kanjiDefs, this.options, context);          }).catch(this.handleError.bind(this));      }      onPlayAudio(e) {          e.preventDefault(); -          const index = Display.entryIndexFind($(e.currentTarget));          this.audioPlay(this.definitions[index]);      }      onAddNote(e) {          e.preventDefault(); -          const link = $(e.currentTarget);          const index = Display.entryIndexFind(link); -        this.noteAdd(index, link.data('mode')); +        this.noteAdd(this.definitions[index], link.data('mode'));      }      onKeyDown(e) { @@ -255,14 +249,8 @@ class Display {          }      } -    sourceTerm(index) { - - -    } - -    noteAdd(index, mode) { +    noteAdd(definition, mode) {          this.spinner.show(); -        const definition = this.definitions[index];          let promise = Promise.resolve();          if (mode !== 'kanji') { @@ -275,6 +263,7 @@ class Display {          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'); @@ -283,9 +272,8 @@ class Display {          }).catch(this.handleError.bind(this)).then(() => this.spinner.hide());      } -    audioPlay(index) { +    audioPlay(definition) {          this.spinner.show(); -        const definition = this.definitions[index];          for (const key in this.audioCache) {              this.audioCache[key].pause(); @@ -319,30 +307,29 @@ class Display {              const response = this.responseCache[definition.expression];              if (response) {                  resolve(response); -                return; -            } - -            const data = { -                post: 'dictionary_reference', -                match_type: 'exact', -                search_query: definition.expression -            }; +            } else { +                const data = { +                    post: 'dictionary_reference', +                    match_type: 'exact', +                    search_query: definition.expression +                }; -            const params = []; -            for (const key in data) { -                params.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`); -            } +                const params = []; +                for (const key in data) { +                    params.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`); +                } -            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 scrape audio data')); -            xhr.addEventListener('load', () => { -                this.responseCache[definition.expression] = xhr.responseText; -                resolve(xhr.responseText); -            }); +                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 scrape audio data')); +                xhr.addEventListener('load', () => { +                    this.responseCache[definition.expression] = xhr.responseText; +                    resolve(xhr.responseText); +                }); -            xhr.send(params.join('&')); +                xhr.send(params.join('&')); +            }          }).then(response => {              const dom = new DOMParser().parseFromString(response, 'text/html');              const entries = []; |