summaryrefslogtreecommitdiff
path: root/plugin_loader/static/library.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugin_loader/static/library.js')
-rw-r--r--plugin_loader/static/library.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/plugin_loader/static/library.js b/plugin_loader/static/library.js
new file mode 100644
index 00000000..1e35eee6
--- /dev/null
+++ b/plugin_loader/static/library.js
@@ -0,0 +1,41 @@
+class PluginEventTarget extends EventTarget { }
+method_call_ev_target = new PluginEventTarget();
+
+window.addEventListener("message", function(evt) {
+ console.log(evt);
+ let ev = new Event(evt.data.call_id);
+ ev.data = evt.data.result;
+ method_call_ev_target.dispatchEvent(ev);
+}, false);
+
+async function call_server_method(method_name, arg_object={}) {
+ let id = `${new Date().getTime()}`;
+ console.debug(JSON.stringify({
+ "id": id,
+ "method": method_name,
+ "args": arg_object
+ }));
+ return new Promise((resolve, reject) => {
+ method_call_ev_target.addEventListener(`${id}`, function (event) {
+ if (event.data.success) resolve(event.data.result);
+ else reject(event.data.result);
+ });
+ });
+}
+
+async function fetch_nocors(url, request={}) {
+ let args = { method: "POST", headers: {}, body: "" };
+ request = {...args, ...request};
+ request.url = url;
+ return await call_server_method("http_request", request);
+}
+
+async function call_plugin_method(method_name, arg_object={}) {
+ if (plugin_name == undefined)
+ throw new Error("Plugin methods can only be called from inside plugins (duh)");
+ return await call_server_method("plugin_method", {
+ 'plugin_name': plugin_name,
+ 'method_name': method_name,
+ 'args': arg_object
+ });
+} \ No newline at end of file