summaryrefslogtreecommitdiff
path: root/ext/js/templates/template-renderer-frame-api.js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2021-04-02 19:09:21 -0400
committerGitHub <noreply@github.com>2021-04-02 19:09:21 -0400
commitdabda86259d78ee66125ebf2cff15a7619e0b5da (patch)
tree721043546abc01d5c5a2d17f2f2abd8e34ce2a53 /ext/js/templates/template-renderer-frame-api.js
parent28fa3fa795d564135940e8aff52b987a5960f15c (diff)
Optimize template renderer (#1585)
* Add renderMulti * Batch template rendering * Update tests
Diffstat (limited to 'ext/js/templates/template-renderer-frame-api.js')
-rw-r--r--ext/js/templates/template-renderer-frame-api.js16
1 files changed, 16 insertions, 0 deletions
diff --git a/ext/js/templates/template-renderer-frame-api.js b/ext/js/templates/template-renderer-frame-api.js
index 104e357b..dd6be517 100644
--- a/ext/js/templates/template-renderer-frame-api.js
+++ b/ext/js/templates/template-renderer-frame-api.js
@@ -20,6 +20,7 @@ class TemplateRendererFrameApi {
this._templateRenderer = templateRenderer;
this._windowMessageHandlers = new Map([
['render', {async: false, handler: this._onRender.bind(this)}],
+ ['renderMulti', {async: false, handler: this._onRenderMulti.bind(this)}],
['getModifiedData', {async: false, handler: this._onGetModifiedData.bind(this)}]
]);
}
@@ -58,6 +59,10 @@ class TemplateRendererFrameApi {
return this._templateRenderer.render(template, data, type);
}
+ _onRenderMulti({items}) {
+ return this._serializeMulti(this._templateRenderer.renderMulti(items));
+ }
+
_onGetModifiedData({data, type}) {
const result = this._templateRenderer.getModifiedData(data, type);
return this._clone(result);
@@ -82,6 +87,17 @@ class TemplateRendererFrameApi {
};
}
+ _serializeMulti(array) {
+ for (let i = 0, ii = array.length; i < ii; ++i) {
+ const value = array[i];
+ const {error} = value;
+ if (typeof error !== 'undefined') {
+ value.error = this._serializeError(error);
+ }
+ }
+ return array;
+ }
+
_clone(value) {
return JSON.parse(JSON.stringify(value));
}