about summary refs log tree commit diff stats
path: root/assets/javascript
diff options
context:
space:
mode:
authorAustin Huang <im@austinhuang.me>2020-10-23 19:15:38 -0400
committerGitHub <noreply@github.com>2020-10-23 19:15:38 -0400
commitc66891384238aa7f88956034e21b663c01e93eaa (patch)
tree4c42861245b20c78a70afdacff86c61b7d01397c /assets/javascript
parentFixes #51 & fixes #52 - `/tweets` redirects & popup styling (diff)
parentMerge pull request #106 from MichipX3/patch-1 (diff)
downloadlibredirect-c66891384238aa7f88956034e21b663c01e93eaa.zip
Merge pull request #2 from SimonBrazell/master
force update
Diffstat (limited to '')
-rw-r--r--assets/javascript/localise.js19
-rw-r--r--assets/javascript/persist-invidious-prefs.js (renamed from assets/persist-invidious-prefs.js)0
-rw-r--r--assets/javascript/remove-twitter-sw.js91
3 files changed, 110 insertions, 0 deletions
diff --git a/assets/javascript/localise.js b/assets/javascript/localise.js
new file mode 100644
index 00000000..cbe5c191
--- /dev/null
+++ b/assets/javascript/localise.js
@@ -0,0 +1,19 @@
+window.browser = window.browser || window.chrome;
+
+function localisePage() {
+  var data = document.querySelectorAll("[data-localise]");
+
+  for (var i in data)
+    if (data.hasOwnProperty(i)) {
+      var obj = data[i];
+      var tag = obj.getAttribute("data-localise").toString();
+
+      var msg = tag.replace(/__MSG_(\w+)__/g, function (_match, v1) {
+        return v1 ? browser.i18n.getMessage(v1) : null;
+      });
+
+      if (msg && msg !== tag) obj.textContent = msg;
+    }
+}
+
+localisePage();
diff --git a/assets/persist-invidious-prefs.js b/assets/javascript/persist-invidious-prefs.js
index 4c13a310..4c13a310 100644
--- a/assets/persist-invidious-prefs.js
+++ b/assets/javascript/persist-invidious-prefs.js
diff --git a/assets/javascript/remove-twitter-sw.js b/assets/javascript/remove-twitter-sw.js
new file mode 100644
index 00000000..222a7283
--- /dev/null
+++ b/assets/javascript/remove-twitter-sw.js
@@ -0,0 +1,91 @@
+"use strict";
+
+const nitterInstances = [
+  "https://nitter.net",
+  "https://nitter.snopyta.org",
+  "https://nitter.42l.fr",
+  "https://nitter.nixnet.services",
+  "https://nitter.13ad.de",
+  "https://nitter.pussthecat.org",
+  "https://nitter.mastodont.cat",
+  "https://nitter",
+  "https://nitter.tedomum.net",
+  "https://nitter.cattube.org",
+  "https://nitter.fdn.fr",
+  "https://nitter.1d4.us",
+  "https://nitter.kavin.rocks",
+];
+
+let disableNitter;
+let nitterInstance;
+let redirectBypassFlag;
+let exceptions;
+
+window.browser = window.browser || window.chrome;
+
+function getRandomInstance() {
+  return nitterInstances[~~(nitterInstances.length * Math.random())];
+}
+
+function isNotException(url) {
+  return !exceptions.some((regex) => regex.test(url.href));
+}
+
+function shouldRedirect(url) {
+  return (
+    !redirectBypassFlag &&
+    isNotException(url) &&
+    !disableNitter &&
+    url.host !== nitterInstance &&
+    !url.pathname.includes("/home")
+  );
+}
+
+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",
+    "redirectBypassFlag",
+    "exceptions",
+  ],
+  (result) => {
+    redirectBypassFlag = result.redirectBypassFlag;
+    browser.storage.sync.set({
+      redirectBypassFlag: false,
+    });
+    if (!result.removeTwitterSW) {
+      disableNitter = result.disableNitter;
+      nitterInstance = result.nitterInstance || getRandomInstance();
+      exceptions = result.exceptions
+        ? result.exceptions.map((e) => {
+            return new RegExp(e);
+          })
+        : [];
+      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 (shouldRedirect()) {
+        const redirect = redirectTwitter(url);
+        console.info("Redirecting", `"${url.href}"`, "=>", `"${redirect}"`);
+        window.location = redirect;
+      }
+    }
+  }
+);