events.js 3.6 KB

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