Skip to content

Instantly share code, notes, and snippets.

@thedward
Created November 22, 2016 20:55
Show Gist options
  • Save thedward/fa78b2ad7815b874b62cadc5ef1d4ac2 to your computer and use it in GitHub Desktop.
Save thedward/fa78b2ad7815b874b62cadc5ef1d4ac2 to your computer and use it in GitHub Desktop.
adds magnet links to torrentz2.eu
// ==UserScript==
// @name torrentz2.eu magnet links
// @author [email protected]
// @namespace [email protected]
// @version 0.3
// @description adds magnet links to torrentz2.eu
// @match *://torrentz.eu/*
// @match *://torrentz.me/*
// @match *://torrentz.ch/*
// @match *://torrentz.in/*
// @match *://torrentz2.eu/*
// @match *://torrentz2.me/*
// @match *://torrentz2.ch/*
// @match *://torrentz2.in/*
// @copyright 2016+, Thedward Blevins
// ==/UserScript==
(function () {
'use strict';
var call = Function.prototype.call ;
var slice = call.bind([].slice) ;
function createMagnetURI (btih,query) {
var uri = 'magnet:?xt=urn:btih:' + btih.match(/[0-9a-f]{40}/)[0];
var names = Object.keys(query);
names.forEach( function (k) {
var val = encodeURIComponent(query[k]);
if ( k == 'kt' ) { val = val.replace('%20','+'); }
uri += '&' + k + '=' + val;
});
//for (key in query) {
// var val = encodeURIComponent(query[key]);
// if ( key == 'kt' ) { val = val.replace('%20','+'); }
// uri += '&' + key + '=' + val;
//};
return uri;
}
function createMagnetLink (dt) {
var a = dt.querySelector('a[href^="/"]');
if (a) {
var query = {};
var btih = a.href.match(/[0-9a-f]{40}/)[0];
query.dn = a.textContent;
query.kt = a.nextSibling.textContent
.replace(/^\W+/,'')
.replace(/\b(non) (fiction)\b/,'$1-$2');
var href = createMagnetURI(btih,query);
var link = document.createElement('a');
link.classList.add('magnetLink');
link.href = href;
return link;
} else {
console.log(dt);
return null;
}
}
function addStyle () {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = '//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css';
try {
document.head.appendChild(link);
} catch (e) {
console.log('Line 64');
console.log(e);
}
var sheet = (function() {
// Create the <style> tag
var style = document.createElement("style");
// WebKit hack :(
style.appendChild(document.createTextNode(""));
// Add the <style> element to the page
document.head.appendChild(style);
return style.sheet;
})();
sheet.insertRule('i.fa-warning{color:rgb(255,0,0);}',0);
sheet.insertRule('i.magnet-incomplete{opacity:0.5}',0);
sheet.insertRule('a.magnetLink{padding-right: 10px;}',0);
return sheet;
}
var magnetIcon = function () {
var icon = document.createElement('i');
icon.classList.add('fa','fa-magnet');
return function (title) {
return icon.cloneNode(true);
};
}();
function insertMagnetLink (dt) {
var magnet = createMagnetLink(dt);
var icon = magnetIcon();
try {
magnet.appendChild(icon);
} catch (e) {
console.log('Line 102');
console.log(e);
}
var link = dt.querySelector('a[href^="/"]');
if ( link ) {
dt.insertBefore(magnet,link);
}
}
function addMagnetLinks (node) {
var results = slice(node.querySelectorAll('div.results dl dt')).filter(dt => dt.querySelector('a') && ! dt.querySelector('a.magnetLink') );
results.map( insertMagnetLink );
}
if ( document.querySelector('div.results') ) {
addStyle();
addMagnetLinks(document);
var observer = new MutationObserver( function (mutations) {
mutations.forEach(m => addMagnetLinks(m.target)) ; }
);
observer.observe(document,{childList:true,subtree:true});
}
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment