events.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. buttons.children[0].addEventListener("touchstart", likeClicked);
  99. buttons.children[1].addEventListener("touchstart", dislikeClicked);
  100. window.returnDislikeButtonlistenersSet = true;
  101. }
  102. }
  103. function storageChangeHandler(changes, area) {
  104. if (changes.disableVoteSubmission !== undefined) {
  105. handleDisableVoteSubmissionChangeEvent(
  106. changes.disableVoteSubmission.newValue
  107. );
  108. }
  109. if (changes.coloredThumbs !== undefined) {
  110. handleColoredThumbsChangeEvent(changes.coloredThumbs.newValue);
  111. }
  112. if (changes.coloredBar !== undefined) {
  113. handleColoredBarChangeEvent(changes.coloredBar.newValue);
  114. }
  115. if (changes.colorTheme !== undefined) {
  116. handleColorThemeChangeEvent(changes.colorTheme.newValue);
  117. }
  118. if (changes.numberDisplayRoundDown !== undefined) {
  119. handleNumberDisplayRoundDownChangeEvent(
  120. changes.numberDisplayRoundDown.newValue
  121. );
  122. }
  123. if (changes.numberDisplayFormat !== undefined) {
  124. handleNumberDisplayFormatChangeEvent(changes.numberDisplayFormat.newValue);
  125. }
  126. }
  127. function handleDisableVoteSubmissionChangeEvent(value) {
  128. extConfig.disableVoteSubmission = value;
  129. }
  130. function handleColoredThumbsChangeEvent(value) {
  131. extConfig.coloredThumbs = value;
  132. }
  133. function handleColoredBarChangeEvent(value) {
  134. extConfig.coloredBar = value;
  135. }
  136. function handleColorThemeChangeEvent(value) {
  137. extConfig.colorTheme = value;
  138. }
  139. function handleNumberDisplayFormatChangeEvent(value) {
  140. extConfig.numberDisplayFormat = value;
  141. }
  142. function handleNumberDisplayRoundDownChangeEvent(value) {
  143. extConfig.numberDisplayRoundDown = value;
  144. }
  145. export {
  146. sendVote,
  147. sendVideoIds,
  148. likeClicked,
  149. dislikeClicked,
  150. addLikeDislikeEventListener,
  151. storageChangeHandler,
  152. };