events.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import { getBrowser, getVideoId, numberFormat, cLog } from "./utils";
  2. import { checkForSignInButton, getButtons } from "./buttons";
  3. import {
  4. NEUTRAL_STATE,
  5. LIKED_STATE,
  6. DISLIKED_STATE,
  7. setDislikes,
  8. extConfig,
  9. storedData,
  10. setLikes,
  11. } from "./state";
  12. import { createRateBar } from "./bar";
  13. function sendVote(vote) {
  14. if (extConfig.disableVoteSubmission !== true) {
  15. getBrowser().runtime.sendMessage({
  16. message: "send_vote",
  17. vote: vote,
  18. videoId: getVideoId(window.location.href),
  19. });
  20. }
  21. }
  22. function sendVideoIds() {
  23. let links = Array.from(
  24. document.getElementsByClassName(
  25. "yt-simple-endpoint ytd-compact-video-renderer"
  26. )
  27. ).concat(
  28. Array.from(
  29. document.getElementsByClassName("yt-simple-endpoint ytd-thumbnail")
  30. )
  31. );
  32. // Also try mobile
  33. if (links.length < 1)
  34. links = Array.from(
  35. document.querySelectorAll(
  36. ".large-media-item-metadata > a, a.large-media-item-thumbnail-container"
  37. )
  38. );
  39. const ids = links
  40. .filter((x) => x.href && x.href.indexOf("/watch?v=") > 0)
  41. .map((x) => getVideoId(x.href));
  42. getBrowser().runtime.sendMessage({
  43. message: "send_links",
  44. videoIds: ids,
  45. });
  46. }
  47. function likeClicked() {
  48. if (checkForSignInButton() === false) {
  49. if (storedData.previousState === DISLIKED_STATE) {
  50. sendVote(1);
  51. if (storedData.dislikes > 0) storedData.dislikes--;
  52. storedData.likes++;
  53. createRateBar(storedData.likes, storedData.dislikes);
  54. setDislikes(numberFormat(storedData.dislikes));
  55. storedData.previousState = LIKED_STATE;
  56. } else if (storedData.previousState === NEUTRAL_STATE) {
  57. sendVote(1);
  58. storedData.likes++;
  59. createRateBar(storedData.likes, storedData.dislikes);
  60. storedData.previousState = LIKED_STATE;
  61. } else if ((storedData.previousState = LIKED_STATE)) {
  62. sendVote(0);
  63. if (storedData.likes > 0) storedData.likes--;
  64. createRateBar(storedData.likes, storedData.dislikes);
  65. storedData.previousState = NEUTRAL_STATE;
  66. }
  67. }
  68. }
  69. function dislikeClicked() {
  70. if (checkForSignInButton() == false) {
  71. if (storedData.previousState === NEUTRAL_STATE) {
  72. sendVote(-1);
  73. storedData.dislikes++;
  74. setDislikes(numberFormat(storedData.dislikes));
  75. createRateBar(storedData.likes, storedData.dislikes);
  76. storedData.previousState = DISLIKED_STATE;
  77. } else if (storedData.previousState === DISLIKED_STATE) {
  78. sendVote(0);
  79. if (storedData.dislikes > 0) storedData.dislikes--;
  80. setDislikes(numberFormat(storedData.dislikes));
  81. createRateBar(storedData.likes, storedData.dislikes);
  82. storedData.previousState = NEUTRAL_STATE;
  83. } else if (storedData.previousState === LIKED_STATE) {
  84. sendVote(-1);
  85. if (storedData.likes > 0) storedData.likes--;
  86. storedData.dislikes++;
  87. setDislikes(numberFormat(storedData.dislikes));
  88. createRateBar(storedData.likes, storedData.dislikes);
  89. storedData.previousState = DISLIKED_STATE;
  90. }
  91. }
  92. }
  93. function addLikeDislikeEventListener() {
  94. const buttons = getButtons();
  95. if (!window.returnDislikeButtonlistenersSet) {
  96. buttons.children[0].addEventListener("click", likeClicked);
  97. buttons.children[1].addEventListener("click", dislikeClicked);
  98. window.returnDislikeButtonlistenersSet = true;
  99. }
  100. }
  101. function storageChangeHandler(changes, area) {
  102. if (changes.disableVoteSubmission !== undefined) {
  103. handleDisableVoteSubmissionChangeEvent(
  104. changes.disableVoteSubmission.newValue
  105. );
  106. }
  107. }
  108. function handleDisableVoteSubmissionChangeEvent(value) {
  109. extConfig.disableVoteSubmission = value;
  110. }
  111. export {
  112. sendVote,
  113. sendVideoIds,
  114. likeClicked,
  115. dislikeClicked,
  116. addLikeDislikeEventListener,
  117. storageChangeHandler,
  118. };