🏠 

URL Redirect Redirecter

Redirect the Redirected Url


Install this script?
// ==UserScript==
// @name            URL Redirect Redirecter
// @namespace       FaustVXUrlRedirect
// @version         0.4.6
// @description     Redirect the Redirected Url
// @author          FaustVX
// @match           http*://www.curseforge.com/*
// @match           http*://legacy.curseforge.com/*
// @match           http*://*.youtube.com/*
// @match           http*://twitter.com/*
// @match           http*://github.com/*
// @match           http*://calendar.google.com/*
// @match           http*://*.ygg.re/*
// @grant           none
// @supportURL      https://gist.github.com/FaustVX/0deb00258929a517a6e2796f9020e17c#comments
// @contributionURL https://www.paypal.com/donate/?cmd=_donations&[email protected]&item_name=TamperMonkey+Url+Redirect
// @license         MIT
// ==/UserScript==
function run() {
'use strict';
const urlSplit = window.location.href.split('/');
const domainName = urlSplit[2].split('.');
function changeHref(query) {
return function (a) {
const urlParams = new URLSearchParams(a.search);
const url = urlParams.get(query);
a.href = decodeURIComponent(url);
}
}
function changeTag(node, tag) {
const clone = createElement(tag)
for (const attr of node.attributes) {
clone.setAttributeNS(null, attr.name, attr.value)
}
while (node.firstChild) {
clone.appendChild(node.firstChild)
}
node.replaceWith(clone)
return clone
}
function createElement(tag) {
return document.createElementNS(tag === 'svg' ? 'http://www.w3.org/2000/svg' : 'http://www.w3.org/1999/xhtml', tag)
}
function execute(i, url, selectorAll, foreach) {
if (domainName[i] === url) {
document.querySelectorAll(selectorAll).forEach(foreach);
return true;
}
return false;
}
execute(1, "curseforge", 'a[href*="/linkout"]', changeHref("remoteUrl"))
|| execute(1, "youtube", 'a[href*="/redirect"]', changeHref("q"))
|| execute(0, "calendar", 'a[href*="/url"]', changeHref("q"))
|| execute(0, "github", '.Box-sc-g0xbh4-0.iiAnVG span[data-testid="compare-text"]:not(:has(a))', function(s) {
const href = "compare/" + s.lastChild.textContent;
const a = createElement('a');
a.href = href;
a.innerHTML = s.lastChild.textContent;
s.lastChild.replaceWith(a)
})
|| execute(1, "ygg", 'a[href*="/misc/safe_redirect?url="]', function(s) {
const urlParams = new URLSearchParams(s.search);
s.href = detectYgg(urlParams.get('url'));
function detectYgg(url) {
const split = atob(url).split('/');
const href = split.slice(split.findIndex((e) => e.includes('ygg')) + 1).join('/');
if (!href.startsWith('http')) {
return '/' + href;
}
return href;
}
})
|| execute(0, "twitter", 'a[href*="t.co/"]', function(a) {
if (a.innerHTML.startsWith('<span')) {
a.href = a.innerHTML = a.innerText.replace(/…$/, '');
}
})
};
function runWhenReady(callback) {
const tryNow = function() {
try {
callback();
} catch { }
setTimeout(tryNow, 250);
};
tryNow();
}
runWhenReady(run);