about summary refs log tree commit diff stats
path: root/content-script.js
diff options
context:
space:
mode:
Diffstat (limited to 'content-script.js')
-rw-r--r--content-script.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/content-script.js b/content-script.js
new file mode 100644
index 00000000..d13de3e1
--- /dev/null
+++ b/content-script.js
@@ -0,0 +1,44 @@
+'use strict';
+
+const nitterDefault = 'https://nitter.net';
+
+let disableNitter;
+let nitterInstance;
+
+window.browser = window.browser || window.chrome;
+
+function redirectTwitter(url) {
+  if (url.host.split('.')[0] === 'pbs') {
+    return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
+  } else if (url.host.split('.')[0] === 'video') {
+    return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`;
+  } else {
+    return `${nitterInstance}${url.pathname}${url.search}`;
+  };
+}
+
+browser.storage.sync.get(
+  ['nitterInstance', 'disableNitter', 'removeTwitterSW'],
+  (result) => {
+    if (!result.removeTwitterSW) {
+      disableNitter = result.disableNitter;
+      nitterInstance = result.nitterInstance || nitterDefault;
+      navigator.serviceWorker.getRegistrations().then(registrations => {
+        for (let registration of registrations) {
+          if (registration.scope === 'https://twitter.com/') {
+            registration.unregister();
+            console.log('Unregistered Twitter SW', registration);
+          }
+        }
+      });
+      const url = new URL(window.location);
+      if (!disableNitter && url.host !== nitterInstance) {
+        const redirect = redirectTwitter(url);
+        console.info(
+          'Redirecting', `"${url.href}"`, '=>', `"${redirect}"`
+        );
+        window.location = redirect;
+      }
+    }
+  }
+);