aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Horowitz <joshuah@alum.mit.edu>2021-01-10 22:55:34 -0800
committerJoshua Horowitz <joshuah@alum.mit.edu>2021-01-10 22:55:34 -0800
commit08885dc9904e2c68c794a1c88df4fedd8cdfff5e (patch)
treec04424aca5a34cad1cabbcebcab6d65a9141a819
parent5f6cad2c71889ba2fd11c0249852f6e0e1c220d4 (diff)
read/write textareas
-rw-r--r--extension/background.js20
1 files changed, 20 insertions, 0 deletions
diff --git a/extension/background.js b/extension/background.js
index 129b956..2c59914 100644
--- a/extension/background.js
+++ b/extension/background.js
@@ -439,6 +439,26 @@ router["/tabs/by-id/*/active"] = {
});
})();
+router["/tabs/by-id/*/textareas"] = {
+ async readdir({path}) {
+ const tabId = parseInt(pathComponent(path, -2));
+ // TODO: assign new IDs to textareas without them?
+ const code = `Array.from(document.querySelectorAll('textarea')).map(e => e.id).filter(id => id)`
+ const ids = (await browser.tabs.executeScript(tabId, {code}))[0];
+ return { entries: [".", "..", ...ids.map(id => `${id}.txt`)] };
+ }
+};
+router["/tabs/by-id/*/textareas/*"] = defineFile(async path => {
+ const [tabId, textareaId] = [parseInt(pathComponent(path, -3)), pathComponent(path, -1).slice(0, -4)];
+ const code = `document.getElementById('${textareaId}').value`;
+ const textareaValue = (await browser.tabs.executeScript(tabId, {code}))[0];
+ return textareaValue;
+}, async (path, buf) => {
+ const [tabId, textareaId] = [parseInt(pathComponent(path, -3)), pathComponent(path, -1).slice(0, -4)];
+ const code = `document.getElementById('${textareaId}').value = unescape('${escape(buf)}')`;
+ await browser.tabs.executeScript(tabId, {code});
+});
+
router["/tabs/by-title"] = {
getattr() {
return {