- commit
- c4910e465a8e0f53829b43d2db353313850d9967
- parent
- 9336849b9887cde4da2265119028f7069a0614ce
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2022-11-27 07:23
mv edit raw rules to settings page
Diffstat
| M | manifest.json | 4 | ++++ |
| M | src/bg.js | 5 | +---- |
| M | src/popup.css | 11 | +++++------ |
| M | src/popup.html | 11 | +---------- |
| M | src/popup.js | 17 | ++--------------- |
| A | src/settings.css | 27 | +++++++++++++++++++++++++++ |
| A | src/settings.html | 15 | +++++++++++++++ |
| A | src/settings.js | 15 | +++++++++++++++ |
8 files changed, 70 insertions, 35 deletions
diff --git a/manifest.json b/manifest.json
@@ -22,6 +22,10 @@ 22 22 "matches": ["<all_urls>"], 23 23 "run_at": "document_start" 24 24 }], -1 25 "options_ui": { -1 26 "page": "src/settings.html", -1 27 "open_in_tab": true -1 28 }, 25 29 "permissions": [ 26 30 "storage", 27 31 "tabs",
diff --git a/src/bg.js b/src/bg.js
@@ -101,10 +101,6 @@ browser.runtime.onMessage.addListener((msg, sender) => {
101 101 ).then(getRules).then(rules => {
102 102 return restrictRules(rules, msg.data.context);
103 103 });
104 -1 } else if (msg.type === 'getAllRules') {
105 -1 return getRules();
106 -1 } else if (msg.type === 'setAllRules') {
107 -1 return browser.storage.local.set({'rules': msg.data});
108 104 } else if (msg.type === 'securitypolicyviolation') {
109 105 return pushRequest(sender.tab.id, 'inline', msg.data);
110 106 }
@@ -134,6 +130,7 @@ browser.webRequest.onBeforeRequest.addListener(details => {
134 130 ]).then(([_, rules]) => {
135 131 if (!shared.shouldAllow(rules, context, hostname, type)) {
136 132 if (details.type === 'sub_frame') {
-1 133 // this can in turn be blocked by a local CSP
137 134 return {redirectUrl: 'data:,' + encodeURIComponent(details.url)};
138 135 } else {
139 136 return {cancel: true};
diff --git a/src/popup.css b/src/popup.css
@@ -6,9 +6,14 @@ 6 6 --text-dark: #fff; 7 7 } 8 8 -1 9 [name="settings"] { -1 10 float: right; -1 11 } -1 12 9 13 table { 10 14 background: var(--red-light); 11 15 border-spacing: 0; -1 16 margin-bottom: 0.2em; 12 17 } 13 18 th, td { 14 19 position: relative; @@ -53,9 +58,3 @@ input ~ span { 53 58 input:checked ~ span { 54 59 color: var(--text-dark); 55 60 }56 -157 -1 textarea {58 -1 display: block;59 -1 width: 100%;60 -1 resize: vertical;61 -1 }
diff --git a/src/popup.html b/src/popup.html
@@ -6,15 +6,7 @@ 6 6 </head> 7 7 <body> 8 8 <table></table>9 -110 -1 <details class="raw-rules">11 -1 <summary>Edit raw rules</summary>12 -1 <form>13 -1 <textarea rows="10"></textarea>14 -1 <button>Save</button>15 -1 </form>16 -1 </details>17 -1-1 9 <button type="button" name="settings">Edit rules</button> 18 10 <details> 19 11 <summary>Help</summary> 20 12 <p>In the table above, the columns represent different types of requests. The rows represent domains. Numbers show how many requests of a given type the current tab tries to make to the given domain. Red cells are blocked, green cells are allowed. Light green cells are allowed indirectly, e.g. because they represent a sub-domain of an allowed domain. Grey cells are disabled.</p> @@ -25,7 +17,6 @@ 25 17 <li><strong>sub-domains</strong>: If you allow a domain, all of its sub-domains are allowed along with it.</li> 26 18 </ul> 27 19 </details>28 -129 20 <script src="shared.js"></script> 30 21 <script src="popup.js"></script> 31 22 </body>
diff --git a/src/popup.js b/src/popup.js
@@ -5,7 +5,6 @@ var requests; 5 5 var rules; 6 6 7 7 var table = document.querySelector('table');8 -1 var rawRules = document.querySelector('.raw-rules');9 8 10 9 var sendMessage = function(type, data) { 11 10 return browser.runtime.sendMessage({type: type, data: data}); @@ -150,20 +149,8 @@ var loadContext = function(c) { 150 149 151 150 browser.webNavigation.onBeforeNavigate.addListener(window.close); 152 151153 -1 rawRules.addEventListener('toggle', () => {154 -1 if (rawRules.open) {155 -1 var textarea = rawRules.querySelector('textarea');156 -1 sendMessage('getAllRules').then(allRules => {157 -1 textarea.value = JSON.stringify(allRules, null, 2);158 -1 });159 -1 }160 -1 });161 -1162 -1 rawRules.querySelector('form').addEventListener('submit', event => {163 -1 event.preventDefault();164 -1 var textarea = rawRules.querySelector('textarea');165 -1 var newRules = JSON.parse(textarea.value);166 -1 sendMessage('setAllRules', newRules).then(window.close);-1 152 document.querySelector('[name="settings"]').addEventListener('click', event => { -1 153 browser.runtime.openOptionsPage(); 167 154 }); 168 155 169 156 document.addEventListener('DOMContentLoaded', () => {
diff --git a/src/settings.css b/src/settings.css
@@ -0,0 +1,27 @@
-1 1 * {
-1 2 box-sizing: border-box;
-1 3 }
-1 4
-1 5 html,
-1 6 body {
-1 7 margin: 0;
-1 8 padding: 0;
-1 9 }
-1 10
-1 11 form {
-1 12 height: 100vh;
-1 13 display: grid;
-1 14 grid-template-rows: 1fr min-content;
-1 15 grid-gap: 0.5em;
-1 16 padding: 0.5em;
-1 17 }
-1 18
-1 19 textarea {
-1 20 width: 100%;
-1 21 resize: none;
-1 22 }
-1 23
-1 24 button {
-1 25 padding: 0.5em 2em;
-1 26 justify-self: end;
-1 27 }
diff --git a/src/settings.html b/src/settings.html
@@ -0,0 +1,15 @@ -1 1 <!DOCTYPE html> -1 2 <html> -1 3 <head> -1 4 <meta charset="utf-8"> -1 5 <link rel="stylesheet" href="settings.css"> -1 6 </head> -1 7 <body> -1 8 <form> -1 9 <textarea></textarea> -1 10 <button>Save</button> -1 11 </form> -1 12 <script src="shared.js"></script> -1 13 <script src="settings.js"></script> -1 14 </body> -1 15 </html>
diff --git a/src/settings.js b/src/settings.js
@@ -0,0 +1,15 @@
-1 1 var form = document.querySelector('form');
-1 2 var textarea = document.querySelector('textarea');
-1 3
-1 4 browser.storage.local.get('rules').then(data => {
-1 5 var rules = data.rules || {};
-1 6 textarea.value = JSON.stringify(rules, null, 2)
-1 7 });
-1 8
-1 9 form.addEventListener('submit', event => {
-1 10 event.preventDefault();
-1 11 var rules = JSON.parse(textarea.value);
-1 12 browser.storage.local.set({'rules': rules}).then(() => {
-1 13 location.reload();
-1 14 });
-1 15 });