import { getBrowser, getVideoId, numberFormat, cLog } from "./utils"; import { checkForSignInButton, getButtons } from "./buttons"; import { NEUTRAL_STATE, LIKED_STATE, DISLIKED_STATE, setDislikes, extConfig, storedData, setLikes, } from "./state"; import { createRateBar } from "./bar"; function sendVote(vote) { if (extConfig.disableVoteSubmission !== true) { getBrowser().runtime.sendMessage({ message: "send_vote", vote: vote, videoId: getVideoId(window.location.href), }); } } function sendVideoIds() { let links = Array.from( document.getElementsByClassName( "yt-simple-endpoint ytd-compact-video-renderer" ) ).concat( Array.from( document.getElementsByClassName("yt-simple-endpoint ytd-thumbnail") ) ); // Also try mobile if (links.length < 1) links = Array.from( document.querySelectorAll( ".large-media-item-metadata > a, a.large-media-item-thumbnail-container" ) ); const ids = links .filter((x) => x.href && x.href.indexOf("/watch?v=") > 0) .map((x) => getVideoId(x.href)); getBrowser().runtime.sendMessage({ message: "send_links", videoIds: ids, }); } function likeClicked() { if (checkForSignInButton() === false) { if (storedData.previousState === DISLIKED_STATE) { sendVote(1); if (storedData.dislikes > 0) storedData.dislikes--; storedData.likes++; createRateBar(storedData.likes, storedData.dislikes); setDislikes(numberFormat(storedData.dislikes)); storedData.previousState = LIKED_STATE; } else if (storedData.previousState === NEUTRAL_STATE) { sendVote(1); storedData.likes++; createRateBar(storedData.likes, storedData.dislikes); storedData.previousState = LIKED_STATE; } else if ((storedData.previousState = LIKED_STATE)) { sendVote(0); if (storedData.likes > 0) storedData.likes--; createRateBar(storedData.likes, storedData.dislikes); storedData.previousState = NEUTRAL_STATE; } } } function dislikeClicked() { if (checkForSignInButton() == false) { if (storedData.previousState === NEUTRAL_STATE) { sendVote(-1); storedData.dislikes++; setDislikes(numberFormat(storedData.dislikes)); createRateBar(storedData.likes, storedData.dislikes); storedData.previousState = DISLIKED_STATE; } else if (storedData.previousState === DISLIKED_STATE) { sendVote(0); if (storedData.dislikes > 0) storedData.dislikes--; setDislikes(numberFormat(storedData.dislikes)); createRateBar(storedData.likes, storedData.dislikes); storedData.previousState = NEUTRAL_STATE; } else if (storedData.previousState === LIKED_STATE) { sendVote(-1); if (storedData.likes > 0) storedData.likes--; storedData.dislikes++; setDislikes(numberFormat(storedData.dislikes)); createRateBar(storedData.likes, storedData.dislikes); storedData.previousState = DISLIKED_STATE; } } } function addLikeDislikeEventListener() { const buttons = getButtons(); if (!window.returnDislikeButtonlistenersSet) { buttons.children[0].addEventListener("click", likeClicked); buttons.children[1].addEventListener("click", dislikeClicked); buttons.children[0].addEventListener("touchstart", likeClicked); buttons.children[1].addEventListener("touchstart", dislikeClicked); window.returnDislikeButtonlistenersSet = true; } } function storageChangeHandler(changes, area) { if (changes.disableVoteSubmission !== undefined) { handleDisableVoteSubmissionChangeEvent( changes.disableVoteSubmission.newValue ); } if (changes.coloredThumbs !== undefined) { handleColoredThumbsChangeEvent(changes.coloredThumbs.newValue); } if (changes.coloredBar !== undefined) { handleColoredBarChangeEvent(changes.coloredBar.newValue); } if (changes.colorTheme !== undefined) { handleColorThemeChangeEvent(changes.colorTheme.newValue); } if (changes.numberDisplayRoundDown !== undefined) { handleNumberDisplayRoundDownChangeEvent( changes.numberDisplayRoundDown.newValue ); } if (changes.numberDisplayFormat !== undefined) { handleNumberDisplayFormatChangeEvent(changes.numberDisplayFormat.newValue); } } function handleDisableVoteSubmissionChangeEvent(value) { extConfig.disableVoteSubmission = value; } function handleColoredThumbsChangeEvent(value) { extConfig.coloredThumbs = value; } function handleColoredBarChangeEvent(value) { extConfig.coloredBar = value; } function handleColorThemeChangeEvent(value) { extConfig.colorTheme = value; } function handleNumberDisplayFormatChangeEvent(value) { extConfig.numberDisplayFormat = value; } function handleNumberDisplayRoundDownChangeEvent(value) { extConfig.numberDisplayRoundDown = value; } export { sendVote, sendVideoIds, likeClicked, dislikeClicked, addLikeDislikeEventListener, storageChangeHandler, };