Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Restore Youtube Dislikes
- // @version 1.1.0
- // @description A userscript to restore the dislike counts on YouTube. Not 100% accurate all the time, but stil pretty accurate.
- // @author Original Creator: syndiate; Improved and recoded by aidanwd
- // @match *://www.youtube.com/*
- // @run_at document_start
- // ==/UserScript==
- function abbreviateNumber(num) {
- function abbv(toRound) {
- return (num / toRound).toFixed(1).replace(/\.0$/, '');
- }
- if (num >= 1000000000) {
- return abbv(1000000000) + 'B';
- }
- if (num >= 1000000) {
- return abbv(1000000) + 'M';
- }
- if (num >= 1000) {
- return abbv(1000) + 'K';
- }
- return num;
- }
- async function waitForElm(s) {
- while (!document.querySelector(s)) {
- await new Promise(r => requestAnimationFrame(r))
- }
- return;
- }
- function getVideoLikes(data) {
- var contents = data.response.contents.twoColumnWatchNextResults.results.results.contents;
- for (var p = 0; p < contents.length; p++) {
- if (typeof contents[p].videoPrimaryInfoRenderer != 'undefined') {
- var vidroot = data.response.contents.twoColumnWatchNextResults.results.results.contents[p];
- const toggleButtonRenderer = vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer;
- if (toggleButtonRenderer.isToggled) {
- return parseInt(toggleButtonRenderer.toggledText.accessibility.accessibilityData.label.replace(/( likes|,)/g, ""));
- } else {
- return parseInt(toggleButtonRenderer.defaultText.accessibility.accessibilityData.label.replace(/( likes|,)/g, ""));
- }
- }
- }
- }
- //the golden equation
- function calculateDislikes(l, r) {
- return r != 0 ? Math.round(l * ((5 - r) / (r - 1))) : 0;
- }
- async function init() {
- try {
- const data = document.querySelector("ytd-app").data;
- const videoLikes = getVideoLikes(data);
- const videoRating = data.playerResponse.videoDetails.averageRating;
- const videoDislikes = calculateDislikes(videoLikes, videoRating);
- displayDislikes(abbreviateNumber(videoDislikes));
- displayRatio(videoLikes / (videoLikes + videoDislikes));
- } catch (e) {};
- }
- function displayDislikes(dislikes) {
- document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].innerHTML = dislikes;
- //not sure why these are here, but keeping just in case its useful
- 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 = "";
- }
- }
- function displayRatio(ratio) {
- const bar = document.querySelector("ytd-sentiment-bar-renderer");
- bar.removeAttribute("hidden");
- document.getElementById("like-bar").setAttribute("style", "width: " + (ratio * 100) + "%;");
- }
- waitForElm("yt-formatted-string#text.ytd-toggle-button-renderer").then(() => init());
- window.addEventListener('yt-page-data-updated', init, false);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement