summaryrefslogtreecommitdiff
path: root/ext/bg/js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg/js')
-rw-r--r--ext/bg/js/api.js22
-rw-r--r--ext/bg/js/backend.js9
-rw-r--r--ext/bg/js/handlebars.js19
-rw-r--r--ext/bg/js/settings.js2
4 files changed, 20 insertions, 32 deletions
diff --git a/ext/bg/js/api.js b/ext/bg/js/api.js
index 6ab130a7..5c1aebb6 100644
--- a/ext/bg/js/api.js
+++ b/ext/bg/js/api.js
@@ -100,27 +100,9 @@ async function apiNoteView(noteId) {
async function apiTemplateRender(template, data, dynamic) {
if (dynamic) {
- return new Promise((resolve, reject) => {
- const sequence = utilBackend().sequenceNew();
- const handler = event => {
- if (event.data.sequence === sequence) {
- if (event.data.command === 'error') {
- reject(event.data.result);
- } else {
- resolve(event.data.result);
- }
-
- window.removeEventListener('message', handler);
- }
- };
-
- window.addEventListener('message', handler);
-
- const sandbox = utilBackend().sandbox();
- sandbox.postMessage({template, data, sequence, command: 'render'}, '*');
- });
+ return handlebarsRenderDynamic(template, data);
} else {
- return handlebarsRender(template, data);
+ return handlebarsRenderStatic(template, data);
}
}
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js
index 5061557b..7d68ed84 100644
--- a/ext/bg/js/backend.js
+++ b/ext/bg/js/backend.js
@@ -22,7 +22,6 @@ class Backend {
this.translator = new Translator();
this.anki = new AnkiNull();
this.options = null;
- this.sequence = 0;
}
async prepare() {
@@ -37,14 +36,6 @@ class Backend {
}
}
- sequenceNew() {
- return this.sequence++;
- }
-
- sandbox() {
- return document.getElementById('sandbox').contentWindow;
- }
-
onOptionsUpdated(options) {
this.options = utilIsolate(options);
diff --git a/ext/bg/js/handlebars.js b/ext/bg/js/handlebars.js
index e0804986..66d5fa2b 100644
--- a/ext/bg/js/handlebars.js
+++ b/ext/bg/js/handlebars.js
@@ -75,7 +75,7 @@ function handlebarsMultiLine(options) {
return options.fn(this).split('\n').join('<br>');
}
-function handlebarsRender(template, data) {
+function handlebarsRegisterHelpers() {
if (Handlebars.partials !== Handlebars.templates) {
Handlebars.partials = Handlebars.templates;
Handlebars.registerHelper('dumpObject', handlebarsDumpObject);
@@ -84,6 +84,21 @@ function handlebarsRender(template, data) {
Handlebars.registerHelper('kanjiLinks', handlebarsKanjiLinks);
Handlebars.registerHelper('multiLine', handlebarsMultiLine);
}
+}
+
+function handlebarsRenderStatic(name, data) {
+ handlebarsRegisterHelpers();
+ return Handlebars.templates[name](data).trim();
+}
+
+function handlebarsRenderDynamic(template, data) {
+ handlebarsRegisterHelpers();
+
+ Handlebars.yomichan_cache = Handlebars.yomichan_cache || {};
+ let instance = Handlebars.yomichan_cache[template];
+ if (!instance) {
+ instance = Handlebars.yomichan_cache[template] = Handlebars.compile(template);
+ }
- return Handlebars.templates[template](data).trim();
+ return instance(data).trim();
}
diff --git a/ext/bg/js/settings.js b/ext/bg/js/settings.js
index d4e6ab17..55b469d0 100644
--- a/ext/bg/js/settings.js
+++ b/ext/bg/js/settings.js
@@ -218,7 +218,7 @@ async function dictionaryGroupsPopulate(options) {
for (const dictRow of dictRowsSort(dictRows, options)) {
const dictOptions = options.dictionaries[dictRow.title] || {enabled: false, priority: 0};
- const dictHtml = handlebarsRender('dictionary.html', {
+ const dictHtml = await apiTemplateRender('dictionary.html', {
title: dictRow.title,
version: dictRow.version,
revision: dictRow.revision,