diff options
| author | Alex Yatskov <alex@foosoft.net> | 2017-09-09 12:59:49 -0700 | 
|---|---|---|
| committer | Alex Yatskov <alex@foosoft.net> | 2017-09-09 12:59:49 -0700 | 
| commit | 5f46006e8da1d51a66291f25a2bc75959ec81efd (patch) | |
| tree | 1a0b4d7948273ae95f8517cd77fc6d9e008f0f05 /ext/bg/js | |
| parent | 9a5a9aa47fd9a6c7ea6830a821689321e8fd9fbb (diff) | |
scrap sandbox
Diffstat (limited to 'ext/bg/js')
| -rw-r--r-- | ext/bg/js/api.js | 22 | ||||
| -rw-r--r-- | ext/bg/js/backend.js | 9 | ||||
| -rw-r--r-- | ext/bg/js/handlebars.js | 19 | ||||
| -rw-r--r-- | ext/bg/js/settings.js | 2 | 
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, |