diff options
| -rw-r--r-- | README.md | 1 | ||||
| -rw-r--r-- | ext/bg/data/anki-field-templates-upgrade-v8.handlebars | 14 | ||||
| -rw-r--r-- | ext/bg/data/default-anki-field-templates.handlebars | 15 | ||||
| -rw-r--r-- | ext/bg/js/options.js | 6 | ||||
| -rw-r--r-- | ext/bg/js/settings/anki-controller.js | 1 | ||||
| -rw-r--r-- | ext/bg/js/template-renderer.js | 9 | ||||
| -rw-r--r-- | ext/bg/settings2.html | 4 | ||||
| -rw-r--r-- | test/test-options-util.js | 7 | 
8 files changed, 53 insertions, 4 deletions
| @@ -195,6 +195,7 @@ Flashcard fields can be configured with the following steps:      `{onyomi}` | Onyomi (Chinese reading) for the kanji expressed as hiragana.      `{screenshot}` | Screenshot of the web page taken at the time the kanji was added.      `{sentence}` | Sentence, quote, or phrase that the character appears in from the source content. +    `{stroke-count}` | Number of strokes that the kanji character has.      `{url}` | Address of the web page in which the kanji appeared in.  When creating your model for Yomichan, *make sure that you pick a unique field to be first*; fields that will diff --git a/ext/bg/data/anki-field-templates-upgrade-v8.handlebars b/ext/bg/data/anki-field-templates-upgrade-v8.handlebars new file mode 100644 index 00000000..a5056364 --- /dev/null +++ b/ext/bg/data/anki-field-templates-upgrade-v8.handlebars @@ -0,0 +1,14 @@ +{{#*inline "stroke-count"}} +    {{~#scope~}} +        {{~#set "found" false}}{{/set~}} +        {{~#each definition.stats.misc~}} +            {{~#if (op "===" name "strokes")~}} +                {{~#set "found" true}}{{/set~}} +                Stroke count: {{value}} +            {{~/if~}} +        {{~/each~}} +        {{~#if (op "!" (get "found"))~}} +            Stroke count: Unknown +        {{~/if~}} +    {{~/scope~}} +{{/inline}} diff --git a/ext/bg/data/default-anki-field-templates.handlebars b/ext/bg/data/default-anki-field-templates.handlebars index 1024e2e6..a0aff5d2 100644 --- a/ext/bg/data/default-anki-field-templates.handlebars +++ b/ext/bg/data/default-anki-field-templates.handlebars @@ -323,4 +323,19 @@      {{~/if~}}  {{/inline}} +{{#*inline "stroke-count"}} +    {{~#scope~}} +        {{~#set "found" false}}{{/set~}} +        {{~#each definition.stats.misc~}} +            {{~#if (op "===" name "strokes")~}} +                {{~#set "found" true}}{{/set~}} +                Stroke count: {{value}} +            {{~/if~}} +        {{~/each~}} +        {{~#if (op "!" (get "found"))~}} +            Stroke count: Unknown +        {{~/if~}} +    {{~/scope~}} +{{/inline}} +  {{~> (lookup . "marker") ~}} diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 026d75c5..a8cdd885 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -487,7 +487,7 @@ class OptionsUtil {                  update: this._updateVersion7.bind(this)              },              { -                async: false, +                async: true,                  update: this._updateVersion8.bind(this)              }          ]; @@ -680,7 +680,7 @@ class OptionsUtil {          return options;      } -    _updateVersion8(options) { +    async _updateVersion8(options) {          // Version 8 changes:          //  Added translation.textReplacements.          //  Moved anki.sentenceExt to sentenceParsing.scanExtent. @@ -690,6 +690,8 @@ class OptionsUtil {          //  Added inputs.hotkeys.          //  Added anki.suspendNewCards.          //  Added popupWindow. +        //  Updated handlebars templates to include "stroke-count" definition. +        await this._addFieldTemplatesToOptions(options, '/bg/data/anki-field-templates-upgrade-v8.handlebars');          for (const profile of options.profiles) {              profile.options.translation.textReplacements = {                  searchOriginal: true, diff --git a/ext/bg/js/settings/anki-controller.js b/ext/bg/js/settings/anki-controller.js index fbd058ee..49bdea60 100644 --- a/ext/bg/js/settings/anki-controller.js +++ b/ext/bg/js/settings/anki-controller.js @@ -118,6 +118,7 @@ class AnkiController {                      'onyomi',                      'screenshot',                      'sentence', +                    'stroke-count',                      'tags',                      'url'                  ]; diff --git a/ext/bg/js/template-renderer.js b/ext/bg/js/template-renderer.js index 4bf9448e..ae39e478 100644 --- a/ext/bg/js/template-renderer.js +++ b/ext/bg/js/template-renderer.js @@ -107,7 +107,8 @@ class TemplateRenderer {              ['property',         this._property.bind(this)],              ['noop',             this._noop.bind(this)],              ['isMoraPitchHigh',  this._isMoraPitchHigh.bind(this)], -            ['getKanaMorae',     this._getKanaMorae.bind(this)] +            ['getKanaMorae',     this._getKanaMorae.bind(this)], +            ['typeof',           this._getTypeof.bind(this)]          ];          for (const [name, helper] of helpers) { @@ -406,4 +407,10 @@ class TemplateRenderer {      _getKanaMorae(context, text) {          return this._japaneseUtil.getKanaMorae(`${text}`);      } + +    _getTypeof(context, ...args) { +        const ii = args.length - 1; +        const value = (ii > 0 ? args[0] : args[ii].fn(context)); +        return typeof value; +    }  } diff --git a/ext/bg/settings2.html b/ext/bg/settings2.html index 33edca69..d7d77399 100644 --- a/ext/bg/settings2.html +++ b/ext/bg/settings2.html @@ -2602,6 +2602,10 @@                      <td><code class="anki-field-marker">{onyomi}</code></td>                      <td>Onyomi (Chinese reading) for the kanji, expressed as hiragana.</td>                  </tr> +                <tr> +                    <td><code class="anki-field-marker">{stroke-count}</code></td> +                    <td>Number of strokes that the kanji character has.</td> +                </tr>              </tbody>              <thead>                  <tr> diff --git a/test/test-options-util.js b/test/test-options-util.js index d6dae940..307638e2 100644 --- a/test/test-options-util.js +++ b/test/test-options-util.js @@ -614,6 +614,7 @@ async function testFieldTemplatesUpdate(extDir) {      const update2 = loadDataFile('bg/data/anki-field-templates-upgrade-v2.handlebars');      const update4 = loadDataFile('bg/data/anki-field-templates-upgrade-v4.handlebars');      const update6 = loadDataFile('bg/data/anki-field-templates-upgrade-v6.handlebars'); +    const update8 = loadDataFile('bg/data/anki-field-templates-upgrade-v8.handlebars');      const data = [          // Standard format @@ -633,6 +634,7 @@ async function testFieldTemplatesUpdate(extDir) {  ${update2}  ${update4}  ${update6} +${update8}  {{~> (lookup . "marker") ~}}`.trimStart()          },          // Non-standard marker format @@ -652,7 +654,8 @@ ${update6}  {{~> (lookup . "marker2") ~}}  ${update2}  ${update4} -${update6}`.trimStart() +${update6} +${update8}`.trimStart()          },          // Empty test          { @@ -663,6 +666,7 @@ ${update6}`.trimStart()  ${update2}  ${update4}  ${update6} +${update8}  {{~> (lookup . "marker") ~}}`.trimStart()          },          // Definition tags update @@ -735,6 +739,7 @@ ${update6}  ${update2}  ${update4}  ${update6} +${update8}  {{~> (lookup . "marker") ~}}  `.trimStart()          } |