summaryrefslogtreecommitdiff
path: root/ext/bg/js/dictionary.js
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2016-11-07 08:29:21 -0800
committerAlex Yatskov <alex@foosoft.net>2016-11-07 08:29:21 -0800
commita18f3be559b9a8298f93f04837d400a1fff0b2b9 (patch)
tree4223d737f1aee4e43c21ac514a089fa5ffca8d80 /ext/bg/js/dictionary.js
parentc11b24cb37948c9cf7dc91c97cdc01ba65db875b (diff)
Renaming things
Diffstat (limited to 'ext/bg/js/dictionary.js')
-rw-r--r--ext/bg/js/dictionary.js219
1 files changed, 0 insertions, 219 deletions
diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js
deleted file mode 100644
index a7bca2f1..00000000
--- a/ext/bg/js/dictionary.js
+++ /dev/null
@@ -1,219 +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 = 6;
- 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, dictionary, expression, reading',
- kanji: '++, dictionary, character',
- entities: '++, dictionary',
- dictionaries: '++, title, version',
- 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;
- });
- }
-
- getDictionaries() {
- if (this.db === null) {
- return Promise.reject('database not initialized');
- }
-
- return this.db.dictionaries.toArray();
- }
-
- deleteDictionary(title) {
- if (this.db === null) {
- return Promise.reject('database not initialized');
- }
-
- return this.db.terms.where('dictionary').equals(title).delete().then(() => {
- return this.db.kanji.where('dictionary').equals(title).delete();
- }).then(() => {
- return this.db.entities.where('dictionary').equals(title).delete();
- }).then(() => {
- return this.db.dictionaries.where('title').equals(title).delete();
- });
- }
-
- importDictionary(indexUrl, callback) {
- if (this.db === null) {
- return Promise.reject('database not initialized');
- }
-
- const indexLoaded = (title, version, entities, hasTerms, hasKanji) => {
- return this.db.dictionaries.add({title, version, hasTerms, hasKanji}).then(() => {
- this.entities = entities || {};
-
- const rows = [];
- for (const name in entities || {}) {
- rows.push({
- name,
- value: entities[name],
- dictionary: title
- });
- }
-
- return this.db.entities.bulkAdd(rows);
- });
- };
-
- const termsLoaded = (title, entries, total, current) => {
- const rows = [];
- for (const [expression, reading, tags, ...glossary] of entries) {
- rows.push({
- expression,
- reading,
- tags,
- glossary,
- dictionary: title
- });
- }
-
- return this.db.terms.bulkAdd(rows).then(() => {
- if (callback) {
- callback(total, current, indexUrl);
- }
- });
- };
-
- const kanjiLoaded = (title, entries, total, current) => {
- const rows = [];
- for (const [character, onyomi, kunyomi, tags, ...meanings] of entries) {
- rows.push({
- character,
- onyomi,
- kunyomi,
- tags,
- meanings,
- dictionary: title
- });
- }
-
- return this.db.kanji.bulkAdd(rows).then(() => {
- if (callback) {
- callback(total, current, indexUrl);
- }
- });
- };
-
- return importJsonDb(indexUrl, indexLoaded, termsLoaded, kanjiLoaded);
- }
-}