From 08885dc9904e2c68c794a1c88df4fedd8cdfff5e Mon Sep 17 00:00:00 2001 From: Joshua Horowitz Date: Sun, 10 Jan 2021 22:55:34 -0800 Subject: [PATCH] read/write textareas --- extension/background.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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 {