buttons.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { isMobile, isShorts } from "./state";
  2. import { isInViewport } from "./utils";
  3. function getButtons() {
  4. //--- If Watching Youtube Shorts: ---//
  5. if (isShorts()) {
  6. let elements = document.querySelectorAll(
  7. isMobile()
  8. ? "ytm-like-button-renderer"
  9. : "#like-button > ytd-like-button-renderer"
  10. );
  11. for (let element of elements) {
  12. //Youtube Shorts can have multiple like/dislike buttons when scrolling through videos
  13. //However, only one of them should be visible (no matter how you zoom)
  14. if (isInViewport(element)) {
  15. return element;
  16. }
  17. }
  18. }
  19. //--- If Watching On Mobile: ---//
  20. if (isMobile()) {
  21. return document.querySelector(".slim-video-action-bar-actions");
  22. }
  23. //--- If Menu Element Is Displayed: ---//
  24. if (document.getElementById("menu-container")?.offsetParent === null) {
  25. return document.querySelector("ytd-menu-renderer.ytd-watch-metadata > div");
  26. //--- If Menu Element Isnt Displayed: ---//
  27. } else {
  28. return document
  29. .getElementById("menu-container")
  30. ?.querySelector("#top-level-buttons-computed");
  31. }
  32. }
  33. function getLikeButton() {
  34. return getButtons().children[0];
  35. }
  36. function getDislikeButton() {
  37. return getButtons().children[1];
  38. }
  39. function checkForSignInButton() {
  40. if (
  41. document.querySelector(
  42. "a[href^='https://accounts.google.com/ServiceLogin']"
  43. )
  44. ) {
  45. return true;
  46. } else {
  47. return false;
  48. }
  49. }
  50. export { getButtons, getLikeButton, getDislikeButton, checkForSignInButton };