diff options
-rw-r--r-- | ext/bg/js/settings/anki.js | 36 | ||||
-rw-r--r-- | ext/bg/js/settings/main.js | 27 |
2 files changed, 34 insertions, 29 deletions
diff --git a/ext/bg/js/settings/anki.js b/ext/bg/js/settings/anki.js index ae380fdb..aa89c6bf 100644 --- a/ext/bg/js/settings/anki.js +++ b/ext/bg/js/settings/anki.js @@ -17,6 +17,9 @@ */ +let _ankiDataPopulated = false; + + function ankiSpinnerShow(show) { const spinner = $('#anki-spinner'); if (show) { @@ -165,11 +168,7 @@ function onAnkiMarkerClicked(e) { async function onAnkiModelChanged(e) { try { - if (!e.originalEvent) { - return; - } - - const element = $(this); + const element = $(e.currentTarget); const tab = element.closest('.tab-pane'); const tabId = tab.attr('id'); @@ -188,3 +187,30 @@ async function onAnkiModelChanged(e) { ankiSpinnerShow(false); } } + + +function ankiInitialize() { + for (const node of document.querySelectorAll('#anki-terms-model,#anki-kanji-model')) { + node.addEventListener('change', (e) => onAnkiModelChanged(e), false); + } +} + +async function onAnkiOptionsChanged(options) { + if (!options.anki.enable) { + _ankiDataPopulated = false; + return; + } + + if (_ankiDataPopulated) { return; } + + try { + ankiSpinnerShow(true); + await ankiDeckAndModelPopulate(options); + ankiErrorShow(); + _ankiDataPopulated = true; + } catch (e) { + ankiErrorShow(e); + } finally { + ankiSpinnerShow(false); + } +} diff --git a/ext/bg/js/settings/main.js b/ext/bg/js/settings/main.js index a9edab78..82d75d8b 100644 --- a/ext/bg/js/settings/main.js +++ b/ext/bg/js/settings/main.js @@ -143,20 +143,14 @@ async function formWrite(options) { $('#field-templates').val(options.anki.fieldTemplates); onAnkiTemplatesValidateCompile(); + await onAnkiOptionsChanged(options); await onDictionaryOptionsChanged(options); - try { - await ankiDeckAndModelPopulate(options); - } catch (e) { - ankiErrorShow(e); - } - formUpdateVisibility(options); } function formSetupEventListeners() { $('input, select, textarea').not('.anki-model').not('.ignore-form-changes *').change((e) => onFormOptionsChanged(e)); - $('.anki-model').change((e) => onAnkiModelChanged(e)); } function formUpdateVisibility(options) { @@ -180,28 +174,12 @@ async function onFormOptionsChanged(e) { const optionsContext = getOptionsContext(); const options = await apiOptionsGet(optionsContext); - const optionsAnkiEnableOld = options.anki.enable; - const optionsAnkiServerOld = options.anki.server; await formRead(options); await settingsSaveOptions(); formUpdateVisibility(options); - try { - const ankiUpdated = - options.anki.enable !== optionsAnkiEnableOld || - options.anki.server !== optionsAnkiServerOld; - - if (ankiUpdated) { - ankiSpinnerShow(true); - await ankiDeckAndModelPopulate(options); - ankiErrorShow(); - } - } catch (error) { - ankiErrorShow(error); - } finally { - ankiSpinnerShow(false); - } + await onAnkiOptionsChanged(options); } @@ -254,6 +232,7 @@ async function onReady() { await audioSettingsInitialize(); await profileOptionsSetup(); await dictSettingsInitialize(); + ankiInitialize(); ankiTemplatesInitialize(); storageInfoInitialize(); |