NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Rotten Tomatoes Decimal Rating // @namespace darkred // @version 7 // @date 2023.6.3 // @description Changes base-5 Rating of Rotten Tomatoes to base-10 // @author wOxxOm, darkred // @license MIT // @match https://*.rottentomatoes.com/* // @grant none // @supportURL https://github.com/darkred/Userscripts/issues // ==/UserScript== // Example URLs: // https://www.rottentomatoes.com/m/birds_of_prey_2020 // https://www.rottentomatoes.com/m/toy_story_3 function modifyaudienceScoreStars(audienceScoreStars){ if (!audienceScoreStars.textContent.includes('NaN') && audienceScoreStars.textContent.includes('out of 5') ) { audienceScoreStars.textContent = audienceScoreStars.textContent.replace('out of 5',''); audienceScoreStars.textContent *= 2; audienceScoreStars.textContent += ' out of 10'; } } function audienceScorex2(){ // 'Score Details' card | 'AUDIENCE' > average rating" score --> Multiply x2 let audienceScoreStars = document.querySelector('score-details-audience').shadowRoot.querySelector('star-rating').shadowRoot.querySelector('.average-stars'); modifyaudienceScoreStars(audienceScoreStars); // Select the node that will be observed for mutations const targetNode = audienceScoreStars; // Options for the observer (which mutations to observe) const config = { // attributes: true , childList: true , // subtree: true, // characterData: true }; // Callback function to execute when mutations are observed const callback = mutations => { mutations.forEach(function(mutation) { observer.disconnect(); modifyaudienceScoreStars(audienceScoreStars); }); }; // Create an observer instance linked to the callback function const observer = new MutationObserver(callback); // Start observing the target node for configured mutations observer.observe(targetNode, config); } let scoreBoard = document.querySelector('score-board'); scoreBoard.onclick = function(event) { // let target = event.target; audienceScorex2(); let buttonVerifiedAudience = document.querySelector('#topSection > div.thumbnail-scoreboard-wrap > overlay-base > score-details > score-details-audience > filter-chip:nth-child(2)'); let buttonAllAudience = document.querySelector('#topSection > div.thumbnail-scoreboard-wrap > overlay-base > score-details > score-details-audience > filter-chip:nth-child(3)'); [ buttonVerifiedAudience, buttonAllAudience ].forEach(function(element) { if (element) { element.addEventListener('click', function() { audienceScorex2(); }); } }); // the '?' buttons for the two descriptive texts let buttonQuestionmarkTomatometer = document.querySelector('#topSection > div.thumbnail-scoreboard-wrap > overlay-base > score-details > score-details-critics > tool-tip'); let buttonQuestionmarkAudienceScore = document.querySelector('#topSection > div.thumbnail-scoreboard-wrap > overlay-base > score-details > score-details-audience > tool-tip'); buttonQuestionmarkTomatometer.addEventListener('click', function(){ let descriptiveTextTomatometer = document.querySelector('#topSection > div.thumbnail-scoreboard-wrap > overlay-base > score-details > score-details-critics > tool-tip').shadowRoot.querySelector('.description'); if (!descriptiveTextTomatometer.textContent.includes('review (6 stars or higher)')) { descriptiveTextTomatometer.innerHTML = descriptiveTextTomatometer.innerHTML.replace('review', 'review (6 stars or higher)'); } }); buttonQuestionmarkAudienceScore.addEventListener('click', function(){ // There are now two occurrences of '3.5 stars or higher' in the AUDIENCE descriptive text overlay, hence the querySelectorAll() let descriptiveTextAudienceScode = document.querySelector('#topSection > div.thumbnail-scoreboard-wrap > overlay-base > score-details > score-details-audience > tool-tip').shadowRoot.querySelectorAll('.description'); /* descriptiveTextAudienceScode.innerHTML = descriptiveTextAudienceScode.innerHTML.replace(/([\d.]+)( stars)/g, function (m, s1, s2) { return 2 * s1 + s2; }); */ descriptiveTextAudienceScode.forEach((el) => { if (!el.textContent.includes('7 stars or higher')) { el.innerHTML = el.innerHTML.replace('3.5 stars or higher', '7 stars or higher'); } }); }); };