Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name YouTube Restore Dislike Counters
- // @version 1.2.2
- // @description A userscript to restore the dislike counts on YouTube. Not 100% accurate all the time, but stil pretty accurate.
- // @author syndiate / me (bernd)
- // @match *://www.youtube.com/*
- // @run-at document-start
- // @downloadURL https://pastebin.com/raw/Vrz7efY7
- // @updateURL https://pastebin.com/raw/Vrz7efY7
- // ==/UserScript==
- ;(function (window, document, undefined) {
- var ButonRendererSelector = "yt-formatted-string#text.ytd-toggle-button-renderer";
- function numberWithCommas(num) {
- return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
- }
- async function waitForElm(ele) {
- while (!document.querySelector(ele))
- await new Promise(x => requestAnimationFrame(x));
- return;
- }
- async function init() {
- try {
- // Get Data (server data on likes/dislikes)
- var data = document.querySelector("ytd-app").data,
- topLevelButtonsData = data.response.contents.twoColumnWatchNextResults.results.results.contents.filter(obj => {
- return obj['videoPrimaryInfoRenderer'] !== void 0;
- }).at(-1).videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons,
- isToggledLike = topLevelButtonsData[0].toggleButtonRenderer.isToggled,
- isToggledDislike = topLevelButtonsData[1].toggleButtonRenderer.isToggled,
- likes = Number(topLevelButtonsData[0].toggleButtonRenderer[isToggledLike ? "toggledText" : "defaultText"].accessibility.accessibilityData.label.match(/^[\d\.\,]+/g)[0].replace(/[\.,]/g,'')),
- rating = data.playerResponse.videoDetails.averageRating,
- // Calculate remaining data
- dislikes = rating != 0 ? Math.round(likes * ((5 - rating) / (rating - 1))) : 0,
- sentimentPercent = (likes / (likes + dislikes)) * 100;
- // Update likes and dislikes buttons count
- var buttonRenderer = document.querySelectorAll(ButonRendererSelector);
- buttonRenderer[0].innerHTML = numberWithCommas(likes);
- buttonRenderer[1].innerHTML = numberWithCommas(dislikes);
- // Update sentiment bar
- document.querySelector("ytd-sentiment-bar-renderer").removeAttribute("hidden");
- document.getElementById("like-bar").setAttribute("style", "width: " + sentimentPercent + "%;");
- // When like/dislike buttons clicked
- const observer = new MutationObserver(function(mutationList, observer) {
- mutationList.forEach(function (mutation) {
- if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
- var isToggledLikeLive = buttonRenderer[0].classList.contains('style-default-active'),
- isToggledDislikeLive = buttonRenderer[1].classList.contains('style-default-active');
- buttonRenderer[0].innerHTML = numberWithCommas(likes - isToggledLike + isToggledLikeLive);
- buttonRenderer[1].innerHTML = numberWithCommas(dislikes - isToggledDislike + isToggledDislikeLive);
- }
- })
- });
- observer.observe(buttonRenderer[0], {attributes: true});
- observer.observe(buttonRenderer[1], {attributes: true});
- } catch (e) {};
- }
- window.addEventListener("DOMContentLoaded", function (event) {
- waitForElm(ButonRendererSelector).then(() => init());
- window.addEventListener('yt-page-data-updated', init, false);
- });
- })(window, document);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement