This commit is contained in:
Alex Yatskov 2016-08-23 22:28:37 -07:00
parent 8b5f74f99b
commit b2d9b613ad
5 changed files with 41 additions and 30 deletions

View File

@ -4,6 +4,7 @@
<script src="../lib/handlebars.min.js"></script> <script src="../lib/handlebars.min.js"></script>
<script src="../lib/dexie.min.js"></script> <script src="../lib/dexie.min.js"></script>
<script src="js/templates.js"></script> <script src="js/templates.js"></script>
<script src="js/util.js"></script>
<script src="js/dictionary.js"></script> <script src="js/dictionary.js"></script>
<script src="js/deinflector.js"></script> <script src="js/deinflector.js"></script>
<script src="js/translator.js"></script> <script src="js/translator.js"></script>

View File

@ -92,7 +92,7 @@ class Dictionary {
importTermDict(indexUrl) { importTermDict(indexUrl) {
const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/')); const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/'));
return Dictionary.loadJson(indexUrl).then((index) => { return loadJson(indexUrl).then((index) => {
const entities = []; const entities = [];
for (const [name, value] of index.ents) { for (const [name, value] of index.ents) {
entities.push({name, value}); entities.push({name, value});
@ -111,7 +111,7 @@ class Dictionary {
for (let i = 0; i <= index.refs; ++i) { for (let i = 0; i <= index.refs; ++i) {
const refUrl = `${indexDir}/ref_${i}.json`; const refUrl = `${indexDir}/ref_${i}.json`;
loaders.push(() => { loaders.push(() => {
return Dictionary.loadJson(refUrl).then((refs) => { return loadJson(refUrl).then((refs) => {
const rows = []; const rows = [];
for (const [expression, reading, tags, ...glossary] of refs) { for (const [expression, reading, tags, ...glossary] of refs) {
rows.push({expression, reading, tags, glossary}); rows.push({expression, reading, tags, glossary});
@ -135,12 +135,12 @@ class Dictionary {
importKanjiDict(indexUrl) { importKanjiDict(indexUrl) {
const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/')); const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/'));
return Dictionary.loadJson(indexUrl).then((index) => { return loadJson(indexUrl).then((index) => {
const loaders = []; const loaders = [];
for (let i = 0; i <= index.refs; ++i) { for (let i = 0; i <= index.refs; ++i) {
const refUrl = `${indexDir}/ref_${i}.json`; const refUrl = `${indexDir}/ref_${i}.json`;
loaders.push(() => { loaders.push(() => {
return Dictionary.loadJson(refUrl).then((refs) => { return loadJson(refUrl).then((refs) => {
const rows = []; const rows = [];
for (const [character, onyomi, kunyomi, tags, ...glossary] of refs) { for (const [character, onyomi, kunyomi, tags, ...glossary] of refs) {
rows.push({character, onyomi, kunyomi, tags, glossary}); rows.push({character, onyomi, kunyomi, tags, glossary});
@ -159,13 +159,4 @@ class Dictionary {
return chain; return chain;
}); });
} }
static loadJson(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', () => resolve(JSON.parse(xhr.responseText)));
xhr.open('GET', chrome.extension.getURL(url), true);
xhr.send();
});
}
} }

View File

@ -31,9 +31,9 @@ class Translator {
return; return;
} }
Translator.loadJson('bg/data/rules.json').then((rules) => { loadJson('bg/data/rules.json').then((rules) => {
this.deinflector.setRules(rules); this.deinflector.setRules(rules);
return Translator.loadJson('bg/data/tags.json'); return loadJson('bg/data/tags.json');
}).then((tagMeta) => { }).then((tagMeta) => {
this.tagMeta = tagMeta; this.tagMeta = tagMeta;
return this.dictionary.existsDb(); return this.dictionary.existsDb();
@ -240,18 +240,4 @@ class Translator {
return 0; return 0;
}); });
} }
static isKanji(c) {
const code = c.charCodeAt(0);
return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0;
}
static loadJson(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', () => resolve(JSON.parse(xhr.responseText)));
xhr.open('GET', chrome.extension.getURL(url), true);
xhr.send();
});
}
} }

33
ext/bg/js/util.js Normal file
View File

@ -0,0 +1,33 @@
/*
* Copyright (C) 2016 Alex Yatskov <alex@foosoft.net>
* Author: Alex Yatskov <alex@foosoft.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
function loadJson(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', () => resolve(JSON.parse(xhr.responseText)));
xhr.open('GET', chrome.extension.getURL(url), true);
xhr.send();
});
}
function isKanji(c) {
const code = c.charCodeAt(0);
return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0;
}

View File

@ -23,7 +23,7 @@ class Yomichan {
Handlebars.registerHelper('kanjiLinks', function(options) { Handlebars.registerHelper('kanjiLinks', function(options) {
let result = ''; let result = '';
for (const c of options.fn(this)) { for (const c of options.fn(this)) {
if (Translator.isKanji(c)) { if (isKanji(c)) {
result += Handlebars.templates['kanji-link.html']({kanji: c}).trim(); result += Handlebars.templates['kanji-link.html']({kanji: c}).trim();
} else { } else {
result += c; result += c;