From 085881d3426c5a872739d56e286514317b2ec8f3 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sat, 9 Nov 2019 14:24:36 -0500 Subject: [PATCH] Use HTML templates for anki fields --- ext/bg/js/settings.js | 99 ++++++++++++++++++++++++++++-------------- ext/bg/js/templates.js | 17 -------- ext/bg/settings.html | 17 ++++++++ tmpl/model.html | 18 -------- 4 files changed, 84 insertions(+), 67 deletions(-) delete mode 100644 tmpl/model.html diff --git a/ext/bg/js/settings.js b/ext/bg/js/settings.js index d4b1549e..daa997d4 100644 --- a/ext/bg/js/settings.js +++ b/ext/bg/js/settings.js @@ -489,6 +489,71 @@ async function ankiDeckAndModelPopulate(options) { ankiFormat.show(); } +function ankiCreateFieldTemplate(name, value, markers) { + const template = document.querySelector('#anki-field-template').content; + const content = document.importNode(template, true).firstChild; + + content.querySelector('.anki-field-name').textContent = name; + + const field = content.querySelector('.anki-field-value'); + field.dataset.field = name; + field.value = value; + + content.querySelector('.anki-field-marker-list').appendChild(ankiGetFieldMarkersHtml(markers)); + + return content; +} + +function ankiGetFieldMarkersHtml(markers, fragment) { + const template = document.querySelector('#anki-field-marker-template').content; + if (!fragment) { + fragment = new DocumentFragment(); + } + for (const marker of markers) { + const markerNode = document.importNode(template, true).firstChild; + markerNode.querySelector('.marker-link').textContent = marker; + fragment.appendChild(markerNode); + } + return fragment; +} + +function ankiGetFieldMarkers(type) { + switch (type) { + case 'terms': + return [ + 'audio', + 'cloze-body', + 'cloze-prefix', + 'cloze-suffix', + 'dictionary', + 'expression', + 'furigana', + 'furigana-plain', + 'glossary', + 'glossary-brief', + 'reading', + 'screenshot', + 'sentence', + 'tags', + 'url' + ]; + case 'kanji': + return [ + 'character', + 'dictionary', + 'glossary', + 'kunyomi', + 'onyomi', + 'screenshot', + 'sentence', + 'tags', + 'url' + ]; + default: + return []; + } +} + async function ankiFieldsPopulate(element, options) { const modelName = element.val(); if (!modelName) { @@ -498,41 +563,11 @@ async function ankiFieldsPopulate(element, options) { const tab = element.closest('.tab-pane'); const tabId = tab.attr('id'); const container = tab.find('tbody').empty(); - - const markers = { - 'terms': [ - 'audio', - 'cloze-body', - 'cloze-prefix', - 'cloze-suffix', - 'dictionary', - 'expression', - 'furigana', - 'furigana-plain', - 'glossary', - 'glossary-brief', - 'reading', - 'screenshot', - 'sentence', - 'tags', - 'url' - ], - 'kanji': [ - 'character', - 'dictionary', - 'glossary', - 'kunyomi', - 'onyomi', - 'screenshot', - 'sentence', - 'tags', - 'url' - ] - }[tabId] || {}; + const markers = ankiGetFieldMarkers(tabId); for (const name of await utilAnkiGetModelFieldNames(modelName)) { const value = options.anki[tabId].fields[name] || ''; - const html = Handlebars.templates['model.html']({name, markers, value}); + const html = ankiCreateFieldTemplate(name, value, markers); container.append($(html)); } diff --git a/ext/bg/js/templates.js b/ext/bg/js/templates.js index c8c95cc2..823b9e6f 100644 --- a/ext/bg/js/templates.js +++ b/ext/bg/js/templates.js @@ -163,23 +163,6 @@ templates['kanji.html'] = template({"1":function(container,depth0,helpers,partia } ,"useDecorators":true,"usePartial":true,"useData":true,"useDepths":true}); -templates['model.html'] = template({"1":function(container,depth0,helpers,partials,data) { - return "
  • " - + container.escapeExpression(container.lambda(depth0, depth0)) - + "
  • \n"; -},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { - var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; - - return "\n " - + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) - + "\n \n
    \n \n
    \n \n
      \n" - + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.markers : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + "
    \n
    \n
    \n \n\n"; -},"useData":true}); templates['terms.html'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, helper, options, alias1=depth0 != null ? depth0 : (container.nullContext || {}), buffer = "
    + + + + diff --git a/tmpl/model.html b/tmpl/model.html deleted file mode 100644 index 94772316..00000000 --- a/tmpl/model.html +++ /dev/null @@ -1,18 +0,0 @@ - - {{name}} - -
    - -
    - - -
    -
    - -