aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/bg/background.html2
-rw-r--r--ext/bg/js/api.js51
2 files changed, 52 insertions, 1 deletions
diff --git a/ext/bg/background.html b/ext/bg/background.html
index 11838d14..fc0758cf 100644
--- a/ext/bg/background.html
+++ b/ext/bg/background.html
@@ -20,9 +20,9 @@
<script src="/mixed/js/core.js"></script>
<script src="/mixed/js/dom.js"></script>
- <script src="/mixed/js/api.js"></script>
<script src="/bg/js/anki.js"></script>
+ <script src="/bg/js/api.js"></script>
<script src="/bg/js/mecab.js"></script>
<script src="/bg/js/audio.js"></script>
<script src="/bg/js/backend-api-forwarder.js"></script>
diff --git a/ext/bg/js/api.js b/ext/bg/js/api.js
new file mode 100644
index 00000000..d8200caf
--- /dev/null
+++ b/ext/bg/js/api.js
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2019 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 apiTemplateRender(template, data, dynamic) {
+ return _apiInvoke('templateRender', {data, template, dynamic});
+}
+
+function apiAudioGetUrl(definition, source, optionsContext) {
+ return _apiInvoke('audioGetUrl', {definition, source, optionsContext});
+}
+
+function _apiInvoke(action, params={}) {
+ const data = {action, params};
+ return new Promise((resolve, reject) => {
+ try {
+ const callback = (response) => {
+ if (response !== null && typeof response === 'object') {
+ if (typeof response.error !== 'undefined') {
+ reject(jsonToError(response.error));
+ } else {
+ resolve(response.result);
+ }
+ } else {
+ const message = response === null ? 'Unexpected null response' : `Unexpected response of type ${typeof response}`;
+ reject(new Error(`${message} (${JSON.stringify(data)})`));
+ }
+ };
+ const backend = window.yomichan_backend;
+ backend.onMessage({action, params}, null, callback);
+ } catch (e) {
+ reject(e);
+ yomichan.triggerOrphaned(e);
+ }
+ });
+}