diff options
| author | Alex Yatskov <alex@foosoft.net> | 2017-01-07 17:25:01 -0800 | 
|---|---|---|
| committer | Alex Yatskov <alex@foosoft.net> | 2017-01-07 17:25:01 -0800 | 
| commit | 519f48c7ff2dbf0c483cc864afe00dab3a992c9e (patch) | |
| tree | 7d3473337ded62c823170ab9c3286c4f4fb24189 /ext/fg/js | |
| parent | 614bea05c0874aa9483ccfe07e8c0fe05ae7cb15 (diff) | |
anki stuff
Diffstat (limited to 'ext/fg/js')
| -rw-r--r-- | ext/fg/js/frame.js | 158 | 
1 files changed, 54 insertions, 104 deletions
| diff --git a/ext/fg/js/frame.js b/ext/fg/js/frame.js index fc758ffe..648136d0 100644 --- a/ext/fg/js/frame.js +++ b/ext/fg/js/frame.js @@ -16,76 +16,6 @@   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ - -// function renderText(data, template) { -//     return invokeApiBg('renderText', {data, template}); -// } - -// function canAddDefinitions(definitions, modes) { -//     return invokeApiBg('canAddDefinitions', {definitions, modes}).catch(() => null); -// } - -// function addDefinition(definition, mode) { -//     return invokeApiBg('addDefinition', {definition, mode}); -// } - -// function invokeApi(action, params, target) { -//     target.postMessage({action, params}, '*'); -// } - -// function showSpinner(show) { -//     const spinner = document.querySelector('.spinner'); -//     spinner.style.visibility = show ? 'visible' : 'hidden'; -// } - -// function registerKanjiLinks() { -//     for (const link of Array.from(document.getElementsByClassName('kanji-link'))) { -//         link.addEventListener('click', e => { -//             e.preventDefault(); -//             invokeApi('displayKanji', e.target.innerHTML, window.parent); -//         }); -//     } -// } - -// function registerAddNoteLinks() { -//     for (const link of Array.from(document.getElementsByClassName('action-add-note'))) { -//         link.addEventListener('click', e => { -//             e.preventDefault(); -//             const ds = e.currentTarget.dataset; -//             invokeApi('addNote', {index: ds.index, mode: ds.mode}, window.parent); -//             showSpinner(true); -//         }); -//     } -// } - -// function registerAudioLinks() { -//     for (const link of Array.from(document.getElementsByClassName('action-play-audio'))) { -//         link.addEventListener('click', e => { -//             e.preventDefault(); -//             const ds = e.currentTarget.dataset; -//             invokeApi('playAudio', ds.index, window.parent); -//         }); -//     } -// } - -// function api_setActionState({index, state, sequence}) { -//     for (const mode in state) { -//         const matches = document.querySelectorAll(`.action-bar[data-sequence="${sequence}"] .action-add-note[data-index="${index}"][data-mode="${mode}"]`); -//         if (matches.length === 0) { -//             return; -//         } - -//         const classes = matches[0].classList; -//         if (state[mode]) { -//             classes.remove('disabled'); -//         } else { -//             classes.add('disabled'); -//         } - -//         classes.remove('pending'); -//     } -// } -  class FrameContext {      constructor() {          this.definitions = []; @@ -107,6 +37,8 @@ class FrameContext {          };          this.definitions = definitions; +        this.showSpinner(false); +          renderText(context, 'term-list.html').then(content => {              $('.content').html(content); @@ -120,6 +52,47 @@ class FrameContext {                  const index = $(e.currentTarget).data('index');                  this.playAudio(this.definitions[index]);              }); + +            $('.action-add-note').click(e => { +                e.preventDefault(); +                this.showSpinner(true); + +                const link = $(e.currentTarget); +                const index = link.data('index'); +                const mode = link.data('mode'); + +                addDefinition(this.definitions[index], mode).then(success => { +                    if (success) { +                        const button = this.getAddButton(index, mode); +                        button.addClass('disabled'); +                    } else { +                        window.alert('Note could not be added'); +                    } +                }).catch(error => { +                    window.alert('Error: ' + error); +                }).then(() => { +                    this.showSpinner(false); +                }); +            }); + +            canAddDefinitions(definitions, ['term_kanji', 'term_kana']).then(states => { +                if (states === null) { +                    return; +                } + +                states.forEach((state, index) => { +                    for (const mode in state) { +                        const button = this.getAddButton(index, mode); +                        if (state[mode]) { +                            button.removeClass('disabled'); +                        } else { +                            button.addClass('disabled'); +                        } + +                        button.removeClass('pending'); +                    } +                }); +            });          });      } @@ -130,11 +103,22 @@ class FrameContext {          };          this.definitions = definitions; +        this.showSpinner(false); +          renderText(context, 'kanji-list.html').then(content => {              $('.content').html(content);          });      } +    getAddButton(index, mode) { +        return $(`.action-add-note[data-index="${index}"][data-mode="${mode}"]`); +    } + +    showSpinner(show) { +        const spinner = document.querySelector('.spinner'); +        spinner.style.visibility = show ? 'visible' : 'hidden'; +    } +      playAudio(definition) {          let url = `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?kanji=${encodeURIComponent(definition.expression)}`;          if (definition.reading) { @@ -154,37 +138,3 @@ class FrameContext {  }  window.frameContext = new FrameContext(); - -    // api_addNote({index, mode}) { -    //     const state = {[mode]: false}; -    //     addDefinition(this.definitions[index], mode).then(success => { -    //         if (success) { -    //             this.popup.invokeApi('setActionState', {index, state, sequence: this.sequence}); -    //         } else { -    //             alert('Note could not be added'); -    //         } - -    //         this.popup.invokeApi('addNoteComplete'); -    //     }).catch(error => { -    //         alert('Error: ' + error); -    //     }); -    // } - -    // api_playAudio(index) { -    //     const definition = this.definitions[index]; - -    //     let url = `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?kanji=${encodeURIComponent(definition.expression)}`; -    //     if (definition.reading) { -    //         url += `&kana=${encodeURIComponent(definition.reading)}`; -    //     } - -    //     for (const key in this.audio) { -    //         this.audio[key].pause(); -    //     } - -    //     const audio = this.audio[url] || new Audio(url); -    //     audio.currentTime = 0; -    //     audio.play(); - -    //     this.audio[url] = audio; -    // } |