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 +        }; +    }  } |