A userscript to restore the dislike counts on YouTube. Not 100% accurate all the time, but stil pretty accurate.
目前為
// ==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);