NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name imdb link in speed.cd title
// @namespace pootz
// @description insert imdb link in the title of the details page
// @include http*://*speed.cd/details.php?id=*
// @include http*://*speed.cd/t/*
// @version 1.9
// @history 1.9 - fix after imdb change, imdb icon of movies without rate are no longer shown
// @history 1.8 - fix movies not yet released
// @history 1.7 - fix a bug where a movie not yet rated, would not insert the imdb icon button
// @history 1.6 - fix to work after page changes
// @history 1.5 - when the imdb link is found, it show the rates instead of the icon
// @history 1.4 - fix http bug, where the description link not preceeded by http would fail to open
// @history 1.3 - add imdb as button so it still appears when movie title is longer
// @history 1.2 - find for the title and until year, and retrieve imdb link's search results if found
// @history 1.1 - regex range updated
// @require https://code.jquery.com/jquery-2.1.1.min.js
// @updateURL https://openuserjs.org/meta/pootz/imdb_link_in_speed.cd_title.meta.js
// @downloadURL https://openuserjs.org/install/pootz/imdb_link_in_speed.cd_title.user.js
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// ==/UserScript==
imdbIcon = "data:image/png;base64,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";
var movieSearch = /xvid|264|[^a-z0-9](20[0-3][0-9]|19[1-9][0-9])/i;
var untilYear = /[\w\d '-]+[ |\[|\(](20[0-3][0-9]|19[0-9][0-9])/;
var titleID = $("#boxTitle");
var torrentTitle = titleID.prop("title");
var searchImdb = /(http:\/\/www.imdb.com\/title\/tt\d{7})|(http:\/\/imdb.com\/title\/tt\d{7})|(www.imdb.com\/title\/tt\d{7})|(http:\/\/akas.imdb.com\/title\/tt\d{7})/i;
var details = $(".infoBody").html();
var torrentOptions = $('.tOpt');
if ( searchImdb.test(details) ) {
var imdb = details.match(searchImdb)[0];
if (imdb.indexOf("http") == -1) {
imdb = "http://" + imdb;
}
GM_xmlhttpRequest ( {
method: "GET",
url: imdb,
onload: imdbRate
});
} else if ( movieSearch.test(torrentTitle) ) {
if ( untilYear.test(torrentTitle) ) {
var imdbSearch = "http://www.imdb.com/find?q=" + encodedTitle(true) + "&s=tt&exact=true";
GM_xmlhttpRequest ( {
method: "GET",
url: imdbSearch,
onload: imdbResults
});
}
}
function insertImdbButton(imdb) {
if (imdb != "undefined" || imdb !== null) {
torrentOptions.append('<span> </span><label class="uiButton"><a href="' + imdb + '" target="_blank"><img src="' + imdbIcon + '"></img></a></label>');
}
}
function insertRate(imdb, rates) {
if (rates != "undefined" || rates !== null) {
torrentOptions.append('<span> </span><label class="uiButton"><a href="' + imdb + '" target="_blank"><font color="blue" size="4">' + rates + '</font></a></label>');
} else {
insertImdbButton(imdb);
}
}
function imdbRate(object) {
var resp = $(object.responseText);
//var isRated = resp.find('div.ratings_wrapper')[0].textContent.trim();
var rate = resp.find('span[itemprop="ratingValue"]');
var count = resp.find('span[itemprop="ratingCount"]');
var rates = rate[0].textContent + " (" + count[0].textContent + ")";
insertRate(imdb, rates);
}
function imdbResults(object) {
var respDoc = $(object.responseText);
var linkTitleYear = respDoc.find('.result_text');
var imdb = "http://www.imdb.com";
var foundIt = false;
var year = encodedTitle(false);
for (var i = 0; i < linkTitleYear.length; i++) {
var searchTitle = linkTitleYear[i].textContent;
var iLink = linkTitleYear[i].getElementsByTagName("a")[0].getAttribute("href");
if (searchTitle.indexOf( year ) != -1) {
foundIt = true;
var searchLink = iLink.slice( iLink, iLink.indexOf("/?") );
imdb = imdb + searchLink;
insertImdbButton(imdb);
break;
}
}
if (!foundIt) {
imdb = imdbSearch;
insertImdbButton(imdb);
}
}
function encodedTitle( boolean ) {
var year = /20[0-3][0-9]|19[0-9][0-9]/;
var grabYear = torrentTitle.match(year)[0];
var grabTitle = torrentTitle.match(untilYear)[0].toLowerCase();
grabTitle = grabTitle.slice( 0, -5 );
grabTitle = grabTitle.replace(/-|\(|\[|'|/g,"");
grabTitle = grabTitle.replace(/ | /g, " ");
grabTitle = grabTitle.replace(/ VS | vs /g," vs. ");
if (grabTitle.charAt(0) == " ") {
grabTitle = grabTitle.slice(1);
}
if (grabTitle.charAt(grabTitle.length - 1) == " ") {
grabTitle = grabTitle.slice(0,-1);
}
var grabEncodedTitle = grabTitle.replace(/&/g,"%26");
grabEncodedTitle = grabEncodedTitle.replace(/\?/g,"%3F");
grabEncodedTitle = grabEncodedTitle.replace(/=/g,"%3D");
grabEncodedTitle = grabEncodedTitle.replace(/ /g,"+");
if (boolean)
return grabEncodedTitle;
else
return grabYear;
}