diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/bg/data/anki-field-templates-upgrade-v8.handlebars | 18 | ||||
-rw-r--r-- | ext/bg/data/default-anki-field-templates.handlebars | 18 | ||||
-rw-r--r-- | ext/bg/js/settings/anki-controller.js | 1 | ||||
-rw-r--r-- | ext/bg/js/translator.js | 15 | ||||
-rw-r--r-- | ext/bg/settings2.html | 4 | ||||
-rw-r--r-- | ext/mixed/js/display-generator.js | 43 |
6 files changed, 76 insertions, 23 deletions
diff --git a/ext/bg/data/anki-field-templates-upgrade-v8.handlebars b/ext/bg/data/anki-field-templates-upgrade-v8.handlebars index 32c61343..b3aed45f 100644 --- a/ext/bg/data/anki-field-templates-upgrade-v8.handlebars +++ b/ext/bg/data/anki-field-templates-upgrade-v8.handlebars @@ -52,6 +52,13 @@ {{~#set "any" true}}{{/set~}} {{~/if~}} {{~/each~}} + {{~#unless noDictionaryTag~}} + {{~#if (op "||" (op "!" @root.compactTags) (op "!==" dictionary (get "previousDictionary")))~}} + {{~#if (get "any")}}, {{else}}<i>({{/if~}} + {{dictionary}} + {{~#set "any" true}}{{/set~}} + {{~/if~}} + {{~/unless~}} {{~#if (get "any")}})</i> {{/if~}} {{~/scope~}} {{~#if only~}}({{#each only}}{{.}}{{#unless @last}}, {{/unless}}{{/each}} only) {{/if~}} @@ -63,6 +70,7 @@ {{~else~}} <ul>{{#each glossary}}<li>{{#multiLine}}{{.}}{{/multiLine}}</li>{{/each}}</ul> {{~/if~}} + {{~#set "previousDictionary" dictionary~}}{{~/set~}} {{/inline}} {{>>>>>>>}} @@ -99,12 +107,12 @@ <div style="text-align: left;"> {{~#scope~}} {{~#if (op "===" definition.type "term")~}} - {{~> glossary-single definition brief=brief ~}} + {{~> glossary-single definition brief=brief noDictionaryTag=noDictionaryTag ~}} {{~else if (op "||" (op "===" definition.type "termGrouped") (op "===" definition.type "termMerged"))~}} {{~#if (op ">" definition.definitions.length 1)~}} - <ol>{{~#each definition.definitions~}}<li>{{~> glossary-single . brief=../brief ~}}</li>{{~/each~}}</ol> + <ol>{{~#each definition.definitions~}}<li>{{~> glossary-single . brief=../brief noDictionaryTag=../noDictionaryTag ~}}</li>{{~/each~}}</ol> {{~else~}} - {{~#each definition.definitions~}}{{~> glossary-single . brief=../brief ~}}{{~/each~}} + {{~#each definition.definitions~}}{{~> glossary-single . brief=../brief noDictionaryTag=../noDictionaryTag ~}}{{~/each~}} {{~/if~}} {{~else if (op "===" definition.type "kanji")~}} {{~#if (op ">" definition.glossary.length 1)~}} @@ -116,4 +124,8 @@ {{~/scope~}} </div> {{~/inline~}} + +{{#*inline "glossary-no-dictionary"}} + {{~> glossary noDictionaryTag=true ~}} +{{/inline}} {{>>>>>>>}} diff --git a/ext/bg/data/default-anki-field-templates.handlebars b/ext/bg/data/default-anki-field-templates.handlebars index 94553183..8ee2e00d 100644 --- a/ext/bg/data/default-anki-field-templates.handlebars +++ b/ext/bg/data/default-anki-field-templates.handlebars @@ -9,6 +9,13 @@ {{~#set "any" true}}{{/set~}} {{~/if~}} {{~/each~}} + {{~#unless noDictionaryTag~}} + {{~#if (op "||" (op "!" @root.compactTags) (op "!==" dictionary (get "previousDictionary")))~}} + {{~#if (get "any")}}, {{else}}<i>({{/if~}} + {{dictionary}} + {{~#set "any" true}}{{/set~}} + {{~/if~}} + {{~/unless~}} {{~#if (get "any")}})</i> {{/if~}} {{~/scope~}} {{~#if only~}}({{#each only}}{{.}}{{#unless @last}}, {{/unless}}{{/each}} only) {{/if~}} @@ -20,6 +27,7 @@ {{~else~}} <ul>{{#each glossary}}<li>{{#multiLine}}{{.}}{{/multiLine}}</li>{{/each}}</ul> {{~/if~}} + {{~#set "previousDictionary" dictionary~}}{{~/set~}} {{/inline}} {{#*inline "audio"}} @@ -93,12 +101,12 @@ <div style="text-align: left;"> {{~#scope~}} {{~#if (op "===" definition.type "term")~}} - {{~> glossary-single definition brief=brief ~}} + {{~> glossary-single definition brief=brief noDictionaryTag=noDictionaryTag ~}} {{~else if (op "||" (op "===" definition.type "termGrouped") (op "===" definition.type "termMerged"))~}} {{~#if (op ">" definition.definitions.length 1)~}} - <ol>{{~#each definition.definitions~}}<li>{{~> glossary-single . brief=../brief ~}}</li>{{~/each~}}</ol> + <ol>{{~#each definition.definitions~}}<li>{{~> glossary-single . brief=../brief noDictionaryTag=../noDictionaryTag ~}}</li>{{~/each~}}</ol> {{~else~}} - {{~#each definition.definitions~}}{{~> glossary-single . brief=../brief ~}}{{~/each~}} + {{~#each definition.definitions~}}{{~> glossary-single . brief=../brief noDictionaryTag=../noDictionaryTag ~}}{{~/each~}} {{~/if~}} {{~else if (op "===" definition.type "kanji")~}} {{~#if (op ">" definition.glossary.length 1)~}} @@ -111,6 +119,10 @@ </div> {{~/inline~}} +{{#*inline "glossary-no-dictionary"}} + {{~> glossary2 noDictionaryTag=true ~}} +{{/inline}} + {{#*inline "glossary-brief"}} {{~> glossary brief=true ~}} {{/inline}} diff --git a/ext/bg/js/settings/anki-controller.js b/ext/bg/js/settings/anki-controller.js index c2292bc9..e7c8db15 100644 --- a/ext/bg/js/settings/anki-controller.js +++ b/ext/bg/js/settings/anki-controller.js @@ -94,6 +94,7 @@ class AnkiController { 'furigana-plain', 'glossary', 'glossary-brief', + 'glossary-no-dictionary', 'pitch-accents', 'pitch-accent-graphs', 'pitch-accent-positions', diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 7242ec56..729c8294 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -133,7 +133,6 @@ class Translator { for (const {character, onyomi, kunyomi, tags, glossary, stats, dictionary} of databaseDefinitions) { const expandedStats = await this._expandStats(stats, dictionary); const expandedTags = await this._expandTags(tags, dictionary); - expandedTags.push(this._createDictionaryTag(dictionary)); this._sortTags(expandedTags); const definition = this._createKanjiDefinition(character, dictionary, onyomi, kunyomi, glossary, expandedTags, expandedStats); @@ -541,17 +540,14 @@ class Translator { } _flagRedundantDefinitionTags(definitions) { - let lastDictionary = ''; + let lastDictionary = null; let lastPartOfSpeech = ''; const removeCategoriesSet = new Set(); - for (const {definitionTags} of definitions) { - const dictionary = this._createMapKey(this._getTagNamesWithCategory(definitionTags, 'dictionary')); + for (const {dictionary, definitionTags} of definitions) { const partOfSpeech = this._createMapKey(this._getTagNamesWithCategory(definitionTags, 'partOfSpeech')); - if (lastDictionary === dictionary) { - removeCategoriesSet.add('dictionary'); - } else { + if (lastDictionary !== dictionary) { lastDictionary = dictionary; lastPartOfSpeech = ''; } @@ -1054,10 +1050,6 @@ class Translator { return JSON.stringify(array); } - _createDictionaryTag(name) { - return this._createTag(name, 'dictionary', '', 100, 0, name, false); - } - _createTag(name, category, notes, order, score, dictionary, redundant) { return { name, @@ -1101,7 +1093,6 @@ class Translator { const dictionaryPriority = this._getDictionaryPriority(dictionary, enabledDictionaryMap); const termTagsExpanded = await this._expandTags(termTags, dictionary); const definitionTagsExpanded = await this._expandTags(definitionTags, dictionary); - definitionTagsExpanded.push(this._createDictionaryTag(dictionary)); this._sortTags(definitionTagsExpanded); this._sortTags(termTagsExpanded); diff --git a/ext/bg/settings2.html b/ext/bg/settings2.html index d557d366..d29bd4a1 100644 --- a/ext/bg/settings2.html +++ b/ext/bg/settings2.html @@ -2627,6 +2627,10 @@ <td>List of definitions for the term in a more compact format.</td> </tr> <tr> + <td><code class="anki-field-marker">{glossary-no-dictionary}</code></td> + <td>List of definitions for the term, except the dictionary tag is omitted.</td> + </tr> + <tr> <td><code class="anki-field-marker">{pitch-accents}</code></td> <td>List of pitch accent downstep notations for the term.</td> </tr> diff --git a/ext/mixed/js/display-generator.js b/ext/mixed/js/display-generator.js index e9eaa68f..d7cc5bd4 100644 --- a/ext/mixed/js/display-generator.js +++ b/ext/mixed/js/display-generator.js @@ -91,9 +91,28 @@ class DisplayGenerator { this._appendMultiple(reasonsContainer, this._createTermReason.bind(this), reasons); this._appendMultiple(frequencyGroupListContainer, this._createFrequencyGroup.bind(this), groupedFrequencies, false); this._appendMultiple(pitchesContainer, this._createPitches.bind(this), pitches); - this._appendMultiple(definitionsContainer, this._createTermDefinitionItem.bind(this), definitions); this._appendMultiple(termTagsContainer, this._createTermTag.bind(this), termTags, expressions.length); + // Add definitions + const dictionaryTag = this._createDictionaryTag(null); + for (let i = 0, ii = definitions.length; i < ii; ++i) { + const definition = definitions[i]; + const {dictionary} = definition; + + if (dictionaryTag.dictionary === dictionary) { + dictionaryTag.redundant = true; + } else { + dictionaryTag.redundant = false; + dictionaryTag.dictionary = dictionary; + dictionaryTag.name = dictionary; + } + + const node2 = this._createTermDefinitionItem(definition, dictionaryTag); + node2.dataset.index = `${i}`; + definitionsContainer.appendChild(node2); + } + definitionsContainer.dataset.count = `${definitions.length}`; + return node; } @@ -114,8 +133,10 @@ class DisplayGenerator { glyphContainer.textContent = details.character; const groupedFrequencies = DictionaryDataUtil.groupKanjiFrequencies(details.frequencies); + const dictionaryTag = this._createDictionaryTag(details.dictionary); + this._appendMultiple(frequencyGroupListContainer, this._createFrequencyGroup.bind(this), groupedFrequencies, true); - this._appendMultiple(tagContainer, this._createTag.bind(this), details.tags); + this._appendMultiple(tagContainer, this._createTag.bind(this), [...details.tags, dictionaryTag]); this._appendMultiple(glossaryContainer, this._createKanjiGlossaryItem.bind(this), details.glossary); this._appendMultiple(chineseReadingsContainer, this._createKanjiReading.bind(this), details.onyomi); this._appendMultiple(japaneseReadingsContainer, this._createKanjiReading.bind(this), details.kunyomi); @@ -211,17 +232,17 @@ class DisplayGenerator { return fragment; } - _createTermDefinitionItem(details) { + _createTermDefinitionItem(details, dictionaryTag) { const node = this._templates.instantiate('term-definition-item'); const tagListContainer = node.querySelector('.term-definition-tag-list'); const onlyListContainer = node.querySelector('.term-definition-disambiguation-list'); const glossaryContainer = node.querySelector('.term-glossary-list'); - const dictionary = details.dictionary; + const {dictionary, definitionTags} = details; node.dataset.dictionary = dictionary; - this._appendMultiple(tagListContainer, this._createTag.bind(this), details.definitionTags); + this._appendMultiple(tagListContainer, this._createTag.bind(this), [...definitionTags, dictionaryTag]); this._appendMultiple(onlyListContainer, this._createTermDisambiguation.bind(this), details.only); this._appendMultiple(glossaryContainer, this._createTermGlossaryItem.bind(this), details.glossary, dictionary); @@ -645,4 +666,16 @@ class DisplayGenerator { container.appendChild(document.createTextNode(parts[i])); } } + + _createDictionaryTag(dictionary) { + return { + name: dictionary, + category: 'dictionary', + notes: '', + order: 100, + score: 0, + dictionary, + redundant: false + }; + } } |