aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2016-08-07 19:56:50 -0700
committerAlex Yatskov <alex@foosoft.net>2016-08-07 19:56:50 -0700
commit29135ff84ff51dfdbf271490bc53138e306e75d8 (patch)
tree9a92a7ce668af1e4cccb1c226665b382244ddf53
parenta9e86544c176ad8295c1df83924778fa45421461 (diff)
Updating kanji display
-rw-r--r--ext/bg/js/dictionary.js3
-rw-r--r--ext/bg/js/templates.js84
-rw-r--r--ext/bg/js/translator.js35
-rw-r--r--ext/fg/css/frame.css34
-rw-r--r--tmpl/kanji.html58
-rw-r--r--tmpl/term.html4
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 "&laquo;";
-},"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}}&laquo;{{/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>