about summary refs log tree commit diff stats
path: root/assets/remove-twitter-sw.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/remove-twitter-sw.js')
-rw-r--r--assets/remove-twitter-sw.js21
1 files changed, 19 insertions, 2 deletions
diff --git a/assets/remove-twitter-sw.js b/assets/remove-twitter-sw.js
index 37200f1a..d1b30637 100644
--- a/assets/remove-twitter-sw.js
+++ b/assets/remove-twitter-sw.js
@@ -4,9 +4,23 @@ const nitterDefault = 'https://nitter.net';
 
 let disableNitter;
 let nitterInstance;
+let redirectBypassFlag;
+let whitelist;
 
 window.browser = window.browser || window.chrome;
 
+function isNotWhitelisted(url) {
+  return !whitelist.some(regex => (regex.test(url.href)));
+}
+
+function shouldRedirect(url) {
+  return !redirectBypassFlag &&
+    isNotWhitelisted(url) &&
+    !disableNitter &&
+    url.host !== nitterInstance &&
+    !url.pathname.includes('/home');
+}
+
 function redirectTwitter(url) {
   if (url.host.split('.')[0] === 'pbs') {
     return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
@@ -20,13 +34,16 @@ function redirectTwitter(url) {
 browser.storage.sync.get(
   ['nitterInstance', 'disableNitter', 'removeTwitterSW', 'redirectBypassFlag'],
   (result) => {
-    const redirectBypassFlag = result.redirectBypassFlag;
+    redirectBypassFlag = result.redirectBypassFlag;
     browser.storage.sync.set({
       redirectBypassFlag: false
     });
     if (!result.removeTwitterSW) {
       disableNitter = result.disableNitter;
       nitterInstance = result.nitterInstance || nitterDefault;
+      whitelist = result.whitelist ? result.whitelist.map(e => {
+        return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'));
+      }) : [];
       navigator.serviceWorker.getRegistrations().then(registrations => {
         for (let registration of registrations) {
           if (registration.scope === 'https://twitter.com/') {
@@ -36,7 +53,7 @@ browser.storage.sync.get(
         }
       });
       const url = new URL(window.location);
-      if (!redirectBypassFlag && !disableNitter && url.host !== nitterInstance && !url.pathname.includes('/home')) {
+      if (shouldRedirect()) {
         const redirect = redirectTwitter(url);
         console.info(
           'Redirecting', `"${url.href}"`, '=>', `"${redirect}"`