events.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. getLikeCountFromButton,
  12. } from "./state";
  13. import { createRateBar } from "./bar";
  14. function sendVote(vote) {
  15. if (extConfig.disableVoteSubmission !== true) {
  16. getBrowser().runtime.sendMessage({
  17. message: "send_vote",
  18. vote: vote,
  19. videoId: getVideoId(window.location.href),
  20. });
  21. }
  22. }
  23. function likeClicked() {
  24. if (checkForSignInButton() === false) {
  25. if (storedData.previousState === DISLIKED_STATE) {
  26. sendVote(1);
  27. if (storedData.dislikes > 0) storedData.dislikes--;
  28. storedData.likes++;
  29. createRateBar(storedData.likes, storedData.dislikes);
  30. setDislikes(numberFormat(storedData.dislikes));
  31. storedData.previousState = LIKED_STATE;
  32. } else if (storedData.previousState === NEUTRAL_STATE) {
  33. sendVote(1);
  34. storedData.likes++;
  35. createRateBar(storedData.likes, storedData.dislikes);
  36. storedData.previousState = LIKED_STATE;
  37. } else if ((storedData.previousState = LIKED_STATE)) {
  38. sendVote(0);
  39. if (storedData.likes > 0) storedData.likes--;
  40. createRateBar(storedData.likes, storedData.dislikes);
  41. storedData.previousState = NEUTRAL_STATE;
  42. }
  43. if (extConfig.numberDisplayReformatLikes === true) {
  44. const nativeLikes = getLikeCountFromButton();
  45. if (nativeLikes !== false) {
  46. setLikes(numberFormat(nativeLikes));
  47. }
  48. }
  49. }
  50. }
  51. function dislikeClicked() {
  52. if (checkForSignInButton() == false) {
  53. if (storedData.previousState === NEUTRAL_STATE) {
  54. sendVote(-1);
  55. storedData.dislikes++;
  56. setDislikes(numberFormat(storedData.dislikes));
  57. createRateBar(storedData.likes, storedData.dislikes);
  58. storedData.previousState = DISLIKED_STATE;
  59. } else if (storedData.previousState === DISLIKED_STATE) {
  60. sendVote(0);
  61. if (storedData.dislikes > 0) storedData.dislikes--;
  62. setDislikes(numberFormat(storedData.dislikes));
  63. createRateBar(storedData.likes, storedData.dislikes);
  64. storedData.previousState = NEUTRAL_STATE;
  65. } else if (storedData.previousState === LIKED_STATE) {
  66. sendVote(-1);
  67. if (storedData.likes > 0) storedData.likes--;
  68. storedData.dislikes++;
  69. setDislikes(numberFormat(storedData.dislikes));
  70. createRateBar(storedData.likes, storedData.dislikes);
  71. storedData.previousState = DISLIKED_STATE;
  72. if (extConfig.numberDisplayReformatLikes === true) {
  73. const nativeLikes = getLikeCountFromButton();
  74. if (nativeLikes !== false) {
  75. setLikes(numberFormat(nativeLikes));
  76. }
  77. }
  78. }
  79. }
  80. }
  81. function addLikeDislikeEventListener() {
  82. const buttons = getButtons();
  83. if (!window.returnDislikeButtonlistenersSet) {
  84. buttons.children[0].addEventListener("click", likeClicked);
  85. buttons.children[1].addEventListener("click", dislikeClicked);
  86. buttons.children[0].addEventListener("touchstart", likeClicked);
  87. buttons.children[1].addEventListener("touchstart", dislikeClicked);
  88. window.returnDislikeButtonlistenersSet = true;
  89. }
  90. }
  91. function storageChangeHandler(changes, area) {
  92. if (changes.disableVoteSubmission !== undefined) {
  93. handleDisableVoteSubmissionChangeEvent(
  94. changes.disableVoteSubmission.newValue
  95. );
  96. }
  97. if (changes.coloredThumbs !== undefined) {
  98. handleColoredThumbsChangeEvent(changes.coloredThumbs.newValue);
  99. }
  100. if (changes.coloredBar !== undefined) {
  101. handleColoredBarChangeEvent(changes.coloredBar.newValue);
  102. }
  103. if (changes.colorTheme !== undefined) {
  104. handleColorThemeChangeEvent(changes.colorTheme.newValue);
  105. }
  106. if (changes.numberDisplayFormat !== undefined) {
  107. handleNumberDisplayFormatChangeEvent(changes.numberDisplayFormat.newValue);
  108. }
  109. if (changes.numberDisplayReformatLikes !== undefined) {
  110. handleNumberDisplayReformatLikesChangeEvent(
  111. changes.numberDisplayReformatLikes.newValue
  112. );
  113. }
  114. }
  115. function handleDisableVoteSubmissionChangeEvent(value) {
  116. extConfig.disableVoteSubmission = value;
  117. }
  118. function handleColoredThumbsChangeEvent(value) {
  119. extConfig.coloredThumbs = value;
  120. }
  121. function handleColoredBarChangeEvent(value) {
  122. extConfig.coloredBar = value;
  123. }
  124. function handleColorThemeChangeEvent(value) {
  125. if (!value) value = "classic";
  126. extConfig.colorTheme = value;
  127. }
  128. function handleNumberDisplayFormatChangeEvent(value) {
  129. extConfig.numberDisplayFormat = value;
  130. }
  131. function handleNumberDisplayReformatLikesChangeEvent(value) {
  132. extConfig.numberDisplayReformatLikes = value;
  133. }
  134. export {
  135. sendVote,
  136. likeClicked,
  137. dislikeClicked,
  138. addLikeDislikeEventListener,
  139. storageChangeHandler,
  140. };