platypush-webext/src/script.js

139 lines
3.3 KiB
JavaScript

export default {
api: `{
run: (action, host) => {
return new Promise((resolve) => {
const port = browser.runtime.connect({ name: 'action' });
port.onMessage.addListener(msg => {
resolve(msg);
});
port.postMessage({
type: 'run',
host: host,
action: action,
});
});
},
getURL: () => {
return new Promise((resolve) => {
const port = browser.runtime.connect({ name: 'url' });
port.onMessage.addListener(url => {
resolve(url);
});
port.postMessage({
type: 'get',
});
});
},
setURL: (url) => {
const port = browser.runtime.connect({ name: 'url' });
port.postMessage({
type: 'set',
url: url,
});
},
getClipboard: () => {
return new Promise((resolve, reject) => {
navigator.clipboard.readText().then(text => resolve(text), error => reject(error));
});
},
setClipboard: (text) => {
return new Promise((resolve, reject) => {
navigator.clipboard.writeText(text).then(() => resolve(), error => reject(error));
});
},
openTab: (url) => {
const port = browser.runtime.connect({ name: 'url' });
port.postMessage({
type: 'open',
url: url,
});
},
axios: ['get', 'post', 'put', 'delete', 'head', 'options', 'patch'].reduce((api, method) => {
api[method] = (url, ...args) => {
return new Promise((resolve) => {
const port = browser.runtime.connect({ name: 'axios' });
port.onMessage.addListener(response => {
resolve(response);
});
port.postMessage({
type: method,
url: url,
args: args,
});
});
};
return api;
}, {}),
mercury: {
parse: (url, html) => {
return new Promise((resolve) => {
const port = browser.runtime.connect({ name: 'mercury' });
port.onMessage.addListener(response => {
resolve(response);
});
port.postMessage({
type: 'parse',
url: url,
html: html,
});
});
},
},
getDOM: () => {
return new Promise((resolve) => {
const port = browser.runtime.connect({ name: 'dom' });
port.onMessage.addListener(dom => {
dom = (new DOMParser()).parseFromString(dom, 'text/html');
resolve(dom);
});
port.postMessage({
type: 'get',
});
});
},
setDOM: (html) => {
return new Promise((resolve) => {
const port = browser.runtime.connect({ name: 'dom' });
port.postMessage({
type: 'set',
html: html,
});
});
},
HTML2DOM: (html, isRoot = false) => {
const dom = new DOMParser().parseFromString(html, 'text/html').documentElement;
if (isRoot)
return dom;
return dom.getElementsByTagName('body')[0].firstChild;
},
notify: (msg, title = 'platypush', error = false) => {
const port = browser.runtime.connect({ name: 'notify' });
port.postMessage({
type: 'run',
message: msg,
title: title,
error: error,
});
},
}`,
};
// vim:sw=2:ts=2:et: