From 62c881cfeb20eed816e3c317e425dc3affa0391d Mon Sep 17 00:00:00 2001 From: siikamiika Date: Mon, 25 Sep 2017 23:47:53 +0300 Subject: Go to next and previous result with Alt+wheel Analogous to Alt+up/down which does the same thing --- ext/mixed/js/display.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'ext/mixed/js') diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 75ee339a..302a6280 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -29,6 +29,7 @@ class Display { this.audioCache = {}; $(document).keydown(this.onKeyDown.bind(this)); + $(document).on('wheel', this.onWheel.bind(this)); } onError(error) { @@ -202,6 +203,25 @@ class Display { } } + onWheel(e) { + const event = e.originalEvent; + const handler = () => { + if (event.altKey) { + if (event.deltaY < 0) { // scroll up + this.entryScrollIntoView(this.index - 1, true); + return true; + } else if (event.deltaY > 0) { // scroll down + this.entryScrollIntoView(this.index + 1, true); + return true; + } + } + }; + + if (handler()) { + event.preventDefault(); + } + } + async termsShow(definitions, options, context) { try { window.focus(); -- cgit v1.2.3 From b24c70523479c16eca848f5aafaa887549689ac6 Mon Sep 17 00:00:00 2001 From: siikamiika Date: Fri, 29 Sep 2017 05:41:29 +0300 Subject: basic structure for feature-merge-similar-results --- ext/bg/js/api.js | 6 +++--- ext/bg/js/database.js | 3 ++- ext/bg/js/dictionary.js | 3 ++- ext/bg/js/options.js | 2 +- ext/bg/js/settings.js | 4 ++-- ext/bg/js/translator.js | 15 ++++++++++++++- ext/bg/settings.html | 13 +++++++++---- ext/mixed/js/display.js | 3 ++- 8 files changed, 35 insertions(+), 14 deletions(-) (limited to 'ext/mixed/js') diff --git a/ext/bg/js/api.js b/ext/bg/js/api.js index 9f65bb07..01322357 100644 --- a/ext/bg/js/api.js +++ b/ext/bg/js/api.js @@ -29,9 +29,9 @@ async function apiTermsFind(text) { const options = utilBackend().options; const translator = utilBackend().translator; - const searcher = options.general.groupResults ? - translator.findTermsGrouped.bind(translator) : - translator.findTermsSplit.bind(translator); + const searcher = (options.general.resultOutputMode === 'merge') && translator.findTermsMerged.bind(translator) + || (options.general.resultOutputMode === 'split') && translator.findTermsSplit.bind(translator) + || (options.general.resultOutputMode === 'group') && translator.findTermsGrouped.bind(translator); const {definitions, length} = await searcher( text, diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js index 6ceb3ec8..29ab6d4e 100644 --- a/ext/bg/js/database.js +++ b/ext/bg/js/database.js @@ -208,7 +208,7 @@ class Database { }); } } else { - for (const [expression, reading, tags, rules, score, glossary] of entries) { + for (const [expression, reading, tags, rules, score, glossary, sequence] of entries) { rows.push({ expression, reading, @@ -216,6 +216,7 @@ class Database { rules, score, glossary, + sequence, dictionary: summary.title }); } diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index 57acbe5e..f3f573d3 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -207,7 +207,8 @@ async function dictFieldFormat(field, definition, mode, options) { const data = { marker, definition, - group: options.general.groupResults, + group: options.general.resultOutputMode === 'group', + merge: options.general.resultOutputMode === 'merge', modeTermKanji: mode === 'term-kanji', modeTermKana: mode === 'term-kana', modeKanji: mode === 'kanji' diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 36ab7694..de3da943 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -132,7 +132,7 @@ function optionsSetDefaults(options) { enable: true, audioSource: 'jpod101', audioVolume: 100, - groupResults: true, + resultOutputMode: 'group', debugInfo: false, maxResults: 32, showAdvanced: false, diff --git a/ext/bg/js/settings.js b/ext/bg/js/settings.js index a2f22371..c5a28a45 100644 --- a/ext/bg/js/settings.js +++ b/ext/bg/js/settings.js @@ -22,9 +22,9 @@ async function formRead() { const optionsNew = $.extend(true, {}, optionsOld); optionsNew.general.showGuide = $('#show-usage-guide').prop('checked'); + optionsNew.general.resultOutputMode = $('#result-output-mode').val(); optionsNew.general.audioSource = $('#audio-playback-source').val(); optionsNew.general.audioVolume = parseFloat($('#audio-playback-volume').val()); - optionsNew.general.groupResults = $('#group-terms-results').prop('checked'); optionsNew.general.debugInfo = $('#show-debug-info').prop('checked'); optionsNew.general.showAdvanced = $('#show-advanced-options').prop('checked'); optionsNew.general.maxResults = parseInt($('#max-displayed-results').val(), 10); @@ -124,9 +124,9 @@ async function onReady() { const options = await optionsLoad(); $('#show-usage-guide').prop('checked', options.general.showGuide); + $('#result-output-mode').val(options.general.resultOutputMode); $('#audio-playback-source').val(options.general.audioSource); $('#audio-playback-volume').val(options.general.audioVolume); - $('#group-terms-results').prop('checked', options.general.groupResults); $('#show-debug-info').prop('checked', options.general.debugInfo); $('#show-advanced-options').prop('checked', options.general.showAdvanced); $('#max-displayed-results').val(options.general.maxResults); diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index c915dbc0..8fa2b60b 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -48,6 +48,18 @@ class Translator { return {length, definitions: definitionsGrouped}; } + async findTermsMerged(text, dictionaries, alphanumeric) { + const titles = Object.keys(dictionaries); + const {length, definitions} = await this.findTerms(text, dictionaries, alphanumeric); + + const definitionsMerged = dictTermsGroup(definitions, dictionaries); + // for (const definition of definitionsMerged) { + // await this.buildTermFrequencies(definition, titles); + // } + + return {length, definitions: definitionsMerged}; + } + async findTermsSplit(text, dictionaries, alphanumeric) { const titles = Object.keys(dictionaries); const {length, definitions} = await this.findTerms(text, dictionaries, alphanumeric); @@ -90,7 +102,8 @@ class Translator { expression: definition.expression, reading: definition.reading, glossary: definition.glossary, - tags: dictTagsSort(tags) + tags: dictTagsSort(tags), + sequence: definition.sequence }); } } diff --git a/ext/bg/settings.html b/ext/bg/settings.html index 4315d74b..6274f3cb 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -35,10 +35,6 @@ -
- -
-
@@ -47,6 +43,15 @@ +
+ + +
+
Compact tags
+
+ +
+ +
+ +
+
@@ -48,9 +56,9 @@
- + diff --git a/ext/mixed/css/display.css b/ext/mixed/css/display.css index 670930ae..b31774f9 100644 --- a/ext/mixed/css/display.css +++ b/ext/mixed/css/display.css @@ -181,6 +181,20 @@ hr { padding-left: 1.4em; } +.glossary ul.compact { + display: inline; + list-style: none; + padding-left: 0px; +} + +.glossary .compact li { + display: inline; +} + +.glossary .compact li:not(:first-child):before { + content: " | "; +} + .glossary li { color: #777; } @@ -189,6 +203,10 @@ hr { color: #000; } +div.glossary-item.compact { + display: inline; +} + .glyph { font-family: kanji-stroke-orders; font-size: 120px; diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index e3b5ee50..daa90b4e 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -239,6 +239,8 @@ class Display { grouped: options.general.resultOutputMode === 'group', merged: options.general.resultOutputMode === 'merge', playback: options.general.audioSource !== 'disabled', + tagLineBreak: options.general.tagLineBreak, + compactGlossaries: options.general.compactGlossaries, debug: options.general.debugInfo }; diff --git a/tmpl/terms.html b/tmpl/terms.html index f35caed4..eaae7384 100644 --- a/tmpl/terms.html +++ b/tmpl/terms.html @@ -1,13 +1,13 @@ {{#*inline "definition"}} {{#if definitionTags}} -
+
{{#each definitionTags}} {{name}} {{/each}}
{{/if}} {{#if only}} -
+
( {{~#each only~}} {{{.}}}{{#unless @last}}, {{/unless}} @@ -16,13 +16,13 @@
{{/if}} {{#if glossary.[1]}} -
    +
      {{#each glossary}}
    • {{#multiLine}}{{.}}{{/multiLine}}
    • {{/each}}
    {{else}} -
    {{#multiLine}}{{glossary.[0]}}{{/multiLine}}
    +
    {{#multiLine}}{{glossary.[0]}}{{/multiLine}}
    {{/if}} {{/inline}} @@ -70,6 +70,13 @@ {{/each}} {{else}}
    {{#kanjiLinks}}{{#furigana}}{{{.}}}{{/furigana}}{{/kanjiLinks}}
    + {{#if termTags}} +
    + {{#each termTags}} + {{name}} + {{/each}} +
    + {{/if}} {{/if}} {{#if reasons}} @@ -80,14 +87,6 @@
{{/if}} - {{#if termTags}} -
- {{#each termTags}} - {{name}} - {{/each}} -
- {{/if}} - {{#if frequencies}}
{{#each frequencies}} @@ -101,24 +100,24 @@ {{#if definitions.[1]}}
    {{#each definitions}} -
  1. {{> definition}}
  2. +
  3. {{> definition tagLineBreak=../tagLineBreak compactGlossaries=../compactGlossaries}}
  4. {{/each}}
{{else}} - {{> definition definitions.[0]}} + {{> definition definitions.[0] tagLineBreak=tagLineBreak compactGlossaries=compactGlossaries}} {{/if}} {{else if merged}} {{#if definitions.[1]}}
    {{#each definitions}} -
  1. {{> definition}}
  2. +
  3. {{> definition tagLineBreak=../tagLineBreak compactGlossaries=../compactGlossaries}}
  4. {{/each}}
{{else}} - {{> definition definitions.[0]}} + {{> definition definitions.[0] tagLineBreak=tagLineBreak compactGlossaries=compactGlossaries}} {{/if}} {{else}} - {{> definition}} + {{> definition tagLineBreak=tagLineBreak compactGlossaries=compactGlossaries}} {{/if}}
@@ -131,7 +130,7 @@ {{#if definitions}} {{#each definitions}} {{#unless @first}}
{{/unless}} -{{> term debug=../debug grouped=../grouped merged=../merged addable=../addable playback=../playback}} +{{> term debug=../debug grouped=../grouped merged=../merged addable=../addable playback=../playback tagLineBreak=../tagLineBreak compactGlossaries=../compactGlossaries}} {{/each}} {{else}}

No results found.

-- cgit v1.2.3 From 7913b094b7b50fba562917a530bc04df81e51fe1 Mon Sep 17 00:00:00 2001 From: siikamiika Date: Sun, 15 Oct 2017 10:38:30 +0300 Subject: scrap tagLineBreak option --- ext/bg/js/options.js | 2 -- ext/bg/js/settings.js | 2 -- ext/bg/js/templates.js | 10 +++++----- ext/bg/settings.html | 4 ---- ext/mixed/js/display.js | 1 - tmpl/terms.html | 14 +++++++------- 6 files changed, 12 insertions(+), 21 deletions(-) (limited to 'ext/mixed/js') diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 968fbf23..86c4e27c 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -141,7 +141,6 @@ function optionsSetDefaults(options) { popupOffset: 10, showGuide: true, compactTags: false, - tagLineBreak: true, compactGlossaries: false }, @@ -216,7 +215,6 @@ function optionsVersion(options) { options.general.resultOutputMode = 'split'; } options.general.compactTags = false; - options.general.tagLineBreak = true; options.general.compactGlossaries = false; } ]; diff --git a/ext/bg/js/settings.js b/ext/bg/js/settings.js index 7a8e1fea..37e5126e 100644 --- a/ext/bg/js/settings.js +++ b/ext/bg/js/settings.js @@ -23,7 +23,6 @@ async function formRead() { optionsNew.general.showGuide = $('#show-usage-guide').prop('checked'); optionsNew.general.compactTags = $('#compact-tags').prop('checked'); - optionsNew.general.tagLineBreak = $('#tag-line-break').prop('checked'); optionsNew.general.compactGlossaries = $('#compact-glossaries').prop('checked'); optionsNew.general.resultOutputMode = $('#result-output-mode').val(); optionsNew.general.audioSource = $('#audio-playback-source').val(); @@ -130,7 +129,6 @@ async function onReady() { $('#show-usage-guide').prop('checked', options.general.showGuide); $('#compact-tags').prop('checked', options.general.compactTags); - $('#tag-line-break').prop('checked', options.general.tagLineBreak); $('#compact-glossaries').prop('checked', options.general.compactGlossaries); $('#result-output-mode').val(options.general.resultOutputMode); $('#audio-playback-source').val(options.general.audioSource); diff --git a/ext/bg/js/templates.js b/ext/bg/js/templates.js index 95d77194..5b5e63f5 100644 --- a/ext/bg/js/templates.js +++ b/ext/bg/js/templates.js @@ -215,7 +215,7 @@ templates['terms.html'] = template({"1":function(container,depth0,helpers,partia var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}); return "
\n" + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.definitionTags : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "
\n"; @@ -438,12 +438,12 @@ templates['terms.html'] = template({"1":function(container,depth0,helpers,partia var stack1; return "
  • " - + ((stack1 = container.invokePartial(partials.definition,depth0,{"name":"definition","hash":{"compactGlossaries":(depths[1] != null ? depths[1].compactGlossaries : depths[1]),"tagLineBreak":(depths[1] != null ? depths[1].tagLineBreak : depths[1])},"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "") + + ((stack1 = container.invokePartial(partials.definition,depth0,{"name":"definition","hash":{"compactGlossaries":(depths[1] != null ? depths[1].compactGlossaries : depths[1])},"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "") + "
  • \n"; },"58":function(container,depth0,helpers,partials,data) { var stack1; - return ((stack1 = container.invokePartial(partials.definition,((stack1 = (depth0 != null ? depth0.definitions : depth0)) != null ? stack1["0"] : stack1),{"name":"definition","hash":{"compactGlossaries":(depth0 != null ? depth0.compactGlossaries : depth0),"tagLineBreak":(depth0 != null ? depth0.tagLineBreak : depth0)},"data":data,"indent":" ","helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : ""); + return ((stack1 = container.invokePartial(partials.definition,((stack1 = (depth0 != null ? depth0.definitions : depth0)) != null ? stack1["0"] : stack1),{"name":"definition","hash":{"compactGlossaries":(depth0 != null ? depth0.compactGlossaries : depth0)},"data":data,"indent":" ","helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : ""); },"60":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1; @@ -451,7 +451,7 @@ templates['terms.html'] = template({"1":function(container,depth0,helpers,partia },"61":function(container,depth0,helpers,partials,data) { var stack1; - return ((stack1 = container.invokePartial(partials.definition,depth0,{"name":"definition","hash":{"compactGlossaries":(depth0 != null ? depth0.compactGlossaries : depth0),"tagLineBreak":(depth0 != null ? depth0.tagLineBreak : depth0)},"data":data,"indent":" ","helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "") + return ((stack1 = container.invokePartial(partials.definition,depth0,{"name":"definition","hash":{"compactGlossaries":(depth0 != null ? depth0.compactGlossaries : depth0)},"data":data,"indent":" ","helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "") + " "; },"63":function(container,depth0,helpers,partials,data) { var stack1, helper, options, buffer = @@ -469,7 +469,7 @@ templates['terms.html'] = template({"1":function(container,depth0,helpers,partia return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.first),{"name":"unless","hash":{},"fn":container.program(67, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n" - + ((stack1 = container.invokePartial(partials.term,depth0,{"name":"term","hash":{"compactGlossaries":(depths[1] != null ? depths[1].compactGlossaries : depths[1]),"tagLineBreak":(depths[1] != null ? depths[1].tagLineBreak : depths[1]),"playback":(depths[1] != null ? depths[1].playback : depths[1]),"addable":(depths[1] != null ? depths[1].addable : depths[1]),"merged":(depths[1] != null ? depths[1].merged : depths[1]),"grouped":(depths[1] != null ? depths[1].grouped : depths[1]),"debug":(depths[1] != null ? depths[1].debug : depths[1])},"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : ""); + + ((stack1 = container.invokePartial(partials.term,depth0,{"name":"term","hash":{"compactGlossaries":(depths[1] != null ? depths[1].compactGlossaries : depths[1]),"playback":(depths[1] != null ? depths[1].playback : depths[1]),"addable":(depths[1] != null ? depths[1].addable : depths[1]),"merged":(depths[1] != null ? depths[1].merged : depths[1]),"grouped":(depths[1] != null ? depths[1].grouped : depths[1]),"debug":(depths[1] != null ? depths[1].debug : depths[1])},"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : ""); },"67":function(container,depth0,helpers,partials,data) { return "
    "; },"69":function(container,depth0,helpers,partials,data) { diff --git a/ext/bg/settings.html b/ext/bg/settings.html index db8f4151..408d5aab 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -39,10 +39,6 @@
    -
    - -
    -
    diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index daa90b4e..41fe85eb 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -239,7 +239,6 @@ class Display { grouped: options.general.resultOutputMode === 'group', merged: options.general.resultOutputMode === 'merge', playback: options.general.audioSource !== 'disabled', - tagLineBreak: options.general.tagLineBreak, compactGlossaries: options.general.compactGlossaries, debug: options.general.debugInfo }; diff --git a/tmpl/terms.html b/tmpl/terms.html index eaae7384..7a464cba 100644 --- a/tmpl/terms.html +++ b/tmpl/terms.html @@ -1,6 +1,6 @@ {{#*inline "definition"}} {{#if definitionTags}} -
    +
    {{#each definitionTags}} {{name}} {{/each}} @@ -100,24 +100,24 @@ {{#if definitions.[1]}}
      {{#each definitions}} -
    1. {{> definition tagLineBreak=../tagLineBreak compactGlossaries=../compactGlossaries}}
    2. +
    3. {{> definition compactGlossaries=../compactGlossaries}}
    4. {{/each}}
    {{else}} - {{> definition definitions.[0] tagLineBreak=tagLineBreak compactGlossaries=compactGlossaries}} + {{> definition definitions.[0] compactGlossaries=compactGlossaries}} {{/if}} {{else if merged}} {{#if definitions.[1]}}
      {{#each definitions}} -
    1. {{> definition tagLineBreak=../tagLineBreak compactGlossaries=../compactGlossaries}}
    2. +
    3. {{> definition compactGlossaries=../compactGlossaries}}
    4. {{/each}}
    {{else}} - {{> definition definitions.[0] tagLineBreak=tagLineBreak compactGlossaries=compactGlossaries}} + {{> definition definitions.[0] compactGlossaries=compactGlossaries}} {{/if}} {{else}} - {{> definition tagLineBreak=tagLineBreak compactGlossaries=compactGlossaries}} + {{> definition compactGlossaries=compactGlossaries}} {{/if}}
    @@ -130,7 +130,7 @@ {{#if definitions}} {{#each definitions}} {{#unless @first}}
    {{/unless}} -{{> term debug=../debug grouped=../grouped merged=../merged addable=../addable playback=../playback tagLineBreak=../tagLineBreak compactGlossaries=../compactGlossaries}} +{{> term debug=../debug grouped=../grouped merged=../merged addable=../addable playback=../playback compactGlossaries=../compactGlossaries}} {{/each}} {{else}}

    No results found.

    -- cgit v1.2.3 From 0b602925ab54932adbc9910337b5ee5993c44326 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sat, 28 Oct 2017 08:11:33 -0700 Subject: cleanup --- ext/bg/settings.html | 12 ++++++------ ext/mixed/js/display.js | 6 ++++-- tmpl/terms.html | 12 ++++++------ 3 files changed, 16 insertions(+), 14 deletions(-) (limited to 'ext/mixed/js') diff --git a/ext/bg/settings.html b/ext/bg/settings.html index f430d5e2..12556065 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -55,7 +55,7 @@
    @@ -140,11 +140,6 @@

    Dictionaries

    -
    - - -
    -

    Yomichan can import and use a variety of dictionary formats. Unneeded dictionaries can be disabled, or you can simply purge the database to delete everything. @@ -160,6 +155,11 @@

    +
    + + +
    +
    Dictionary data is being imported, please be patient...
    diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 41fe85eb..5d3c4f2e 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -185,7 +185,8 @@ class Display { 80: /* p */ () => { if (e.altKey) { if ($('.entry').eq(this.index).data('type') === 'term') { - this.audioPlay(this.definitions[this.index], this.options.general.resultOutputMode === 'merge' ? 0 : -1); + const expressionIndex = this.options.general.resultOutputMode === 'merge' ? 0 : -1; + this.audioPlay(this.definitions[this.index], expressionIndex); } return true; @@ -387,7 +388,8 @@ class Display { try { this.spinner.show(); - let url = await apiAudioGetUrl(expressionIndex === -1 ? definition : definition.expressions[expressionIndex], this.options.general.audioSource); + const expression = expressionIndex === -1 ? definition : definition.expressions[expressionIndex]; + let url = await apiAudioGetUrl(expression, this.options.general.audioSource); if (!url) { url = '/mixed/mp3/button.mp3'; } diff --git a/tmpl/terms.html b/tmpl/terms.html index 245a0ea1..35dedb71 100644 --- a/tmpl/terms.html +++ b/tmpl/terms.html @@ -44,9 +44,9 @@ {{#if merged}} {{~#each expressions~}} -
    {{#kanjiLinks}}{{#furigana}}{{{.}}}{{/furigana}}{{/kanjiLinks}}
    +
    + {{#kanjiLinks}}{{#furigana}}{{{.}}}{{/furigana}}{{/kanjiLinks}} +
    {{~#if ../playback~}} {{~/if~}} @@ -64,9 +64,9 @@ {{/each~}}
    {{~/if~}} -
    +
    + +
    {{~/each~}} {{else}}
    {{#kanjiLinks}}{{#furigana}}{{{.}}}{{/furigana}}{{/kanjiLinks}}
    -- cgit v1.2.3