diff options
author | Alex Yatskov <alex@foosoft.net> | 2016-04-17 19:06:57 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2016-04-17 19:06:57 -0700 |
commit | d5170414af9287143a9906fd81fde49318be4617 (patch) | |
tree | 27764bde977e1e17c36543f3f53d1b29b0584f74 | |
parent | de268e73a613b963ea982f34ca7439d57694facd (diff) |
Adding kanji links
-rw-r--r-- | ext/bg/js/templates.js | 52 | ||||
-rw-r--r-- | ext/bg/js/translator.js | 15 | ||||
-rw-r--r-- | ext/bg/js/yomichan.js | 12 | ||||
-rw-r--r-- | ext/fg/css/popup.css | 6 | ||||
-rw-r--r-- | util/tmpl/term.html | 4 |
5 files changed, 64 insertions, 25 deletions
diff --git a/ext/bg/js/templates.js b/ext/bg/js/templates.js index f571195d..75445786 100644 --- a/ext/bg/js/templates.js +++ b/ext/bg/js/templates.js @@ -28,59 +28,65 @@ templates['kanji.html'] = template({"compiler":[7,">= 4.0.0"],"main":function(co + "\n</div>\n"; },"useData":true}); templates['term.html'] = template({"1":function(container,depth0,helpers,partials,data) { - var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; - - return "<div class=\"term\"><ruby>" - + alias4(((helper = (helper = helpers.expression || (depth0 != null ? depth0.expression : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"expression","hash":{},"data":data}) : helper))) - + "<rt>" - + alias4(((helper = (helper = helpers.reading || (depth0 != null ? depth0.reading : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"reading","hash":{},"data":data}) : helper))) + var stack1, helper, options, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", buffer = + "<div class=\"term\"><ruby>"; + stack1 = ((helper = (helper = helpers.kanjiLinks || (depth0 != null ? depth0.kanjiLinks : depth0)) != null ? helper : alias2),(options={"name":"kanjiLinks","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data}),(typeof helper === alias3 ? helper.call(alias1,options) : helper)); + if (!helpers.kanjiLinks) { stack1 = helpers.blockHelperMissing.call(depth0,stack1,options)} + if (stack1 != null) { buffer += stack1; } + return buffer + "<rt>" + + container.escapeExpression(((helper = (helper = helpers.reading || (depth0 != null ? depth0.reading : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"reading","hash":{},"data":data}) : helper))) + "</rt></ruby></div>\n"; -},"3":function(container,depth0,helpers,partials,data) { +},"2":function(container,depth0,helpers,partials,data) { var helper; - return "<div class=\"term\">" - + container.escapeExpression(((helper = (helper = helpers.expression || (depth0 != null ? depth0.expression : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"expression","hash":{},"data":data}) : helper))) - + "</div>\n"; -},"5":function(container,depth0,helpers,partials,data) { + return container.escapeExpression(((helper = (helper = helpers.expression || (depth0 != null ? depth0.expression : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"expression","hash":{},"data":data}) : helper))); +},"4":function(container,depth0,helpers,partials,data) { + var stack1, helper, options, buffer = + "<div class=\"term\">"; + stack1 = ((helper = (helper = helpers.kanjiLinks || (depth0 != null ? depth0.kanjiLinks : depth0)) != null ? helper : helpers.helperMissing),(options={"name":"kanjiLinks","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data}),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},options) : helper)); + if (!helpers.kanjiLinks) { stack1 = helpers.blockHelperMissing.call(depth0,stack1,options)} + if (stack1 != null) { buffer += stack1; } + return buffer + "</div>\n"; +},"6":function(container,depth0,helpers,partials,data) { var stack1; return "<div class=\"rules\">\n" - + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.rules : depth0),{"name":"each","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.rules : depth0),{"name":"each","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "</div>\n"; -},"6":function(container,depth0,helpers,partials,data) { +},"7":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(7, 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(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n"; -},"7":function(container,depth0,helpers,partials,data) { +},"8":function(container,depth0,helpers,partials,data) { return "«"; -},"9":function(container,depth0,helpers,partials,data) { +},"10":function(container,depth0,helpers,partials,data) { var stack1; return "<div class=\"tags\">\n" - + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.tags : depth0),{"name":"each","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.tags : depth0),{"name":"each","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "</div>\n"; -},"10":function(container,depth0,helpers,partials,data) { +},"11":function(container,depth0,helpers,partials,data) { return " <span class=\"tag\">" + container.escapeExpression(container.lambda(depth0, depth0)) + "</span>\n"; -},"12":function(container,depth0,helpers,partials,data) { +},"13":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) { var stack1, alias1=depth0 != null ? depth0 : {}; - return ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.reading : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "") + return ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.reading : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "") + "\n" - + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.rules : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.rules : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n" - + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.tags : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.tags : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + "\n<div class=\"glossary\">\n <ol>\n" - + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.glossary : depth0),{"name":"each","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.glossary : depth0),{"name":"each","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") + " </ol>\n</div>\n"; },"useData":true}); templates['term-list.html'] = template({"1":function(container,depth0,helpers,partials,data) { diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 46d63ed0..1a024a40 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -166,6 +166,21 @@ class Translator { } } + static isHiragana(c) { + const code = c.charCodeAt(0); + return code >= 0x3040 && code < 0x30a0; + } + + static isKatakana(c) { + const code = c.charCodeAt(0); + return code >= 0x30a0 && code < 0x3100; + } + + static isKanji(c) { + const code = c.charCodeAt(0); + return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0; + } + static loadData(url, callback) { const xhr = new XMLHttpRequest(); xhr.addEventListener('load', () => callback(xhr.responseText)); diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index a66c1244..11d71ae1 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -20,6 +20,18 @@ class Yomichan { constructor() { Handlebars.partials = Handlebars.templates; + Handlebars.registerHelper('kanjiLinks', function(options) { + let result = ''; + for (const c of options.fn(this)) { + if (Translator.isKanji(c)) { + result += `<a href="#">${c}</a>`; + } else { + result += c; + } + } + + return result; + }); this.translator = new Translator(); this.updateState('disabled'); diff --git a/ext/fg/css/popup.css b/ext/fg/css/popup.css index 250b64f8..2e694b42 100644 --- a/ext/fg/css/popup.css +++ b/ext/fg/css/popup.css @@ -31,6 +31,12 @@ body { display: inline-block; } +.term a { + border-bottom: 1px #777 dashed; + color: #333; + text-decoration: none; +} + .rules { color: #777; display: inline-block; diff --git a/util/tmpl/term.html b/util/tmpl/term.html index 6c4d31ed..8c0e54ca 100644 --- a/util/tmpl/term.html +++ b/util/tmpl/term.html @@ -1,7 +1,7 @@ {{#if reading}} -<div class="term"><ruby>{{expression}}<rt>{{reading}}</rt></ruby></div> +<div class="term"><ruby>{{#kanjiLinks}}{{expression}}{{/kanjiLinks}}<rt>{{reading}}</rt></ruby></div> {{else}} -<div class="term">{{expression}}</div> +<div class="term">{{#kanjiLinks}}{{expression}}{{/kanjiLinks}}</div> {{/if}} {{#if rules}} |