YouTube Restore Dislike Counters

A userscript to restore the dislike counts on YouTube. Not 100% accurate all the time, but stil pretty accurate.

当前为 2021-12-12 提交的版本,查看 最新版本

// ==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       Kyle Boyd
// @match        *://www.youtube.com/*
// @run_at       document_start
// @namespace https://greasyfork.org/users/826218
// ==/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);