extension: start adding some usages; rename withTab and fromScript

to routeForTab and routeFromScript
This commit is contained in:
Omar Rizwan 2021-04-19 22:05:05 -07:00
parent b948c235b8
commit b8d0f3dab2

View file

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