// ==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(); })();