diff options
| author | Alex Yatskov <alex@foosoft.net> | 2016-12-22 18:50:58 -0800 | 
|---|---|---|
| committer | Alex Yatskov <alex@foosoft.net> | 2016-12-22 18:50:58 -0800 | 
| commit | 39fa11f72bae62985ee5b27103e5959dab30316c (patch) | |
| tree | e7fe89d18a2b0bfa892ede044d7e6dcc076bbf7b /ext/bg/js/dictionary.js | |
| parent | 5710dc55a73491a0be2259fbd21874bddda54877 (diff) | |
| parent | 9d21f8a456530c29c7c03db4896562a4902f6f8a (diff) | |
Merge branch 'dev'
Diffstat (limited to 'ext/bg/js/dictionary.js')
| -rw-r--r-- | ext/bg/js/dictionary.js | 217 | 
1 files changed, 0 insertions, 217 deletions
| diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js deleted file mode 100644 index 1d54190e..00000000 --- a/ext/bg/js/dictionary.js +++ /dev/null @@ -1,217 +0,0 @@ -/* - * 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/>. - */ - - -class Dictionary { -    constructor() { -        this.db = null; -        this.dbVer = 2; -        this.entities = null; -    } - -    initDb() { -        if (this.db !== null) { -            return Promise.reject('database already initialized'); -        } - -        this.db = new Dexie('dict'); -        this.db.version(1).stores({ -            terms: '++id,expression,reading', -            entities: '++,name', -            kanji: '++,character', -            meta: 'name,value', -        }); -    } - -    prepareDb() { -        this.initDb(); - -        return this.db.meta.get('version').then(row => { -            return row ? row.value : 0; -        }).catch(() => { -            return 0; -        }).then(version => { -            if (this.dbVer === version) { -                return true; -            } - -            const db = this.db; -            this.db.close(); -            this.db = null; - -            return db.delete().then(() => { -                this.initDb(); -                return false; -            }); -        }); -    } - -    sealDb() { -        if (this.db === null) { -            return Promise.reject('database not initialized'); -        } - -        return this.db.meta.put({name: 'version', value: this.dbVer}); -    } - -    findTerm(term) { -        if (this.db === null) { -            return Promise.reject('database not initialized'); -        } - -        const results = []; -        return this.db.terms.where('expression').equals(term).or('reading').equals(term).each(row => { -            results.push({ -                expression: row.expression, -                reading: row.reading, -                tags: splitField(row.tags), -                glossary: row.glossary, -                id: row.id -            }); -        }).then(() => { -            return this.getEntities(); -        }).then(entities => { -            for (const result of results) { -                result.entities = entities; -            } - -            return results; -        }); -    } - -    findKanji(kanji) { -        if (this.db === null) { -            return Promise.reject('database not initialized'); -        } - -        const results = []; -        return this.db.kanji.where('character').equals(kanji).each(row => { -            results.push({ -                character: row.character, -                onyomi: splitField(row.onyomi), -                kunyomi: splitField(row.kunyomi), -                tags: splitField(row.tags), -                glossary: row.meanings -            }); -        }).then(() => results); -    } - -    getEntities(tags) { -        if (this.db === null) { -            return Promise.reject('database not initialized'); -        } - -        if (this.entities !== null) { -            return Promise.resolve(this.entities); -        } - -        return this.db.entities.toArray(rows => { -            this.entities = {}; -            for (const row of rows) { -                this.entities[row.name] = row.value; -            } - -            return this.entities; -        }); -    } - -    importTermDict(indexUrl, callback) { -        if (this.db === null) { -            return Promise.reject('database not initialized'); -        } - -        const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/')); -        return loadJson(indexUrl).then(index => { -            const entities = []; -            for (const [name, value] of index.ents) { -                entities.push({name, value}); -            } - -            return this.db.entities.bulkAdd(entities).then(() => { -                if (this.entities === null) { -                    this.entities = {}; -                } - -                for (const entity of entities) { -                    this.entities[entity.name] = entity.value; -                } -            }).then(() => { -                const loaders = []; -                for (let i = 1; i <= index.banks; ++i) { -                    const bankUrl = `${indexDir}/bank_${i}.json`; -                    loaders.push(() => { -                        return loadJson(bankUrl).then(definitions => { -                            const rows = []; -                            for (const [expression, reading, tags, ...glossary] of definitions) { -                                rows.push({expression, reading, tags, glossary}); -                            } - -                            return this.db.terms.bulkAdd(rows).then(() => { -                                if (callback) { -                                    callback(i, index.banks, indexUrl); -                                } -                            }); -                        }); -                    }); -                } - -                let chain = Promise.resolve(); -                for (const loader of loaders) { -                    chain = chain.then(loader); -                } - -                return chain; -            }); -        }); -    } - -    importKanjiDict(indexUrl, callback) { -        if (this.db === null) { -            return Promise.reject('database not initialized'); -        } - -        const indexDir = indexUrl.slice(0, indexUrl.lastIndexOf('/')); -        return loadJson(indexUrl).then(index => { -            const loaders = []; -            for (let i = 1; i <= index.banks; ++i) { -                const bankUrl = `${indexDir}/bank_${i}.json`; -                loaders.push(() => { -                    return loadJson(bankUrl).then(definitions => { -                        const rows = []; -                        for (const [character, onyomi, kunyomi, tags, ...meanings] of definitions) { -                            rows.push({character, onyomi, kunyomi, tags, meanings}); -                        } - -                        return this.db.kanji.bulkAdd(rows).then(() => { -                            if (callback) { -                                callback(i, index.banks, indexUrl); -                            } -                        }); -                    }); -                }); -            } - -            let chain = Promise.resolve(); -            for (const loader of loaders) { -                chain = chain.then(loader); -            } - -            return chain; -        }); -    } -} |