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 @@ - + +
@@ -257,7 +256,9 @@
-

Invidious Volume

+

+ Invidious Volume +

+ />

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; +}