// ==UserScript== // @name YouTube Restore Dislike Counters // @version 1.0.0 // @description A userscript to restore the dislike counts on YouTube. Not 100% accurate all the time, but stil pretty accurate. // @author syndiate // @match *://www.youtube.com/* // @run_at document_start // ==/UserScript== function numberWithCommas(x) { return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } async function waitForElm(s) { while (!document.querySelector(s)) { await new Promise(r => requestAnimationFrame(r)) } return; } async function init() { try { var data = document.querySelector("ytd-app").data; for (p = 0; p < data.response.contents.twoColumnWatchNextResults.results.results.contents.length; p++) { if (typeof data.response.contents.twoColumnWatchNextResults.results.results.contents[p].videoPrimaryInfoRenderer != 'undefined') { var vidroot = data.response.contents.twoColumnWatchNextResults.results.results.contents[p]; } } if (vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer.isToggled) { var l = parseInt(vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer.toggledText.accessibility.accessibilityData.label.replace(/( likes|,)/g, "")); } else { var l = parseInt(vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer.defaultText.accessibility.accessibilityData.label.replace(/( likes|,)/g, "")); } var r = data.playerResponse.videoDetails.averageRating; function calculateDislikes(l, r) { var d = Math.round(l*((5-r)/(r-1))); return d; } if (r != 0) { var dislikes = await calculateDislikes(l, r); } else { var dislikes = 0; } var dislikesfin = numberWithCommas(dislikes) var likesfin = numberWithCommas(l); // added bonus if (r != 0) { document.querySelector("yt-formatted-string#text.ytd-toggle-button-renderer").innerHTML = likesfin; } else { document.querySelector("yt-formatted-string#text.ytd-toggle-button-renderer").innerHTML = "0"; } document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].innerHTML = dislikesfin; var sentimentPercent = 100/(1+(5-r)/(r-1)); document.querySelector("ytd-sentiment-bar-renderer").removeAttribute("hidden"); document.getElementById("like-bar").setAttribute("style", "width: " + sentimentPercent + "%;"); } catch(e) {}; } waitForElm("yt-formatted-string#text.ytd-toggle-button-renderer").then(() => init()); window.addEventListener('yt-page-data-updated', init, false);