// ==UserScript== // @name CSFD Movie Preview // @namespace http://csfd.cz // @description Při najetí myší na odkaz na film se zobrazí náhled jeho profilu. // @match http://www.csfd.cz/* // @match https://www.csfd.cz/* // @exclude http://www.csfd.cz/uzivatel/*/profile-edit/ // @exclude https://www.csfd.cz/uzivatel/*/profile-edit/ // @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js // @grant GM_registerMenuCommand // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @version 1.3 // @downloadURL none // ==/UserScript== // CHANGES // ------- // 1.3 - upravena hlavička skriptu kvůli přechodu ČSFD na https // 1.2 - doplněna podpora dynamicky přidávaných odkazů // 1.1 - výměna jQuery.ajax(), který ve Firefoxu přestal fungovat, za GM_xmlhttpRequest() // 1.0 - první verze $ = this.jQuery = jQuery.noConflict(true); $('
').appendTo('body'); var cacheExpires = 7; // days var doPrefetch = false; var movieBox = $('div#movie-preview'); var movieBoxPoster = movieBox.find('#movie-preview-poster'); var movieBoxContent = movieBox.find('#movie-preview-content'); var movieLinkSelector = 'a[href*="/film/"], a[href*="/film.php"]'; var thisPageMovieId = parseMovieId(window.location.href); var currentMovieId = null; var movies = []; var timerId = -1; // Greasmonkey-only section start if (typeof GM_registerMenuCommand == 'function' && isStorageSupported()) { doPrefetch = GM_getValue("doPrefetch", false); GM_registerMenuCommand("Přepnout automatické nahrávání náhledů filmů", function() { doPrefetch = !GM_getValue("doPrefetch", false); GM_setValue("doPrefetch", doPrefetch); alert("Automatické nahrávání náhledů filmů " + (doPrefetch? "zapnuto": "vypnuto") + ".\nZměna nastavení se projeví po obnovení stránky."); }); } // Greasmonkey-only section end function isStorageSupported() { return typeof(Storage) !== void(0); } function parseMovieId(movieURL) { var match = movieURL.match(/\/film(?:\.php\?|\/)([\d]+)/); return match && match.length >= 2? 'm' + match[1]: null; } function getDiffDays(date1, date2) { return Math.round(Math.abs(date1 - date2) / (1000 * 3600 * 24)); } var storage = isStorageSupported()? { // local storage getStoredItem: function(movieURL) { return localStorage[parseMovieId(movieURL)]; }, setStoredItem: function(movieURL, value) { try { localStorage[parseMovieId(movieURL)] = value; } catch (ex) { // "Persistent storage maximum size reached" -> remove 10 random items for (i=0; i < 10; i++) { var index = Math.floor(Math.random() * localStorage.length); var key = localStorage.key(index); localStorage.removeItem(key); } return this.setStoredItem(movieURL, value); } }, cleanExpiredData: function() { var lastCleanup = localStorage["last-cleanup"]? Date.parse(localStorage["last-cleanup"]): new Date(0); // run cleanup only once per day if (getDiffDays(new Date(), lastCleanup) < 1) return; for(var key in localStorage) { if (key.match(/m\d+/)) { var cached = JSON.parse(localStorage[key]); if (getDiffDays(new Date(), Date.parse(cached.timestamp)) > cacheExpires) { localStorage.removeItem(key); } } } localStorage["last-cleanup"] = new Date(); } }: { // dummy storage getStoredItem: function(movieURL) { return null; }, setStoredItem: function(movieURL, value) { // noop }, cleanExpiredData: function() { // noop } }; function getMovieBoxPosition(event) { var boxWidth = movieBox.width() + 10; var tPosX = boxWidth - event.clientX + 30 > 0? event.pageX + 30: event.pageX - boxWidth - 30; var tPosY = event.pageY + event.clientY; if (event.clientY > 30) { var winHeight = $(window).height(); var boxHeight = movieBox.height() > winHeight? winHeight - 60: movieBox.height(); var overflowY = event.clientY + boxHeight - winHeight; tPosY = overflowY > 0? event.pageY - overflowY - 50: event.pageY - 30; } return { X: tPosX, Y: tPosY }; } function showMovieBox(event, profile, rating) { var poster = profile.find("#poster img"); var title = "