diff options
Diffstat (limited to 'ext/bg')
-rw-r--r-- | ext/bg/js/anki-note-builder.js | 3 | ||||
-rw-r--r-- | ext/bg/js/backend.js | 8 | ||||
-rw-r--r-- | ext/bg/js/template-renderer.js | 10 |
3 files changed, 14 insertions, 7 deletions
diff --git a/ext/bg/js/anki-note-builder.js b/ext/bg/js/anki-note-builder.js index 2405543e..041e6dcd 100644 --- a/ext/bg/js/anki-note-builder.js +++ b/ext/bg/js/anki-note-builder.js @@ -81,9 +81,8 @@ class AnkiNoteBuilder { async formatField(field, data, templates, errors=null) { const pattern = /\{([\w-]+)\}/g; return await AnkiNoteBuilder.stringReplaceAsync(field, pattern, async (g0, marker) => { - data.marker = marker; try { - return await this._renderTemplate(templates, data); + return await this._renderTemplate(templates, data, marker); } catch (e) { if (errors) { errors.push(e); } return `{${marker}-render-error}`; diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index e9f4f924..0c901c68 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -518,8 +518,8 @@ class Backend { return await this._anki.guiBrowse(`nid:${noteId}`); } - async _onApiTemplateRender({template, data}) { - return this._renderTemplate(template, data); + async _onApiTemplateRender({template, data, marker}) { + return this._renderTemplate(template, data, marker); } _onApiCommandExec({command, params}) { @@ -1339,8 +1339,8 @@ class Backend { return false; } - async _renderTemplate(template, data) { - return await this._templateRenderer.render(template, data); + async _renderTemplate(template, data, marker) { + return await this._templateRenderer.render(template, data, marker); } _getTemplates(options) { diff --git a/ext/bg/js/template-renderer.js b/ext/bg/js/template-renderer.js index 59af74c8..1f68e3e0 100644 --- a/ext/bg/js/template-renderer.js +++ b/ext/bg/js/template-renderer.js @@ -28,7 +28,7 @@ class TemplateRenderer { this._stateStack = null; } - async render(template, data) { + async render(template, data, marker) { if (!this._helpersRegistered) { this._registerHelpers(); this._helpersRegistered = true; @@ -42,11 +42,19 @@ class TemplateRenderer { cache.set(template, instance); } + const markerPre = data.marker; + const markerPreHas = hasOwn(data, 'marker'); try { this._stateStack = [new Map()]; + data.marker = marker; return instance(data).trim(); } finally { this._stateStack = null; + if (markerPreHas) { + data.marker = markerPre; + } else { + delete data.marker; + } } } |