summaryrefslogtreecommitdiff
path: root/extension
diff options
context:
space:
mode:
Diffstat (limited to 'extension')
-rw-r--r--extension/background.js50
1 files changed, 37 insertions, 13 deletions
diff --git a/extension/background.js b/extension/background.js
index 6f4d108..52ed292 100644
--- a/extension/background.js
+++ b/extension/background.js
@@ -154,6 +154,7 @@ const defineFile = (function() {
const Routes = {};
Routes["/tabs/create"] = {
+ usage: 'echo "https://www.google.com" > $0',
async write({buf}) {
const url = buf.trim();
await browser.tabs.create({url});
@@ -162,7 +163,8 @@ Routes["/tabs/create"] = {
async truncate() { return {}; }
};
-Routes["/tabs/by-id"] = {
+Routes["/tabs/by-id"] = {
+ usage: 'ls $0',
async readdir() {
const tabs = await browser.tabs.query({});
return { entries: [".", "..", ...tabs.map(tab => String(tab.id))] };
@@ -170,7 +172,7 @@ Routes["/tabs/by-id"] = {
};
(function() {
- const withTab = (readHandler, writeHandler) => defineFile(async ({tabId}) => {
+ const routeForTab = (readHandler, writeHandler) => defineFile(async ({tabId}) => {
const tab = await browser.tabs.get(tabId);
return readHandler(tab);
@@ -178,27 +180,46 @@ Routes["/tabs/by-id"] = {
await browser.tabs.update(tabId, writeHandler(buf));
} : undefined);
- const fromScript = code => defineFile(async ({tabId}) => {
+ const routeFromScript = code => defineFile(async ({tabId}) => {
return (await browser.tabs.executeScript(tabId, {code}))[0];
});
- Routes["/tabs/by-id/#TAB_ID/url.txt"] = withTab(tab => tab.url + "\n", buf => ({ url: buf }));
- Routes["/tabs/by-id/#TAB_ID/title.txt"] = withTab(tab => tab.title + "\n");
- Routes["/tabs/by-id/#TAB_ID/text.txt"] = fromScript(`document.body.innerText`);
- Routes["/tabs/by-id/#TAB_ID/body.html"] = fromScript(`document.body.innerHTML`);
+ Routes["/tabs/by-id/#TAB_ID/url.txt"] = {
+ usage: ['cat $0',
+ 'echo "https://www.google.com" > $0'],
+ ...routeForTab(tab => tab.url + "\n",
+ buf => ({ url: buf }))
+ };
+ Routes["/tabs/by-id/#TAB_ID/title.txt"] = {
+ usage: 'cat $0',
+ ...routeForTab(tab => tab.title + "\n")
+ };
+ Routes["/tabs/by-id/#TAB_ID/text.txt"] = {
+ usage: 'cat $0',
+ ...routeFromScript(`document.body.innerText`)
+ };
+ Routes["/tabs/by-id/#TAB_ID/body.html"] = {
+ usage: 'cat $0',
+ ...routeFromScript(`document.body.innerHTML`)
+ };
// echo true > mnt/tabs/by-id/1644/active
// cat mnt/tabs/by-id/1644/active
- Routes["/tabs/by-id/#TAB_ID/active"] = withTab(
- tab => JSON.stringify(tab.active) + '\n',
- // WEIRD: we do startsWith because you might end up with buf
- // being "truee" (if it was "false", then someone wrote "true")
- buf => ({ active: buf.startsWith("true") })
- );
+ Routes["/tabs/by-id/#TAB_ID/active"] = {
+ usage: ['cat $0',
+ 'echo true > $0'],
+ ...routeForTab(
+ tab => JSON.stringify(tab.active) + '\n',
+ // WEIRD: we do startsWith because you might end up with buf
+ // being "truee" (if it was "false", then someone wrote "true")
+ buf => ({ active: buf.startsWith("true") })
+ )
+ };
})();
(function() {
const evals = {};
Routes["/tabs/by-id/#TAB_ID/evals"] = {
+ usage: 'ls $0',
async readdir({path, tabId}) {
return { entries: [".", "..",
...Object.keys(evals[tabId] || {}),
@@ -213,6 +234,9 @@ Routes["/tabs/by-id"] = {
},
};
Routes["/tabs/by-id/#TAB_ID/evals/:FILENAME"] = {
+ usage: ['cat $0.result',
+ 'echo "2 + 2" > $0'],
+
// NOTE: eval runs in extension's content script, not in original page JS context
async mknod({tabId, filename, mode}) {
evals[tabId] = evals[tabId] || {};