// ==UserScript== // @name RuTracker - magnet links in search pages // @namespace RuTracker-Micdu70 // @version 2019.4.19.2 // @description Adds magnet links in RuTracker search pages // @author Micdu70 // @license MIT // @include /^(https?:)?\/\/rutracker\.org\/forum\/search_cse\.php.*$/ // @grant none // @downloadURL none // ==/UserScript== function INIT(){ window.setTimeout(function(){ // wait for the results to display var element = 'gsc-results gsc-webResult'; var results = document.getElementsByClassName(element)[0]; if (results) { var magnetClass = document.getElementsByClassName('xhrMagnetLink')[0]; if (!magnetClass) { addMagnet(); var xhrMagnetLinks = document.querySelectorAll('.xhrMagnetLink'); addMouseoverListeners(xhrMagnetLinks, 'ml' ); } } else { INIT(); } }, 500); } function addMagnet(){ var noResults = document.getElementsByClassName('gs-webResult gs-result gs-no-results-result') [0]; // check if there are results or not if (noResults) { return; } var result = document.getElementsByClassName('gs-webResult gs-result'); for (let i=0; i < result.length-1; i++) { let title = result[i].getElementsByTagName('div') [0]; let _href = result[i].getElementsByTagName('div') [2]; let href = _href.getElementsByTagName('div') [1].textContent; if (href.substring(0, 8) != 'https://') { href = 'https://'+href; } title.innerHTML += ''; title.lastChild.title = 'ML via XHR'; } addMagnetOnPageChange(); } function addMagnetOnPageChange(){ var optionClass = document.getElementsByClassName('gsc-option'); var pageClass = document.getElementsByClassName('gsc-cursor-page'); for (let i=0; i < optionClass.length; i++) { optionClass[i].addEventListener('click', function optionClick(){ INIT(); }, false); } for (let j=0; j < pageClass.length; j++) { if (pageClass[j].className !== 'gsc-cursor-page gsc-cursor-current-page') { pageClass[j].addEventListener('click', function pageClick(){ INIT(); }, false); } } } function addMouseoverListeners(links, type){ for(let i=0; i < links.length; i++) { links[i].addEventListener('mouseover', function(event){ event.preventDefault(); let href = this.getAttribute('href'); if (href === '#DL-ML') { let tLink = this.getAttribute('data-href'); var xhr = new XMLHttpRequest(); xhr.open('GET', tLink, false); // XMLHttpRequest.open(method, url, async) xhr.onload = function () { let container = document.implementation.createHTMLDocument().documentElement; container.innerHTML = xhr.responseText; let retrievedLink; retrievedLink = container.querySelector('.magnet-link'); // the 'magnet link' element in the retrieved page if (retrievedLink) { links[i].setAttribute('href', retrievedLink.href); } }; xhr.send(); } }, false); } } INIT();