aboutsummaryrefslogtreecommitdiff
path: root/ext/bg/js
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2017-03-04 17:56:10 -0800
committerAlex Yatskov <alex@foosoft.net>2017-03-04 17:56:10 -0800
commitb039d300249087aee18c7e8565ae7447d2cf5b15 (patch)
treeba38dfd95b4005cb14953685dc12efc675bc8024 /ext/bg/js
parentc8eb77cfd9e30625ae33739b7de5a86f59d0457c (diff)
wip
Diffstat (limited to 'ext/bg/js')
-rw-r--r--ext/bg/js/display-window.js52
-rw-r--r--ext/bg/js/gecko.js36
-rw-r--r--ext/bg/js/search.js78
-rw-r--r--ext/bg/js/util.js8
-rw-r--r--ext/bg/js/yomichan.js64
5 files changed, 95 insertions, 143 deletions
diff --git a/ext/bg/js/display-window.js b/ext/bg/js/display-window.js
new file mode 100644
index 00000000..44d1f7a9
--- /dev/null
+++ b/ext/bg/js/display-window.js
@@ -0,0 +1,52 @@
+/*
+ * 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/>.
+ */
+
+
+window.displayWindow = new class extends Display {
+ constructor() {
+ super($('#spinner'), $('#content'));
+ $('#search').click(this.onSearch.bind(this));
+ }
+
+ definitionAdd(definition, mode) {
+ return instYomi().definitionAdd(definition, mode);
+ }
+
+ definitionsAddable(definitions, modes) {
+ return instYomi().definitionsAddable(definitions, modes);
+ }
+
+ textRender(template, data) {
+ return instYomi().textRender(template, data);
+ }
+
+ kanjiFind(character) {
+ return instYomi().kanjiFind(character);
+ }
+
+ handleError(error) {
+ window.alert(`Error: ${error}`);
+ }
+
+ onSearch(e) {
+ e.preventDefault();
+ instYomi().termsFind($('#query').val()).then(({length, definitions}) => {
+ super.showTermDefs(definitions, instYomi().options);
+ }).catch(this.handleError.bind(this));
+ }
+};
diff --git a/ext/bg/js/gecko.js b/ext/bg/js/gecko.js
deleted file mode 100644
index 3df07f0b..00000000
--- a/ext/bg/js/gecko.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2017 Alex Yatskov <alex@foosoft.net>
- * Author: Alex Yatskov <alex@foosoft.net>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-if (!chrome.storage.sync) {
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1220494
- chrome.storage.sync = chrome.storage.local;
-}
-
-if (!chrome.runtime.onInstalled) {
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1252871
- chrome.runtime.onInstalled = {
- 'addListener': () => {},
- 'hasListener': () => {},
- 'removeListener': () => {}
- };
-}
diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js
deleted file mode 100644
index 9368a3cd..00000000
--- a/ext/bg/js/search.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2017 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/>.
- */
-
-
-function onSearch(e) {
- e.preventDefault();
-
- instYomi().termsFind($('#query').val()).then(({length, definitions}) => {
- const options = instYomi().options;
- const params = {
- definitions,
- grouped: options.general.groupResults,
- addable: options.anki.enabled,
- playback: options.general.audioPlayback
- };
-
- return instYomi().textRender('terms.html', params);
- }).then(content => {
- $('#content').html(content);
- });
-
- // const sequence = ++this.sequence;
- // const params = {
- // definitions,
- // grouped: options.general.groupResults,
- // addable: options.ankiMethod !== 'disabled',
- // playback: options.general.audioPlayback
- // };
-
- // definitions.forEach(definition => {
- // definition.sentence = context.sentence;
- // definition.url = context.url;
- // });
-
- // this.definitions = definitions;
- // this.showSpinner(false);
- // window.scrollTo(0, 0);
-
- // bgTextRender(params, 'terms.html').then(content => {
- // $('#content').html(content);
- // $('.action-add-note').click(this.onAddNote.bind(this));
-
- // $('.kanji-link').click(e => {
- // e.preventDefault();
- // const character = $(e.target).text();
- // bgKanjiFind(character).then(definitions => this.api_showKanjiDefs({definitions, options, context}));
- // });
-
- // $('.action-play-audio').click(e => {
- // e.preventDefault();
- // const index = $(e.currentTarget).data('index');
- // this.playAudio(this.definitions[index]);
- // });
-
- // this.updateAddNoteButtons(['term_kanji', 'term_kana'], sequence);
- // }).catch(error => {
- // this.handleError(error);
- // });
-}
-
-$(document).ready(() => {
- $('#search').click(onSearch);
-});
diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js
index 7a8f15ef..c57f6ae1 100644
--- a/ext/bg/js/util.js
+++ b/ext/bg/js/util.js
@@ -172,12 +172,20 @@ function optionsVersion(options) {
}
function optionsLoad() {
+ if (!chrome.storage.sync) {
+ chrome.storage.sync = chrome.storage.local;
+ }
+
return new Promise((resolve, reject) => {
chrome.storage.sync.get(null, options => resolve(optionsVersion(options)));
});
}
function optionsSave(options) {
+ if (!chrome.storage.sync) {
+ chrome.storage.sync = chrome.storage.local;
+ }
+
return new Promise((resolve, reject) => {
chrome.storage.sync.set(options, resolve);
});
diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js
index 898f2eea..f7bec615 100644
--- a/ext/bg/js/yomichan.js
+++ b/ext/bg/js/yomichan.js
@@ -17,7 +17,7 @@
*/
-class Yomichan {
+window.yomichan = new class {
constructor() {
Handlebars.partials = Handlebars.templates;
Handlebars.registerHelper('kanjiLinks', helperKanjiLinks);
@@ -28,7 +28,9 @@ class Yomichan {
this.options = null;
chrome.runtime.onMessage.addListener(this.onMessage.bind(this));
- chrome.runtime.onInstalled.addListener(this.onInstalled.bind(this));
+ if (chrome.runtime.onInstalled) {
+ chrome.runtime.onInstalled.addListener(this.onInstalled.bind(this));
+ }
this.translator.prepare().then(optionsLoad).then(this.setOptions.bind(this));
}
@@ -142,32 +144,12 @@ class Yomichan {
});
}
- textRender(template, data) {
- return Handlebars.templates[template](data);
- }
-
- api_optionsGet({callback}) {
- promiseCallback(optionsLoad(), callback);
- }
-
- api_kanjiFind({text, callback}) {
- promiseCallback(this.kanjiFind(text), callback);
- }
-
- api_termsFind({text, callback}) {
- promiseCallback(this.termsFind(text), callback);
- }
-
- api_textRender({template, data, callback}) {
- callback({result: this.textRender(template, data)});
- }
-
- api_definitionAdd({definition, mode, callback}) {
+ definitionAdd(definition, mode) {
const note = this.formatNote(definition, mode);
- promiseCallback(this.anki.addNote(note), callback);
+ return this.anki.addNote(note);
}
- api_definitionsAddable({definitions, modes, callback}) {
+ definitionsAddable(definitions, modes) {
const notes = [];
for (const definition of definitions) {
for (const mode of modes) {
@@ -175,7 +157,7 @@ class Yomichan {
}
}
- const promise = this.anki.canAddNotes(notes).then(raw => {
+ return this.anki.canAddNotes(notes).then(raw => {
const states = [];
for (let resultBase = 0; resultBase < raw.length; resultBase += modes.length) {
const state = {};
@@ -188,9 +170,33 @@ class Yomichan {
return states;
});
+ }
- promiseCallback(promise, callback);
+ textRender(template, data) {
+ return Promise.resolve(Handlebars.templates[template](data));
+ }
+
+ api_optionsGet({callback}) {
+ promiseCallback(optionsLoad(), callback);
}
-}
-window.yomichan = new Yomichan();
+ api_kanjiFind({text, callback}) {
+ promiseCallback(this.kanjiFind(text), callback);
+ }
+
+ api_termsFind({text, callback}) {
+ promiseCallback(this.termsFind(text), callback);
+ }
+
+ api_textRender({template, data, callback}) {
+ promiseCallback(this.textRender(template, data), callback);
+ }
+
+ api_definitionAdd({definition, mode, callback}) {
+ promiseCallback(this.definitionAdd(definition, mode), callback);
+ }
+
+ api_definitionsAddable({definitions, modes, callback}) {
+ promiseCallback(this.definitionsAddable(definitions, modes), callback);
+ }
+};