Greasy Fork is available in English.
Прямые ссылки на сайтах с движком DataLife Engine (DLE)
// ==UserScript== // @name DLE links decoder // @namespace lainscripts_dle_links_decoder // @version 1.3 // @description Прямые ссылки на сайтах с движком DataLife Engine (DLE) // @author lainverse // @match *://*/* // @grant none // ==/UserScript== // Script based on a similar script by raletag: // https://greasyfork.org/en/scripts/22290-Прямые-ссылки-в-dle (function() { 'use strict'; var impCodes = '%3B%2C%2F%3F%3A%40%26%3D%2B%24%23', impRegex = new RegExp((impCodes.replace(/%/g,'|%').replace('|','')), 'gi'), impDecoded = decodeURIComponent(impCodes), impReplacer = function(ch) { return impDecoded[impCodes.indexOf(ch.toUpperCase())/3]; }; function decodeImportant(text) { return text.replace(impRegex, impReplacer); } function linkHandler(e){ var link = e.target, url = link.href, url64; // Detach event from a link since we don't need to parse it more than once link.removeEventListener('mouseenter', linkHandler, false); // Check if it's one of the DLE-redirected links and exit if not url64 = (url.match(/([?&]url=|\/leech_out\.php\?.:)([^&]+)(&|$)/i)||[])[2]; if (!url64) { return true; } // Try to decode base64 encoded link, if fails then take it as-is try { url64 = decodeURIComponent(url64); url = window.atob(url64); } catch(ignore) { url = url64; } // Decode important %-encoded parts of a link (browser should handle the rest) url = decodeImportant(url); // Replace target with decoded link and make it open in a new tab by default console.log('Replaced ' + link.href + ' with ' + url); link.href = url; link.target = '_blank'; return true; } // Get a list of all link in a given object and attach mouseover event to it function attachEventToLinks(root) { var links = root.querySelectorAll('a[href]'), i = links.length; while(i--) { links[i].addEventListener('mouseenter', linkHandler, false); } } // Parse all existing links attachEventToLinks(document); // Monitor changes to the document structure and attach events to all new links var o = new MutationObserver(function(ms){ ms.forEach(function(m){ m.addedNodes.forEach(function(n){ if (n.nodeType !== Node.ELEMENT_NODE) { return; // parse only document elements and skip the rest } if (n.href) { n.addEventListener('mouseenter', linkHandler, false); return; // if node is a link attach event and exit since we // don't want to parse link's content (links within links?!) } attachEventToLinks(n); }); }); }); o.observe(document, {childList: true, subtree: true}); })();