summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/bg/background.html1
-rw-r--r--ext/bg/js/anki-connect.js2
-rw-r--r--ext/bg/js/translator.js2
-rw-r--r--ext/bg/js/util.js40
-rw-r--r--ext/bg/js/yomichan.js8
-rw-r--r--ext/bg/popup.html1
-rw-r--r--ext/bg/search.html1
-rw-r--r--ext/bg/settings.html1
-rw-r--r--ext/mixed/js/request.js40
9 files changed, 54 insertions, 42 deletions
diff --git a/ext/bg/background.html b/ext/bg/background.html
index 61bc17a0..7d352561 100644
--- a/ext/bg/background.html
+++ b/ext/bg/background.html
@@ -14,6 +14,7 @@
<script src="/bg/js/handlebars.js"></script>
<script src="/bg/js/dictionary.js"></script>
<script src="/mixed/js/japanese.js"></script>
+ <script src="/mixed/js/request.js"></script>
<script src="/bg/js/options.js"></script>
<script src="/bg/js/anki-connect.js"></script>
<script src="/bg/js/anki-null.js"></script>
diff --git a/ext/bg/js/anki-connect.js b/ext/bg/js/anki-connect.js
index a4d8ba3f..567e8d3f 100644
--- a/ext/bg/js/anki-connect.js
+++ b/ext/bg/js/anki-connect.js
@@ -64,6 +64,6 @@ class AnkiConnect {
}
ankiInvoke(action, params) {
- return jsonRequest(this.server, 'POST', {action, params, version: this.localVersion});
+ return requestJson(this.server, 'POST', {action, params, version: this.localVersion});
}
}
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js
index 9232e529..1be485c7 100644
--- a/ext/bg/js/translator.js
+++ b/ext/bg/js/translator.js
@@ -31,7 +31,7 @@ class Translator {
if (!this.deinflector) {
const url = chrome.extension.getURL('/bg/lang/deinflect.json');
- const reasons = await jsonRequest(url, 'GET');
+ const reasons = await requestJson(url, 'GET');
this.deinflector = new Deinflector(reasons);
}
}
diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js
index 6e86c2a6..c7ebbb0e 100644
--- a/ext/bg/js/util.js
+++ b/ext/bg/js/util.js
@@ -18,19 +18,6 @@
/*
- * Promise
- */
-
-function promiseCallback(promise, callback) {
- return promise.then(result => {
- callback({result});
- }).catch(error => {
- callback({error});
- });
-}
-
-
-/*
* Commands
*/
@@ -71,30 +58,3 @@ function fgBroadcast(action, params) {
function fgOptionsSet(options) {
fgBroadcast('optionsSet', options);
}
-
-
-/*
- * JSON
- */
-
-function jsonRequest(url, action, params) {
- return new Promise((resolve, reject) => {
- const xhr = new XMLHttpRequest();
- xhr.overrideMimeType('application/json');
- xhr.addEventListener('load', () => resolve(xhr.responseText));
- xhr.addEventListener('error', () => reject('failed to execute network request'));
- xhr.open(action, url);
- if (params) {
- xhr.send(JSON.stringify(params));
- } else {
- xhr.send();
- }
- }).then(responseText => {
- try {
- return JSON.parse(responseText);
- }
- catch (e) {
- return Promise.reject('invalid JSON response');
- }
- });
-}
diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js
index acc560ce..eb083396 100644
--- a/ext/bg/js/yomichan.js
+++ b/ext/bg/js/yomichan.js
@@ -195,6 +195,14 @@ window.yomichan = new class {
}
onMessage({action, params}, sender, callback) {
+ const promiseCallback = (promise, callback) => {
+ return promise.then(result => {
+ callback({result});
+ }).catch(error => {
+ callback({error});
+ });
+ };
+
const handlers = {
optionsGet: ({callback}) => {
promiseCallback(optionsLoad(), callback);
diff --git a/ext/bg/popup.html b/ext/bg/popup.html
index db9097bd..b3d38533 100644
--- a/ext/bg/popup.html
+++ b/ext/bg/popup.html
@@ -32,6 +32,7 @@
<script src="/mixed/lib/handlebars.min.js"></script>
<script src="/bg/js/util.js"></script>
<script src="/bg/js/dictionary.js"></script>
+ <script src="/mixed/js/request.js"></script>
<script src="/mixed/js/japanese.js"></script>
<script src="/bg/js/options.js"></script>
<script src="/bg/js/popup.js"></script>
diff --git a/ext/bg/search.html b/ext/bg/search.html
index b30b8910..45603f17 100644
--- a/ext/bg/search.html
+++ b/ext/bg/search.html
@@ -35,6 +35,7 @@
<script src="/mixed/lib/jquery.min.js"></script>
<script src="/bg/js/util.js"></script>
<script src="/bg/js/dictionary.js"></script>
+ <script src="/mixed/js/request.js"></script>
<script src="/mixed/js/japanese.js"></script>
<script src="/mixed/js/audio.js"></script>
<script src="/mixed/js/display.js"></script>
diff --git a/ext/bg/settings.html b/ext/bg/settings.html
index 9b21b4d8..4c7198c3 100644
--- a/ext/bg/settings.html
+++ b/ext/bg/settings.html
@@ -280,6 +280,7 @@
<script src="/bg/js/handlebars.js"></script>
<script src="/bg/js/dictionary.js"></script>
<script src="/mixed/js/japanese.js"></script>
+ <script src="/mixed/js/request.js"></script>
<script src="/bg/js/options.js"></script>
<script src="/bg/js/settings.js"></script>
</body>
diff --git a/ext/mixed/js/request.js b/ext/mixed/js/request.js
new file mode 100644
index 00000000..94fd135a
--- /dev/null
+++ b/ext/mixed/js/request.js
@@ -0,0 +1,40 @@
+/*
+ * 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 requestJson(url, action, params) {
+ return new Promise((resolve, reject) => {
+ const xhr = new XMLHttpRequest();
+ xhr.overrideMimeType('application/json');
+ xhr.addEventListener('load', () => resolve(xhr.responseText));
+ xhr.addEventListener('error', () => reject('failed to execute network request'));
+ xhr.open(action, url);
+ if (params) {
+ xhr.send(JSON.stringify(params));
+ } else {
+ xhr.send();
+ }
+ }).then(responseText => {
+ try {
+ return JSON.parse(responseText);
+ }
+ catch (e) {
+ return Promise.reject('invalid JSON response');
+ }
+ });
+}