IMDB Scout

Add links from IMDB movie pages to torrent sites -- easy downloading from IMDB

目前為 2014-11-19 提交的版本,檢視 最新版本

// ==UserScript==
// @name           IMDB Scout
// @namespace      https://gf.qytechs.cn/users/1057-kannibalox
// @description    Add links from IMDB movie pages to torrent sites -- easy downloading from IMDB
//
// Preference window for userscripts, hosted by greasyfork:
// @require     https://gf.qytechs.cn/libraries/GM_config/20131122/GM_config.js
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
//
// @version        2.25
// @include        http://*.imdb.com/title/tt*
// @include        http://*.imdb.de/title/tt*
// @include        http://*.imdb.es/title/tt*
// @include        http://*.imdb.fr/title/tt*
// @include        http://*.imdb.it/title/tt*
// @include        http://*.imdb.pt/title/tt*
// @include        http://*.imdb.com/search/title*
// @include        http://*.imdb.de/search/title*
// @include        http://*.imdb.es/search/title*
// @include        http://*.imdb.fr/search/title*
// @include        http://*.imdb.it/search/title*
// @include        http://*.imdb.pt/search/title*
//
// @grant        GM_log
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_addStyle
// @grant        GM_openInTab
// @grant        GM_xmlhttpRequest
// @grant        GM_registerMenuCommand
//
// ==/UserScript==
/*---------------------Version History--------------------
1.00    -    Initial public release, everything works on barebones greasemonkey

1.50    -    Added the ability to select which sites to load from the GM script commands
        -    Moved the required method to userscripts
        -     Removed FH, NZB, Avax
        
1.60    -    Added style elements and shading to display on imdb

1.62    -    Fixed bug:SCC-ARC not removing when unchecked
        -    Alphabetized list

1.70    -    Cleaned up code
        -    Added option to not run script on page load
        
1.71    -    Deprecated action-box field

1.80    -    Added icons that link to OpenSubs, Criticker, RT, YT

1.81    -    Added support for tv, only displays on shows listed as 'tv series'
        -    Added support for icheckmovies at top bar.
        
1.82    -    Fixed title parsing for tv shows.

1.83    -    Fixed dhive not working properly

1.90    -    Set height of preference window to 450px, added scroll bar

1.91    -    Added another 11 torrent sites

2.00    -    Added auto updater

2.01    -    Added TC, FreshOn, TVT, STF, CC
        -    Cleaned up code (tabbing)
        -    Removed THR
        -    Added TV-Rage to top bar
        
2.02    -    Added PS, THC, HH, HDStar
        -    Fixed CC false positive
        
2.03    -    TehC now uses tt
        -    Added Raymoz mod for AT
        
2.04    -    Added HDbits
        -    Added TL

2.10    -    Added genre page search functionality

2.11    -    Fixed ICM because Nuked was whining

2.12    -    Removed tvrage
        -    Fixed iCM (added tt)
        -    Added HDVNbits
        -    Changed RevTT to .me
        -    Added HDT
        -    removed autoupdate

2.13    -    removed xvidme
        -    reinstated autoupdate
        -    removed google chrome code
        -    fixed hdvn and hdt issues

2.14    -    Added @grant entries for API access
        -    Fixed tt parser to work on imdb pages with referral info in url

2.2     -    Switch preferences window to use GM_config
        -    Consolidate icon & site lists
        -    Added IPT, KASS, sHD, and HDW
        -    Fix "Open All" link
        -    Add option for strikethroughs on search page
        -    Removed arrays from search URLs
        -    Spring cleaning
        
2.21    -    Added SSL to TVT, HDME, TC, AHD, IPT, SCC
        -    Added SSL option for CG
        -    Added GFT, GFT-Gems, GFT-TV
        -    Fixed SCC, SCC-ARC search URL
        -    Removed TheBox, TheDVDClub
        -    Added more comments, cleaned up some more stuff
        
2.22    -    Fixed TehC, BTN, BTN-Req, THC
        -    Added a bunch of TV sites, courtesy of seedless
        -    Added "both" option for sites, and made changes
             to allow coexistences of movie and TV sites with
             the same name
        -    Code re-organization, documentation
        -    Re-added code to allow an array for searchUrl
        
2.22.1  -    Minor fixes

2.23    -    Fixed THC, BTN
        -    Distinguish between movies and TV on search page
		
2.24    -    Separate load_on_start option for search page
        -    Fix search_string on search page

2.25    -    Added some helpful text when no sites have been enabled
        
--------------------------------------------------------*/

