/* * Copyright (C) 2016 Alex Yatskov * Author: Alex Yatskov * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ // 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 = []; this.audio = {}; $(window).on('message', e => { const {action, params} = e.originalEvent.data, method = this['api_' + action]; if (typeof(method) === 'function') { method.call(this, params); } }); } api_showTermDefs({definitions, options}) { const context = { definitions, addable: options.ankiMethod !== 'disabled', playback: options.enableAudioPlayback }; this.definitions = definitions; renderText(context, 'term-list.html').then(content => { $('.content').html(content); $('.kanji-link').click(e => { e.preventDefault(); findKanji($(e.target).text()).then(defs => this.api_showKanjiDefs({options, definitions: defs})); }); $('.action-play-audio').click(e => { e.preventDefault(); const index = $(e.currentTarget).data('index'); this.playAudio(this.definitions[index]); }); }); } api_showKanjiDefs({definitions, options}) { const context = { definitions, addable: options.ankiMethod !== 'disabled' }; this.definitions = definitions; renderText(context, 'kanji-list.html').then(content => { $('.content').html(content); }); } playAudio(definition) { 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; } } 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; // }