diff options
-rw-r--r-- | ext/bg/js/dictionary.js | 83 |
1 files changed, 48 insertions, 35 deletions
diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index 44e97752..8f04c458 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -27,13 +27,6 @@ class Dictionary { return Dexie.exists('dict'); } - loadDb() { - this.db = null; - this.entities = null; - - return this.initDb().open(); - } - initDb() { this.db = new Dexie('dict'); this.db.version(1).stores({ @@ -45,23 +38,11 @@ class Dictionary { return this.db; } - importKanjiDict(dict) { - return this.db.kanji.bulkAdd(dict.d); - } - - fetchEntities() { - if (this.entities !== null) { - return Promise.resolve(this.entities); - } + loadDb() { + this.db = null; + this.entities = null; - return this.db.entities.toArray((rows) => { - this.entities = {}; - for (const row of rows) { - this.entities[row.name] = row.value; - } - }).then(() => { - return Promise.resolve(this.entities); - }); + return this.initDb().open(); } findTerm(term) { @@ -93,18 +74,24 @@ class Dictionary { }); } - // importTermDict(dict) { - // return this.db.terms.bulkAdd(dict.d).then(() => { - // this.entities = {}; - // for (const name in dict.e) { - // this.entities[name] = dict.e[name]; - // } + getEntities() { + if (this.entities !== null) { + return Promise.resolve(this.entities); + } - // return this.db.entities.bulkAdd(dict.e); - // }); - // } + return this.db.entities.toArray((rows) => { + this.entities = {}; + for (const row of rows) { + this.entities[row.name] = row.value; + } + }).then(() => { + return Promise.resolve(this.entities); + }); + } importTermDict(indexUrl) { + const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/')); + return Dictionary.loadJson(indexUrl).then((index) => { const entities = []; for (const [name, value] of index.ents) { @@ -121,9 +108,7 @@ class Dictionary { } }).then(() => { const loaders = []; - const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/')); - - for (let i = 0; i < index.refs; ++i) { + for (let i = 0; i <= index.refs; ++i) { const refUrl = `${indexDir}/ref_${i}.json`; loaders.push(() => { return Dictionary.loadJson(refUrl).then((refs) => { @@ -147,6 +132,34 @@ class Dictionary { }); } + importKanjiDict(indexUrl) { + const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/')); + + return Dictionary.loadJson(indexUrl).then((index) => { + const loaders = []; + for (let i = 0; i <= index.refs; ++i) { + const refUrl = `${indexDir}/ref_${i}.json`; + loaders.push(() => { + return Dictionary.loadJson(refUrl).then((refs) => { + const rows = []; + for (const [character, onyomi, kunyomi, tags, ...glossary] of refs) { + rows.push({character, onyomi, kunyomi, tags, glossary}); + } + + return this.db.kanji.bulkAdd(rows); + }); + }); + } + + let chain = Promise.resolve(); + for (const loader of loaders) { + chain = chain.then(loader); + } + + return chain; + }); + } + static loadJson(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); |