NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name IMDb - Clutter-less // @description Remove junk from IMDb pages, such as a footer, recommendations, or images and ads in the sidebar. // @namespace https://openuserjs.org/users/monk-time // @author monk-time // @copyright 2017, monk-time (https://github.com/monk-time) // @license MIT; https://opensource.org/licenses/MIT // @homepageURL https://openuserjs.org/scripts/monk-time/IMDb_-_Clutter-less // @updateURL https://openuserjs.org/meta/monk-time/IMDb_-_Clutter-less.meta.js // @include http://*.imdb.com/* // @include https://*.imdb.com/* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js // @icon https://ia.media-imdb.com/images/G/01/imdb/images/favicon-2165806970.ico // @version 1.0.3 // ==/UserScript== 'use strict'; const globalElements = { shareButton: '.titleOverviewShareButton', watchlistButton: '.wlb-title-main-details', // Redundant button below a title description recommendations: '#titleRecs', videosPhotos: '#titleVideoStrip, #titleImageStrip', castPhotos: '.cast_list .primary_photo', contribute: '.contribute', recentlyViewed: '#rvi-div', footer: '#footer', }; const sidebarBlocksGood = [ 'Related News', 'User Lists', 'User Polls', 'Quick Links', 'Projects In Development', 'How Much Have You Seen?', 'Top-Rated Episodes', ]; const sidebarBlocksWithImgs = ['User Lists', 'User Polls']; const $main = $('body #root'); const reMovie = /imdb\.com\/title\/tt\d+/; const reName = /imdb\.com\/name\/nm\d+/; const [isOnMoviePage, isOnNamePage] = [reMovie, reName] .map(re => re.test(document.location.href)); const actions = { hideGlobalElements() { for (const elem of Object.keys(globalElements)) { $main.find(globalElements[elem]).remove(); } // an ad outside of $main $('#flashContent').remove(); // IMDbPro button with a separator $main.find('.quicklink:contains("IMDbPro")').next().addBack().remove(); // ad-like sections $main .find('.widget_header h3:contains("Comic-Con"), .pri_image') .parents('.article') .remove(); }, compactSidebar() { if (!isOnMoviePage && !isOnNamePage) { return; } const $blocks = $main .find('#sidebar, #maindetails_sidebar_bottom') // new-style, old-style .children(); const getHeader = el => $(el).find('h3').text().trim(); const isHeaderInGroup = (el, group) => group.includes(getHeader(el)); const isGood = el => isHeaderInGroup(el, sidebarBlocksGood); const hasImgs = el => isHeaderInGroup(el, sidebarBlocksWithImgs); // remove all extra blocks $blocks .filter((_, el) => !isGood(el)) .remove(); // remove useless list images $blocks .filter((_, el) => hasImgs(el)) .find('a > img[alt="list image"], a > img[alt="poll image"]') .parent() .hide() // can't chain after remove() (end() is unwieldy here) .parent('div') // only 'User Lists' .siblings() .css('margin-left', '4px'); }, }; for (const key of Object.keys(actions)) { actions[key](); } console.log('IMDb has been cleaned up!');