summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/bg/js/dictionary.js20
-rw-r--r--ext/bg/js/translator.js47
2 files changed, 38 insertions, 29 deletions
diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js
index a6438523..082d1479 100644
--- a/ext/bg/js/dictionary.js
+++ b/ext/bg/js/dictionary.js
@@ -21,20 +21,32 @@ class Dictionary {
constructor() {
this.termDicts = {};
this.kanjiDicts = {};
+ this.db = new Dexie('dict');
+ this.dbVer = 1;
}
- addTermDict(name, dict) {
+ loadDb() {
+ return this.db.open().then((db) => {
+ if (db.verno !== this.dbVer) {
+ Promise.reject('db version mismatch');
+ }
+
+ return db.verno;
+ });
+ }
+
+ importTermDict(name, dict) {
this.termDicts[name] = dict;
}
- addKanjiDict(name, dict) {
+ importKanjiDict(name, dict) {
this.kanjiDicts[name] = dict;
}
findTerm(term) {
let results = [];
- for (let name in this.termDicts) {
+ for (const name in this.termDicts) {
const dict = this.termDicts[name];
if (!(term in dict.i)) {
continue;
@@ -62,7 +74,7 @@ class Dictionary {
findKanji(kanji) {
const results = [];
- for (let name in this.kanjiDicts) {
+ for (const name in this.kanjiDicts) {
const def = this.kanjiDicts[name].c[kanji];
if (def) {
const [k, o, t, ...g] = def;
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js
index fd414847..f373fe83 100644
--- a/ext/bg/js/translator.js
+++ b/ext/bg/js/translator.js
@@ -31,31 +31,28 @@ class Translator {
return;
}
- Translator.loadData('bg/data/rules.json')
- .then((response) => {
- this.deinflector.setRules(JSON.parse(response));
- return Translator.loadData('bg/data/tags.json');
- })
- .then((response) => {
- this.tagMeta = JSON.parse(response);
- return Translator.loadData('bg/data/edict.json');
- })
- .then((response) => {
- this.dictionary.addTermDict('edict', JSON.parse(response));
- return Translator.loadData('bg/data/kanjidic.json');
- })
- .then((response) => {
- this.dictionary.addKanjiDict('kanjidic', JSON.parse(response));
- return loadEnamDict ? Translator.loadData('bg/data/enamdict.json') : Promise.resolve(null);
- })
- .then((response) => {
- if (response !== null) {
- this.dictionary.addTermDict('enamdict', JSON.parse(response));
- }
-
- this.loaded = true;
- callback();
- });
+ Translator.loadData('bg/data/rules.json').then((response) => {
+ this.deinflector.setRules(JSON.parse(response));
+ return Translator.loadData('bg/data/tags.json');
+ }).then((response) => {
+ this.tagMeta = JSON.parse(response);
+ return this.dictionary.loadDb();
+ }).then(() => {
+ this.loaded = true;
+ callback();
+ }).catch(() => {
+ return Translator.loadData('bg/data/edict.json');
+ }).then((response) => {
+ this.dictionary.importTermDict('edict', JSON.parse(response));
+ return Translator.loadData('bg/data/enamdict.json');
+ }).then((response) => {
+ this.dictionary.importTermDict('enamdict', JSON.parse(response));
+ return Translator.loadData('bg/data/kanjidic.json');
+ }).then((response) => {
+ this.dictionary.importKanjiDict('kanjidic', JSON.parse(response));
+ this.loaded = true;
+ callback();
+ });
}
findTerm(text) {