1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import { isMobile, isShorts } from "./state";
- import { isInViewport } from "./utils";
- function getButtons() {
- //--- If Watching Youtube Shorts: ---//
- if (isShorts()) {
- let elements = document.querySelectorAll(
- isMobile()
- ? "ytm-like-button-renderer"
- : "#like-button > ytd-like-button-renderer"
- );
- for (let element of elements) {
- //Youtube Shorts can have multiple like/dislike buttons when scrolling through videos
- //However, only one of them should be visible (no matter how you zoom)
- if (isInViewport(element)) {
- return element;
- }
- }
- }
- //--- If Watching On Mobile: ---//
- if (isMobile()) {
- return document.querySelector(".slim-video-action-bar-actions");
- }
- //--- If Menu Element Is Displayed: ---//
- if (document.getElementById("menu-container")?.offsetParent === null) {
- return document.querySelector("ytd-menu-renderer.ytd-watch-metadata > div");
- //--- If Menu Element Isn't Displayed: ---//
- } else {
- return document
- .getElementById("menu-container")
- ?.querySelector("#top-level-buttons-computed");
- }
- }
- function getLikeButton() {
- return getButtons().children[0].tagName ===
- "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER"
- ? getButtons().children[0].children[0]
- : getButtons().children[0];
- }
- function getLikeTextContainer() {
- return (
- getLikeButton().querySelector("#text") ??
- getLikeButton().getElementsByTagName("yt-formatted-string")[0] ??
- getLikeButton().querySelector("span[role='text']")
- );
- }
- function getDislikeButton() {
- return getButtons().children[0].tagName ===
- "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER"
- ? getButtons().children[0].children[1]
- : getButtons().children[1];
- }
- function createDislikeTextContainer() {
- const textNodeClone = getLikeButton().querySelector("button > div[class*='cbox']").cloneNode(true);
- textNodeClone.setAttribute("style", "margin-left: 1rem;");
- const insertPreChild = getDislikeButton().querySelector("yt-touch-feedback-shape");
- getDislikeButton().querySelector("button").insertBefore(textNodeClone, insertPreChild);
- getDislikeButton().querySelector("button").classList.remove("yt-spec-button-shape-next--icon-button");
- getDislikeButton().querySelector("button").classList.add("yt-spec-button-shape-next--icon-leading");
- textNodeClone.querySelector("span[role='text']").innerText = "";
- return textNodeClone.querySelector("span[role='text']");
- }
- function getDislikeTextContainer() {
- let result =
- getDislikeButton().querySelector("#text") ??
- getDislikeButton().getElementsByTagName("yt-formatted-string")[0] ??
- getDislikeButton().querySelector("span[role='text']");
- if (result == null) {
- result = createDislikeTextContainer();
- }
- return result;
- }
- function checkForSignInButton() {
- if (
- document.querySelector(
- "a[href^='https://accounts.google.com/ServiceLogin']"
- )
- ) {
- return true;
- } else {
- return false;
- }
- }
- export {
- getButtons,
- getLikeButton,
- getDislikeButton,
- getLikeTextContainer,
- getDislikeTextContainer,
- checkForSignInButton,
- };
|