Advertisement
Guest User

Untitled

a guest
Dec 1st, 2021
640
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Restore Youtube Dislikes
  3. // @version 1.1.0
  4. // @description A userscript to restore the dislike counts on YouTube. Not 100% accurate all the time, but stil pretty accurate.
  5. // @author Original Creator: syndiate; Improved and recoded by aidanwd
  6. // @match *://www.youtube.com/*
  7. // @run_at document_start
  8. // ==/UserScript==
  9. function abbreviateNumber(num) {
  10. function abbv(toRound) {
  11. return (num / toRound).toFixed(1).replace(/\.0$/, '');
  12. }
  13. if (num >= 1000000000) {
  14. return abbv(1000000000) + 'B';
  15. }
  16. if (num >= 1000000) {
  17. return abbv(1000000) + 'M';
  18. }
  19. if (num >= 1000) {
  20. return abbv(1000) + 'K';
  21. }
  22. return num;
  23. }
  24.  
  25. async function waitForElm(s) {
  26. while (!document.querySelector(s)) {
  27. await new Promise(r => requestAnimationFrame(r))
  28. }
  29. return;
  30. }
  31.  
  32. function getVideoLikes(data) {
  33. var contents = data.response.contents.twoColumnWatchNextResults.results.results.contents;
  34. for (var p = 0; p < contents.length; p++) {
  35. if (typeof contents[p].videoPrimaryInfoRenderer != 'undefined') {
  36. var vidroot = data.response.contents.twoColumnWatchNextResults.results.results.contents[p];
  37. const toggleButtonRenderer = vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer;
  38. if (toggleButtonRenderer.isToggled) {
  39. return parseInt(toggleButtonRenderer.toggledText.accessibility.accessibilityData.label.replace(/( likes|,)/g, ""));
  40. } else {
  41. return parseInt(toggleButtonRenderer.defaultText.accessibility.accessibilityData.label.replace(/( likes|,)/g, ""));
  42. }
  43. }
  44. }
  45. }
  46. //the golden equation
  47. function calculateDislikes(l, r) {
  48. return r != 0 ? Math.round(l * ((5 - r) / (r - 1))) : 0;
  49. }
  50.  
  51. async function init() {
  52. try {
  53. const data = document.querySelector("ytd-app").data;
  54. const videoLikes = getVideoLikes(data);
  55. const videoRating = data.playerResponse.videoDetails.averageRating;
  56. const videoDislikes = calculateDislikes(videoLikes, videoRating);
  57. displayDislikes(abbreviateNumber(videoDislikes));
  58. displayRatio(videoLikes / (videoLikes + videoDislikes));
  59.  
  60. } catch (e) {};
  61.  
  62. }
  63. function displayDislikes(dislikes) {
  64. document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].innerHTML = dislikes;
  65.  
  66. //not sure why these are here, but keeping just in case its useful
  67. document.querySelector("yt-formatted-string#text.ytd-toggle-button-renderer").onmouseup = function() {
  68. document.querySelector("yt-formatted-string#text.ytd-toggle-button-renderer").innerHTML = "";
  69. }
  70. document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].onmouseup = function() {
  71. document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].innerHTML = "";
  72. }
  73. }
  74. function displayRatio(ratio) {
  75. const bar = document.querySelector("ytd-sentiment-bar-renderer");
  76. bar.removeAttribute("hidden");
  77. document.getElementById("like-bar").setAttribute("style", "width: " + (ratio * 100) + "%;");
  78. }
  79.  
  80. waitForElm("yt-formatted-string#text.ytd-toggle-button-renderer").then(() => init());
  81.  
  82. window.addEventListener('yt-page-data-updated', init, false);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement