333 lines
10 KiB
JavaScript
333 lines
10 KiB
JavaScript
|
// ==UserScript==
|
||
|
// @name Direct links out
|
||
|
// @name:ru Прямые ссылки наружу
|
||
|
// @description Removes all "You are leaving our site" and redirection stuff from links
|
||
|
// @description:ru Убирает "Бла-бла-бла, Вы покидаете наш сайт" и переадресации из ссылок
|
||
|
// @namespace https://github.com/nokeya
|
||
|
// @author nokeya
|
||
|
// @update https://github.com/nokeya/direct-links-out/raw/master/direct-links-out.user.js
|
||
|
// @icon https://raw.githubusercontent.com/nokeya/direct-links-out/master/icon.png
|
||
|
// @version 2.19
|
||
|
// @grant none
|
||
|
//google
|
||
|
// @include *://google.*
|
||
|
// @include *://www.google.*
|
||
|
// @include *://encrypted.google.*
|
||
|
//yandex
|
||
|
// @match *://yandex.ru/*
|
||
|
// @match *://yandex.ua/*
|
||
|
// @match *://yandex.by/*
|
||
|
// @match *://yandex.kz/*
|
||
|
// @match *://yandex.com.tr/*
|
||
|
// @match *://yandex.com/*
|
||
|
// @match *://*.yandex.ru/*
|
||
|
// @match *://*.yandex.ua/*
|
||
|
// @match *://*.yandex.by/*
|
||
|
// @match *://*.yandex.kz/*
|
||
|
// @match *://*.yandex.com.tr/*
|
||
|
// @match *://*.yandex.com/*
|
||
|
//youtube
|
||
|
// @match *://youtube.com/*
|
||
|
// @match *://*.youtube.com/*
|
||
|
//wikimapia
|
||
|
// @match *://wikimapia.org/*
|
||
|
//deviantart
|
||
|
// @match *://deviantart.com/*
|
||
|
// @match *://*.deviantart.com/*
|
||
|
//joyreactor
|
||
|
// @match *://joyreactor.cc/*
|
||
|
// @match *://*.joyreactor.cc/*
|
||
|
// @match *://reactor.cc/*
|
||
|
// @match *://*.reactor.cc/*
|
||
|
// @match *://joyreactor.com/*
|
||
|
// @match *://*.joyreactor.com/*
|
||
|
//vk
|
||
|
// @match *://vk.com/*
|
||
|
// @match *://*.vk.com/*
|
||
|
//ok
|
||
|
// @match *://ok.ru/*
|
||
|
// @match *://*.ok.ru/*
|
||
|
//steam
|
||
|
// @match *://steamcommunity.com/*
|
||
|
// @match *://*.steamcommunity.com/*
|
||
|
//fb
|
||
|
// @match *://facebook.com/*
|
||
|
// @match *://*.facebook.com/*
|
||
|
//twitter
|
||
|
// @match *://twitter.com/*
|
||
|
// @match *://*.twitter.com/*
|
||
|
//4pda
|
||
|
// @match *://4pda.ru/*
|
||
|
// @match *://*.4pda.ru/*
|
||
|
//kickass
|
||
|
// @match *://kat.cr/*
|
||
|
// @match *://kickassto.co/*
|
||
|
// @match *://katproxy.is/*
|
||
|
// @match *://thekat.tv/*
|
||
|
// @match *://*.kat.cr/*
|
||
|
// @match *://*.kickassto.co/*
|
||
|
// @match *://*.katproxy.is/*
|
||
|
// @match *://*.thekat.tv/*
|
||
|
//AMO
|
||
|
// @match *://addons.mozilla.org/*
|
||
|
//pixiv
|
||
|
// @match *://pixiv.net/*
|
||
|
// @match *://*.pixiv.net/*
|
||
|
//tumblr
|
||
|
// @match *://tumblr.com/*
|
||
|
// @match *://*.tumblr.com/*
|
||
|
//danieldefo
|
||
|
// @match *://danieldefo.ru/*
|
||
|
// @match *://*.danieldefo.ru/*
|
||
|
//yaplakal
|
||
|
// @match *://yaplakal.com/*
|
||
|
// @match *://*.yaplakal.com/*
|
||
|
//soundcloud
|
||
|
// @match *://soundcloud.com/*
|
||
|
// @match *://*.soundcloud.com/*
|
||
|
//upwork
|
||
|
// @match *://upwork.com/*
|
||
|
// @match *://*.upwork.com/*
|
||
|
//picarto
|
||
|
// @match *://picarto.tv/*
|
||
|
// @match *://*.picarto.tv/*
|
||
|
//taker
|
||
|
// @match *://taker.im/*
|
||
|
// @match *://*.taker.im/*
|
||
|
//forumavia
|
||
|
// @match *://*.forumavia.ru/*
|
||
|
//slack
|
||
|
// @match *://*.slack.com/*
|
||
|
//instagram
|
||
|
// @match *://instagram.com/*
|
||
|
// @match *://*.instagram.com/*
|
||
|
|
||
|
// ==/UserScript==
|
||
|
(function() {
|
||
|
// anchors and functions
|
||
|
var anchor;
|
||
|
var after;
|
||
|
var rwLink = function(){};
|
||
|
var rwAll = function(){};
|
||
|
var retTrue = function() { return true; }; //dummy function to always return true
|
||
|
|
||
|
// simple rewrite link - based on anchors
|
||
|
function rwSimple(link){
|
||
|
if (anchor){
|
||
|
var ndx = link.href.indexOf(anchor);
|
||
|
if (ndx != -1){
|
||
|
var newlink = link.href.substring(ndx + anchor.length);
|
||
|
if (after){
|
||
|
ndx = newlink.indexOf(after);
|
||
|
if (ndx != -1)
|
||
|
newlink = newlink.substring(0, ndx);
|
||
|
}
|
||
|
link.href = unescape(newlink);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
function rwaSimple(){
|
||
|
var links = document.getElementsByTagName('a');
|
||
|
for (var i = 0; i < links.length; ++i)
|
||
|
rwLink(links[i]);
|
||
|
}
|
||
|
// vk
|
||
|
function rwVK(link){
|
||
|
if (link.className === 'page_media_link_thumb')
|
||
|
{
|
||
|
var parent = link.parentNode;
|
||
|
link.href = parent.getAttribute("href");
|
||
|
parent.removeAttribute('href');
|
||
|
parent.removeAttribute('onclick');
|
||
|
link.removeAttribute('onclick');
|
||
|
}
|
||
|
|
||
|
var ndx = link.href.indexOf(anchor);
|
||
|
if (ndx != -1){
|
||
|
var newlink = link.href.substring(ndx + anchor.length);
|
||
|
var afterArr = ['&post=', '&el=snippet', '&cc_key='];
|
||
|
for (var i = 0; i < afterArr.length; ++i){
|
||
|
ndx = newlink.indexOf(afterArr[i]);
|
||
|
if (ndx != -1)
|
||
|
newlink = newlink.substring(0, ndx);
|
||
|
}
|
||
|
link.href = unescape(newlink);
|
||
|
}
|
||
|
}
|
||
|
// twitter
|
||
|
function rwTwitter(link){
|
||
|
if (link.hasAttribute('data-expanded-url')){
|
||
|
link.href = link.getAttribute('data-expanded-url');
|
||
|
link.removeAttribute('data-expanded-url');
|
||
|
}
|
||
|
}
|
||
|
function rwaTwitter(){
|
||
|
var links = document.getElementsByClassName('twitter-timeline-link');
|
||
|
for (var i = 0; i < links.length; ++i)
|
||
|
rwLink(links[i]);
|
||
|
}
|
||
|
// kickass
|
||
|
function rwKickass(link){
|
||
|
var ndx = link.href.indexOf(anchor);
|
||
|
if (ndx != -1){
|
||
|
link.href = window.atob(unescape(link.href.substring(ndx + anchor.length, link.href.length - 1)));
|
||
|
link.className = '';
|
||
|
}
|
||
|
}
|
||
|
// youtube
|
||
|
function rwYoutube(link){
|
||
|
if (/redirect/i.test(link.className))
|
||
|
link.setAttribute('data-redirect-href-updated', 'true');
|
||
|
rwSimple(link);
|
||
|
}
|
||
|
// facebook
|
||
|
function rwFacebook(link){
|
||
|
if (/referrer_log/i.test(link.onclick)){
|
||
|
link.removeAttribute('onclick');
|
||
|
link.removeAttribute('onmouseover');
|
||
|
}
|
||
|
rwSimple(link);
|
||
|
}
|
||
|
// google
|
||
|
function rwGoogle(link){
|
||
|
// replace global rwt script
|
||
|
if (window.rwt && window.rwt != retTrue){
|
||
|
delete window.rwt;
|
||
|
Object.defineProperty(window, 'rwt', { value: retTrue, writable: false });
|
||
|
}
|
||
|
|
||
|
// main search
|
||
|
if (link.hasAttribute('onmousedown'))
|
||
|
link.removeAttribute('onmousedown');
|
||
|
// images
|
||
|
if (link.hasAttribute('jsaction')){
|
||
|
var tmp = link.getAttribute('jsaction');
|
||
|
if (tmp)
|
||
|
link.setAttribute('jsaction', tmp.replace(/(mousedown:irc.rl|keydown:irc.rlk)/g,''));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// yandex
|
||
|
function rwYandex(link){
|
||
|
// main search
|
||
|
if (link.hasAttribute('onmousedown'))
|
||
|
link.removeAttribute('onmousedown');
|
||
|
// images
|
||
|
anchor = '&img_url=';
|
||
|
after = '&pos=';
|
||
|
rwSimple(link);
|
||
|
}
|
||
|
//mozilla addons store
|
||
|
function rwAMO(link){
|
||
|
if (/outgoing.prod.mozaws.net/i.test(link.href)){
|
||
|
var tmp = link.href;
|
||
|
link.href = "#";
|
||
|
// we have to fight mozilla's replacing of direct redirect string with jquery events
|
||
|
setTimeout(function(){ link.href = unescape(tmp.replace(/(http|https):\/\/outgoing.prod.mozaws.net\/v1\/[0-9a-zA-Z]+\//i,'')); }, 100);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// daniueldefo
|
||
|
function rwDanielDefo(link){
|
||
|
if (link.hasAttribute('data-proxy-href'))
|
||
|
link.removeAttribute('data-proxy-href');
|
||
|
}
|
||
|
|
||
|
// slack
|
||
|
function rwSlack(link){
|
||
|
link.removeAttribute('onclick');
|
||
|
link.removeAttribute('onmouseover');
|
||
|
}
|
||
|
|
||
|
// determine anchors, functions and listeners
|
||
|
(function ()
|
||
|
{
|
||
|
rwLink = rwSimple;
|
||
|
rwAll = rwaSimple;
|
||
|
|
||
|
var loc = window.location.hostname;
|
||
|
if (/google/i.test(loc))
|
||
|
rwLink = rwGoogle;
|
||
|
else if (/youtube/i.test(loc)){
|
||
|
anchor = 'redirect?q=';
|
||
|
after = '&redir_token=';
|
||
|
rwLink = rwYoutube;
|
||
|
}
|
||
|
else if (/facebook/i.test(loc)){
|
||
|
anchor = 'u=';
|
||
|
after = '&h=';
|
||
|
rwLink = rwFacebook;
|
||
|
}
|
||
|
else if (/instagram/i.test(loc)){
|
||
|
anchor = 'u=';
|
||
|
after = '&e=';
|
||
|
}
|
||
|
else if (/twitter/i.test(loc)){
|
||
|
rwLink = rwTwitter;
|
||
|
rwAll = rwaTwitter;
|
||
|
}
|
||
|
else if (/yandex/i.test(loc))
|
||
|
rwLink = rwYandex;
|
||
|
else if (/vk/i.test(loc)){
|
||
|
anchor = 'to=';
|
||
|
rwLink = rwVK;
|
||
|
}
|
||
|
else if (/ok/i.test(loc)){
|
||
|
anchor = 'st.link=';
|
||
|
after = '&st.name=';
|
||
|
}
|
||
|
else if (/pixiv/i.test(loc))
|
||
|
anchor = 'jump.php?';
|
||
|
else if (/tumblr/i.test(loc)){
|
||
|
anchor = "redirect?z=";
|
||
|
after = "&t=";
|
||
|
}
|
||
|
else if (/deviantart/i.test(loc))
|
||
|
anchor = 'outgoing?';
|
||
|
else if (/(steam|reactor)/i.test(loc))
|
||
|
anchor = 'url=';
|
||
|
else if (/(kat|kickass)/i.test(loc)){
|
||
|
anchor = 'confirm/url/';
|
||
|
rwLink = rwKickass;
|
||
|
}
|
||
|
else if (/soundcloud/i.test(loc))
|
||
|
anchor = "exit.sc/?url=";
|
||
|
else if (/upwork/i.test(loc))
|
||
|
anchor = 'leaving-odesk?ref=';
|
||
|
else if (/4pda/i.test(loc)){
|
||
|
anchor = 'go/?u=';
|
||
|
after = '&e=';
|
||
|
}
|
||
|
else if (/mozilla/i.test(loc))
|
||
|
rwLink = rwAMO;
|
||
|
else if (/danieldefo/i.test(loc))
|
||
|
rwLink = rwDanielDefo;
|
||
|
else if (/yaplakal/i.test(loc))
|
||
|
anchor = "go/?";
|
||
|
else if (/wikimapia.org/i.test(loc))
|
||
|
anchor = 'external_link?url=';
|
||
|
else if (/forumavia.ru/i.test(loc))
|
||
|
anchor = '/e/?l=';
|
||
|
else if (/picarto/i.test(loc)){
|
||
|
anchor = "referrer?go=";
|
||
|
after = "&ref=";
|
||
|
}
|
||
|
else if (/taker/i.test(loc))
|
||
|
anchor = "phpBB2/goto/";
|
||
|
else if (/slack/i.test(loc))
|
||
|
rwLink = rwSlack;
|
||
|
|
||
|
document.addEventListener('DOMNodeInserted', function(event){
|
||
|
if (!event || !event.target || !(event.target instanceof HTMLElement))
|
||
|
return;
|
||
|
var node = event.target;
|
||
|
if (node instanceof HTMLAnchorElement)
|
||
|
rwLink(node);
|
||
|
var links = node.getElementsByTagName('a');
|
||
|
for (var i = 0; i < links.length; ++i)
|
||
|
rwLink(links[i]);
|
||
|
}, false);
|
||
|
})();
|
||
|
rwAll();
|
||
|
})();
|