diff options
Diffstat (limited to 'ext/js/display')
| -rw-r--r-- | ext/js/display/display-audio.js | 165 | ||||
| -rw-r--r-- | ext/js/display/display-generator.js | 138 | ||||
| -rw-r--r-- | ext/js/display/display.js | 180 | ||||
| -rw-r--r-- | ext/js/display/search-display-controller.js | 2 | 
4 files changed, 242 insertions, 243 deletions
| diff --git a/ext/js/display/display-audio.js b/ext/js/display/display-audio.js index 03966390..4a1f6305 100644 --- a/ext/js/display/display-audio.js +++ b/ext/js/display/display-audio.js @@ -58,12 +58,12 @@ class DisplayAudio {          this._eventListeners.removeAllEventListeners();      } -    setupEntry(entry, definitionIndex) { +    setupEntry(entry, dictionaryEntryIndex) {          for (const button of entry.querySelectorAll('.action-play-audio')) { -            const expressionIndex = this._getAudioPlayButtonExpressionIndex(button); -            this._eventListeners.addEventListener(button, 'click', this._onAudioPlayButtonClick.bind(this, definitionIndex, expressionIndex), false); -            this._eventListeners.addEventListener(button, 'contextmenu', this._onAudioPlayButtonContextMenu.bind(this, definitionIndex, expressionIndex), false); -            this._eventListeners.addEventListener(button, 'menuClose', this._onAudioPlayMenuCloseClick.bind(this, definitionIndex, expressionIndex), false); +            const headwordIndex = this._getAudioPlayButtonHeadwordIndex(button); +            this._eventListeners.addEventListener(button, 'click', this._onAudioPlayButtonClick.bind(this, dictionaryEntryIndex, headwordIndex), false); +            this._eventListeners.addEventListener(button, 'contextmenu', this._onAudioPlayButtonContextMenu.bind(this, dictionaryEntryIndex, headwordIndex), false); +            this._eventListeners.addEventListener(button, 'menuClose', this._onAudioPlayMenuCloseClick.bind(this, dictionaryEntryIndex, headwordIndex), false);          }      } @@ -73,11 +73,11 @@ class DisplayAudio {          this.clearAutoPlayTimer(); -        const definitions = this._display.definitions; -        if (definitions.length === 0) { return; } +        const {dictionaryEntries} = this._display; +        if (dictionaryEntries.length === 0) { return; } -        const firstDefinition = definitions[0]; -        if (firstDefinition.type === 'kanji') { return; } +        const firstDictionaryEntries = dictionaryEntries[0]; +        if (firstDictionaryEntries.type === 'kanji') { return; }          const callback = () => {              this._autoPlayAudioTimer = null; @@ -103,18 +103,18 @@ class DisplayAudio {          this._audioPlaying = null;      } -    async playAudio(definitionIndex, expressionIndex, sources=null, sourceDetailsMap=null) { +    async playAudio(dictionaryEntryIndex, headwordIndex, sources=null, sourceDetailsMap=null) {          this.stopAudio();          this.clearAutoPlayTimer(); -        const expressionReading = this._getExpressionAndReading(definitionIndex, expressionIndex); -        if (expressionReading === null) { +        const headword = this._getHeadword(dictionaryEntryIndex, headwordIndex); +        if (headword === null) {              return {audio: null, source: null, valid: false};          } -        const buttons = this._getAudioPlayButtons(definitionIndex, expressionIndex); +        const buttons = this._getAudioPlayButtons(dictionaryEntryIndex, headwordIndex); -        const {expression, reading} = expressionReading; +        const {term, reading} = headword;          const audioOptions = this._getAudioOptions();          const {textToSpeechVoice, customSourceUrl, customSourceType, volume} = audioOptions;          if (!Array.isArray(sources)) { @@ -131,7 +131,7 @@ class DisplayAudio {              let audio;              let title;              let source = null; -            const info = await this._createExpressionAudio(sources, sourceDetailsMap, expression, reading, {textToSpeechVoice, customSourceUrl, customSourceType}); +            const info = await this._createTermAudio(sources, sourceDetailsMap, term, reading, {textToSpeechVoice, customSourceUrl, customSourceType});              const valid = (info !== null);              if (valid) {                  ({audio, source} = info); @@ -146,7 +146,7 @@ class DisplayAudio {              this.stopAudio();              // Update details -            const potentialAvailableAudioCount = this._getPotentialAvailableAudioCount(expression, reading); +            const potentialAvailableAudioCount = this._getPotentialAvailableAudioCount(term, reading);              for (const button of buttons) {                  const titleDefault = button.dataset.titleDefault || '';                  button.title = `${titleDefault}\n${title}`; @@ -174,48 +174,48 @@ class DisplayAudio {          }      } -    getPrimaryCardAudio(expression, reading) { -        const cacheEntry = this._getCacheItem(expression, reading, false); +    getPrimaryCardAudio(term, reading) { +        const cacheEntry = this._getCacheItem(term, reading, false);          const primaryCardAudio = typeof cacheEntry !== 'undefined' ? cacheEntry.primaryCardAudio : null;          return primaryCardAudio;      }      // Private -    _onAudioPlayButtonClick(definitionIndex, expressionIndex, e) { +    _onAudioPlayButtonClick(dictionaryEntryIndex, headwordIndex, e) {          e.preventDefault();          if (e.shiftKey) { -            this._showAudioMenu(e.currentTarget, definitionIndex, expressionIndex); +            this._showAudioMenu(e.currentTarget, dictionaryEntryIndex, headwordIndex);          } else { -            this.playAudio(definitionIndex, expressionIndex); +            this.playAudio(dictionaryEntryIndex, headwordIndex);          }      } -    _onAudioPlayButtonContextMenu(definitionIndex, expressionIndex, e) { +    _onAudioPlayButtonContextMenu(dictionaryEntryIndex, headwordIndex, e) {          e.preventDefault(); -        this._showAudioMenu(e.currentTarget, definitionIndex, expressionIndex); +        this._showAudioMenu(e.currentTarget, dictionaryEntryIndex, headwordIndex);      } -    _onAudioPlayMenuCloseClick(definitionIndex, expressionIndex, e) { +    _onAudioPlayMenuCloseClick(dictionaryEntryIndex, headwordIndex, e) {          const {detail: {action, item, menu, shiftKey}} = e;          switch (action) {              case 'playAudioFromSource':                  if (shiftKey) {                      e.preventDefault();                  } -                this._playAudioFromSource(definitionIndex, expressionIndex, item); +                this._playAudioFromSource(dictionaryEntryIndex, headwordIndex, item);                  break;              case 'setPrimaryAudio':                  e.preventDefault(); -                this._setPrimaryAudio(definitionIndex, expressionIndex, item, menu, true); +                this._setPrimaryAudio(dictionaryEntryIndex, headwordIndex, item, menu, true);                  break;          }      } -    _getCacheItem(expression, reading, create) { -        const key = this._getExpressionReadingKey(expression, reading); +    _getCacheItem(term, reading, create) { +        const key = this._getTermReadingKey(term, reading);          let cacheEntry = this._cache.get(key);          if (typeof cacheEntry === 'undefined' && create) {              cacheEntry = { @@ -242,7 +242,7 @@ class DisplayAudio {          return {source, index, hasIndex};      } -    async _playAudioFromSource(definitionIndex, expressionIndex, item) { +    async _playAudioFromSource(dictionaryEntryIndex, headwordIndex, item) {          const sourceInfo = this._getMenuItemSourceInfo(item);          if (sourceInfo === null) { return; } @@ -251,61 +251,61 @@ class DisplayAudio {          try {              const token = this._entriesToken; -            const {valid} = await this.playAudio(definitionIndex, expressionIndex, [source], sourceDetailsMap); +            const {valid} = await this.playAudio(dictionaryEntryIndex, headwordIndex, [source], sourceDetailsMap);              if (valid && token === this._entriesToken) { -                this._setPrimaryAudio(definitionIndex, expressionIndex, item, null, false); +                this._setPrimaryAudio(dictionaryEntryIndex, headwordIndex, item, null, false);              }          } catch (e) {              // NOP          }      } -    _setPrimaryAudio(definitionIndex, expressionIndex, item, menu, canToggleOff) { +    _setPrimaryAudio(dictionaryEntryIndex, headwordIndex, item, menu, canToggleOff) {          const sourceInfo = this._getMenuItemSourceInfo(item);          if (sourceInfo === null) { return; }          const {source, index} = sourceInfo;          if (!this._sourceIsDownloadable(source)) { return; } -        const expressionReading = this._getExpressionAndReading(definitionIndex, expressionIndex); -        if (expressionReading === null) { return; } +        const headword = this._getHeadword(dictionaryEntryIndex, headwordIndex); +        if (headword === null) { return; } -        const {expression, reading} = expressionReading; -        const cacheEntry = this._getCacheItem(expression, reading, true); +        const {term, reading} = headword; +        const cacheEntry = this._getCacheItem(term, reading, true);          let {primaryCardAudio} = cacheEntry;          primaryCardAudio = (!canToggleOff || primaryCardAudio === null || primaryCardAudio.source !== source || primaryCardAudio.index !== index) ? {source, index} : null;          cacheEntry.primaryCardAudio = primaryCardAudio;          if (menu !== null) { -            this._updateMenuPrimaryCardAudio(menu.bodyNode, expression, reading); +            this._updateMenuPrimaryCardAudio(menu.bodyNode, term, reading);          }      } -    _getAudioPlayButtonExpressionIndex(button) { -        const expressionNode = button.closest('.expression'); -        if (expressionNode !== null) { -            const expressionIndex = parseInt(expressionNode.dataset.index, 10); -            if (Number.isFinite(expressionIndex)) { return expressionIndex; } +    _getAudioPlayButtonHeadwordIndex(button) { +        const headwordNode = button.closest('.expression'); +        if (headwordNode !== null) { +            const headwordIndex = parseInt(headwordNode.dataset.index, 10); +            if (Number.isFinite(headwordIndex)) { return headwordIndex; }          }          return 0;      } -    _getAudioPlayButtons(definitionIndex, expressionIndex) { +    _getAudioPlayButtons(dictionaryEntryIndex, headwordIndex) {          const results = []; -        const {definitionNodes} = this._display; -        if (definitionIndex >= 0 && definitionIndex < definitionNodes.length) { -            const node = definitionNodes[definitionIndex]; -            const button1 = (expressionIndex === 0 ? node.querySelector('.action-play-audio') : null); -            const button2 = node.querySelector(`.expression:nth-of-type(${expressionIndex + 1}) .action-play-audio`); +        const {dictionaryEntryNodes} = this._display; +        if (dictionaryEntryIndex >= 0 && dictionaryEntryIndex < dictionaryEntryNodes.length) { +            const node = dictionaryEntryNodes[dictionaryEntryIndex]; +            const button1 = (headwordIndex === 0 ? node.querySelector('.action-play-audio') : null); +            const button2 = node.querySelector(`.expression:nth-of-type(${headwordIndex + 1}) .action-play-audio`);              if (button1 !== null) { results.push(button1); }              if (button2 !== null) { results.push(button2); }          }          return results;      } -    async _createExpressionAudio(sources, sourceDetailsMap, expression, reading, details) { -        const {sourceMap} = this._getCacheItem(expression, reading, true); +    async _createTermAudio(sources, sourceDetailsMap, term, reading, details) { +        const {sourceMap} = this._getCacheItem(term, reading, true);          for (let i = 0, ii = sources.length; i < ii; ++i) {              const source = sources[i]; @@ -314,7 +314,7 @@ class DisplayAudio {              let infoListPromise;              let sourceInfo = sourceMap.get(source);              if (typeof sourceInfo === 'undefined') { -                infoListPromise = this._getExpressionAudioInfoList(source, expression, reading, details); +                infoListPromise = this._getTermAudioInfoList(source, term, reading, details);                  sourceInfo = {infoListPromise, infoList: null};                  sourceMap.set(source, sourceInfo);                  cacheUpdated = true; @@ -393,27 +393,26 @@ class DisplayAudio {          }      } -    async _getExpressionAudioInfoList(source, expression, reading, details) { -        const infoList = await yomichan.api.getExpressionAudioInfoList(source, expression, reading, details); +    async _getTermAudioInfoList(source, term, reading, details) { +        const infoList = await yomichan.api.getTermAudioInfoList(source, term, reading, details);          return infoList.map((info) => ({info, audioPromise: null, audioResolved: false, audio: null}));      } -    _getExpressionAndReading(definitionIndex, expressionIndex) { -        const {definitions} = this._display; -        if (definitionIndex < 0 || definitionIndex >= definitions.length) { return null; } +    _getHeadword(dictionaryEntryIndex, headwordIndex) { +        const {dictionaryEntries} = this._display; +        if (dictionaryEntryIndex < 0 || dictionaryEntryIndex >= dictionaryEntries.length) { return null; } -        const definition = definitions[definitionIndex]; -        if (definition.type === 'kanji') { return null; } +        const dictionaryEntry = dictionaryEntries[dictionaryEntryIndex]; +        if (dictionaryEntry.type === 'kanji') { return null; } -        const {headwords} = definition; -        if (expressionIndex < 0 || expressionIndex >= headwords.length) { return null; } +        const {headwords} = dictionaryEntry; +        if (headwordIndex < 0 || headwordIndex >= headwords.length) { return null; } -        const {term, reading} = headwords[expressionIndex]; -        return {expression: term, reading}; +        return headwords[headwordIndex];      } -    _getExpressionReadingKey(expression, reading) { -        return JSON.stringify([expression, reading]); +    _getTermReadingKey(term, reading) { +        return JSON.stringify([term, reading]);      }      _getAudioOptions() { @@ -460,8 +459,8 @@ class DisplayAudio {          }      } -    _getPotentialAvailableAudioCount(expression, reading) { -        const cacheEntry = this._getCacheItem(expression, reading, false); +    _getPotentialAvailableAudioCount(term, reading) { +        const cacheEntry = this._getCacheItem(term, reading, false);          if (typeof cacheEntry === 'undefined') { return null; }          const {sourceMap} = cacheEntry; @@ -477,12 +476,12 @@ class DisplayAudio {          return count;      } -    _showAudioMenu(button, definitionIndex, expressionIndex) { -        const expressionReading = this._getExpressionAndReading(definitionIndex, expressionIndex); -        if (expressionReading === null) { return; } +    _showAudioMenu(button, dictionaryEntryIndex, headwordIndex) { +        const headword = this._getHeadword(dictionaryEntryIndex, headwordIndex); +        if (headword === null) { return; } -        const {expression, reading} = expressionReading; -        const popupMenu = this._createMenu(button, expression, reading); +        const {term, reading} = headword; +        const popupMenu = this._createMenu(button, term, reading);          this._openMenus.add(popupMenu);          popupMenu.prepare();          popupMenu.on('close', this._onPopupMenuClose.bind(this)); @@ -550,31 +549,31 @@ class DisplayAudio {          return results;      } -    _createMenu(sourceButton, expression, reading) { +    _createMenu(sourceButton, term, reading) {          // Create menu          const menuContainerNode = this._display.displayGenerator.instantiateTemplate('audio-button-popup-menu');          const menuBodyNode = menuContainerNode.querySelector('.popup-menu-body'); -        menuContainerNode.dataset.expression = expression; +        menuContainerNode.dataset.term = term;          menuContainerNode.dataset.reading = reading;          // Set up items based on options and cache data -        this._createMenuItems(menuContainerNode, menuBodyNode, expression, reading); +        this._createMenuItems(menuContainerNode, menuBodyNode, term, reading);          // Update primary card audio display -        this._updateMenuPrimaryCardAudio(menuBodyNode, expression, reading); +        this._updateMenuPrimaryCardAudio(menuBodyNode, term, reading);          // Create popup menu          this._menuContainer.appendChild(menuContainerNode);          return new PopupMenu(sourceButton, menuContainerNode);      } -    _createMenuItems(menuContainerNode, menuItemContainer, expression, reading) { +    _createMenuItems(menuContainerNode, menuItemContainer, term, reading) {          const sources = this._getAudioSources(this._getAudioOptions());          const {displayGenerator} = this._display;          let showIcons = false;          const currentItems = [...menuItemContainer.children];          for (const {source, displayName, isInOptions, downloadable} of sources) { -            const entries = this._getMenuItemEntries(source, expression, reading); +            const entries = this._getMenuItemEntries(source, term, reading);              for (let i = 0, ii = entries.length; i < ii; ++i) {                  const {valid, index, name} = entries[i];                  let node = this._getOrCreateMenuItem(currentItems, source, index); @@ -632,8 +631,8 @@ class DisplayAudio {          return null;      } -    _getMenuItemEntries(source, expression, reading) { -        const cacheEntry = this._getCacheItem(expression, reading, false); +    _getMenuItemEntries(source, term, reading) { +        const cacheEntry = this._getCacheItem(term, reading, false);          if (typeof cacheEntry !== 'undefined') {              const {sourceMap} = cacheEntry;              const sourceInfo = sourceMap.get(source); @@ -659,8 +658,8 @@ class DisplayAudio {          return [{valid: null, index: null, name: null}];      } -    _updateMenuPrimaryCardAudio(menuBodyNode, expression, reading) { -        const primaryCardAudio = this.getPrimaryCardAudio(expression, reading); +    _updateMenuPrimaryCardAudio(menuBodyNode, term, reading) { +        const primaryCardAudio = this.getPrimaryCardAudio(term, reading);          const {source: primaryCardAudioSource, index: primaryCardAudioIndex} = (primaryCardAudio !== null ? primaryCardAudio : {source: null, index: -1});          const itemGroups = menuBodyNode.querySelectorAll('.popup-menu-item-group'); @@ -683,8 +682,8 @@ class DisplayAudio {      _updateOpenMenu() {          for (const menu of this._openMenus) {              const menuContainerNode = menu.containerNode; -            const {expression, reading} = menuContainerNode.dataset; -            this._createMenuItems(menuContainerNode, menu.bodyNode, expression, reading); +            const {term, reading} = menuContainerNode.dataset; +            this._createMenuItems(menuContainerNode, menu.bodyNode, term, reading);              menu.updatePosition();          }      } diff --git a/ext/js/display/display-generator.js b/ext/js/display/display-generator.js index 724bec9c..32699ec7 100644 --- a/ext/js/display/display-generator.js +++ b/ext/js/display/display-generator.js @@ -50,56 +50,56 @@ class DisplayGenerator {          document.head.appendChild(t);      } -    createTermEntry(details) { +    createTermEntry(dictionaryEntry) {          const node = this._templates.instantiate('term-entry'); -        const expressionsContainer = node.querySelector('.expression-list'); -        const reasonsContainer = node.querySelector('.inflection-list'); +        const headwordsContainer = node.querySelector('.expression-list'); +        const inflectionsContainer = node.querySelector('.inflection-list');          const pitchesContainer = node.querySelector('.pitch-accent-group-list');          const frequencyGroupListContainer = node.querySelector('.frequency-group-list');          const definitionsContainer = node.querySelector('.definition-list');          const termTagsContainer = node.querySelector('.expression-list-tag-list'); -        const {headwords: expressions, type, inflections: reasons, definitions, frequencies, pronunciations} = details; -        const pitches = DictionaryDataUtil.getPitchAccentInfos(details); +        const {headwords, type, inflections, definitions, frequencies, pronunciations} = dictionaryEntry; +        const pitches = DictionaryDataUtil.getPitchAccentInfos(dictionaryEntry);          const pitchCount = pitches.reduce((i, v) => i + v.pitches.length, 0); -        const groupedFrequencies = DictionaryDataUtil.groupTermFrequencies(details); -        const termTags = DictionaryDataUtil.groupTermTags(details); +        const groupedFrequencies = DictionaryDataUtil.groupTermFrequencies(dictionaryEntry); +        const termTags = DictionaryDataUtil.groupTermTags(dictionaryEntry); -        const uniqueExpressions = new Set(); +        const uniqueTerms = new Set();          const uniqueReadings = new Set(); -        for (const {term: expression, reading} of expressions) { -            uniqueExpressions.add(expression); +        for (const {term, reading} of headwords) { +            uniqueTerms.add(term);              uniqueReadings.add(reading);          }          node.dataset.format = type; -        node.dataset.expressionCount = `${expressions.length}`; +        node.dataset.expressionCount = `${headwords.length}`;          node.dataset.definitionCount = `${definitions.length}`;          node.dataset.pitchAccentDictionaryCount = `${pitches.length}`;          node.dataset.pitchAccentCount = `${pitchCount}`; -        node.dataset.uniqueExpressionCount = `${uniqueExpressions.size}`; +        node.dataset.uniqueExpressionCount = `${uniqueTerms.size}`;          node.dataset.uniqueReadingCount = `${uniqueReadings.size}`;          node.dataset.frequencyCount = `${frequencies.length}`;          node.dataset.groupedFrequencyCount = `${groupedFrequencies.length}`; -        for (let i = 0, ii = expressions.length; i < ii; ++i) { -            const node2 = this._createTermExpression(expressions[i], i, pronunciations); +        for (let i = 0, ii = headwords.length; i < ii; ++i) { +            const node2 = this._createTermHeadword(headwords[i], i, pronunciations);              node2.dataset.index = `${i}`; -            expressionsContainer.appendChild(node2); +            headwordsContainer.appendChild(node2);          } -        expressionsContainer.dataset.count = `${expressions.length}`; +        headwordsContainer.dataset.count = `${headwords.length}`; -        this._appendMultiple(reasonsContainer, this._createTermReason.bind(this), reasons); +        this._appendMultiple(inflectionsContainer, this._createTermInflection.bind(this), inflections);          this._appendMultiple(frequencyGroupListContainer, this._createFrequencyGroup.bind(this), groupedFrequencies, false);          this._appendMultiple(pitchesContainer, this._createPitches.bind(this), pitches); -        this._appendMultiple(termTagsContainer, this._createTermTag.bind(this), termTags, expressions.length); +        this._appendMultiple(termTagsContainer, this._createTermTag.bind(this), termTags, headwords.length); -        for (const expression of uniqueExpressions) { -            termTagsContainer.appendChild(this._createSearchTag(expression)); +        for (const term of uniqueTerms) { +            termTagsContainer.appendChild(this._createSearchTag(term));          }          for (const reading of uniqueReadings) { -            if (uniqueExpressions.has(reading)) { continue; } +            if (uniqueTerms.has(reading)) { continue; }              termTagsContainer.appendChild(this._createSearchTag(reading));          } @@ -117,7 +117,7 @@ class DisplayGenerator {                  dictionaryTag.name = dictionary;              } -            const node2 = this._createTermDefinitionItem(definition, dictionaryTag, expressions, uniqueExpressions, uniqueReadings); +            const node2 = this._createTermDefinition(definition, dictionaryTag, headwords, uniqueTerms, uniqueReadings);              node2.dataset.index = `${i}`;              definitionsContainer.appendChild(node2);          } @@ -126,13 +126,13 @@ class DisplayGenerator {          return node;      } -    createKanjiEntry(details) { +    createKanjiEntry(dictionaryEntry) {          const node = this._templates.instantiate('kanji-entry');          const glyphContainer = node.querySelector('.kanji-glyph');          const frequencyGroupListContainer = node.querySelector('.frequency-group-list');          const tagContainer = node.querySelector('.kanji-tag-list'); -        const glossaryContainer = node.querySelector('.kanji-glossary-list'); +        const definitionsContainer = node.querySelector('.kanji-glossary-list');          const chineseReadingsContainer = node.querySelector('.kanji-readings-chinese');          const japaneseReadingsContainer = node.querySelector('.kanji-readings-japanese');          const statisticsContainer = node.querySelector('.kanji-statistics'); @@ -140,21 +140,21 @@ class DisplayGenerator {          const codepointsContainer = node.querySelector('.kanji-codepoints');          const dictionaryIndicesContainer = node.querySelector('.kanji-dictionary-indices'); -        this._setTextContent(glyphContainer, details.character, 'ja'); -        const groupedFrequencies = DictionaryDataUtil.groupKanjiFrequencies(details.frequencies); +        this._setTextContent(glyphContainer, dictionaryEntry.character, 'ja'); +        const groupedFrequencies = DictionaryDataUtil.groupKanjiFrequencies(dictionaryEntry.frequencies); -        const dictionaryTag = this._createDictionaryTag(details.dictionary); +        const dictionaryTag = this._createDictionaryTag(dictionaryEntry.dictionary);          this._appendMultiple(frequencyGroupListContainer, this._createFrequencyGroup.bind(this), groupedFrequencies, true); -        this._appendMultiple(tagContainer, this._createTag.bind(this), [...details.tags, dictionaryTag]); -        this._appendMultiple(glossaryContainer, this._createKanjiGlossaryItem.bind(this), details.definitions); -        this._appendMultiple(chineseReadingsContainer, this._createKanjiReading.bind(this), details.onyomi); -        this._appendMultiple(japaneseReadingsContainer, this._createKanjiReading.bind(this), details.kunyomi); +        this._appendMultiple(tagContainer, this._createTag.bind(this), [...dictionaryEntry.tags, dictionaryTag]); +        this._appendMultiple(definitionsContainer, this._createKanjiDefinition.bind(this), dictionaryEntry.definitions); +        this._appendMultiple(chineseReadingsContainer, this._createKanjiReading.bind(this), dictionaryEntry.onyomi); +        this._appendMultiple(japaneseReadingsContainer, this._createKanjiReading.bind(this), dictionaryEntry.kunyomi); -        statisticsContainer.appendChild(this._createKanjiInfoTable(details.stats.misc)); -        classificationsContainer.appendChild(this._createKanjiInfoTable(details.stats.class)); -        codepointsContainer.appendChild(this._createKanjiInfoTable(details.stats.code)); -        dictionaryIndicesContainer.appendChild(this._createKanjiInfoTable(details.stats.index)); +        statisticsContainer.appendChild(this._createKanjiInfoTable(dictionaryEntry.stats.misc)); +        classificationsContainer.appendChild(this._createKanjiInfoTable(dictionaryEntry.stats.class)); +        codepointsContainer.appendChild(this._createKanjiInfoTable(dictionaryEntry.stats.code)); +        dictionaryIndicesContainer.appendChild(this._createKanjiInfoTable(dictionaryEntry.stats.index));          return node;      } @@ -235,20 +235,20 @@ class DisplayGenerator {      // Private -    _createTermExpression(headword, headwordIndex, pronunciations) { -        const {term: expression, reading, tags: termTags} = headword; +    _createTermHeadword(headword, headwordIndex, pronunciations) { +        const {term, reading, tags} = headword;          const searchQueries = []; -        if (expression) { searchQueries.push(expression); } +        if (term) { searchQueries.push(term); }          if (reading) { searchQueries.push(reading); }          const node = this._templates.instantiate('expression'); -        const expressionContainer = node.querySelector('.expression-text'); +        const termContainer = node.querySelector('.expression-text');          const tagContainer = node.querySelector('.expression-tag-list'); -        node.dataset.readingIsSame = `${reading === expression}`; -        node.dataset.frequency = DictionaryDataUtil.getTermFrequency(termTags); +        node.dataset.readingIsSame = `${reading === term}`; +        node.dataset.frequency = DictionaryDataUtil.getTermFrequency(tags);          const {wordClasses} = headword;          const pitchAccentCategories = this._getPitchAccentCategories(reading, pronunciations, wordClasses, headwordIndex); @@ -261,61 +261,61 @@ class DisplayGenerator {          this._setTextContent(node.querySelector('.expression-reading'), reading); -        this._appendFurigana(expressionContainer, expression, reading, this._appendKanjiLinks.bind(this)); -        this._appendMultiple(tagContainer, this._createTag.bind(this), termTags); +        this._appendFurigana(termContainer, term, reading, this._appendKanjiLinks.bind(this)); +        this._appendMultiple(tagContainer, this._createTag.bind(this), tags);          this._appendMultiple(tagContainer, this._createSearchTag.bind(this), searchQueries);          return node;      } -    _createTermReason(reason) { +    _createTermInflection(inflection) {          const fragment = this._templates.instantiateFragment('inflection');          const node = fragment.querySelector('.inflection'); -        this._setTextContent(node, reason); -        node.dataset.reason = reason; +        this._setTextContent(node, inflection); +        node.dataset.reason = inflection;          return fragment;      } -    _createTermDefinitionItem(details, dictionaryTag, headwords, uniqueTerms, uniqueReadings) { -        const {dictionary, tags, headwordIndices, entries} = details; +    _createTermDefinition(definition, dictionaryTag, headwords, uniqueTerms, uniqueReadings) { +        const {dictionary, tags, headwordIndices, entries} = definition;          const disambiguations = DictionaryDataUtil.getDisambiguations(headwords, headwordIndices, uniqueTerms, uniqueReadings);          const node = this._templates.instantiate('definition-item');          const tagListContainer = node.querySelector('.definition-tag-list');          const onlyListContainer = node.querySelector('.definition-disambiguation-list'); -        const glossaryContainer = node.querySelector('.glossary-list'); +        const entriesContainer = node.querySelector('.glossary-list');          node.dataset.dictionary = dictionary;          this._appendMultiple(tagListContainer, this._createTag.bind(this), [...tags, dictionaryTag]);          this._appendMultiple(onlyListContainer, this._createTermDisambiguation.bind(this), disambiguations); -        this._appendMultiple(glossaryContainer, this._createTermGlossaryItem.bind(this), entries, dictionary); +        this._appendMultiple(entriesContainer, this._createTermDefinitionEntry.bind(this), entries, dictionary);          return node;      } -    _createTermGlossaryItem(glossary, dictionary) { -        if (typeof glossary === 'string') { -            return this._createTermGlossaryItemText(glossary); -        } else if (typeof glossary === 'object' && glossary !== null) { -            switch (glossary.type) { +    _createTermDefinitionEntry(entry, dictionary) { +        if (typeof entry === 'string') { +            return this._createTermDefinitionEntryText(entry); +        } else if (typeof entry === 'object' && entry !== null) { +            switch (entry.type) {                  case 'image': -                    return this._createTermGlossaryItemImage(glossary, dictionary); +                    return this._createTermDefinitionEntryImage(entry, dictionary);              }          }          return null;      } -    _createTermGlossaryItemText(glossary) { +    _createTermDefinitionEntryText(text) {          const node = this._templates.instantiate('glossary-item');          const container = node.querySelector('.glossary'); -        this._setMultilineTextContent(container, glossary); +        this._setMultilineTextContent(container, text);          return node;      } -    _createTermGlossaryItemImage(data, dictionary) { +    _createTermDefinitionEntryImage(data, dictionary) {          const {path, width, height, preferredWidth, preferredHeight, title, description, pixelated} = data;          const usedWidth = ( @@ -391,10 +391,10 @@ class DisplayGenerator {          return node;      } -    _createKanjiGlossaryItem(glossary) { +    _createKanjiDefinition(text) {          const node = this._templates.instantiate('kanji-glossary-item');          const container = node.querySelector('.kanji-glossary'); -        this._setMultilineTextContent(container, glossary); +        this._setMultilineTextContent(container, text);          return node;      } @@ -431,8 +431,8 @@ class DisplayGenerator {          return this._templates.instantiate('kanji-info-table-empty');      } -    _createTag(details) { -        const {content, name, category, redundant} = details; +    _createTag(tag) { +        const {content, name, category, redundant} = tag;          const node = this._templates.instantiate('tag');          const inner = node.querySelector('.tag-label-content'); @@ -448,8 +448,8 @@ class DisplayGenerator {          return node;      } -    _createTermTag(details, totalHeadwordCount) { -        const {tag, headwordIndices} = details; +    _createTermTag(tagInfo, totalHeadwordCount) { +        const {tag, headwordIndices} = tagInfo;          const node = this._createTag(tag);          node.dataset.headwords = headwordIndices.join(' ');          node.dataset.totalExpressionCount = `${totalHeadwordCount}`; @@ -547,10 +547,10 @@ class DisplayGenerator {      _createPitchAccentDisambiguations(container, exclusiveTerms, exclusiveReadings) {          const templateName = 'pitch-accent-disambiguation'; -        for (const exclusiveExpression of exclusiveTerms) { +        for (const term of exclusiveTerms) {              const node = this._templates.instantiate(templateName);              node.dataset.type = 'expression'; -            this._setTextContent(node, exclusiveExpression, 'ja'); +            this._setTextContent(node, term, 'ja');              container.appendChild(node);          } @@ -712,9 +712,9 @@ class DisplayGenerator {          return count;      } -    _appendFurigana(container, expression, reading, addText) { +    _appendFurigana(container, term, reading, addText) {          container.lang = 'ja'; -        const segments = this._japaneseUtil.distributeFurigana(expression, reading); +        const segments = this._japaneseUtil.distributeFurigana(term, reading);          for (const {text, furigana} of segments) {              if (furigana) {                  const ruby = document.createElement('ruby'); diff --git a/ext/js/display/display.js b/ext/js/display/display.js index 0677611e..ab3ec7e1 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -47,8 +47,8 @@ class Display extends EventDispatcher {          this._documentFocusController = documentFocusController;          this._hotkeyHandler = hotkeyHandler;          this._container = document.querySelector('#definitions'); -        this._definitions = []; -        this._definitionNodes = []; +        this._dictionaryEntries = []; +        this._dictionaryEntryNodes = [];          this._optionsContext = {depth: 0, url: window.location.href};          this._options = null;          this._index = 0; @@ -107,7 +107,7 @@ class Display extends EventDispatcher {          this._frameEndpoint = (pageType === 'popup' ? new FrameEndpoint() : null);          this._browser = null;          this._copyTextarea = null; -        this._definitionTextScanner = null; +        this._contentTextScanner = null;          this._tagNotification = null;          this._footerNotificationContainer = document.querySelector('#content-footer');          this._displayAudio = new DisplayAudio(this); @@ -121,14 +121,14 @@ class Display extends EventDispatcher {              ['close',             () => { this._onHotkeyClose(); }],              ['nextEntry',         this._onHotkeyActionMoveRelative.bind(this, 1)],              ['previousEntry',     this._onHotkeyActionMoveRelative.bind(this, -1)], -            ['lastEntry',         () => { this._focusEntry(this._definitions.length - 1, true); }], +            ['lastEntry',         () => { this._focusEntry(this._dictionaryEntries.length - 1, true); }],              ['firstEntry',        () => { this._focusEntry(0, true); }],              ['historyBackward',   () => { this._sourceTermView(); }],              ['historyForward',    () => { this._nextTermView(); }], -            ['addNoteKanji',      () => { this._tryAddAnkiNoteForSelectedDefinition('kanji'); }], -            ['addNoteTermKanji',  () => { this._tryAddAnkiNoteForSelectedDefinition('term-kanji'); }], -            ['addNoteTermKana',   () => { this._tryAddAnkiNoteForSelectedDefinition('term-kana'); }], -            ['viewNote',          () => { this._tryViewAnkiNoteForSelectedDefinition(); }], +            ['addNoteKanji',      () => { this._tryAddAnkiNoteForSelectedEntry('kanji'); }], +            ['addNoteTermKanji',  () => { this._tryAddAnkiNoteForSelectedEntry('term-kanji'); }], +            ['addNoteTermKana',   () => { this._tryAddAnkiNoteForSelectedEntry('term-kana'); }], +            ['viewNote',          () => { this._tryViewAnkiNoteForSelectedEntry(); }],              ['playAudio',         () => { this._playAudioCurrent(); }],              ['playAudioFromSource', this._onHotkeyActionPlayAudioFromSource.bind(this)],              ['copyHostSelection', () => this._copyHostSelection()], @@ -181,12 +181,12 @@ class Display extends EventDispatcher {          return this._hotkeyHandler;      } -    get definitions() { -        return this._definitions; +    get dictionaryEntries() { +        return this._dictionaryEntries;      } -    get definitionNodes() { -        return this._definitionNodes; +    get dictionaryEntryNodes() { +        return this._dictionaryEntryNodes;      }      get progressIndicatorVisible() { @@ -327,7 +327,7 @@ class Display extends EventDispatcher {          });          this._updateNestedFrontend(options); -        this._updateDefinitionTextScanner(options); +        this._updateContentTextScanner(options);          this.trigger('optionsUpdated', {options});      } @@ -434,7 +434,7 @@ class Display extends EventDispatcher {              params: this._createSearchParams(type, query, false),              state,              content: { -                definitions: null, +                dictionaryEntries: null,                  contentOrigin: this.getContentOrigin()              }          }; @@ -536,8 +536,8 @@ class Display extends EventDispatcher {              this._displayAudio.cleanupEntries();              this._hideTagNotification(false);              this._hideAnkiNoteErrors(false); -            this._definitions = []; -            this._definitionNodes = []; +            this._dictionaryEntries = []; +            this._dictionaryEntryNodes = [];              this._elementOverflowController.clearElements();              // Prepare @@ -606,7 +606,7 @@ class Display extends EventDispatcher {          }      } -    _onQueryParserSearch({type, definitions, sentence, inputInfo: {eventType}, textSource, optionsContext}) { +    _onQueryParserSearch({type, dictionaryEntries, sentence, inputInfo: {eventType}, textSource, optionsContext}) {          const query = textSource.text();          const historyState = this._history.state;          const history = ( @@ -624,7 +624,7 @@ class Display extends EventDispatcher {                  cause: 'queryParser'              },              content: { -                definitions, +                dictionaryEntries,                  contentOrigin: this.getContentOrigin()              }          }; @@ -693,7 +693,7 @@ class Display extends EventDispatcher {              if (typeof documentTitle !== 'string') { documentTitle = document.title; }              const optionsContext = this.getOptionsContext();              const query = e.currentTarget.textContent; -            const definitions = await yomichan.api.kanjiFind(query, optionsContext); +            const dictionaryEntries = await yomichan.api.kanjiFind(query, optionsContext);              const details = {                  focus: false,                  history: true, @@ -706,7 +706,7 @@ class Display extends EventDispatcher {                      documentTitle                  },                  content: { -                    definitions, +                    dictionaryEntries,                      contentOrigin: this.getContentOrigin()                  }              }; @@ -719,7 +719,7 @@ class Display extends EventDispatcher {      _onNoteAdd(e) {          e.preventDefault();          const link = e.currentTarget; -        const index = this._getClosestDefinitionIndex(link); +        const index = this._getClosestDictionaryEntryIndex(link);          this._addAnkiNote(index, link.dataset.mode);      } @@ -756,8 +756,8 @@ class Display extends EventDispatcher {      _onDebugLogClick(e) {          const link = e.currentTarget; -        const index = this._getClosestDefinitionIndex(link); -        this._logDefinitionData(index); +        const index = this._getClosestDictionaryEntryIndex(link); +        this._logDictionaryEntryData(index);      }      _onDocumentElementMouseUp(e) { @@ -814,8 +814,8 @@ class Display extends EventDispatcher {              this._tagNotification = new DisplayNotification(this._footerNotificationContainer, node);          } -        const index = this._getClosestDefinitionIndex(tagNode); -        const dictionaryEntry = (index >= 0 && index < this._definitions.length ? this._definitions[index] : null); +        const index = this._getClosestDictionaryEntryIndex(tagNode); +        const dictionaryEntry = (index >= 0 && index < this._dictionaryEntries.length ? this._dictionaryEntries[index] : null);          const content = this._displayGenerator.createTagFooterNotificationDetails(tagNode, dictionaryEntry);          this._tagNotification.setContent(content); @@ -850,7 +850,7 @@ class Display extends EventDispatcher {          document.documentElement.dataset.theme = themeName;      } -    async _findDefinitions(isTerms, source, wildcardsEnabled, optionsContext) { +    async _findDictionaryEntries(isTerms, source, wildcardsEnabled, optionsContext) {          if (isTerms) {              const findDetails = {};              if (wildcardsEnabled) { @@ -865,11 +865,11 @@ class Display extends EventDispatcher {                  }              } -            const {definitions} = await yomichan.api.termsFind(source, findDetails, optionsContext); -            return definitions; +            const {dictionaryEntries} = await yomichan.api.termsFind(source, findDetails, optionsContext); +            return dictionaryEntries;          } else { -            const definitions = await yomichan.api.kanjiFind(source, optionsContext); -            return definitions; +            const dictionaryEntries = await yomichan.api.kanjiFind(source, optionsContext); +            return dictionaryEntries;          }      } @@ -901,11 +901,11 @@ class Display extends EventDispatcher {          this._setFullQuery(queryFull);          this._setTitleText(query); -        let {definitions} = content; -        if (!Array.isArray(definitions)) { -            definitions = lookup && query.length > 0 ? await this._findDefinitions(isTerms, query, wildcardsEnabled, optionsContext) : []; +        let {dictionaryEntries} = content; +        if (!Array.isArray(dictionaryEntries)) { +            dictionaryEntries = lookup && query.length > 0 ? await this._findDictionaryEntries(isTerms, query, wildcardsEnabled, optionsContext) : [];              if (this._setContentToken !== token) { return; } -            content.definitions = definitions; +            content.dictionaryEntries = dictionaryEntries;              changeHistory = true;          } @@ -940,28 +940,28 @@ class Display extends EventDispatcher {          eventArgs.content = content;          this.trigger('contentUpdating', eventArgs); -        this._definitions = definitions; +        this._dictionaryEntries = dictionaryEntries;          this._updateNavigation(this._history.hasPrevious(), this._history.hasNext()); -        this._setNoContentVisible(definitions.length === 0 && lookup); +        this._setNoContentVisible(dictionaryEntries.length === 0 && lookup);          const container = this._container;          container.textContent = ''; -        for (let i = 0, ii = definitions.length; i < ii; ++i) { +        for (let i = 0, ii = dictionaryEntries.length; i < ii; ++i) {              if (i > 0) {                  await promiseTimeout(1);                  if (this._setContentToken !== token) { return; }              } -            const definition = definitions[i]; +            const dictionaryEntry = dictionaryEntries[i];              const entry = (                  isTerms ? -                this._displayGenerator.createTermEntry(definition) : -                this._displayGenerator.createKanjiEntry(definition) +                this._displayGenerator.createTermEntry(dictionaryEntry) : +                this._displayGenerator.createKanjiEntry(dictionaryEntry)              );              entry.dataset.index = `${i}`; -            this._definitionNodes.push(entry); +            this._dictionaryEntryNodes.push(entry);              this._addEntryEventListeners(entry);              this._displayAudio.setupEntry(entry, i);              container.appendChild(entry); @@ -982,7 +982,7 @@ class Display extends EventDispatcher {          this._displayAudio.setupEntriesComplete(); -        this._updateAdderButtons(token, isTerms, definitions); +        this._updateAdderButtons(token, isTerms, dictionaryEntries);      }      _setContentExtensionUnloaded() { @@ -1069,7 +1069,7 @@ class Display extends EventDispatcher {          }      } -    async _updateAdderButtons(token, isTerms, definitions) { +    async _updateAdderButtons(token, isTerms, dictionaryEntries) {          await this._updateAdderButtonsPromise;          if (this._setContentToken !== token) { return; } @@ -1082,7 +1082,7 @@ class Display extends EventDispatcher {              try {                  const noteContext = this._getNoteContext();                  const {checkForDuplicates} = this._options.anki; -                states = await this._areDefinitionsAddable(definitions, modes, noteContext, checkForDuplicates ? null : true); +                states = await this._areDictionaryEntriesAddable(dictionaryEntries, modes, noteContext, checkForDuplicates ? null : true);              } catch (e) {                  return;              } @@ -1136,7 +1136,7 @@ class Display extends EventDispatcher {      }      _focusEntry(index, smooth) { -        index = Math.max(Math.min(index, this._definitions.length - 1), 0); +        index = Math.max(Math.min(index, this._dictionaryEntries.length - 1), 0);          const entry = this._entrySetCurrent(index);          let target = index === 0 || entry === null ? 0 : this._getElementTop(entry); @@ -1158,12 +1158,12 @@ class Display extends EventDispatcher {          if (offsetSign === 0) { return false; }          let index = this._index; -        const definitionCount = this._definitions.length; -        if (index < 0 || index >= definitionCount) { return false; } +        const dictionaryEntryCount = this._dictionaryEntries.length; +        if (index < 0 || index >= dictionaryEntryCount) { return false; } -        const {dictionary} = this._definitions[index]; -        for (let indexNext = index + offsetSign; indexNext >= 0 && indexNext < definitionCount; indexNext += offsetSign) { -            const {dictionaryNames} = this._definitions[indexNext]; +        const {dictionary} = this._dictionaryEntries[index]; +        for (let indexNext = index + offsetSign; indexNext >= 0 && indexNext < dictionaryEntryCount; indexNext += offsetSign) { +            const {dictionaryNames} = this._dictionaryEntries[indexNext];              if (dictionaryNames.length > 1 || !dictionaryNames.includes(dictionary)) {                  offset -= offsetSign;                  if (Math.sign(offsetSign) !== offset) { @@ -1195,22 +1195,22 @@ class Display extends EventDispatcher {          }      } -    _tryAddAnkiNoteForSelectedDefinition(mode) { +    _tryAddAnkiNoteForSelectedEntry(mode) {          this._addAnkiNote(this._index, mode);      } -    _tryViewAnkiNoteForSelectedDefinition() { +    _tryViewAnkiNoteForSelectedEntry() {          const button = this._viewerButtonFind(this._index);          if (button !== null && !button.disabled) {              yomichan.api.noteView(button.dataset.noteId);          }      } -    async _addAnkiNote(definitionIndex, mode) { -        if (definitionIndex < 0 || definitionIndex >= this._definitions.length) { return; } -        const definition = this._definitions[definitionIndex]; +    async _addAnkiNote(dictionaryEntryIndex, mode) { +        if (dictionaryEntryIndex < 0 || dictionaryEntryIndex >= this._dictionaryEntries.length) { return; } +        const dictionaryEntry = this._dictionaryEntries[dictionaryEntryIndex]; -        const button = this._adderButtonFind(definitionIndex, mode); +        const button = this._adderButtonFind(dictionaryEntryIndex, mode);          if (button === null || button.disabled) { return; }          this._hideAnkiNoteErrors(true); @@ -1220,7 +1220,7 @@ class Display extends EventDispatcher {          try {              const {anki: {suspendNewCards}} = this._options;              const noteContext = this._getNoteContext(); -            const note = await this._createNote(definition, mode, noteContext, true, errors); +            const note = await this._createNote(dictionaryEntry, mode, noteContext, true, errors);              let noteId = null;              let addNoteOkay = false; @@ -1244,7 +1244,7 @@ class Display extends EventDispatcher {                          }                      }                      button.disabled = true; -                    this._viewerButtonShow(definitionIndex, noteId); +                    this._viewerButtonShow(dictionaryEntryIndex, noteId);                  }              }          } catch (e) { @@ -1293,7 +1293,7 @@ class Display extends EventDispatcher {      }      _getEntry(index) { -        const entries = this._definitionNodes; +        const entries = this._dictionaryEntryNodes;          return index >= 0 && index < entries.length ? entries[index] : null;      } @@ -1304,7 +1304,7 @@ class Display extends EventDispatcher {          return {text, offset};      } -    _getClosestDefinitionIndex(element) { +    _getClosestDictionaryEntryIndex(element) {          return this._getClosestIndex(element, '.entry');      } @@ -1424,12 +1424,12 @@ class Display extends EventDispatcher {          return templates;      } -    async _areDefinitionsAddable(definitions, modes, context, forceCanAddValue) { +    async _areDictionaryEntriesAddable(dictionaryEntries, modes, context, forceCanAddValue) {          const modeCount = modes.length;          const notePromises = []; -        for (const definition of definitions) { +        for (const dictionaryEntry of dictionaryEntries) {              for (const mode of modes) { -                const notePromise = this._createNote(definition, mode, context, false, null); +                const notePromise = this._createNote(dictionaryEntry, mode, context, false, null);                  notePromises.push(notePromise);              }          } @@ -1461,7 +1461,7 @@ class Display extends EventDispatcher {          return results;      } -    async _createNote(definition, mode, context, injectMedia, errors) { +    async _createNote(dictionaryEntry, mode, context, injectMedia, errors) {          const options = this._options;          const template = this._ankiFieldTemplates;          const { @@ -1476,7 +1476,7 @@ class Display extends EventDispatcher {          let injectedMedia = null;          if (injectMedia) {              let errors2; -            ({result: injectedMedia, errors: errors2} = await this._injectAnkiNoteMedia(definition, options, fields)); +            ({result: injectedMedia, errors: errors2} = await this._injectAnkiNoteMedia(dictionaryEntry, options, fields));              if (Array.isArray(errors)) {                  for (const error of errors2) {                      errors.push(deserializeError(error)); @@ -1485,7 +1485,7 @@ class Display extends EventDispatcher {          }          return await this._ankiNoteBuilder.createNote({ -            definition, +            dictionaryEntry,              mode,              context,              template, @@ -1503,7 +1503,7 @@ class Display extends EventDispatcher {          });      } -    async _injectAnkiNoteMedia(definition, options, fields) { +    async _injectAnkiNoteMedia(dictionaryEntry, options, fields) {          const {              anki: {screenshot: {format, quality}},              audio: {sources, customSourceUrl, customSourceType} @@ -1511,11 +1511,11 @@ class Display extends EventDispatcher {          const timestamp = Date.now(); -        const definitionDetails = this._getDefinitionDetailsForNote(definition); +        const dictionaryEntryDetails = this._getDictionaryEntryDetailsForNote(dictionaryEntry);          let audioDetails = null; -        if (definitionDetails.type !== 'kanji' && AnkiUtil.fieldsObjectContainsMarker(fields, 'audio')) { -            const primaryCardAudio = this._displayAudio.getPrimaryCardAudio(definitionDetails.term, definitionDetails.reading); +        if (dictionaryEntryDetails.type !== 'kanji' && AnkiUtil.fieldsObjectContainsMarker(fields, 'audio')) { +            const primaryCardAudio = this._displayAudio.getPrimaryCardAudio(dictionaryEntryDetails.term, dictionaryEntryDetails.reading);              let preferredAudioIndex = null;              let sources2 = sources;              if (primaryCardAudio !== null) { @@ -1534,14 +1534,14 @@ class Display extends EventDispatcher {          return await yomichan.api.injectAnkiNoteMedia(              timestamp, -            definitionDetails, +            dictionaryEntryDetails,              audioDetails,              screenshotDetails,              clipboardDetails          );      } -    _getDefinitionDetailsForNote(dictionaryEntry) { +    _getDictionaryEntryDetailsForNote(dictionaryEntry) {          const {type} = dictionaryEntry;          if (type === 'kanji') {              const {character} = dictionaryEntry; @@ -1710,16 +1710,16 @@ class Display extends EventDispatcher {          this._addMultipleEventListeners(entry, '.tag-label', 'click', this._onTagClick.bind(this));      } -    _updateDefinitionTextScanner(options) { +    _updateContentTextScanner(options) {          if (!options.scanning.enablePopupSearch) { -            if (this._definitionTextScanner !== null) { -                this._definitionTextScanner.setEnabled(false); +            if (this._contentTextScanner !== null) { +                this._contentTextScanner.setEnabled(false);              }              return;          } -        if (this._definitionTextScanner === null) { -            this._definitionTextScanner = new TextScanner({ +        if (this._contentTextScanner === null) { +            this._contentTextScanner = new TextScanner({                  node: window,                  getSearchContext: this._getSearchContext.bind(this),                  documentUtil: this._documentUtil, @@ -1728,14 +1728,14 @@ class Display extends EventDispatcher {                  searchOnClick: true,                  searchOnClickOnly: true              }); -            this._definitionTextScanner.includeSelector = '.click-scannable,.click-scannable *'; -            this._definitionTextScanner.excludeSelector = '.scan-disable,.scan-disable *'; -            this._definitionTextScanner.prepare(); -            this._definitionTextScanner.on('searched', this._onDefinitionTextScannerSearched.bind(this)); +            this._contentTextScanner.includeSelector = '.click-scannable,.click-scannable *'; +            this._contentTextScanner.excludeSelector = '.scan-disable,.scan-disable *'; +            this._contentTextScanner.prepare(); +            this._contentTextScanner.on('searched', this._onContentTextScannerSearched.bind(this));          }          const {scanning: scanningOptions, sentenceParsing: sentenceParsingOptions} = options; -        this._definitionTextScanner.setOptions({ +        this._contentTextScanner.setOptions({              inputs: [{                  include: 'mouse0',                  exclude: '', @@ -1761,10 +1761,10 @@ class Display extends EventDispatcher {              sentenceParsingOptions          }); -        this._definitionTextScanner.setEnabled(true); +        this._contentTextScanner.setEnabled(true);      } -    _onDefinitionTextScannerSearched({type, definitions, sentence, textSource, optionsContext, error}) { +    _onContentTextScannerSearched({type, dictionaryEntries, sentence, textSource, optionsContext, error}) {          if (error !== null && !yomichan.isExtensionUnloaded) {              log.error(error);          } @@ -1790,11 +1790,11 @@ class Display extends EventDispatcher {                  documentTitle              },              content: { -                definitions, +                dictionaryEntries,                  contentOrigin: this.getContentOrigin()              }          }; -        this._definitionTextScanner.clearSelection(true); +        this._contentTextScanner.clearSelection(true);          this.setContent(details);      } @@ -1865,16 +1865,16 @@ class Display extends EventDispatcher {          return typeof queryPostProcessor === 'function' ? queryPostProcessor(query) : query;      } -    async _logDefinitionData(index) { -        if (index < 0 || index >= this._definitions.length) { return; } -        const dictionaryEntry = this._definitions[index]; +    async _logDictionaryEntryData(index) { +        if (index < 0 || index >= this._dictionaryEntries.length) { return; } +        const dictionaryEntry = this._dictionaryEntries[index];          let ankiNoteData;          let ankiNoteDataException;          try {              const context = this._getNoteContext();              const {general: {resultOutputMode, glossaryLayoutMode, compactTags}} = this._options;              ankiNoteData = await this._ankiNoteBuilder.getRenderingData({ -                definition: dictionaryEntry, +                dictionaryEntry,                  mode: 'test',                  context,                  resultOutputMode, diff --git a/ext/js/display/search-display-controller.js b/ext/js/display/search-display-controller.js index 459d2257..f672909e 100644 --- a/ext/js/display/search-display-controller.js +++ b/ext/js/display/search-display-controller.js @@ -361,7 +361,7 @@ class SearchDisplayController {                  documentTitle              },              content: { -                definitions: null, +                dictionaryEntries: null,                  animate,                  contentOrigin: {                      tabId: this.tabId, |