From 4e89d27fda22c73c6dc7f334ad355ec7a56beba7 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Mon, 14 Nov 2016 20:42:45 -0800 Subject: WIP --- ext/bg/js/options-form.js | 194 ++++++++++++++++++++++++++-------------------- ext/bg/options.html | 14 ++-- ext/fg/js/util.js | 2 +- 3 files changed, 116 insertions(+), 94 deletions(-) (limited to 'ext') diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 6f27979a..d8835297 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -87,6 +87,40 @@ function updateVisibility(opts) { } } +$(document).ready(() => { + Handlebars.partials = Handlebars.templates; + + loadOptions().then(opts => { + $('#activate-on-startup').prop('checked', opts.activateOnStartup); + $('#enable-audio-playback').prop('checked', opts.enableAudioPlayback); + $('#enable-soft-katakana-search').prop('checked', opts.enableSoftKatakanaSearch); + $('#show-advanced-options').prop('checked', opts.showAdvancedOptions); + + $('#hold-shift-to-scan').prop('checked', opts.holdShiftToScan); + $('#select-matched-text').prop('checked', opts.selectMatchedText); + $('#scan-delay').val(opts.scanDelay); + $('#scan-length').val(opts.scanLength); + + $('#anki-method').val(opts.ankiMethod); + $('#anki-username').val(opts.ankiUsername); + $('#anki-password').val(opts.ankiPassword); + $('#anki-card-tags').val(opts.ankiCardTags.join(' ')); + $('#sentence-extent').val(opts.sentenceExtent); + + $('input, select').not('.anki-model').change(onOptionsChanged); + $('.anki-model').change(onAnkiModelChanged); + + $('#dict-purge').click(onDictionaryPurge); + $('#dict-importer a').click(onDictionarySetUrl); + $('#dict-import').click(onDictionaryImport); + $('#dict-url').on('input', onDictionaryUpdateUrl); + + populateDictionaries(opts); + populateAnkiDeckAndModel(opts); + updateVisibility(opts); + }); +}); + // // Dictionary // @@ -211,11 +245,11 @@ function onDictionaryImport() { }).catch(error => { showDictionaryError(error); }).then(() => { - showDictionaryError(false); + showDictionarySpinner(false); + dictProgress.hide(); dictImporter.show(); dictUrl.val(''); dictUrl.trigger('input'); - dictProgress.hide(); }); }); } @@ -225,7 +259,6 @@ function onDictionarySetUrl(e) { const dictUrl = $('#dict-url'); const url = $(this).data('url'); - if (url.includes('/')) { dictUrl.val(url); } else { @@ -247,6 +280,25 @@ function anki() { return yomichan().anki; } +function showAnkiSpinner(show) { + const spinner = $('#anki-spinner'); + if (show) { + spinner.show(); + } else { + spinner.hide(); + } +} + +function showAnkiError(error) { + const dialog = $('#anki-error'); + if (error) { + dialog.show().find('span').text(error); + } + else { + dialog.hide(); + } +} + function fieldsToDict(selection) { const result = {}; selection.each((index, element) => { @@ -265,49 +317,62 @@ function modelIdToFieldOptKey(id) { function modelIdToMarkers(id) { return { - 'anki-term-model': ['audio', 'expression', 'expression-furigana', 'glossary', 'glossary-list', 'reading', 'sentence', 'tags', 'url'], - 'anki-kanji-model': ['character', 'glossary', 'glossary-list', 'kunyomi', 'onyomi', 'url'], + 'anki-term-model': [ + 'audio', + 'expression', + 'expression-furigana', + 'glossary', + 'glossary-list', + 'reading', + 'sentence', + 'tags', + 'url' + ], + 'anki-kanji-model': [ + 'character', + 'glossary', + 'glossary-list', + 'kunyomi', + 'onyomi', + 'url' + ], }[id]; } function populateAnkiDeckAndModel(opts) { - const ankiSpinner = $('#anki-spinner'); - ankiSpinner.show(); - - const ankiFormat = $('#anki-format'); - ankiFormat.hide(); + showAnkiError(null); + showAnkiSpinner(true); - const ankiDeck = $('.anki-deck'); - ankiDeck.find('option').remove(); + const ankiFormat = $('#anki-format').hide(); - const ankiModel = $('.anki-model'); - ankiModel.find('option').remove(); + return Promise.all([anki().getDeckNames(), anki().getModelNames()]).then(([deckNames, modelNames]) => { + const ankiDeck = $('.anki-deck'); + ankiDeck.find('option').remove(); + deckNames.forEach(name => ankiDeck.append($('