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> |