123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- import { getLikeButton, getDislikeButton, getButtons } from "./buttons";
- import { createRateBar } from "./bar";
- import { getBrowser, getVideoId, cLog, numberFormat } from "./utils";
- import { sendVideoIds } from "./events";
- const LIKED_STATE = "LIKED_STATE";
- const DISLIKED_STATE = "DISLIKED_STATE";
- const NEUTRAL_STATE = "NEUTRAL_STATE";
- function isMobile() {
- return location.hostname == "m.youtube.com";
- }
- function isVideoLiked() {
- if (isMobile()) {
- return (
- getLikeButton().querySelector("button").getAttribute("aria-label") ==
- "true"
- );
- }
- return getLikeButton().classList.contains("style-default-active");
- }
- function isVideoDisliked() {
- if (isMobile()) {
- return (
- getDislikeButton().querySelector("button").getAttribute("aria-label") ==
- "true"
- );
- }
- return getDislikeButton().classList.contains("style-default-active");
- }
- function getState(storedData) {
- if (isVideoLiked()) {
- return { current: LIKED_STATE, previous: storedData.previousState };
- }
- if (isVideoDisliked()) {
- return { current: DISLIKED_STATE, previous: storedData.previousState };
- }
- return { current: NEUTRAL_STATE, previous: storedData.previousState };
- }
- //--- Sets The Likes And Dislikes Values ---//
- function setLikes(likesCount) {
- getButtons().children[0].querySelector("#text").innerText = likesCount;
- }
- function setDislikes(dislikesCount) {
- if (isMobile()) {
- getButtons().children[1].querySelector(".button-renderer-text").innerText =
- dislikesCount;
- return;
- }
- getButtons().children[1].querySelector("#text").innerText = dislikesCount;
- }
- function getLikeCountFromButton() {
- let likesStr = getLikeButton()
- .querySelector("button")
- .getAttribute("aria-label")
- .replace(/\D/g, "");
- return likesStr.length > 0 ? parseInt(likesStr) : false;
- }
- function processResponse(response, storedData) {
- const formattedDislike = numberFormat(response.dislikes);
- setDislikes(formattedDislike);
- storedData.dislikes = parseInt(response.dislikes);
- storedData.likes = getLikeCountFromButton() || parseInt(response.likes);
- createRateBar(storedData.likes, storedData.dislikes);
- }
- function setState(storedData) {
- storedData.previousState = isVideoDisliked()
- ? DISLIKED_STATE
- : isVideoLiked()
- ? LIKED_STATE
- : NEUTRAL_STATE;
- let statsSet = false;
- getBrowser().runtime.sendMessage(
- {
- message: "set_state",
- videoId: getVideoId(window.location.href),
- state: getState(storedData).current,
- likeCount: getLikeCountFromButton() || null,
- },
- function (response) {
- cLog("response from api:");
- cLog(JSON.stringify(response));
- if (response !== undefined && !("traceId" in response) && !statsSet) {
- processResponse(response, storedData);
- } else {
- }
- }
- );
- }
- function setInitialState(storedData) {
- setState(storedData);
- setTimeout(() => {
- sendVideoIds();
- }, 1500);
- }
- export {
- isMobile,
- isVideoDisliked,
- isVideoLiked,
- getState,
- setState,
- setInitialState,
- setLikes,
- setDislikes,
- getLikeCountFromButton,
- LIKED_STATE,
- DISLIKED_STATE,
- NEUTRAL_STATE,
- };
|