From eb1b330ffc76538c984fb040c9ed5ddc1679ccc0 Mon Sep 17 00:00:00 2001
From: Jaidyn Ann <10477760+JadedCtrl@users.noreply.github.com>
Date: Wed, 28 Feb 2024 11:00:42 -0600
Subject: [PATCH] Add settings page, for defining commands
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The settings aren’t used yet, but at least editing
is out of the way!
---
manifest.json | 5 ++++
options.html | 25 +++++++++++++++++++
options.js | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 98 insertions(+)
create mode 100644 options.html
create mode 100644 options.js
diff --git a/manifest.json b/manifest.json
index 0a3e930..74a7a7f 100644
--- a/manifest.json
+++ b/manifest.json
@@ -34,5 +34,10 @@
"scripts": [
"background.js"
]
+ },
+
+ "options_ui": {
+ "page": "options.html",
+ "open_in_tab": true
}
}
diff --git a/options.html b/options.html
new file mode 100644
index 0000000..4c4528d
--- /dev/null
+++ b/options.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+ URL regex |
+ Shell command |
+
+
+
+
+
+
+
+
+
diff --git a/options.js b/options.js
new file mode 100644
index 0000000..1bcfebc
--- /dev/null
+++ b/options.js
@@ -0,0 +1,68 @@
+// Iterate over the commands-table and save each of the user’s valid
+// regex+command rows to storage.
+function saveCommands() {
+ let commands = [];
+ for (commandTr of document.getElementsByClassName("regexCommandRow")) {
+ let regex = commandTr.getElementsByClassName("regex")[0].value;
+ let command = commandTr.getElementsByClassName("command")[0].value;
+ if (regex && command)
+ commands.push([regex, command]);
+ }
+ localStorage.setItem("commands", JSON.stringify(commands));
+}
+
+
+// Read the user’s saved command-regex pairs from storage, and populate the
+// command-table with them.
+function populateCommandTable() {
+ let commandTable = document.getElementById("commandTable");
+ for (cmdRegex of JSON.parse(localStorage.getItem("commands"))) {
+ let commandTr = createCommandTr(cmdRegex[0], cmdRegex[1]);
+ commandTable.appendChild(commandTr);
+ }
+ // Always add a spare entry.
+ commandTable.appendChild(createCommandTr("", ""));
+}
+
+
+// Create a table-row for the command-table, with the command & regex inputs’
+// values set to the given parameters. If they are undefined, the inputs will
+// have no value.
+function createCommandTr(regex, command) {
+ let regexInput = document.createElement("INPUT");
+ regexInput.setAttribute("class", "regex");
+ regexInput.setAttribute("type", "text");
+ regexInput.setAttribute("placeholder", "https://example.com/*");
+ if (regex && command)
+ regexInput.setAttribute("value", regex);
+
+ let regexTd = document.createElement("TD");
+ regexTd.appendChild(regexInput);
+
+ let commandInput = document.createElement("INPUT");
+ commandInput.setAttribute("class", "command");
+ commandInput.setAttribute("type", "text");
+ commandInput.setAttribute("placeholder", "curl %s > /tmp/downloaded");
+ if (regex && command)
+ commandInput.setAttribute("value", command);
+
+ let commandTd = document.createElement("TD");
+ commandTd.appendChild(commandInput);
+
+ let tr = document.createElement("TR");
+ tr.setAttribute("class", "regexCommandRow");
+ tr.appendChild(regexTd);
+ tr.appendChild(commandTd);
+ return tr;
+}
+
+
+document.addEventListener("click", e => {
+ if (e.target.id == ("save")) {
+ saveCommands();
+ location.reload();
+ }
+});
+
+
+populateCommandTable();