NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name IMDb user reviews pages - ten star ratings // @namespace darkred // @version 2018.4.30 // @description In IMDb user reviews pages, display the ratings with 10 stars, instead of just 1 // @author darkred // @license MIT // @match https://www.imdb.com/title/*/reviews* // @grant GM_addStyle // @supportURL https://github.com/darkred/Userscripts/issues // ==/UserScript== // Example: // rating = 9 // is displayed as: // 1 star + 9/10 text // // Therefore: (1 existing +) 8 more stars needed // and, if element is larger than 9, i.e. >9, i.e. 10th then blacken it const fillColor = ['#e8e7e7', '#e6e5e5']; // default (almost white --> a bit darker) // const fillColor = ['#2b2b2b', '#2f2f2f']; // for use with a dark style function addStars(){ let stars = document.querySelectorAll('.ipl-star-icon'); for (let i = 0; i < stars.length; i++) { if (stars[i].parentNode.children.length !== 12) { // if not already 10-star (+ 2 elements) let rating = Number(stars[i].nextElementSibling.textContent); for (let j = 0; j < 9; j++) { // 9 more stars to each line let clone = stars[i].cloneNode(true); stars[i].parentNode.insertBefore(clone, stars[i].nextSibling); // https://stackoverflow.com/questions/11117519/inserting-a-clone-after-the-original } for (let j = 0; j < 10; j++) { if (j > rating-1 ) { if (i % 2 === 0){ // https://stackoverflow.com/a/12984254 (odd/even iterations of the loop) stars[i].parentNode.children[j].children[1].setAttribute('style', 'fill:' + fillColor[0] + ';'); // for use with this style: https://userstyles.org/styles/98447/imdb-com-nightmode ---> OK } else { stars[i].parentNode.children[j].children[1].setAttribute('style', 'fill:' + fillColor[1] + ';'); // for use with this style: https://userstyles.org/styles/98447/imdb-com-nightmode ---> OK } } } } } } let CSS = ` svg.ipl-star-icon { height: 18px; width: 18px; vertical-align: middle !important; } `; GM_addStyle(CSS); addStars(); var observer = new MutationObserver(function() { addStars(); }).observe(document.querySelector('div.lister-list'), // target of the observer: the "pics" area element, with rows that contain 3 pics each (watching for 'row' element additions) { // attributes: true, childList: true, // characterData: true, // subtree: true, }); // config of the observer