if (window.top != window.self)  //don't run on frames or iframes
{
    //Optional: GM_log ('In frame');
    return;
}

//------------------------------------------------------
// A list of all the sites, and the data necessary to 
// check IMDB against them.
// Each site is a python dictionary with the following attributes:
//  - name: The site name, abbreviated
//  - searchUrl: The url to perform the search, see below for how 
//    to tailor the string to a site
//  - matchRegex: The string which appears if 
//    the searchUrl DOESN'T return a result
//  - TV (optional): If true, it means that this site will only
//    show up on TV pages. By default, sites only show up on movie pages
//  - both (optional): Means that the site will show up
//    on both movie and TV pages
// To create a search URL, there are three parameters
// you can use inside the URL:
//  - %tt%: The IMDB id with the tt prefix
//  - %nott%: The IMDB id without the tt prefix
//  - $search_string%: The movie title
// See below for examples
//------------------------------------------------------

var sites = [
{   'name': 'AHD',
    'searchUrl': 'https://awesome-hd.net/torrents.php?searchstr=%search_string%',
    'matchRegex': /<h2>Error 404<\/h2>/,
    'TV': true},
{   'name': 'BTN',
    'searchUrl': 'https://broadcasthe.net/torrents.php?imdb=%tt%',
    'matchRegex': /Error 404|Lost your password\?/,
    'TV': true},
{   'name': 'BTN-Req',
    'searchUrl':  'https://broadcasthe.net/requests.php?search=%search_string%',
    'matchRegex': /Nothing found|Lost your password\?/,
    'TV': true},
{   'name': 'TVV',
    'searchUrl': 'http://tv-vault.me/torrents.php?searchstr=%search_string%',
    'matchRegex': /Nothing found<\/h2>/,
    'TV': true},
{   'name': 'BMTV',
    'searchUrl': 'https://www.bitmetv.org/browse.php?search=%search_string%',
    'matchRegex': /Nothing found!<\/h2>/,
    'TV': true},
{   'name': 'Fresh',
    'searchUrl': 'http://freshon.tv/browse.php?search=%search_string%',
    'matchRegex': /Nothing found!<\/h2>/,
    'TV': true},
{   'name': 'TvT',
    'searchUrl': 'https://www.tvtorrents.com/loggedin/search.do?search=%search_string%',
    'matchRegex': /Nothing found!<\/h2>/,
    'TV': true},
{   'name': 'GFT',
    'searchUrl': 'https://www.thegft.org/browse.php?view=0&search=%search_string%',
    'matchRegex': /Nothing found!<\/h2>/,
    'TV': true},
{   'name': 'HDME',
    'searchUrl': 'https://hdme.eu/browse.php?search=%search_string%&blah=0&cat=0&incldead=1',
    'matchRegex': /Try again with a refined search string.|<h1>You need cookies enabled to log in.<\/h1>/,
    'TV': true},
{   'name': 'IPT',
    'searchUrl': 'https://www.iptorrents.com/torrents/?q=%search_string%',
    'matchRegex': /<h2>Nothing found!<\/h2>|( 0 torrents )/,
    'TV': true},
{   'name': 'KASS',
    'searchUrl': 'https://kickass.to/usearch/%search_string%',
    'matchRegex': /<h2>Nothing found!<\/h2>/,
    'TV': true},
{   'name': 'RevTT',
    'searchUrl': 'https://www.revolutiontt.me/browse.php?search=%search_string%&cat=0&incldead=1&titleonly=1',
    'matchRegex': /<h2>Nothing found!<\/h2>/,
    'TV': true},
{   'name': 'SCC',
    'searchUrl': 'https://sceneaccess.eu/browse?search=%search_string%&method=2',
    'matchRegex': /Try again with a refined search string.|<h1>Note: Three (3) failed login attempts will result in a temporary security lockout.<\/h1>/,
    'TV': true},
{   'name': 'SCC-ARC',
    'searchUrl': 'https://sceneaccess.eu/archive?search=%search_string%&method=1',
    'matchRegex': /Try again with a refined search string.|<h1>Note: Three (3) failed login attempts will result in a temporary security lockout.<\/h1>/,
    'TV': true},
{   'name': 'SCC-NS',
    'searchUrl': 'https://sceneaccess.eu/nonscene?search=%search_string%&method=2',
    'matchRegex': /Try again with a refined search string.|<h1>Note: Three (3) failed login attempts will result in a temporary security lockout.<\/h1>/,
    'TV': true},
{   'name': 'TL',
    'searchUrl': 'http://www.torrentleech.org/torrents/browse/index/query/%search_string%&/categories/2,26,27,32',
    'matchRegex': /Signup With Invite|Please refine your search./,
    'TV': true},
{   'name': 'Goem',
    'searchUrl': 'http://goem.org/browse.php?s_type=2&cat=0&search=%tt%',
    'matchRegex': /Try again with a refined searchstring|<h1>Note: You need cookies enabled to log in.<\/h1>/,
    'both': true},
{   'name': 'TPB',
    'searchUrl': 'https://thepiratebay.org/search/%tt%',
    'matchRegex': /No hits. Try adding an asterisk in you search phrase.<\/h2>/,
    'both': true},
{   'name': 'HDW',
    'searchUrl': 'http://hdwing.com/browse.php?search=%search_string%',
    'matchRegex': /<h2>没找到任何内容!|对不起<\/h2>/,
    'both': true},
{   'name': 'AT',
    'searchUrl': 'http://www.asiatorrents.com/index.php?page=torrents&options=3&search=%tt%',
    'matchRegex': /torrent_history/},
{   'name': 'HDVN',
    'searchUrl': 'http://hdvnbits.org/torrents.php?search=%tt%&search_area=4&search_mode=0',
    'matchRegex': /Nothing found! Try again with a refined search string/},
{   'name': 'HDT',
    'searchUrl': 'http://hd-torrents.org/torrents.php?active=0&options=2&search=%tt%',
    'matchRegex': /No torrents here.../},
{   'name': 'TL',
    'searchUrl': 'http://www.torrentleech.org/torrents/browse/index/query/%search_string%&/categories/1,8,9,10,11,12,13,14,15,29',
    'matchRegex': /Signup With Invite|Please refine your search./},
{   'name': 'HDb',
    'searchUrl': 'http://hdbits.org/browse2.php#film/dir=null&searchtype=film&actorfilm=film&search=%tt%',
    'matchRegex': /<p>Note: You need cookies enabled to log in.<\/p>/},
{   'name': 'CG',
    'searchUrl': 'http://cinemageddon.net/browse.php?search=%tt%',
    'matchRegex': /<h2>Nothing found!<\/h2>|<h1>Not logged in!<\/h1>/},
{   'name': 'CG-SSL',
    'searchUrl': 'https://cinemageddon.net/browse.php?search=%tt%',
    'matchRegex': /<h2>Nothing found!<\/h2>|<h1>Not logged in!<\/h1>/},
{   'name': 'Demo',
    'searchUrl': 'http://www.demonoid.me/files/?query=%tt%',
    'matchRegex': /<b>No torrents found<\/b>|We are currently performing the daily site maintenance.<br>/},
{   'name': 'Kara',
    'searchUrl': 'https://www.karagarga.net/browse.php?search_type=imdb&search=%nott%',
    'matchRegex': /<h2>No torrents found<\/h2>|<h1>If you want the love<\/h1>/},
{   'name': 'Tik',
    'searchUrl': 'http://cinematik.net/browse.php?srchdtls=1&incldead=1&search=%tt%',
    'matchRegex': /The page you tried to view can only be used when you're logged in|<h2>Nothing found!<\/h2>/},
{   'name': 'SM',
    'searchUrl': 'http://www.surrealmoviez.info/advanced_search.php?simdb=%tt%',
    'matchRegex': /0 Movies found matching search criteria|You need to be logged in to view this page/},
{   'name': 'ILC',
    'searchUrl': 'http://www.iloveclassics.com/browse.php?incldead=1&searchin=2&search=%tt%',
    'matchRegex': /Try again with a refined search string|<h1>Not logged in!<\/h1>/},
{   'name': 'SDBits',
    'searchUrl': 'http://sdbits.org/browse.php?c6=1&c3=1&c1=1&c4=1&c5=1&c2=1&m1=1&incldead=0&from=&to=&imdbgt=0&imdblt=10&uppedby=&imdb=&search=%tt%',
    'matchRegex': /Nothing found!|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'eThor',
    'searchUrl': 'http://ethor.net/browse.php?stype=b&c23=1&c20=1&c42=1&c5=1&c19=1&c25=1&c6=1&c37=1&c43=1&c7=1&c9=1&advcat=0&incldead=0&includedesc=1&search=%tt%',
    'matchRegex': /Try again with a refined search string.|<h1>Note: Vous devez activer vos 'cookies' pour pouvoir vous identifier.<\/h1>/},
{   'name': 'x264',
    'searchUrl': 'http://x264.me/browse.php?incldead=0&xtype=0&stype=3&search=%tt%',
    'matchRegex': /Try again with a refined search string.|<h1>Forgot your password?<\/h1>/},
{   'name': 'FSS',
    'searchUrl': 'http://fss.omnilounge.co.uk/browse.php?blah=2&cat=0&incldead=1&search=%tt%',
    'matchRegex': /Try again with a different search string?|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'HDME',
    'searchUrl': 'https://hdme.eu/browse.php?blah=2&cat=0&incldead=1&search=%tt%',
    'matchRegex': /Try again with a refined search string.|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'DHive',
    'searchUrl': 'https://gks.gs/sphinx/?category=0&prez=&sort=normal&order=desc&q=%tt%',
    'matchRegex': /Votre Recherche aucun|<h1>Mot de passe<\/h1>/},
{   'name': 'CHD',
    'searchUrl': 'http://chdbits.org/torrents.php?incldead=1&spstate=0&inclbookmarked=0&search_area=4&search_mode=0&search=%tt%',
    'matchRegex': /Nothing found! Try again with a refined search string.|<h1>You need cookies enabled to log in or switch language.<\/h1>/},
{   'name': 'PTP-Req',
    'searchUrl': 'https://tls.passthepopcorn.me/requests.php?submit=true&search=%tt%',
    'matchRegex': /Nothing found!|<h1>Keep me logged in.<\/h1>/},
{   'name': 'ADVD',
    'searchUrl': 'https://asiandvdclub.org/browse.php?descr=1&btnSubmit=Submit&search=%tt%',
    'matchRegex': /Your search returned zero results|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'iPlay',
    'searchUrl': 'http://www.iplay.ro/browse.php?genre=1&status=0&search=%tt%',
    'matchRegex': /Try again with a refined search string|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'ScandBits',
    'searchUrl': 'http://scanbits.org/browse.php?cat=0&incldead=0&mode=0&search=%tt%',
    'matchRegex': /Try again with a refined search string|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'TE',
    'searchUrl': 'http://theempire.bz/browse.php?incldead=0&country=&nonboolean=1&search=%tt%',
    'matchRegex': /Try again with a refined search string|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'TG',
    'searchUrl': 'http://thegeeks.bz/browse.php?incldead=0&country=&nonboolean=1&search=%tt%',
    'matchRegex': /Try again with a refined search string|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'LL',
    'searchUrl': 'http://www.leecherslair.com/browse.php?blah=1&incldead=0&search=%tt%',
    'matchRegex': /Try again with a refined search string|<h1>This site is under construction<\/h1>/},
{   'name': 'MT',
    'searchUrl': 'http://www.maroctorrent.net/torrents-search.php?cat=42&incldead=1&search=%tt%',
    'matchRegex': /Aucun torrent|<h1>Les Cookies DOIVENT<\/h1>/},
{   'name': 'FY',
    'searchUrl': 'https://fuckyeahtorrents.com/browse.php?_by=2&cat=0&search=%tt%',
    'matchRegex': /Try again with a refined search string|<h1>You need cookies enabled to log in.<\/h1>/},
{   'name': 'SCC',
    'searchUrl': 'https://sceneaccess.org/browse?method=3&search=%tt%',
    'matchRegex': /Try again with a refined search string.|<h1>Note: Three (3) failed login attempts will result in a temporary security lockout.<\/h1>/},
{   'name': 'SCC-ARC',
    'searchUrl': 'https://sceneaccess.org/archive?=&method=3&search=%tt%',
    'matchRegex': /Try again with a refined search string.|<h1>Note: Three (3) failed login attempts will result in a temporary security lockout.<\/h1>/},
{   'name': 'SCC-NS',
    'searchUrl': 'https://sceneaccess.eu/nonscene?=&method=3&search=%tt%',
    'matchRegex': /Try again with a refined search string.|<h1>Note: Three (3) failed login attempts will result in a temporary security lockout.<\/h1>/},
{   'name': 'PTP',
    'searchUrl': 'https://tls.passthepopcorn.me/torrents.php?imdb=%tt%',
    'matchRegex': /<h2>Your search did not match anything.<\/h2>/},
{   'name': 'BitHD',
    'searchUrl': 'http://www.bit-hdtv.com/torrents.php?cat=0&description_search=1&search=%tt%',
    'matchRegex': /<h2>No match!<\/h2>/},
{   'name': 'RevTT',
    'searchUrl': 'https://www.revolutiontt.me/browse.php?search=%tt%',
    'matchRegex': /<h2>Nothing found!<\/h2>/},
{   'name': 'AHD',
    'searchUrl': 'https://awesome-hd.net/torrents.php?id=%tt%',
    'matchRegex': /<h2>Error 404<\/h2>/},
{   'name': 'TehC',
    'searchUrl': 'https://tehconnection.eu/torrents.php?searchstr=%tt%',
    'matchRegex': /You will be banned for 6 hours after your login attempts run out.|<h2>No Search Results, try reducing your search options./},
{   'name': 'CC',
    'searchUrl': 'http://www.cine-clasico.com/foros/search.php?terms=any&author=&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search&keywords=%tt%',
    'matchRegex': /You will be banned for 6 hours after your login attempts run out.|You must specify at least one word to search for. Each word must consist of at least 3 characters and must not contain more than 14 characters excluding wildcards.|Disculpe/},
{   'name': 'PS',
    'searchUrl': 'http://polishsource.org/browse.php?incldead=0&scene=0&pl=0&sub=&search_in=both&free=0&search=%tt%',
    'matchRegex': /Nic nie znaleziono|Musisz|login/},
{   'name': 'THC',
    'searchUrl': ['https://horrorcharnel.kicks-ass.org/browse.php?title=3&search=%tt%', 'https://horrorcharnel.kicks-ass.org/browse.php?search=%tt%&search_what=3&status=0&codec=0&category=0&18=1'],
    'matchRegex': /<h1>Not logged in!<\/h1>|Sorry, nothing found!/},
{   'name': 'HH',
    'searchUrl': 'http://www.horrorhaven.org/search.php?stype=articles&stext=%tt%',
    'matchRegex': /0 Articles found matching search criteria/},
{   'name': 'HDStar',
    'searchUrl': 'http://www.hdstar.org/torrents.php?incldead=1&spstate=0&inclbookmarked=0&search_area=1&search_mode=0&search=%tt%',
    'matchRegex': /Try again with a refined search string|You need cookies enabled to log in or switch language/},
{   'name': 'KASS',
    'searchUrl': 'https://kickass.to/usearch/imdb%3A%nott%',
    'matchRegex': /<h2>Nothing found!<\/h2>/},
{   'name': 'IPT',
    'searchUrl': 'https://www.iptorrents.com/torrents/?q=%tt%',
    'matchRegex': /<h2>Nothing found!<\/h2>|( 0 torrents )/},
{   'name': 'sHD', 
    'searchUrl': 'https://scenehd.org/browse.php?options&unpack&incldead&search=%search_string%',
    'matchRegex': /<h2>No torrents found!<\/h2>/},
{   'name': 'GFT',
    'searchUrl': 'https://www.thegft.org/browse.php?view=0&c2=1&c1=1&c9=1&c11=1&c48=1&c8=1&c18=1&c49=1&c7=1&c38=1&c46=1&c5=1&c13=1&c26=1&c37=1&c19=1&c47=1&c17=1&c4=1&c22=1&c25=1&c20=1&c3=1&search=%tt%&searchtype=0',
    'matchRegex': /Nothing found!<\/h2>/},
{   'name': 'GFT-Gems',
    'searchUrl': 'https://www.thegft.org/browse.php?view=1&search=%tt%&searchtype=0',
    'matchRegex': /Nothing found!<\/h2>/},
];

icon_sites = [
{   'name': 'OpenSubtitles',
    'icon': 'http://www.opensubtitles.org/favicon.ico',
    'searchUrl': "http://www.opensubtitles.org/en/search/imdbid-%tt%"},
{   'name': 'Youtube',
    'icon': 'http://www.youtube.com/favicon.ico',
    'searchUrl': 'http://www.youtube.com/results?search_query="%search_string%"&search=Search'},
{   'name': 'Rotten Tomatoes',
    'icon': "http://www.rottentomatoes.com/favicon.ico",
    'searchUrl': "http://www.rottentomatoes.com/alias?type=imdbid&s=%nott%"},
{   'name': 'Criticker',
    'icon': 'http://www.criticker.com/favicon.ico',
    'searchUrl': 'http://www.criticker.com/?st=movies&h=%search_string%&g=Go'},
{   'name': 'iCheckMovies',
    'icon': 'http://www.icheckmovies.com/favicon.ico',
    'searchUrl': 'http://www.icheckmovies.com/search/movies/?query=%tt%'},
];

function replace_search_url_params(search_url, movie_id, movie_title) {
    var search_string = movie_title.replace(/ +\(.*/, '').replace(/[^a-zA-Z0-9]/g, ' ').replace(/ +/g, '+');
    if ($.isArray(search_url)) {
        search_array = [];
        $.each(search_url, function(index, url) {
            search_array[index] = replace_search_url_params(url, movie_id, movie_title);
        });
        return search_array;
    }
    return search_url.replace('%tt%', 'tt'+movie_id)
                     .replace('%nott%', movie_id)
                     .replace('%search_string%', search_string);
}

// Adds search links to an element
function add_link(elem, search_url, link_text, strikeout) {
    var a = $('<a />').attr('href',search_url).attr('target','_blank');

    if (strikeout) {
        a.append($('<s />').append(link_text));
    } else {
        a.append(link_text);
    }

    if (!onSearchPage) {
        // A little bit of trickery to make matches appear first in a list
        if (strikeout) {
            $('#pirateheader').append(a).append(' ');
        } else {
            $('#piratefound').append(a).append(' ');
        }
    } else {
        var result_box = $(elem).find('td.result_box');
        if (result_box.length > 0) {
            $(result_box).append(a);
        } else {
            $(elem).append($('<td />').append(a).addClass('result_box'));
        }
    }
}

// Performs an ajax request to determine whether or not a url should be displayed
function maybe_add_link(elem, link_text, search_url, search_fail_match, success_match) {
    if (typeof(success_match) === 'undefined') success_match = false;
    // If the search URL is an array, recurse briefly on the elements.
    if ($.isArray(search_url)) {
        $.each(search_url, function(index, url) {
            maybe_add_link(elem, link_text+'_'+(index+1).toString(), url, search_fail_match, success_match);
        });
        return;
    }
    GM_xmlhttpRequest({
        method: 'GET',
        url: search_url,
        onload: function (responseDetails) {
            if (String(responseDetails.responseText).match(search_fail_match) ? !(success_match) : success_match) {
                if (onSearchPage ? GM_config.get('strikeout_links_search') : GM_config.get('strikeout_links_movie')) {
                    add_link(elem, search_url, link_text, true);
                }
                // If we're on the search page and it isn't found on PTP
                if (onSearchPage && link_text == 'PTP') {
                    var box = $(elem).find('td.result_box');
                    if (box.length > 0) {
                        box.css('background-color','green');
                    } else {
                        $(elem).append($('<td />').css('background-color','green').addClass('result_box'));
                    }
                }
            } else {
                add_link(elem, search_url, link_text, false);
            }
        }
    });
}

// Run code to create fields and display sites
function perform(elem, movie_id, movie_title, is_tv) {
    siteShown = false;
    $.each(sites, function(index, site) {
        if (site['show']) {
            siteShown = true;
            // If we're on a TV page, only show TV links.
            if (Boolean(site['TV']) == is_tv || Boolean(site['both'])) {
                searchUrl = replace_search_url_params(site['searchUrl'], movie_id, movie_title);
                maybe_add_link(elem, site['name'], searchUrl, site['matchRegex']);
            }
        }
    });
    if (!siteShown) {
         $(elem).append("It seems there aren't any sites enabled. You can access your preferences via the Greasemonkey option \"Preferences for IMDB Scout\", which may be under a sub-menu.");
    }
}

//------------------------------------------------------
// Button Code
//------------------------------------------------------

function display_button() {
    var p = $('<p />').attr('id', 'piratebutton');
    p.append($('<button>Load IMDB Scout</button>').click(function() {
        $('#piratebutton').remove();
        if (onSearchPage) {
            performSearch();
        } else {
            performPage();
        }
    }));
    if (onSearchPage) {
        $('#sidebar').append(p);
    } else {
        $('h1.header:first').parent().append(p);
    }
}

//------------------------------------------------------
// Icons at top bar
//------------------------------------------------------

// Adds a dictionary of icons to the top of the page.
// Unlike the other URLs, they aren't checked to see if the movie exists.
function addIconBar(movie_id, movie_title) {
    var iconbar = $('h1.header:first');
    iconbar.id = 'iconbar';
    $.each(icon_sites, function(index, site) {
        var searchUrl = replace_search_url_params(site['searchUrl'], movie_id, movie_title);
        var image = $('<img />').attr({'style': '-moz-opacity: 0.4;',
                                       'width': '16',
                                       'border': '0',
                                       'src': site['icon'],
                                       'title': site['name']});
        var html = $('<span />').append($('<a />').attr('href', searchUrl).addClass('iconbar_icon').append(image));
        iconbar.append(html).append(' ');
    });
    //If we have access to the function
    if (GM_openInTab) {
        var aopenall = $("<a />").text("Open All")
                                 .attr("href", "javascript:;")
                                 .attr('style', 'font-weight:bold;font-size:10px;font-family: Calibri, Verdana, Arial, Helvetica, sans-serif;');
        aopenall.click( function () {
            $('.iconbar_icon').each(function () {
                GM_openInTab($(this).attr('href'));
            });
        }, false);

        iconbar.append(aopenall);
    }
}

//------------------------------------------------------
// Search page code
//------------------------------------------------------

function performSearch(){
    //Perform in search page
    var styles = '.result_box {width: 335px} .result_box a { margin-right: 5px; color: #444;} ';
        styles += ' .result_box a:visited { color: red;}';
        styles += ' #imdb2leech_tuned {position: fixed; bottom: 10px; right: 10px; z-index: 1000;} ';
        styles += ' #content-2-wide #main, #content-2-wide .maindetails_center {margin-left: 5px; width: 1001px;} ';
    GM_addStyle(styles);
    
    //Loop through each result row
    $('div#main table.results tr.detailed').each(function(){
        var link = $(this).find('.title>a');
		var is_tv = Boolean($(this).find('.year_type').html().match('TV Series'));
        movie_title = link.html();
        movie_id = link.attr('href').match(/tt([0-9]*)\/?$/)[1];
        
        $(this).find('span.genre a').each(function(){
            if($(this).html() == "Adult") {
                 $(this).parent().parent().parent().css('background-color','red');
            }
        });
        perform($(this), movie_id, movie_title, is_tv);
    });
}

//------------------------------------------------------
// TV/movie page code
//------------------------------------------------------

function performPage() {
	//alert($("title").text());
    var movie_title = $("title").text().match(/^(.*?) \(/)[1];
    var movie_id = document.URL.match(/\/tt([0-9]+)\//)[1].trim('tt');
	console.log($("title").text());
	var is_tv_page = Boolean($("title").text().match("TV Series"));
    //Create area to put links in
    var p = $('<p />').append(GM_config.get('pirate_header_text')).attr('id', 'pirateheader').attr('style', 'font-weight:bold; color:black; background-color: lightgray;');
    p.append($('<span />').attr('id', 'piratefound'));
    $('h1.header:first').parent().append(p);
    perform($('#pirateheader'), movie_id, movie_title, is_tv_page);
    addIconBar(movie_id, movie_title);
}

//------------------------------------------------------
// Code being run (main)
//------------------------------------------------------

// Get everything configured

// Create the non-site dictionary for GM_config
var config_fields = {
    'pirate_header_text': {
        'label': 'Header text:',
        'type': 'text',
        'default': 'Pirate this film: '
    },
    'load_on_start': {
        'label': 'Load on start?',
        'type': 'checkbox',
        'default': true
    },
	'load_on_start_search': {
        'label': 'Load on start on search page?',
        'type': 'checkbox',
        'default': true
    },
    'strikeout_links_search': {
        'label': 'Strike out links on search page?',
        'type': 'checkbox',
        'default': true
    },
    'strikeout_links_movie': {
        'label': 'Strike out links on movie page?',
        'type': 'checkbox',
        'default': true
    },
};

// Sort the sites into a consistent pattern
sites.sort(function (a, b) {
    return a['name'].toLowerCase() > b['name'].toLowerCase();
});

// Add each site GM_config
// The GM_config default for checkboxes is false
$.each(sites, function(index, site) {
    config_fields['show_'+site['name']+(site['TV']?"_TV":"")] = {
        'label': 'Show '+site['name']+(site['TV']?" (TV)":"")+'?',
        'type': 'checkbox'
    }
});    

// Initialize and register GM_config
GM_config.init({
    'id': 'imbd_scout',
    'title': 'IMDB Scout Preferences',
    'fields': config_fields
});
GM_registerMenuCommand('Preferences for IMDB Scout', function() {GM_config.open()});

// Fetch per-site values from GM_config
$.each(sites, function(index, site) {
    site['show'] = GM_config.get('show_'+site['name']+(site['TV']?"_TV":""));
});

// Are we on a search page?
// This variable is camelCased to show it's global
// Hopefully it can be factored out of the global scope in the future
var onSearchPage = Boolean(location.href.match('search'));

$('title').ready(function() {
if (!onSearchPage && GM_config.get('load_on_start')) {
        performPage();
} else if (onSearchPage && GM_config.get('load_on_start_search')) {
        performSearch();
} else {
    display_button();    
}
});

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址