diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/bg/js/dictionary.js | 20 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 47 | 
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) { |