From c3c5d58688a411c6ed450b89494c59037197df55 Mon Sep 17 00:00:00 2001 From: Kuuuube <61125188+Kuuuube@users.noreply.github.com> Date: Sat, 4 May 2024 11:22:30 -0400 Subject: Fix definition.cloze and text-based getMedia in handlebars being escaped (#857) * Fix definition.cloze in handlebars not being unescaped * Fix {clipboard-text} * Fix {selection-text} * Update update note --- .../anki-field-templates-upgrade-v33.handlebars | 69 ++++++++++++++++++++++ .../default-anki-field-templates.handlebars | 14 ++--- ext/js/data/options-util.js | 10 +++- test/options-util.test.js | 65 +++++++++++++++++++- 4 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 ext/data/templates/anki-field-templates-upgrade-v33.handlebars diff --git a/ext/data/templates/anki-field-templates-upgrade-v33.handlebars b/ext/data/templates/anki-field-templates-upgrade-v33.handlebars new file mode 100644 index 00000000..6fb967e5 --- /dev/null +++ b/ext/data/templates/anki-field-templates-upgrade-v33.handlebars @@ -0,0 +1,69 @@ +{{<<<<<<<}} +{{#*inline "sentence"}} + {{~#if definition.cloze}}{{definition.cloze.sentence}}{{/if~}} +{{/inline}} +{{=======}} +{{#*inline "sentence"}} + {{~#if definition.cloze}}{{{definition.cloze.sentence}}}{{/if~}} +{{/inline}} +{{>>>>>>>}} + +{{<<<<<<<}} +{{#*inline "cloze-prefix"}} + {{~#if definition.cloze}}{{definition.cloze.prefix}}{{/if~}} +{{/inline}} +{{=======}} +{{#*inline "cloze-prefix"}} + {{~#if definition.cloze}}{{{definition.cloze.prefix}}}{{/if~}} +{{/inline}} +{{>>>>>>>}} + +{{<<<<<<<}} +{{#*inline "cloze-body"}} + {{~#if definition.cloze}}{{definition.cloze.body}}{{/if~}} +{{/inline}} +{{=======}} +{{#*inline "cloze-body"}} + {{~#if definition.cloze}}{{{definition.cloze.body}}}{{/if~}} +{{/inline}} +{{>>>>>>>}} + +{{<<<<<<<}} +{{#*inline "cloze-body-kana"}} + {{~#if definition.cloze}}{{definition.cloze.bodyKana}}{{/if~}} +{{/inline}} +{{=======}} +{{#*inline "cloze-body-kana"}} + {{~#if definition.cloze}}{{{definition.cloze.bodyKana}}}{{/if~}} +{{/inline}} +{{>>>>>>>}} + +{{<<<<<<<}} +{{#*inline "cloze-suffix"}} + {{~#if definition.cloze}}{{definition.cloze.suffix}}{{/if~}} +{{/inline}} +{{=======}} +{{#*inline "cloze-suffix"}} + {{~#if definition.cloze}}{{{definition.cloze.suffix}}}{{/if~}} +{{/inline}} +{{>>>>>>>}} + +{{<<<<<<<}} +{{#*inline "clipboard-text"}} + {{~#if (hasMedia "clipboardText")}}{{getMedia "clipboardText"}}{{/if~}} +{{/inline}} +{{=======}} +{{#*inline "clipboard-text"}} + {{~#if (hasMedia "clipboardText")}}{{{getMedia "clipboardText"}}}{{/if~}} +{{/inline}} +{{>>>>>>>}} + +{{<<<<<<<}} +{{#*inline "selection-text"}} + {{~#if (hasMedia "selectionText")}}{{getMedia "selectionText"}}{{/if~}} +{{/inline}} +{{=======}} +{{#*inline "selection-text"}} + {{~#if (hasMedia "selectionText")}}{{{getMedia "selectionText"}}}{{/if~}} +{{/inline}} +{{>>>>>>>}} \ No newline at end of file diff --git a/ext/data/templates/default-anki-field-templates.handlebars b/ext/data/templates/default-anki-field-templates.handlebars index 46d5c889..3ca7ba18 100644 --- a/ext/data/templates/default-anki-field-templates.handlebars +++ b/ext/data/templates/default-anki-field-templates.handlebars @@ -149,23 +149,23 @@ {{/inline}} {{#*inline "sentence"}} - {{~#if definition.cloze}}{{definition.cloze.sentence}}{{/if~}} + {{~#if definition.cloze}}{{{definition.cloze.sentence}}}{{/if~}} {{/inline}} {{#*inline "cloze-prefix"}} - {{~#if definition.cloze}}{{definition.cloze.prefix}}{{/if~}} + {{~#if definition.cloze}}{{{definition.cloze.prefix}}}{{/if~}} {{/inline}} {{#*inline "cloze-body"}} - {{~#if definition.cloze}}{{definition.cloze.body}}{{/if~}} + {{~#if definition.cloze}}{{{definition.cloze.body}}}{{/if~}} {{/inline}} {{#*inline "cloze-body-kana"}} - {{~#if definition.cloze}}{{definition.cloze.bodyKana}}{{/if~}} + {{~#if definition.cloze}}{{{definition.cloze.bodyKana}}}{{/if~}} {{/inline}} {{#*inline "cloze-suffix"}} - {{~#if definition.cloze}}{{definition.cloze.suffix}}{{/if~}} + {{~#if definition.cloze}}{{{definition.cloze.suffix}}}{{/if~}} {{/inline}} {{#*inline "tags"}} @@ -269,7 +269,7 @@ {{/inline}} {{#*inline "clipboard-text"}} - {{~#if (hasMedia "clipboardText")}}{{getMedia "clipboardText"}}{{/if~}} + {{~#if (hasMedia "clipboardText")}}{{{getMedia "clipboardText"}}}{{/if~}} {{/inline}} {{#*inline "conjugation"}} @@ -393,7 +393,7 @@ {{/inline}} {{#*inline "selection-text"}} - {{~#if (hasMedia "selectionText")}}{{getMedia "selectionText"}}{{/if~}} + {{~#if (hasMedia "selectionText")}}{{{getMedia "selectionText"}}}{{/if~}} {{/inline}} {{#*inline "sentence-furigana"}} diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js index 5319cfe4..d6c667aa 100644 --- a/ext/js/data/options-util.js +++ b/ext/js/data/options-util.js @@ -538,7 +538,8 @@ export class OptionsUtil { this._updateVersion29, this._updateVersion30, this._updateVersion31, - this._updateVersion32 + this._updateVersion32, + this._updateVersion33 ]; /* eslint-enable @typescript-eslint/unbound-method */ if (typeof targetVersion === 'number' && targetVersion < result.length) { @@ -1258,6 +1259,13 @@ export class OptionsUtil { } } + /** + * - Updated handlebars to fix escaping when using `definition.cloze` or text-based `getMedia`. + * @type {import('options-util').UpdateFunction} + */ + async _updateVersion33(options) { + await this._applyAnkiFieldTemplatesPatch(options, '/data/templates/anki-field-templates-upgrade-v33.handlebars'); + } /** * @param {string} url diff --git a/test/options-util.test.js b/test/options-util.test.js index 0966d0d3..f44dbb4f 100644 --- a/test/options-util.test.js +++ b/test/options-util.test.js @@ -605,7 +605,7 @@ function createOptionsUpdatedTestData1() { } ], profileCurrent: 0, - version: 32, + version: 33, global: { database: { prefixWildcardsSupported: false @@ -1722,6 +1722,69 @@ describe('OptionsUtil', () => { {{~/if~}} {{~/if~}} {{/inline}} +`.trimStart() + }, + { + oldVersion: 32, + newVersion: 33, + old: ` +{{#*inline "sentence"}} + {{~#if definition.cloze}}{{definition.cloze.sentence}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-prefix"}} + {{~#if definition.cloze}}{{definition.cloze.prefix}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-body"}} + {{~#if definition.cloze}}{{definition.cloze.body}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-body-kana"}} + {{~#if definition.cloze}}{{definition.cloze.bodyKana}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-suffix"}} + {{~#if definition.cloze}}{{definition.cloze.suffix}}{{/if~}} +{{/inline}} + +{{#*inline "clipboard-text"}} + {{~#if (hasMedia "clipboardText")}}{{getMedia "clipboardText"}}{{/if~}} +{{/inline}} + +{{#*inline "selection-text"}} + {{~#if (hasMedia "selectionText")}}{{getMedia "selectionText"}}{{/if~}} +{{/inline}} +`.trimStart(), + + expected: ` +{{#*inline "sentence"}} + {{~#if definition.cloze}}{{{definition.cloze.sentence}}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-prefix"}} + {{~#if definition.cloze}}{{{definition.cloze.prefix}}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-body"}} + {{~#if definition.cloze}}{{{definition.cloze.body}}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-body-kana"}} + {{~#if definition.cloze}}{{{definition.cloze.bodyKana}}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-suffix"}} + {{~#if definition.cloze}}{{{definition.cloze.suffix}}}{{/if~}} +{{/inline}} + +{{#*inline "clipboard-text"}} + {{~#if (hasMedia "clipboardText")}}{{{getMedia "clipboardText"}}}{{/if~}} +{{/inline}} + +{{#*inline "selection-text"}} + {{~#if (hasMedia "selectionText")}}{{{getMedia "selectionText"}}}{{/if~}} +{{/inline}} `.trimStart() } ]; -- cgit v1.2.3