Guest User

Untitled

a guest
Nov 15th, 2021
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. // ==UserScript==
  2. // @name YouTube Restore Dislike Counters
  3. // @version 1.0.0
  4. // @description A userscript to restore the dislike counts on YouTube. Not 100% accurate all the time, but stil pretty accurate.
  5. // @author syndiate
  6. // @match *://www.youtube.com/*
  7. // @run_at document_start
  8. // ==/UserScript==
  9.  
  10.  
  11. //-----------------------------------------------------------------------------
  12. // Tools
  13. //-----------------------------------------------------------------------------
  14.  
  15. async function waitForElm(s) {
  16. while (!document.querySelector(s)) {
  17. await new Promise(r => requestAnimationFrame(r))
  18. }
  19. return;
  20. }
  21.  
  22. function FormatNumber(num) {
  23. if (num >= 1000000000) {
  24. return (num / 1000000000).toFixed(1).replace(/\.0$/, '') + 'B';
  25. }
  26. if (num >= 1000000) {
  27. return (num / 1000000).toFixed(1).replace(/\.0$/, '') + 'M';
  28. }
  29. if (num >= 1000) {
  30. return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'K';
  31. }
  32. return num;
  33. }
  34.  
  35.  
  36. //-----------------------------------------------------------------------------
  37. // Return system
  38. //-----------------------------------------------------------------------------
  39.  
  40. function SetStatisticInfo()
  41. {
  42. var data = document.querySelector("ytd-app").data;
  43. var vidroot = null;
  44. for (var i = 0; i < data.response.contents.twoColumnWatchNextResults.results.results.contents.length; i++)
  45. if (typeof data.response.contents.twoColumnWatchNextResults.results.results.contents[i].videoPrimaryInfoRenderer != 'undefined')
  46. vidroot = data.response.contents.twoColumnWatchNextResults.results.results.contents[i];
  47.  
  48. var ratio = data.playerResponse.videoDetails.averageRating;
  49. if (!ratio)
  50. return;
  51.  
  52. // Calculate
  53. var likes = parseInt(vidroot.videoPrimaryInfoRenderer.videoActions.menuRenderer.topLevelButtons[0].toggleButtonRenderer.toggledText.accessibility.accessibilityData.label.replace(/[^\d]/g,'')) - 1;
  54. //if (document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[0].parentNode.parentNode.children[0].children[0].children[0].getAttribute("aria-pressed") == "true")
  55. // likes++; // Is we putted like?
  56. var dislikes = Math.round(likes * ((5 - ratio) / (ratio - 1)));
  57. //if (document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].parentNode.parentNode.children[0].children[0].children[0].getAttribute("aria-pressed") == "true")
  58. // dislikes++; // Is we putted dislike?
  59.  
  60. // Modify score
  61. document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[0].innerHTML = FormatNumber(likes.toString());
  62. document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].innerHTML = FormatNumber(dislikes.toString());
  63.  
  64. // Modify ratio
  65. var sentimentPercent = parseInt((((likes / (likes + dislikes)) * 100 * 100) / 100)).toString();
  66. document.querySelector("ytd-sentiment-bar-renderer").removeAttribute("hidden");
  67. document.getElementById("like-bar").setAttribute("style", "width: " + sentimentPercent + "%;");
  68. document.getElementById("sentiment").setAttribute("style", "width: " +
  69. String(document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[0].parentElement.getBoundingClientRect().width +
  70. document.querySelectorAll("yt-formatted-string#text.ytd-toggle-button-renderer")[1].parentElement.getBoundingClientRect().width + 12) +
  71. "px;");
  72.  
  73. }
  74.  
  75. function Init()
  76. {
  77. SetStatisticInfo();
  78.  
  79. // To fix value on "like" press
  80. document.querySelectorAll("ytd-toggle-button-renderer")[0].parentNode.addEventListener('click', SetStatisticInfo);
  81. }
  82.  
  83.  
  84. //-----------------------------------------------------------------------------
  85. // Init
  86. //-----------------------------------------------------------------------------
  87.  
  88. waitForElm("yt-formatted-string#text.ytd-toggle-button-renderer").then(() => Init());
  89. window.addEventListener('yt-page-data-updated', Init, false);
  90. //window.addEventListener('yt-navigate-finish', SetStatisticInfo, false);
Advertisement
Add Comment
Please, Sign In to add comment