diff options
author | Joshua Horowitz <joshuah@alum.mit.edu> | 2021-01-10 22:55:34 -0800 |
---|---|---|
committer | Joshua Horowitz <joshuah@alum.mit.edu> | 2021-01-10 22:55:34 -0800 |
commit | 08885dc9904e2c68c794a1c88df4fedd8cdfff5e (patch) | |
tree | c04424aca5a34cad1cabbcebcab6d65a9141a819 | |
parent | 5f6cad2c71889ba2fd11c0249852f6e0e1c220d4 (diff) |
read/write textareas
-rw-r--r-- | extension/background.js | 20 |
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 { |