diff options
| author | praschke <stel@comfy.monster> | 2023-10-17 21:41:45 +0100 | 
|---|---|---|
| committer | praschke <stel@comfy.monster> | 2023-10-17 21:41:45 +0100 | 
| commit | ae91e2442d7b3746c633871ff956a8addd7046b5 (patch) | |
| tree | f10a4b5af7cec8eff3ee6e5946779f315da6df00 | |
| parent | 9a78edaee74a8355d49ec930c82e118518d5d625 (diff) | |
fix: furigana and furiganaPlain
| -rw-r--r-- | docs/templates.md | 16 | ||||
| -rw-r--r-- | ext/data/templates/anki-field-templates-upgrade-v21.handlebars | 30 | ||||
| -rw-r--r-- | ext/data/templates/default-anki-field-templates.handlebars | 10 | ||||
| -rw-r--r-- | ext/js/templates/sandbox/anki-template-renderer.js | 21 | ||||
| -rw-r--r-- | test/test-options-util.js | 80 | 
5 files changed, 136 insertions, 21 deletions
| diff --git a/docs/templates.md b/docs/templates.md index c050889f..bf5bd897 100644 --- a/docs/templates.md +++ b/docs/templates.md @@ -49,8 +49,8 @@ Converts a definition or expression/reading pair to its furigana representation.  <details>    <summary>Syntax:</summary> -  <code>{{#furigana}}<i><definition></i>{{/furigana}}</code><br> -  <code>{{#furigana <i>expression</i> <i>reading</i>}}{{/furigana}}</code><br> +  <code>{{furigana <i>definition</i>}}</code><br> +  <code>{{furigana <i>expression</i> <i>reading</i>}}</code><br>    * _`definition`_ <br>      The definition to convert. @@ -63,8 +63,8 @@ Converts a definition or expression/reading pair to its furigana representation.    <summary>Example:</summary>    ```handlebars -  {{#furigana}}{{.}}{{/furigana}} -  {{#furigana "読む" "よむ"}}{{/furigana}} +  {{furigana .}} +  {{furigana "読む" "よむ"}}    ```    Output: @@ -84,8 +84,8 @@ Converts a definition or expression/reading pair to its simplified furigana repr  <details>    <summary>Syntax:</summary> -  <code>{{#furiganaPlain}}<i><definition></i>{{/furigana}}</code> -  <code>{{#furiganaPlain <i>expression</i> <i>reading</i>}}{{/furiganaPlain}}</code><br> +  <code>{{furiganaPlain <i>definition</i>}}</code> +  <code>{{furiganaPlain <i>expression</i> <i>reading</i>}}</code><br>    * _`definition`_ <br>      The definition to convert. @@ -98,8 +98,8 @@ Converts a definition or expression/reading pair to its simplified furigana repr    <summary>Example:</summary>    ```handlebars -  {{~#furiganaPlain~}}{{.}}{{~/furiganaPlain~}} -  {{#furiganaPlain "読む" "よむ"}}{{/furiganaPlain}} +  {{~furiganaPlain .~}} +  {{furiganaPlain "読む" "よむ"}}    ```    Output: diff --git a/ext/data/templates/anki-field-templates-upgrade-v21.handlebars b/ext/data/templates/anki-field-templates-upgrade-v21.handlebars index e69de29b..92034995 100644 --- a/ext/data/templates/anki-field-templates-upgrade-v21.handlebars +++ b/ext/data/templates/anki-field-templates-upgrade-v21.handlebars @@ -0,0 +1,30 @@ + +{{<<<<<<<}} +<span class="expression-{{termFrequency}}">{{~#furigana}}{{{.}}}{{/furigana~}}</span> +{{=======}} +<span class="expression-{{termFrequency}}">{{~furigana .~}}</span> +{{>>>>>>>}} + +{{<<<<<<<}} +{{#furigana}}{{{definition}}}{{/furigana}} +{{=======}} +{{furigana definition}} +{{>>>>>>>}} + +{{<<<<<<<}} +<span class="expression-{{termFrequency}}">{{~#furiganaPlain}}{{{.}}}{{/furiganaPlain~}}</span> +{{=======}} +<span class="expression-{{termFrequency}}">{{~furiganaPlain .~}}</span> +{{>>>>>>>}} + +{{<<<<<<<}} +{{#furiganaPlain}}{{{definition}}}{{/furiganaPlain}} +{{=======}} +{{furiganaPlain definition}} +{{>>>>>>>}} + +{{<<<<<<<}} +{{~#furigana expression reading~}}{{~/furigana~}} +{{=======}} +{{~furigana expression reading~}} +{{>>>>>>>}} diff --git a/ext/data/templates/default-anki-field-templates.handlebars b/ext/data/templates/default-anki-field-templates.handlebars index 31d5d13f..751236f4 100644 --- a/ext/data/templates/default-anki-field-templates.handlebars +++ b/ext/data/templates/default-anki-field-templates.handlebars @@ -78,22 +78,22 @@  {{#*inline "furigana"}}      {{~#if merge~}}          {{~#each definition.expressions~}} -            <span class="expression-{{termFrequency}}">{{~#furigana}}{{{.}}}{{/furigana~}}</span> +            <span class="expression-{{termFrequency}}">{{~furigana .~}}</span>              {{~#unless @last}}、{{/unless~}}          {{~/each~}}      {{~else~}} -        {{#furigana}}{{{definition}}}{{/furigana}} +        {{furigana definition}}      {{~/if~}}  {{/inline}}  {{#*inline "furigana-plain"}}      {{~#if merge~}}          {{~#each definition.expressions~}} -            <span class="expression-{{termFrequency}}">{{~#furiganaPlain}}{{{.}}}{{/furiganaPlain~}}</span> +            <span class="expression-{{termFrequency}}">{{~furiganaPlain .~}}</span>              {{~#unless @last}}、{{/unless~}}          {{~/each~}}      {{~else~}} -        {{#furiganaPlain}}{{{definition}}}{{/furiganaPlain}} +        {{furiganaPlain definition}}      {{~/if~}}  {{/inline}} @@ -255,7 +255,7 @@              <li>              {{~#if (op "!==" ../definition.type "kanji")~}}                  {{~#if (op "||" (op ">" ../uniqueExpressions.length 1) (op ">" ../uniqueReadings.length 1))~}}( -                    {{~#furigana expression reading~}}{{~/furigana~}} +                    {{~furigana expression reading~}}                  ) {{/if~}}              {{~/if~}}              {{~dictionary}}: {{frequency~}} diff --git a/ext/js/templates/sandbox/anki-template-renderer.js b/ext/js/templates/sandbox/anki-template-renderer.js index 9e0bc8ed..e15bf895 100644 --- a/ext/js/templates/sandbox/anki-template-renderer.js +++ b/ext/js/templates/sandbox/anki-template-renderer.js @@ -132,6 +132,10 @@ class AnkiTemplateRenderer {          return Handlebars.Utils.escapeExpression(text);      } +    _safeString(text) { +        return new Handlebars.SafeString(text); +    } +      // Template helpers      _dumpObject(context, object) { @@ -145,14 +149,16 @@ class AnkiTemplateRenderer {          let result = '';          for (const {text, reading: reading2} of segs) { -            if (reading2.length > 0) { -                result += `<ruby>${text}<rt>${reading2}</rt></ruby>`; +            const safeText = this._escape(text); +            const safeReading = this._escape(reading2); +            if (safeReading.length > 0) { +                result += `<ruby>${safeText}<rt>${safeReading}</rt></ruby>`;              } else { -                result += text; +                result += safeText;              }          } -        return result; +        return this._safeString(result);      }      _furiganaPlain(context, ...args) { @@ -173,12 +179,13 @@ class AnkiTemplateRenderer {      }      _getFuriganaExpressionAndReading(context, ...args) { -        const options = args[args.length - 1];          if (args.length >= 3) {              return {expression: args[0], reading: args[1]}; -        } else { -            const {expression, reading} = options.fn(context); +        } else if (args.length === 2) { +            const {expression, reading} = args[0];              return {expression, reading}; +        } else { +            return void 0;          }      } diff --git a/test/test-options-util.js b/test/test-options-util.js index 068367a2..e9504b0d 100644 --- a/test/test-options-util.js +++ b/test/test-options-util.js @@ -1217,14 +1217,92 @@ async function testFieldTemplatesUpdate(extDir) {  <<<UPDATE-ADDITIONS>>>  {{~> (lookup . "marker") ~}}`.trimStart()          }, -        // block helper update +        // block helper update: furigana and furiganaPlain          {              oldVersion: 20,              newVersion: 21,              old: ` +{{#*inline "furigana"}} +    {{~#if merge~}} +        {{~#each definition.expressions~}} +            <span class="expression-{{termFrequency}}">{{~#furigana}}{{{.}}}{{/furigana~}}</span> +            {{~#unless @last}}、{{/unless~}} +        {{~/each~}} +    {{~else~}} +        {{#furigana}}{{{definition}}}{{/furigana}} +    {{~/if~}} +{{/inline}} + +{{#*inline "furigana-plain"}} +    {{~#if merge~}} +        {{~#each definition.expressions~}} +            <span class="expression-{{termFrequency}}">{{~#furiganaPlain}}{{{.}}}{{/furiganaPlain~}}</span> +            {{~#unless @last}}、{{/unless~}} +        {{~/each~}} +    {{~else~}} +        {{#furiganaPlain}}{{{definition}}}{{/furiganaPlain}} +    {{~/if~}} +{{/inline}} + +{{#*inline "frequencies"}} +    {{~#if (op ">" definition.frequencies.length 0)~}} +        <ul style="text-align: left;"> +        {{~#each definition.frequencies~}} +            <li> +            {{~#if (op "!==" ../definition.type "kanji")~}} +                {{~#if (op "||" (op ">" ../uniqueExpressions.length 1) (op ">" ../uniqueReadings.length 1))~}}( +                    {{~#furigana expression reading~}}{{~/furigana~}} +                ) {{/if~}} +            {{~/if~}} +            {{~dictionary}}: {{frequency~}} +            </li> +        {{~/each~}} +        </ul> +    {{~/if~}} +{{/inline}} +  {{~> (lookup . "marker") ~}}`.trimStart(),              expected: ` +{{#*inline "furigana"}} +    {{~#if merge~}} +        {{~#each definition.expressions~}} +            <span class="expression-{{termFrequency}}">{{~furigana .~}}</span> +            {{~#unless @last}}、{{/unless~}} +        {{~/each~}} +    {{~else~}} +        {{furigana definition}} +    {{~/if~}} +{{/inline}} + +{{#*inline "furigana-plain"}} +    {{~#if merge~}} +        {{~#each definition.expressions~}} +            <span class="expression-{{termFrequency}}">{{~furiganaPlain .~}}</span> +            {{~#unless @last}}、{{/unless~}} +        {{~/each~}} +    {{~else~}} +        {{furiganaPlain definition}} +    {{~/if~}} +{{/inline}} + +{{#*inline "frequencies"}} +    {{~#if (op ">" definition.frequencies.length 0)~}} +        <ul style="text-align: left;"> +        {{~#each definition.frequencies~}} +            <li> +            {{~#if (op "!==" ../definition.type "kanji")~}} +                {{~#if (op "||" (op ">" ../uniqueExpressions.length 1) (op ">" ../uniqueReadings.length 1))~}}( +                    {{~furigana expression reading~}} +                ) {{/if~}} +            {{~/if~}} +            {{~dictionary}}: {{frequency~}} +            </li> +        {{~/each~}} +        </ul> +    {{~/if~}} +{{/inline}} +  {{~> (lookup . "marker") ~}}`.trimStart()          }      ]; |