// ==UserScript== // @name IMDb details page links // @namespace IMDb.com // @description Adds some links to IMDb details page // @include *imdb.com/title/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jqModal/1.3.0/jqModal.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @grant GM_addStyle // @version 2.5.1 // @downloadURL https://update.greasyfork.icu/scripts/11618/IMDb%20details%20page%20links.user.js // @updateURL https://update.greasyfork.icu/scripts/11618/IMDb%20details%20page%20links.meta.js // ==/UserScript== // CHANGELOG // 2.5.1 - Fix for reference view // 2.5 - Fix for new layout // 2.4 - Fix TV episode pages // 2.3.2 - Fix new reference view // 2.3.1 - Fix TV episode pages // 2.3 - Fix for new layout // 2.2.1 - Change UI to fit in new IMDb layout // 2.2 - Add {alttitle} // 2.1.2 - Replace # with example.com to prevent my movies enhancer // from highlighting the delete and up/down links // 2.1.1 - Use JSON instead of eval // 2.1 - Add up/down for editing sites // 2.0 - Make links modifiable // 1.1 - Update URLs // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim if(!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g,''); }; } function defaultSites() { return [{title:"Google", url:"http://www.google.com/search?q={title} {year}"}, {title:"Subtitles", url:"http://www.google.com/search?q={title} {year} subtitles"}, {title:"YouTube", url:"http://www.youtube.com/results?search_query={title} {year}"}, {title:"iCheckMovies", url:"http://www.icheckmovies.com/search/movies/?query={imdbid}"}, {title:"RottenTomatoes", url:"http://www.rottentomatoes.com/search/?search={title}"}, {title:"HDBits", url:"http://hdbits.org/browse2.php#film/dir=null&searchtype=film&actorfilm=film&search={imdbid}"}, {title:"AsianDVDClub", url:"http://asiandvdclub.org/browse.php?search={imdbid}&descr=1"}, {title:"PassThePopCorn", url:"http://passthepopcorn.me/torrents.php?searchstr={imdbid}"}, {title:"KaraGarga", url:"http://karagarga.in/browse.php?incldead=&d=&sort=&search={imdbidn}&search_type=imdb"}, {title:"Cinemageddon", url:"http://cinemageddon.net/browse.php?search={imdbid}&proj=0"}, {title:"AsiaTorrents", url:"https://avistaz.to/torrents?in=1&search={title}&tags=&type=0&language=0&subtitle=0&discount=0&rip_type=0&video_quality=0&tv_type=0&uploader="}, {title:"TehConnection", url:"http://tehconnection.eu/torrents.php?searchstr={title}"}, {title:"WhatTheMovie", url:"http://whatthemovie.com/search?t=movie&q={imdbid}"}, {title:"Mubi", url:"http://www.google.com/search?q=site:mubi.com {title} {year}"}, {title:"ListAL", url:"http://www.google.com/search?q=site:listal.com {title} {year}"}, {title:"HanCinema", url:"http://www.hancinema.net/googlesearch.php?cx=partner-pub-1612871806153672%3A2t41l1-gajp&cof=FORID%3A10&ie=ISO-8859-1&hl=en&q={title}"}, {title:"Criticker", url:"http://www.criticker.com/?st=movies&h={imdbid}&g=Go"}]; } const isReference = document.title.includes("Reference View"); console.log(isReference); function parseConstants() { console.log(document.title); if (document.title.length < 1) { return null; } let title = document.title.substring(0, document.title.length - 7); let rx = /(.*)\(.*?([0-9]{4}).*/g; let ms = rx.exec(document.title); if (ms !== null && ms.length) { return {title: encodeURIComponent(ms[1].trim()), year: ms[2], imdbid: window.location.href.match(/(tt[0-9]+)/)[0], imdbid_n: window.location.href.match(/(tt[0-9]+)/)[0].replace("tt", "")}; //alttitle: encodeURIComponent(alt_title)}; } return null; } var App = { links: [], init: function() { App.buildLinks(); // Add modal if (isReference ) { GM_addStyle("#linkbar { width:600px; margin-left: 0px; } #linkbar a { color: #136CB2; }"); } else { GM_addStyle("#linkbar { width:800px; margin-left: 23px; } #linkbar a { color: #fff; }"); } GM_addStyle('.jqmWindow {display: none; position: absolute; font-family: verdana, arial, sans-serif; ' + 'background-color:#fff; color:#000; padding: 12px 30px; overflow-y: scroll; font-size: 14px} .jqmOverlay { background-color:#000 }'); var cfgMainHtml = '
'; $(cfgMainHtml).css({ top: '17%', left: '50%', marginLeft: '-425px', width: '850px', height: '450px' }).appendTo('body'); $('#dialog').jqm(); }, buildLinks: function() { var sites = GM_getValue("sites"); if(sites !== undefined && sites !== null) { sites = JSON.parse(sites); } else { GM_setValue("sites", JSON.stringify(defaultSites())); sites = defaultSites(); } var $root = isReference ? document.querySelector("#main > section > section > div") : document.querySelectorAll("section")[4]; //$root.css("position", "relative"); $("#linkbar").remove(); var $c = $(""); $c.attr("id", "linkbar"); $c.css({display: "flex", flexFlow: "row wrap", role: "presentation"}); if (isReference) { $root.append(document.createElement("hr")); } $root.append($c[0]); // Render sites for(var i = 0; i < sites.length; ++i) { App.addSite(sites[i]); } }, addSite: function(site) { var c = parseConstants(); if (c === null) { return; } var url = site.url.replace("{title}", c.title) .replace("{year}", c.year) .replace("{imdbid}", c.imdbid) .replace("{imdbidn}", c.imdbid_n); var $root = $("#linkbar"); var $link = $(""); $link.attr("href", url); $link.text(site.title); let $article = $(""); if (isReference) { $article.css({width: "150px"}); } else { $article.css({width: "200px"}); } $article.append($link); $root.append($article); }, displayEditor: function() { var sites = GM_getValue("sites"); if(sites !== undefined) { sites = JSON.parse(sites); } var c = parseConstants(); var out = `{title} = ${c.title}
{year} = ${c.year}
{imdbid} = ${c.imdbid}
{imdbidn} = ${c.imdbid_n}
Delete | Up | Down |
'; $("#dialog").html(out); $("#dialog").jqmShow(); $("#dialog").on("change input paste", "tr[class^=site] input", App.saveEditor); $("#dialog").on("click", "a.delete", function(e){ e.preventDefault(); var response = window.confirm("Delete?"); if(!response) { return; } $(this).parent().parent().remove(); App.saveEditor(); }); $("#dialog").on("click", "a.up, a.down", function(e) { e.preventDefault(); var $t = $(this); var $parent = $t.parent().parent(); if($t.is(".up")) { $parent.insertBefore($parent.prev()); } else { $parent.insertAfter($parent.next()); } App.saveEditor(); }); $("#add", "#dialog").on("click", function() { var $table = $("table", "#dialog"); $table.append(addRow($table.find("tr").length, '', '')); }); $("#restore", "#dialog").on("click", function() { var response = window.confirm("Restore defaults? (This will remove all links!)"); if(!response) { return; } GM_setValue("sites", JSON.stringify(defaultSites())); App.buildLinks(); $("#dialog").jqmHide(); }); }, saveEditor: function() { // Save result var $rows = $("tr", "#dialog"); var mapped = $rows.map(function(index, elem){ var $fields = $(elem).find("input"); return {title: $fields.eq(0).val(), url: $fields.eq(1).val()}; }); GM_setValue("sites", JSON.stringify(mapped.get())); App.buildLinks(); } }; $(document).ready(() => { setTimeout(App.init, 500); }); GM_registerMenuCommand("Edit sites", App.displayEditor);