bar.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { getButtons, getDislikeButton, getLikeButton } from './buttons';
  2. import {
  3. extConfig,
  4. isMobile,
  5. isLikesDisabled,
  6. isNewDesign,
  7. isShorts,
  8. } from "./state";
  9. import { cLog, getColorFromTheme } from "./utils";
  10. function createRateBar(likes, dislikes) {
  11. if (!isLikesDisabled()) {
  12. let rateBar = document.getElementById("ryd-bar-container");
  13. const widthPx =
  14. getLikeButton().clientWidth +
  15. getDislikeButton().clientWidth +
  16. 8;
  17. const widthPercent =
  18. likes + dislikes > 0 ? (likes / (likes + dislikes)) * 100 : 50;
  19. var likePercentage = parseFloat(widthPercent.toFixed(1));
  20. const dislikePercentage = (100 - likePercentage).toLocaleString();
  21. likePercentage = likePercentage.toLocaleString();
  22. if (extConfig.showTooltipPercentage) {
  23. var tooltipInnerHTML;
  24. switch (extConfig.tooltipPercentageMode) {
  25. case "dash_dislike":
  26. tooltipInnerHTML = `${likes.toLocaleString()} / ${dislikes.toLocaleString()}  -  ${dislikePercentage}%`;
  27. break;
  28. case "both":
  29. tooltipInnerHTML = `${likePercentage}% / ${dislikePercentage}%`;
  30. break;
  31. case "only_like":
  32. tooltipInnerHTML = `${likePercentage}%`;
  33. break;
  34. case "only_dislike":
  35. tooltipInnerHTML = `${dislikePercentage}%`;
  36. break;
  37. default: // dash_like
  38. tooltipInnerHTML = `${likes.toLocaleString()} / ${dislikes.toLocaleString()}  -  ${likePercentage}%`;
  39. }
  40. } else {
  41. tooltipInnerHTML = `${likes.toLocaleString()} / ${dislikes.toLocaleString()}`;
  42. }
  43. if (!isShorts()) {
  44. if (!rateBar && !isMobile()) {
  45. let colorLikeStyle = "";
  46. let colorDislikeStyle = "";
  47. if (extConfig.coloredBar) {
  48. colorLikeStyle = "; background-color: " + getColorFromTheme(true);
  49. colorDislikeStyle = "; background-color: " + getColorFromTheme(false);
  50. }
  51. (
  52. document.getElementById(
  53. isNewDesign() ? "actions-inner" : "menu-container"
  54. ) || document.querySelector("ytm-slim-video-action-bar-renderer")
  55. ).insertAdjacentHTML(
  56. "beforeend",
  57. `
  58. <div class="ryd-tooltip" style="width: ${widthPx}px${
  59. isNewDesign() ? "; margin-bottom: -2px" : ""
  60. }">
  61. <div class="ryd-tooltip-bar-container">
  62. <div
  63. id="ryd-bar-container"
  64. style="width: 100%; height: 2px;${colorDislikeStyle}"
  65. >
  66. <div
  67. id="ryd-bar"
  68. style="width: ${widthPercent}%; height: 100%${colorLikeStyle}"
  69. ></div>
  70. </div>
  71. </div>
  72. <tp-yt-paper-tooltip position="top" id="ryd-dislike-tooltip" class="style-scope ytd-sentiment-bar-renderer" role="tooltip" tabindex="-1">
  73. <!--css-build:shady-->${tooltipInnerHTML}
  74. </tp-yt-paper-tooltip>
  75. </div>
  76. `
  77. );
  78. // Add border between info and comments
  79. if (isNewDesign()) {
  80. let descriptionAndActionsElement = document.getElementById("top-row");
  81. descriptionAndActionsElement.style.borderBottom =
  82. "1px solid var(--yt-spec-10-percent-layer)";
  83. descriptionAndActionsElement.style.paddingBottom = "10px";
  84. }
  85. } else {
  86. document.getElementById("ryd-bar-container").style.width =
  87. widthPx + "px";
  88. document.getElementById("ryd-bar").style.width = widthPercent + "%";
  89. document.querySelector("#ryd-dislike-tooltip > #tooltip").innerHTML =
  90. tooltipInnerHTML;
  91. if (extConfig.coloredBar) {
  92. document.getElementById("ryd-bar-container").style.backgroundColor =
  93. getColorFromTheme(false);
  94. document.getElementById("ryd-bar").style.backgroundColor =
  95. getColorFromTheme(true);
  96. }
  97. }
  98. }
  99. } else {
  100. cLog("removing bar");
  101. let ratebar = document.getElementById("ryd-bar-container");
  102. if (ratebar) {
  103. ratebar.parentNode.removeChild(ratebar);
  104. }
  105. }
  106. }
  107. export { createRateBar };