events.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import { getBrowser, getVideoId, numberFormat, cLog } from "./utils";
  2. import { checkForSignInButton, getButtons, getDislikeButton, getLikeButton } 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. if (!window.returnDislikeButtonlistenersSet) {
  83. getLikeButton().addEventListener("click", likeClicked);
  84. getDislikeButton().addEventListener("click", dislikeClicked);
  85. getLikeButton().addEventListener("touchstart", likeClicked);
  86. getLikeButton().addEventListener("touchstart", dislikeClicked);
  87. window.returnDislikeButtonlistenersSet = true;
  88. }
  89. }
  90. function storageChangeHandler(changes, area) {
  91. if (changes.disableVoteSubmission !== undefined) {
  92. handleDisableVoteSubmissionChangeEvent(
  93. changes.disableVoteSubmission.newValue
  94. );
  95. }
  96. if (changes.coloredThumbs !== undefined) {
  97. handleColoredThumbsChangeEvent(changes.coloredThumbs.newValue);
  98. }
  99. if (changes.coloredBar !== undefined) {
  100. handleColoredBarChangeEvent(changes.coloredBar.newValue);
  101. }
  102. if (changes.colorTheme !== undefined) {
  103. handleColorThemeChangeEvent(changes.colorTheme.newValue);
  104. }
  105. if (changes.numberDisplayFormat !== undefined) {
  106. handleNumberDisplayFormatChangeEvent(changes.numberDisplayFormat.newValue);
  107. }
  108. if (changes.numberDisplayReformatLikes !== undefined) {
  109. handleNumberDisplayReformatLikesChangeEvent(
  110. changes.numberDisplayReformatLikes.newValue
  111. );
  112. }
  113. }
  114. function handleDisableVoteSubmissionChangeEvent(value) {
  115. extConfig.disableVoteSubmission = value;
  116. }
  117. function handleColoredThumbsChangeEvent(value) {
  118. extConfig.coloredThumbs = value;
  119. }
  120. function handleColoredBarChangeEvent(value) {
  121. extConfig.coloredBar = value;
  122. }
  123. function handleColorThemeChangeEvent(value) {
  124. if (!value) value = "classic";
  125. extConfig.colorTheme = value;
  126. }
  127. function handleNumberDisplayFormatChangeEvent(value) {
  128. extConfig.numberDisplayFormat = value;
  129. }
  130. function handleNumberDisplayReformatLikesChangeEvent(value) {
  131. extConfig.numberDisplayReformatLikes = value;
  132. }
  133. export {
  134. sendVote,
  135. likeClicked,
  136. dislikeClicked,
  137. addLikeDislikeEventListener,
  138. storageChangeHandler,
  139. };