diff options
author | Alex Yatskov <alex@foosoft.net> | 2016-08-07 19:56:50 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2016-08-07 19:56:50 -0700 |
commit | 29135ff84ff51dfdbf271490bc53138e306e75d8 (patch) | |
tree | 9a92a7ce668af1e4cccb1c226665b382244ddf53 | |
parent | a9e86544c176ad8295c1df83924778fa45421461 (diff) |
Updating kanji display
-rw-r--r-- | ext/bg/js/dictionary.js | 3 | ||||
-rw-r--r-- | ext/bg/js/templates.js | 84 | ||||
-rw-r--r-- | ext/bg/js/translator.js | 35 | ||||
-rw-r--r-- | ext/fg/css/frame.css | 34 | ||||
-rw-r--r-- | tmpl/kanji.html | 58 | ||||
-rw-r--r-- | tmpl/term.html | 4 |
6 files changed, 123 insertions, 95 deletions
diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index f312796d..a6438523 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -65,11 +65,12 @@ class Dictionary { for (let name in this.kanjiDicts) { const def = this.kanjiDicts[name].c[kanji]; if (def) { - const [k, o, ...g] = def; + const [k, o, t, ...g] = def; results.push({ character: kanji, kunyomi: k.split(' '), onyomi: o.split(' '), + tags: t.split(' '), glossary: g }); } diff --git a/ext/bg/js/templates.js b/ext/bg/js/templates.js index ef26ab81..eec28982 100644 --- a/ext/bg/js/templates.js +++ b/ext/bg/js/templates.js @@ -37,30 +37,26 @@ templates['kanji.html'] = template({"1":function(container,depth0,helpers,partia },"4":function(container,depth0,helpers,partials,data) { var stack1; - return " <dt>Meanings</dt>\n <dd>\n" - + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.glossary : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + " </dd>\n"; -},"5":function(container,depth0,helpers,partials,data) { - var stack1; - - return " " + return " " + container.escapeExpression(container.lambda(depth0, depth0)) - + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(data && data.last),{"name":"unless","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(data && data.last),{"name":"unless","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n"; -},"6":function(container,depth0,helpers,partials,data) { +},"5":function(container,depth0,helpers,partials,data) { return ", "; -},"8":function(container,depth0,helpers,partials,data) { - var stack1; - - return " <dt>Kun'yomi</dt>\n <dd class=\"kanji-reading\">\n" - + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.kunyomi : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + " </dd>\n"; -},"10":function(container,depth0,helpers,partials,data) { - var stack1; +},"7":function(container,depth0,helpers,partials,data) { + var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; - return " <dt>On'yomi</dt>\n <dd class=\"kanji-reading\">\n" - + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.onyomi : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + " </dd>\n"; + return " <span class=\"tag tag-" + + alias4(((helper = (helper = helpers["class"] || (depth0 != null ? depth0["class"] : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"class","hash":{},"data":data}) : helper))) + + "\" title=\"" + + alias4(((helper = (helper = helpers.desc || (depth0 != null ? depth0.desc : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"desc","hash":{},"data":data}) : helper))) + + "\">" + + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) + + "</span>\n"; +},"9":function(container,depth0,helpers,partials,data) { + return " <li><span>" + + container.escapeExpression(container.lambda(depth0, depth0)) + + "</span></li>\n"; },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, helper, alias1=depth0 != null ? depth0 : {}; @@ -68,13 +64,15 @@ templates['kanji.html'] = template({"1":function(container,depth0,helpers,partia + ((stack1 = helpers["with"].call(alias1,(depth0 != null ? depth0.options : depth0),{"name":"with","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n <div class=\"kanji-glyph\">" + container.escapeExpression(((helper = (helper = helpers.character || (depth0 != null ? depth0.character : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"character","hash":{},"data":data}) : helper))) - + "</div>\n\n <div class=\"kanji-info\">\n <dl>\n" - + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.glossary : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + "\n" - + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.kunyomi : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + "\n" - + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.onyomi : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + " </dl>\n </div>\n</div>\n"; + + "</div>\n\n <div class=\"kanji-reading\">\n <table>\n <tr>\n <th>Kunyomi:</th>\n <td>\n" + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.kunyomi : depth0),{"name":"each","hash":{},"fn":container.program(4, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + " </td>\n </tr>\n <tr>\n <th>Onyomi:</th>\n <td>\n" + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.onyomi : depth0),{"name":"each","hash":{},"fn":container.program(4, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + " </td>\n </tr>\n </table>\n </div>\n\n <div class=\"kanji-tags\">\n" + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.tags : depth0),{"name":"each","hash":{},"fn":container.program(7, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + " </div>\n\n <div class=\"kanji-glossary\">\n <ol>\n" + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.glossary : depth0),{"name":"each","hash":{},"fn":container.program(9, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + " </ol>\n </div>\n</div>\n"; },"useData":true,"useDepths":true}); templates['kanji-link.html'] = template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { var helper; @@ -146,26 +144,14 @@ templates['term.html'] = template({"1":function(container,depth0,helpers,partial },"11":function(container,depth0,helpers,partials,data) { var stack1; - return " <div class=\"term-rules\">\n" - + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.rules : depth0),{"name":"each","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + " </div>\n"; -},"12":function(container,depth0,helpers,partials,data) { - var stack1; - return " <span class=\"rule\">" + container.escapeExpression(container.lambda(depth0, depth0)) + "</span> " - + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(data && data.last),{"name":"unless","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(data && data.last),{"name":"unless","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n"; -},"13":function(container,depth0,helpers,partials,data) { +},"12":function(container,depth0,helpers,partials,data) { return "«"; -},"15":function(container,depth0,helpers,partials,data) { - var stack1; - - return " <div class=\"term-tags\">\n" - + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.tags : depth0),{"name":"each","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + " </div>\n"; -},"16":function(container,depth0,helpers,partials,data) { +},"14":function(container,depth0,helpers,partials,data) { var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; return " <span class=\"tag tag-" @@ -175,7 +161,7 @@ templates['term.html'] = template({"1":function(container,depth0,helpers,partial + "\">" + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) + "</span>\n"; -},"18":function(container,depth0,helpers,partials,data) { +},"16":function(container,depth0,helpers,partials,data) { return " <li><span>" + container.escapeExpression(container.lambda(depth0, depth0)) + "</span></li>\n"; @@ -186,12 +172,12 @@ templates['term.html'] = template({"1":function(container,depth0,helpers,partial + ((stack1 = helpers["with"].call(alias1,(depth0 != null ? depth0.options : depth0),{"name":"with","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n" + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.reading : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0, blockParams, depths),"inverse":container.program(9, data, 0, blockParams, depths),"data":data})) != null ? stack1 : "") - + "\n" - + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.rules : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + "\n" - + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.tags : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") - + "\n <div class=\"term-glossary\">\n <ol>\n" - + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.glossary : depth0),{"name":"each","hash":{},"fn":container.program(18, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + "\n <div class=\"term-rules\">\n" + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.rules : depth0),{"name":"each","hash":{},"fn":container.program(11, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + " </div>\n\n <div class=\"term-tags\">\n" + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.tags : depth0),{"name":"each","hash":{},"fn":container.program(14, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + " </div>\n\n <div class=\"term-glossary\">\n <ol>\n" + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.glossary : depth0),{"name":"each","hash":{},"fn":container.program(16, data, 0, blockParams, depths),"inverse":container.noop,"data":data})) != null ? stack1 : "") + " </ol>\n </div>\n</div>\n"; },"useData":true,"useDepths":true}); templates['term-list.html'] = template({"1":function(container,depth0,helpers,partials,data,blockParams,depths) { diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index b7fce392..cdcdda28 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -148,7 +148,7 @@ class Translator { } } - return definitions; + return this.processKanji(definitions); } processTerm(groups, source, tags, rules=[], root='') { @@ -227,6 +227,39 @@ class Translator { } } + processKanji(entries) { + const results = []; + for (let entry of entries) { + const tagItems = []; + for (let tag of entry.tags) { + const tagItem = { + class: 'default', + order: Number.MAX_SAFE_INTEGER, + name: tag + }; + + const tagMeta = this.tagMeta[tag]; + if (tagMeta) { + for (const tagProp in tagMeta) { + tagItem[tagProp] = tagMeta[tagProp] || tagItem[tagProp]; + } + } + + tagItems.push(tagItem); + } + + results.push({ + character: entry.character, + kunyomi: entry.kunyomi, + onyomi: entry.onyomi, + tags: tagItems, + glossary: entry.glossary + }); + } + + return results; + } + static isKanji(c) { const code = c.charCodeAt(0); return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0; diff --git a/ext/fg/css/frame.css b/ext/fg/css/frame.css index 68efa9c6..e7b5dedc 100644 --- a/ext/fg/css/frame.css +++ b/ext/fg/css/frame.css @@ -106,7 +106,7 @@ body { } .term-glossary ol { - padding-left: 1.2em; + padding-left: 1.4em; } .term-glossary li { @@ -120,28 +120,36 @@ body { /* kanji styles */ .kanji-glyph { - float: right; font-family: kanji-stroke-orders; - font-size: 140px; - line-height: 140px; + font-size: 120px; + line-height: 120px; padding: 0.01em; vertical-align: top; } -.kanji-reading { +.kanji-reading table { + padding: 0.3em, 0.3em; +} + +.kanji-reading th { + color: #777; + font-weight: bold; + text-align: right; + vertical-align: top; +} + +.kanji-reading td { font-family: vl-gothic-regular; } -.kanji-info { - display: block; - overflow: hidden; +.kanji-glossary ol { + padding-left: 1.4em; } -.kanji-info dt { - color: #777; - font-weight: bold; +.kanji-glossary li { + color: #777; } -.kanji-info dd { - margin-left: 1.2em; +.kanji-glossary li span { + color: #000; } diff --git a/tmpl/kanji.html b/tmpl/kanji.html index 3e148aae..0a0cfe11 100644 --- a/tmpl/kanji.html +++ b/tmpl/kanji.html @@ -9,34 +9,38 @@ <div class="kanji-glyph">{{character}}</div> - <div class="kanji-info"> - <dl> - {{#if glossary}} - <dt>Meanings</dt> - <dd> - {{#each glossary}} - {{.}}{{#unless @last}}, {{/unless}} - {{/each}} - </dd> - {{/if}} + <div class="kanji-reading"> + <table> + <tr> + <th>Kunyomi:</th> + <td> + {{#each kunyomi}} + {{.}}{{#unless @last}}, {{/unless}} + {{/each}} + </td> + </tr> + <tr> + <th>Onyomi:</th> + <td> + {{#each onyomi}} + {{.}}{{#unless @last}}, {{/unless}} + {{/each}} + </td> + </tr> + </table> + </div> - {{#if kunyomi}} - <dt>Kun'yomi</dt> - <dd class="kanji-reading"> - {{#each kunyomi}} - {{.}}{{#unless @last}}, {{/unless}} - {{/each}} - </dd> - {{/if}} + <div class="kanji-tags"> + {{#each tags}} + <span class="tag tag-{{class}}" title="{{desc}}">{{name}}</span> + {{/each}} + </div> - {{#if onyomi}} - <dt>On'yomi</dt> - <dd class="kanji-reading"> - {{#each onyomi}} - {{.}}{{#unless @last}}, {{/unless}} - {{/each}} - </dd> - {{/if}} - </dl> + <div class="kanji-glossary"> + <ol> + {{#each glossary}} + <li><span>{{.}}</span></li> + {{/each}} + </ol> </div> </div> diff --git a/tmpl/term.html b/tmpl/term.html index 620b5ace..ca96ab24 100644 --- a/tmpl/term.html +++ b/tmpl/term.html @@ -17,21 +17,17 @@ <div class="term-expression">{{#kanjiLinks}}{{expression}}{{/kanjiLinks}}</div> {{/if}} - {{#if rules}} <div class="term-rules"> {{#each rules}} <span class="rule">{{.}}</span> {{#unless @last}}«{{/unless}} {{/each}} </div> - {{/if}} - {{#if tags}} <div class="term-tags"> {{#each tags}} <span class="tag tag-{{class}}" title="{{desc}}">{{name}}</span> {{/each}} </div> - {{/if}} <div class="term-glossary"> <ol> |