diff --git a/assets/javascript/remove-twitter-sw.js b/assets/javascript/remove-twitter-sw.js
index d9d3ce3..222a728 100644
--- a/assets/javascript/remove-twitter-sw.js
+++ b/assets/javascript/remove-twitter-sw.js
@@ -1,6 +1,20 @@
-'use strict';
+"use strict";
-const nitterDefault = 'https://nitter.net';
+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;
@@ -9,61 +23,67 @@ 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)));
+ return !exceptions.some((regex) => regex.test(url.href));
}
function shouldRedirect(url) {
- return !redirectBypassFlag &&
+ return (
+ !redirectBypassFlag &&
isNotException(url) &&
!disableNitter &&
url.host !== nitterInstance &&
- !url.pathname.includes('/home');
+ !url.pathname.includes("/home")
+ );
}
function redirectTwitter(url) {
- if (url.host.split('.')[0] === 'pbs') {
+ if (url.host.split(".")[0] === "pbs") {
return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
- } else if (url.host.split('.')[0] === 'video') {
+ } 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'
+ "nitterInstance",
+ "disableNitter",
+ "removeTwitterSW",
+ "redirectBypassFlag",
+ "exceptions",
],
(result) => {
redirectBypassFlag = result.redirectBypassFlag;
browser.storage.sync.set({
- redirectBypassFlag: false
+ redirectBypassFlag: false,
});
if (!result.removeTwitterSW) {
disableNitter = result.disableNitter;
- nitterInstance = result.nitterInstance || nitterDefault;
- exceptions = result.exceptions ? result.exceptions.map(e => {
- return new RegExp(e);
- }) : [];
- navigator.serviceWorker.getRegistrations().then(registrations => {
+ 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/') {
+ if (registration.scope === "https://twitter.com/") {
registration.unregister();
- console.log('Unregistered Twitter SW', registration);
+ console.log("Unregistered Twitter SW", registration);
}
}
});
const url = new URL(window.location);
if (shouldRedirect()) {
const redirect = redirectTwitter(url);
- console.info(
- 'Redirecting', `"${url.href}"`, '=>', `"${redirect}"`
- );
+ console.info("Redirecting", `"${url.href}"`, "=>", `"${redirect}"`);
window.location = redirect;
}
}
diff --git a/background.js b/background.js
index ffe1857..3f5145c 100644
--- a/background.js
+++ b/background.js
@@ -1,6 +1,5 @@
"use strict";
-const invidiousDefault = "https://invidious.snopyta.org";
const youtubeDomains = [
"m.youtube.com",
"youtube.com",
@@ -22,7 +21,6 @@ const invidiousInstances = [
"https://invidious.fdn.fr",
"https://invidious.toot.koeln",
];
-const nitterDefault = "https://nitter.net";
const twitterDomains = [
"twitter.com",
"www.twitter.com",
@@ -30,7 +28,20 @@ const twitterDomains = [
"pbs.twimg.com",
"video.twimg.com",
];
-const bibliogramDefault = "https://bibliogram.art";
+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.tedomum.net",
+ "https://nitter.cattube.org",
+ "https://nitter.fdn.fr",
+ "https://nitter.1d4.us",
+ "https://nitter.kavin.rocks",
+];
const instagramDomains = [
"instagram.com",
"www.instagram.com",
@@ -64,6 +75,13 @@ const bibliogramBypassPaths = /\/(accounts\/|embeds?.js)/;
const bibliogramInstances = [
"https://bibliogram.art",
"https://bibliogram.snopyta.org",
+ "https://bibliogram.pussthecat.org",
+ "https://bibliogram.nixnet.services",
+ "https://bg.endl.site",
+ "https://bibliogram.13ad.de ",
+ "https://bibliogram.stemy.me ",
+ "https://bibliogram.hamster.dance",
+ "https://bibliogram.ggc-project.de",
];
const osmDefault = "https://openstreetmap.org";
const googleMapsRegex = /https?:\/\/(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/;
@@ -128,9 +146,9 @@ browser.storage.sync.get(
disableInvidious = result.disableInvidious;
disableBibliogram = result.disableBibliogram;
disableOsm = result.disableOsm;
- nitterInstance = result.nitterInstance || nitterDefault;
- invidiousInstance = result.invidiousInstance || invidiousDefault;
- bibliogramInstance = result.bibliogramInstance || bibliogramDefault;
+ nitterInstance = result.nitterInstance;
+ invidiousInstance = result.invidiousInstance;
+ bibliogramInstance = result.bibliogramInstance;
osmInstance = result.osmInstance || osmDefault;
alwaysProxy = result.alwaysProxy;
onlyEmbeddedVideo = result.onlyEmbeddedVideo;
@@ -150,14 +168,13 @@ browser.storage.sync.get(
browser.storage.onChanged.addListener((changes) => {
if ("nitterInstance" in changes) {
- nitterInstance = changes.nitterInstance.newValue || nitterDefault;
+ nitterInstance = changes.nitterInstance.newValue;
}
if ("invidiousInstance" in changes) {
- invidiousInstance = changes.invidiousInstance.newValue || invidiousDefault;
+ invidiousInstance = changes.invidiousInstance.newValue;
}
if ("bibliogramInstance" in changes) {
- bibliogramInstance =
- changes.bibliogramInstance.newValue || bibliogramDefault;
+ bibliogramInstance = changes.bibliogramInstance.newValue;
}
if ("osmInstance" in changes) {
osmInstance = changes.osmInstance.newValue || osmDefault;
@@ -205,6 +222,10 @@ browser.storage.onChanged.addListener((changes) => {
}
});
+function getRandomInstance(instanceList) {
+ return instanceList[~~(instanceList.length * Math.random())];
+}
+
function addressToLatLng(address, callback) {
const xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = () => {
@@ -248,6 +269,7 @@ function redirectYouTube(url, initiator, type) {
if (
initiator &&
(initiator.origin === invidiousInstance ||
+ invidiousInstances.includes(initiator.origin) ||
youtubeDomains.includes(initiator.host))
) {
return null;
@@ -284,7 +306,9 @@ function redirectYouTube(url, initiator, type) {
}
url.searchParams.append("autoplay", invidiousAutoplay ? 1 : 0);
- return `${invidiousInstance}${url.pathname}${url.search}`;
+ return `${invidiousInstance || getRandomInstance(invidiousInstances)}${
+ url.pathname
+ }${url.search}`;
}
function redirectTwitter(url, initiator) {
@@ -298,6 +322,7 @@ function redirectTwitter(url, initiator) {
isFirefox() &&
initiator &&
(initiator.origin === nitterInstance ||
+ nitterInstances.includes(initiator.origin) ||
twitterDomains.includes(initiator.host))
) {
browser.storage.sync.set({
@@ -306,15 +331,21 @@ function redirectTwitter(url, initiator) {
return null;
}
if (url.host.split(".")[0] === "pbs") {
- return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
+ return `${
+ nitterInstance || getRandomInstance(nitterInstances)
+ }/pic/${encodeURIComponent(url.href)}`;
} else if (url.host.split(".")[0] === "video") {
- return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`;
+ return `${
+ nitterInstance || getRandomInstance(nitterInstances)
+ }/gif/${encodeURIComponent(url.href)}`;
} else if (url.pathname.includes("tweets")) {
- return `${nitterInstance}${url.pathname.replace("/tweets", "")}${
- url.search
- }`;
+ return `${
+ nitterInstance || getRandomInstance(nitterInstances)
+ }${url.pathname.replace("/tweets", "")}${url.search}`;
} else {
- return `${nitterInstance}${url.pathname}${url.search}`;
+ return `${nitterInstance || getRandomInstance(nitterInstances)}${
+ url.pathname
+ }${url.search}`;
}
}
@@ -326,6 +357,7 @@ function redirectInstagram(url, initiator, type) {
if (
initiator &&
(initiator.origin === bibliogramInstance ||
+ bibliogramInstances.includes(initiator.origin) ||
instagramDomains.includes(initiator.host))
) {
return null;
@@ -338,10 +370,14 @@ function redirectInstagram(url, initiator, type) {
url.pathname === "/" ||
instagramReservedPaths.includes(url.pathname.split("/")[1])
) {
- return `${bibliogramInstance}${url.pathname}${url.search}`;
+ return `${bibliogramInstance || getRandomInstance(bibliogramInstances)}${
+ url.pathname
+ }${url.search}`;
} else {
// Likely a user profile, redirect to '/u/...'
- return `${bibliogramInstance}/u${url.pathname}${url.search}`;
+ return `${bibliogramInstance || getRandomInstance(bibliogramInstances)}/u${
+ url.pathname
+ }${url.search}`;
}
}
@@ -482,14 +518,7 @@ browser.webRequest.onBeforeRequest.addListener(
);
browser.runtime.onInstalled.addListener((details) => {
- if (details.reason === "install") {
- browser.storage.sync.set({
- bibliogramInstance:
- bibliogramInstances[~~(bibliogramInstances.length * Math.random())],
- invidiousInstance:
- invidiousInstances[~~(invidiousInstances.length * Math.random())],
- });
- } else if (details.reason === "update") {
+ if (details.reason === "update") {
browser.storage.sync.get(
["whitelist", "exceptions", "invidiousInstance"],
(result) => {
@@ -502,13 +531,9 @@ browser.runtime.onInstalled.addListener((details) => {
whitelist: null,
});
}
- if (
- result.invidiousInstance === "https://invidio.us" ||
- result.invidiousInstance === null
- ) {
+ if (result.invidiousInstance === "https://invidio.us") {
browser.storage.sync.set({
- invidiousInstance:
- invidiousInstances[~~(invidiousInstances.length * Math.random())],
+ invidiousInstance: null,
});
}
}
diff --git a/manifest.json b/manifest.json
index 88be6e8..ea0756b 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
{
"name": "__MSG_extensionName__",
"description": "__MSG_extensionDescription__",
- "version": "1.1.40",
+ "version": "1.1.41",
"manifest_version": 2,
"background": {
"scripts": ["background.js"],
diff --git a/pages/options/options.html b/pages/options/options.html
index 8e07403..6641e5c 100644
--- a/pages/options/options.html
+++ b/pages/options/options.html
@@ -127,7 +127,7 @@
id="nitter-instance"
type="url"
name="nitter-instance"
- placeholder="https://nitter.net"
+ placeholder="Random instance (none selected)"
/>
@@ -137,7 +137,7 @@
@@ -147,7 +147,7 @@
@@ -228,9 +228,8 @@
-
+
+
diff --git a/pages/options/options.js b/pages/options/options.js
index 89ef315..8149be7 100644
--- a/pages/options/options.js
+++ b/pages/options/options.js
@@ -140,6 +140,9 @@ browser.storage.sync.get(
exceptions = result.exceptions || [];
exceptions.forEach(prependExceptionsItem);
invidiousVolume.value = result.invidiousVolume;
+ document.querySelector("#volume-value").textContent = result.invidiousVolume
+ ? `${result.invidiousVolume}%`
+ : " - ";
invidiousPlayerStyle.value = result.invidiousPlayerStyle || "";
invidiousSubtitles.value = result.invidiousSubtitles || "";
invidiousAutoplay.checked = result.invidiousAutoplay;
@@ -313,11 +316,12 @@ persistInvidiousPrefs.addEventListener("change", (event) => {
});
let invidiousVolumeChange = debounce(() => {
- if (invidiousInstance.checkValidity()) {
- browser.storage.sync.set({
- invidiousVolume: invidiousVolume.value,
- });
- }
+ document.querySelector(
+ "#volume-value"
+ ).textContent = `${invidiousVolume.value}%`;
+ browser.storage.sync.set({
+ invidiousVolume: invidiousVolume.value,
+ });
}, 500);
invidiousVolume.addEventListener("input", invidiousVolumeChange);
diff --git a/pages/styles.css b/pages/styles.css
index 300dadb..dd58676 100644
--- a/pages/styles.css
+++ b/pages/styles.css
@@ -457,3 +457,7 @@ input[type="range"]::-moz-range-thumb {
background-color: var(--bg-secondary);
}
}
+
+#volume-value {
+ float: right;
+}