summaryrefslogtreecommitdiff
path: root/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/https-everywhere@eff.org/pages/debugging-rulesets')
-rw-r--r--data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/index.html25
-rw-r--r--data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/style.css40
-rw-r--r--data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/ux.js44
3 files changed, 109 insertions, 0 deletions
diff --git a/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/index.html b/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/index.html
new file mode 100644
index 0000000..bd6f743
--- /dev/null
+++ b/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/index.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title></title>
+ <link href="style.css" rel="stylesheet">
+ <script src="/external/codemirror/codemirror-5.31.0.min.js"></script>
+ <link href="/external/codemirror/codemirror-5.31.0.min.css" rel="stylesheet">
+ <script src="/external/codemirror/codemirror-5.31.0.xml.min.js"></script>
+ </head>
+ <body>
+ <div class="section-header"><span class="section-header-span">Debugging Rulesets</span></div>
+ <div class="section-explainer">
+ Enter ruleset XML below and click save when ready. These rulesets will be immediately activated upon saving, and will persist across restarts.<br>
+ <i>Warning</i>: This should only be used for debugging rulesets. This feature is not guaranteed to work reliably for regular usage.<br>
+ <i>Note</i>: Due to a bug in Chromium, it may be necessary to close the options ui before saving.
+ </div>
+ <div id="unsaved-text">There are unsaved changes! Be sure to save them for them to take effect.</div>
+ <textarea id="codemirror-textarea"></textarea>
+ <button type="button" id="save-button">Save</button>
+ <div id="saved-text">Saved!</div>
+ <script src="../send-message.js"></script>
+ <script src="ux.js"></script>
+ </body>
+</html>
diff --git a/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/style.css b/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/style.css
new file mode 100644
index 0000000..e424c70
--- /dev/null
+++ b/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/style.css
@@ -0,0 +1,40 @@
+.cm-s-main{
+ width: 100%;
+ height: 500px;
+}
+
+.cm-s-saved{
+ border: 1px solid black;
+}
+
+.cm-s-unsaved{
+ border: 1px solid red;
+}
+
+.section-explainer{
+ margin-bottom: 5px;
+}
+
+.section-header{
+ margin-bottom: 10px;
+}
+
+.section-header-span{
+ border-bottom: 1px solid #ccc;
+ font-size: 15px;
+}
+
+#saved-text{
+ display: none;
+ color: green;
+ font-weight: bold;
+ margin: 30px;
+}
+
+#unsaved-text{
+ font-weight: bold;
+ margin: 10px 0px;
+ color: red;
+ visibility: hidden;
+ text-align: center;
+}
diff --git a/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/ux.js b/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/ux.js
new file mode 100644
index 0000000..be6c8b5
--- /dev/null
+++ b/data/extensions/https-everywhere@eff.org/pages/debugging-rulesets/ux.js
@@ -0,0 +1,44 @@
+/* global sendMessage, CodeMirror */
+
+"use strict";
+
+const savedTextElement = document.getElementById("saved-text");
+const unsavedTextElement = document.getElementById("unsaved-text");
+const savedTitle = "Debugging Rulesets";
+const unsavedTitle = "* Debugging Rulesets";
+
+document.title = savedTitle;
+
+const cm = CodeMirror.fromTextArea(
+ document.getElementById("codemirror-textarea"),
+ {
+ mode: "xml",
+ theme: "default main saved"
+ }
+);
+
+let valueHasChanged = false;
+sendMessage("get_option", { debugging_rulesets: "" }, item => {
+ cm.setValue(item.debugging_rulesets);
+ cm.on("change", cm => {
+ if (!(valueHasChanged)) {
+ valueHasChanged = true;
+ document.title = unsavedTitle;
+ cm.setOption("theme", "default main unsaved");
+ unsavedTextElement.style.visibility = "visible";
+ }
+ });
+});
+
+document.getElementById("save-button").addEventListener("click", e => {
+ e.preventDefault();
+ sendMessage("set_option", { debugging_rulesets: cm.getValue() }, () => {
+ savedTextElement.style.display = "block";
+ setTimeout(() => { savedTextElement.style.display = "none" }, 1000);
+
+ valueHasChanged = false;
+ document.title = savedTitle;
+ cm.setOption("theme", "default main saved");
+ unsavedTextElement.style.visibility = "hidden";
+ });
+});