From 5989c5faae2467135bef222da886aed41e023d33 Mon Sep 17 00:00:00 2001
From: Alex Yatskov <alex@foosoft.net>
Date: Fri, 24 Mar 2017 22:49:14 -0700
Subject: cleanup

---
 ext/mixed/js/display.js | 77 ++++++++++++++++++++-----------------------------
 1 file changed, 32 insertions(+), 45 deletions(-)

(limited to 'ext/mixed/js')

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 = [];
-- 
cgit v1.2.3