// ==UserScript== // @name YouTube Restore Dislike Counters // @version 1.0.2 // @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== /* Changelog 1.0.2 Changed RegEx to replace all non digit character with blank for international compatability */ 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 (var 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]; } } var l = 0 if (vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer.isToggled) { l = parseInt(vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer.toggledText.accessibility.accessibilityData.label.replaceAll(/[^0-9]+/g, "")); } else { l = parseInt(vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer.defaultText.accessibility.accessibilityData.label.replaceAll(/[^0-9]+/g, "")); } var r = data.playerResponse.videoDetails.averageRating; function calculateDislikes(l, r) { var d = Math.round(l*((5-r)/(r-1))); return d; } var dislikes = 0 if (r != 0) { dislikes = await calculateDislikes(l, r); } 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; document.querySelector("yt-formatted-string#text.ytd-toggle-button-renderer").onmouseup = function() { document.querySelector("yt-formatted-string#text.ytd-toggle-button-renderer").innerHTML = ""; } document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].onmouseup = function() { document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].innerHTML = ""; } var sentimentPercent = (l / (l + dislikes))*100; 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);