diff options
| -rw-r--r-- | ext/bg/js/api.js | 12 | ||||
| -rw-r--r-- | ext/bg/js/backend.js | 10 | ||||
| -rw-r--r-- | ext/bg/js/dictionary.js | 2 | ||||
| -rw-r--r-- | ext/bg/js/handlebars.js | 5 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 28 | ||||
| -rw-r--r-- | ext/fg/float.html | 2 | ||||
| -rw-r--r-- | ext/mixed/js/api.js | 4 | ||||
| -rw-r--r-- | ext/mixed/js/audio.js | 9 | ||||
| -rw-r--r-- | ext/mixed/js/core.js | 6 | ||||
| -rw-r--r-- | ext/mixed/js/display.js | 28 | 
10 files changed, 50 insertions, 56 deletions
| diff --git a/ext/bg/js/api.js b/ext/bg/js/api.js index cd6a9d18..0c244ffa 100644 --- a/ext/bg/js/api.js +++ b/ext/bg/js/api.js @@ -17,26 +17,18 @@   */ -function apiTemplateRender(template, data, dynamic) { -    return _apiInvoke('templateRender', {data, template, dynamic}); +function apiTemplateRender(template, data) { +    return _apiInvoke('templateRender', {data, template});  }  function apiAudioGetUrl(definition, source, optionsContext) {      return _apiInvoke('audioGetUrl', {definition, source, optionsContext});  } -function apiGetDisplayTemplatesHtml() { -    return _apiInvoke('getDisplayTemplatesHtml'); -} -  function apiClipboardGet() {      return _apiInvoke('clipboardGet');  } -function apiGetQueryParserTemplatesHtml() { -    return _apiInvoke('getQueryParserTemplatesHtml'); -} -  function _apiInvoke(action, params={}) {      const data = {action, params};      return new Promise((resolve, reject) => { diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 7b2ec46d..da50bade 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -18,7 +18,7 @@  /*global optionsSave, utilIsolate  conditionsTestValue, profileConditionsDescriptor, profileOptionsGetDefaultFieldTemplates -handlebarsRenderDynamic, handlebarsRenderStatic +handlebarsRenderDynamic  requestText, requestJson, optionsLoad  dictConfigured, dictTermsSort, dictEnabledSet, dictNoteFormat  audioGetUrl, audioInject @@ -459,12 +459,8 @@ class Backend {          return this.anki.guiBrowse(`nid:${noteId}`);      } -    async _onApiTemplateRender({template, data, dynamic}) { -        return ( -            dynamic ? -            handlebarsRenderDynamic(template, data) : -            handlebarsRenderStatic(template, data) -        ); +    async _onApiTemplateRender({template, data}) { +        return handlebarsRenderDynamic(template, data);      }      async _onApiCommandExec({command, params}) { diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index e03dece0..491632a0 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -335,7 +335,7 @@ async function dictFieldFormat(field, definition, mode, options, templates, exce          }          data.marker = marker;          try { -            return await apiTemplateRender(templates, data, true); +            return await apiTemplateRender(templates, data);          } catch (e) {              if (exceptions) { exceptions.push(e); }              return `{${marker}-render-error}`; diff --git a/ext/bg/js/handlebars.js b/ext/bg/js/handlebars.js index e8cb67eb..b1443447 100644 --- a/ext/bg/js/handlebars.js +++ b/ext/bg/js/handlebars.js @@ -135,11 +135,6 @@ function handlebarsRegisterHelpers() {      }  } -function handlebarsRenderStatic(name, data) { -    handlebarsRegisterHelpers(); -    return Handlebars.templates[name](data).trim(); -} -  function handlebarsRenderDynamic(template, data) {      handlebarsRegisterHelpers();      const cache = handlebarsRenderDynamic._cache; diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 6d5dd50a..3471cb01 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -27,7 +27,7 @@ class Translator {      constructor() {          this.database = null;          this.deinflector = null; -        this.tagCache = {}; +        this.tagCache = new Map();      }      async prepare() { @@ -44,12 +44,12 @@ class Translator {      }      async purgeDatabase() { -        this.tagCache = {}; +        this.tagCache.clear();          await this.database.purge();      }      async deleteDictionary(dictionaryName) { -        this.tagCache = {}; +        this.tagCache.clear();          await this.database.deleteDictionary(dictionaryName);      } @@ -537,22 +537,22 @@ class Translator {      async getTagMetaList(names, title) {          const tagMetaList = []; -        const cache = ( -            hasOwn(this.tagCache, title) ? -            this.tagCache[title] : -            (this.tagCache[title] = {}) -        ); +        let cache = this.tagCache.get(title); +        if (typeof cache === 'undefined') { +            cache = new Map(); +            this.tagCache.set(title, cache); +        }          for (const name of names) {              const base = Translator.getNameBase(name); -            if (hasOwn(cache, base)) { -                tagMetaList.push(cache[base]); -            } else { -                const tagMeta = await this.database.findTagForTitle(base, title); -                cache[base] = tagMeta; -                tagMetaList.push(tagMeta); +            let tagMeta = cache.get(base); +            if (typeof tagMeta === 'undefined') { +                tagMeta = await this.database.findTagForTitle(base, title); +                cache.set(base, tagMeta);              } + +            tagMetaList.push(tagMeta);          }          return tagMetaList; diff --git a/ext/fg/float.html b/ext/fg/float.html index bec5ae68..082755f5 100644 --- a/ext/fg/float.html +++ b/ext/fg/float.html @@ -35,7 +35,7 @@                  <h1>Yomichan Updated!</h1>                  <p>                      The Yomichan extension has been updated to a new version! In order to continue -                    viewing definitions on this page you must reload this tab or restart your browser. +                    viewing definitions on this page, you must reload this tab or restart your browser.                  </p>              </div>          </div> diff --git a/ext/mixed/js/api.js b/ext/mixed/js/api.js index 0b1e7e4f..715c8286 100644 --- a/ext/mixed/js/api.js +++ b/ext/mixed/js/api.js @@ -65,8 +65,8 @@ function apiNoteView(noteId) {      return _apiInvoke('noteView', {noteId});  } -function apiTemplateRender(template, data, dynamic) { -    return _apiInvoke('templateRender', {data, template, dynamic}); +function apiTemplateRender(template, data) { +    return _apiInvoke('templateRender', {data, template});  }  function apiAudioGetUrl(definition, source, optionsContext) { diff --git a/ext/mixed/js/audio.js b/ext/mixed/js/audio.js index 76a3e7da..47db5c75 100644 --- a/ext/mixed/js/audio.js +++ b/ext/mixed/js/audio.js @@ -114,8 +114,11 @@ function audioGetFromUrl(url, willDownload) {  async function audioGetFromSources(expression, sources, optionsContext, willDownload, cache=null) {      const key = `${expression.expression}:${expression.reading}`; -    if (cache !== null && hasOwn(cache, expression)) { -        return cache[key]; +    if (cache !== null) { +        const cacheValue = cache.get(expression); +        if (typeof cacheValue !== 'undefined') { +            return cacheValue; +        }      }      for (let i = 0, ii = sources.length; i < ii; ++i) { @@ -133,7 +136,7 @@ async function audioGetFromSources(expression, sources, optionsContext, willDown              }              const result = {audio, url, source};              if (cache !== null) { -                cache[key] = result; +                cache.set(key, result);              }              return result;          } catch (e) { diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js index ca9e98e5..c273bb87 100644 --- a/ext/mixed/js/core.js +++ b/ext/mixed/js/core.js @@ -113,11 +113,7 @@ function toIterable(value) {      if (value !== null && typeof value === 'object') {          const length = value.length;          if (typeof length === 'number' && Number.isFinite(length)) { -            const array = []; -            for (let i = 0; i < length; ++i) { -                array.push(value[i]); -            } -            return array; +            return Array.from(value);          }      } diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index e4be4c83..90b7aaf3 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -32,7 +32,7 @@ class Display {          this.index = 0;          this.audioPlaying = null;          this.audioFallback = null; -        this.audioCache = {}; +        this.audioCache = new Map();          this.styleNode = null;          this.eventListeners = []; @@ -186,13 +186,15 @@ class Display {          e.preventDefault();          const link = e.currentTarget;          const entry = link.closest('.entry'); -        const definitionIndex = this.entryIndexFind(entry); +        const index = this.entryIndexFind(entry); +        if (index < 0 || index >= this.definitions.length) { return; } +          const expressionIndex = Display.indexOf(entry.querySelectorAll('.term-expression .action-play-audio'), link);          this.audioPlay( -            this.definitions[definitionIndex], +            this.definitions[index],              // expressionIndex is used in audioPlay to detect result output mode              Math.max(expressionIndex, this.options.general.resultOutputMode === 'merge' ? 0 : -1), -            definitionIndex +            index          );      } @@ -200,6 +202,8 @@ class Display {          e.preventDefault();          const link = e.currentTarget;          const index = this.entryIndexFind(link); +        if (index < 0 || index >= this.definitions.length) { return; } +          this.noteAdd(this.definitions[index], link.dataset.mode);      } @@ -498,6 +502,8 @@ class Display {      }      autoPlayAudio() { +        if (this.definitions.length === 0) { return; } +          this.audioPlay(this.definitions[0], this.firstExpressionIndex, 0);      } @@ -597,9 +603,12 @@ class Display {      }      noteTryAdd(mode) { -        const button = this.adderButtonFind(this.index, mode); +        const index = this.index; +        if (index < 0 || index >= this.definitions.length) { return; } + +        const button = this.adderButtonFind(index, mode);          if (button !== null && !button.classList.contains('disabled')) { -            this.noteAdd(this.definitions[this.index], mode); +            this.noteAdd(this.definitions[index], mode);          }      } @@ -901,9 +910,12 @@ Display._onKeyDownHandlers = new Map([      ['P', (self, e) => {          if (e.altKey) { -            const entry = self.getEntry(self.index); +            const index = self.index; +            if (index < 0 || index >= self.definitions.length) { return; } + +            const entry = self.getEntry(index);              if (entry !== null && entry.dataset.type === 'term') { -                self.audioPlay(self.definitions[self.index], self.firstExpressionIndex, self.index); +                self.audioPlay(self.definitions[index], self.firstExpressionIndex, index);              }              return true;          } |