Просмотр исходного кода

Merge branch 'main' into patch-1

DARKDRAGON532 3 лет назад
Родитель
Сommit
3d55897690

+ 61 - 8
Extensions/UserScript/Return Youtube Dislike.user.js

@@ -25,6 +25,9 @@
 const LIKED_STATE = "LIKED_STATE";
 const DISLIKED_STATE = "DISLIKED_STATE";
 const NEUTRAL_STATE = "NEUTRAL_STATE";
+var previousState = 3; //1=LIKED, 2=DISLIKED, 3=NEUTRAL
+var likesvalue = 0;
+var dislikesvalue = 0;
 
 var isMobile = location.hostname == "m.youtube.com";
 var mobileDislikes = 0;
@@ -88,6 +91,17 @@ function isVideoNotDisliked() {
   return getDislikeButton().classList.contains("style-text");
 }
 
+function checkForSignInButton() {
+  if (isMobile) {
+    return;
+  }
+  if (document.querySelector('[aria-label="Sign in"]')) {
+    return true
+  } else {
+    return false
+  }
+}
+
 function getState() {
   if (isVideoLiked()) {
     return LIKED_STATE;
@@ -206,7 +220,7 @@ function setState() {
   if (isMobile) {
     GM.xmlHttpRequest({
       method: "GET",
-      url: `https://youtube.com/watch?v=${getVideoId()}`,
+      url: `https://www.youtube.com/watch?v=${getVideoId()}`,
       headers: {
         "User-Agent":
           "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.3674",
@@ -216,9 +230,11 @@ function setState() {
         if (result) {
           cLog("response from youtube:");
           cLog(JSON.stringify(result));
-          if (result.likes && result.dislikes) {
+          if ("likes" in result && "dislikes" in result) {
             const formattedDislike = numberFormat(result.dislikes);
             setDislikes(formattedDislike);
+            likesvalue = result.likes
+            dislikesvalue = result.dislikes
             createRateBar(result.likes, result.dislikes);
             statsSet = true;
           }
@@ -232,9 +248,11 @@ function setState() {
         if (result) {
           cLog("response from youtube:");
           cLog(JSON.stringify(result));
-          if (result.likes && result.dislikes) {
+          if ("likes" in result && "dislikes" in result) {
             const formattedDislike = numberFormat(result.dislikes);
             setDislikes(formattedDislike);
+            likesvalue = result.likes;
+            dislikesvalue = result.dislikes;
             createRateBar(result.likes, result.dislikes);
             statsSet = true;
           }
@@ -247,9 +265,11 @@ function setState() {
     `https://returnyoutubedislikeapi.com/votes?videoId=${getVideoId()}`
   ).then((response) => {
     response.json().then((json) => {
-      if (json && !statsSet) {
+      if (json && !("traceId" in response) && !statsSet) {
         const { dislikes, likes } = json;
         cLog(`Received count: ${dislikes}`);
+        likesvalue = likes;
+        dislikesvalue = dislikes;
         setDislikes(numberFormat(dislikes));
         createRateBar(likes, dislikes);
       }
@@ -258,13 +278,46 @@ function setState() {
 }
 
 function likeClicked() {
-  cLog("Like clicked", getState());
-  setState();
+  if (checkForSignInButton() == false) {
+    if (previousState == 1) {
+      likesvalue--;
+      createRateBar(likesvalue, dislikesvalue);
+      setDislikes(numberFormat(dislikesvalue));
+      previousState = 3
+    } else if (previousState == 2) {
+      likesvalue++;
+      dislikesvalue--;
+      setDislikes(numberFormat(dislikesvalue))
+      createRateBar(likesvalue, dislikesvalue);
+      previousState = 1
+    } else if (previousState == 3) {
+      likesvalue++;
+      createRateBar(likesvalue, dislikesvalue)
+      previousState = 1
+    }
+  }
 }
 
 function dislikeClicked() {
-  cLog("Dislike clicked", getState());
-  setState();
+  if (checkForSignInButton() == false) {
+    if (previousState == 3) {
+      dislikesvalue++;
+      setDislikes(numberFormat(dislikesvalue));
+      createRateBar(likesvalue, dislikesvalue);
+      previousState = 2
+    } else if (previousState == 2) {
+      dislikesvalue--;
+      setDislikes(numberFormat(dislikesvalue));
+      createRateBar(likesvalue, dislikesvalue);
+      previousState = 3
+    } else if (previousState == 1) {
+      likesvalue--;
+      dislikesvalue++;
+      setDislikes(numberFormat(dislikesvalue));
+      createRateBar(likesvalue, dislikesvalue);
+      previousState = 2
+    }
+  }
 }
 
 function setInitialState() {

+ 0 - 3
Extensions/chrome/return-youtube-dislike.background.js

@@ -17,10 +17,8 @@ chrome.runtime.onMessageExternal.addListener(
       //   });
       // });
     } else if (request.message === "log_off") {
-      // console.log("logging off");
       // chrome.identity.clearAllCachedAuthTokens(() => console.log("logged off"));
     } else if (request.message == "set_state") {
-      // console.log(request);
       // chrome.identity.getAuthToken({ interactive: true }, function (token) {
       let token = "";
       fetch(`${apiUrl}/votes?videoId=${request.videoId}`, {
@@ -35,7 +33,6 @@ chrome.runtime.onMessageExternal.addListener(
           sendResponse(response);
         })
         .catch();
-      //});
       return true;
     } else if (request.message == "send_links") {
       toSend = toSend.concat(request.videoIds.filter((x) => !sentIds.has(x)));

+ 45 - 20
Extensions/chrome/return-youtube-dislike.script.js

@@ -4,6 +4,7 @@ const NEUTRAL_STATE = "NEUTRAL_STATE";
 
 (function (extensionId) {
   let storedData = {
+    likes: 0,
     dislikes: 0,
     previousState: NEUTRAL_STATE,
   };
@@ -54,6 +55,14 @@ const NEUTRAL_STATE = "NEUTRAL_STATE";
   function isVideoNotDisliked() {
     return getDislikeButton().classList.contains("style-text");
   }
+  
+  function checkForSignInButton() {
+    if (document.querySelector('[aria-label="Sign in"]')) {
+      return true
+    } else {
+      return false
+    }
+  }
 
   function getState() {
     if (isVideoLiked()) {
@@ -90,9 +99,10 @@ const NEUTRAL_STATE = "NEUTRAL_STATE";
               const formattedDislike = numberFormat(response.dislikes);
               setDislikes(formattedDislike);
               storedData.dislikes = parseInt(response.dislikes);
+              storedData.likes = parseInt(response.likes);
               createRateBar(response.likes, response.dislikes);
               statsSet = true;
-            }
+           }
           } catch (e) {
             statsSet = false;
           }
@@ -122,30 +132,45 @@ const NEUTRAL_STATE = "NEUTRAL_STATE";
   }
 
   function likeClicked() {
-    console.log(storedData.previousState);
-    if (storedData.previousState == DISLIKED_STATE) {
-      storedData.dislikes--;
-      setDislikes(numberFormat(storedData.dislikes));
-      storedData.previousState = LIKED_STATE;
+      if (checkForSignInButton() == false) {
+        if (storedData.previousState == DISLIKED_STATE) {
+          storedData.dislikes--;
+          storedData.likes++;
+          createRateBar(storedData.likes, storedData.dislikes);
+          setDislikes(numberFormat(storedData.dislikes));
+          storedData.previousState = LIKED_STATE;
+        } else if (storedData.previousState == NEUTRAL_STATE) {
+          storedData.likes++;
+          createRateBar(storedData.likes, storedData.dislikes);
+          storedData.previousState = LIKED_STATE;
+        } else if (storedData.previousState = LIKED_STATE) {
+          storedData.likes--;
+          createRateBar(storedData.likes, storedData.dislikes)
+          storedData.previousState = NEUTRAL_STATE;
+        }
     }
   }
 
   function dislikeClicked() {
-    let state = getState().current;
-
-    console.log("Dislike State:", getState());
-
-    if (state == DISLIKED_STATE) {
-      storedData.dislikes++;
-      setDislikes(numberFormat(storedData.dislikes));
-      storedData.previousState = DISLIKED_STATE;
-    } else if (state == NEUTRAL_STATE) {
-      storedData.dislikes--;
-      setDislikes(numberFormat(storedData.dislikes));
-      storedData.previousState = NEUTRAL_STATE;
+    if (checkForSignInButton() == false) {
+      if (storedData.previousState == NEUTRAL_STATE) {
+        storedData.dislikes++;
+        setDislikes(numberFormat(storedData.dislikes));
+        createRateBar(storedData.likes, storedData.dislikes);
+        storedData.previousState = DISLIKED_STATE;
+      } else if (storedData.previousState == DISLIKED_STATE) {
+        storedData.dislikes--;
+        setDislikes(numberFormat(storedData.dislikes));
+        createRateBar(storedData.likes, storedData.dislikes);
+        storedData.previousState = NEUTRAL_STATE;
+      } else if (storedData.previousState == LIKED_STATE) {
+        storedData.likes--;
+        storedData.dislikes++;
+        setDislikes(numberFormat(storedData.dislikes));
+        createRateBar(storedData.likes, storedData.dislikes);
+        storedData.previousState = DISLIKED_STATE;
+      }
     }
-
-    // setState();
   }
 
   function setInitialState() {

+ 16 - 0
Extensions/firefox/content-style.css

@@ -1,3 +1,9 @@
+html {
+  /* fallback values for mobile */
+  --yt-spec-icon-disabled: #909090;
+  --yt-spec-text-primary: #030303;
+}
+
 #return-youtube-dislike-bar-container {
   background: var(--yt-spec-icon-disabled);
   border-radius: 2px;
@@ -16,6 +22,16 @@
   top: 9px;
 }
 
+ytm-slim-video-action-bar-renderer > .ryd-tooltip {
+  padding-left: 12px;
+  top: 0px;
+}
+
+/* tp-yt-paper-tooltip not supported on mobile */
+ytm-slim-video-action-bar-renderer tp-yt-paper-tooltip {
+  display: none;
+}
+
 .ryd-tooltip-bar-container {
   width: 100%;
   height: 2px;

+ 6 - 0
Extensions/firefox/return-youtube-dislike.background.js

@@ -46,8 +46,14 @@ browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
       toSend = [];
     }
   } else if (request.message == "fetch_from_youtube") {
+    let headers = {}
+    if (navigator && navigator.userAgent) {
+      // Never request mobile version
+      headers["User-Agent"] = navigator.userAgent.replace(/\(.*Mobile;/,"(X11; Linux x86_64;");
+    }
     fetch(`https://www.youtube.com/watch?v=${request.videoId}`, {
       method: "GET",
+      headers: headers
     })
       .then((response) => response.text())
       .then((text) => {

+ 81 - 40
Extensions/firefox/return-youtube-dislike.script.js

@@ -4,6 +4,7 @@ const NEUTRAL_STATE = "NEUTRAL_STATE";
 
 if (!storedData) {
   var storedData = {
+    likes: 0,
     dislikes: 0,
     previousState: NEUTRAL_STATE,
   };
@@ -19,14 +20,16 @@ function cLog(message, writer) {
 }
 
 function getButtons() {
-  //---   If Menu Element Is Displayed:   ---//
-  if (document.getElementById("menu-container")?.offsetParent === null) {
+  let menu_container = document.getElementById("menu-container");
+  //---   m.youtube.com:   ---//
+  if (menu_container === null) {
+    return document.querySelector(".slim-video-action-bar-actions");
+    //---   If Menu Element Is Displayed:   ---//
+  } else if (menu_container.offsetParent === null) {
     return document.querySelector("ytd-menu-renderer.ytd-watch-metadata > div");
     //---   If Menu Element Isnt Displayed:   ---//
   } else {
-    return document
-      .getElementById("menu-container")
-      ?.querySelector("#top-level-buttons-computed");
+    return menu_container.querySelector("#top-level-buttons-computed");
   }
 }
 
@@ -39,19 +42,31 @@ function getDislikeButton() {
 }
 
 function isVideoLiked() {
-  return getLikeButton().classList.contains("style-default-active");
+  return getLikeButton().classList.contains("style-default-active")
+      || getLikeButton().querySelector('[aria-pressed="true"]') !== null;
 }
 
 function isVideoDisliked() {
-  return getDislikeButton().classList.contains("style-default-active");
+  return getDislikeButton().classList.contains("style-default-active")
+      || getDislikeButton().querySelector('[aria-pressed="true"]') !== null;
 }
 
 function isVideoNotLiked() {
-  return getLikeButton().classList.contains("style-text");
+  return getLikeButton().classList.contains("style-text")
+      || getLikeButton().querySelector('[aria-pressed="false"]') !== null;
 }
 
 function isVideoNotDisliked() {
-  return getDislikeButton().classList.contains("style-text");
+  return getDislikeButton().classList.contains("style-text")
+      || getDislikeButton().querySelector('[aria-pressed="false"]') !== null;
+}
+
+function checkForSignInButton() {
+  if (document.querySelector('[aria-label="Sign in"]')) {
+    return true
+  } else {
+    return false
+  }
 }
 
 function getState() {
@@ -66,10 +81,10 @@ function getState() {
 
 //---   Sets The Likes And Dislikes Values   ---//
 function setLikes(likesCount) {
-  getButtons().children[0].querySelector("#text").innerText = likesCount;
+  getLikeButton().querySelector("#text, .button-renderer-text").innerText = likesCount;
 }
 function setDislikes(dislikesCount) {
-  getButtons().children[1].querySelector("#text").innerText = dislikesCount;
+  getDislikeButton().querySelector("#text, .button-renderer-text").innerText = dislikesCount;
 }
 
 function setState() {
@@ -88,6 +103,7 @@ function setState() {
             const formattedDislike = numberFormat(response.dislikes);
             setDislikes(formattedDislike);
             storedData.dislikes = parseInt(response.dislikes);
+            storedData.likes = parseInt(response.likes)
             createRateBar(response.likes, response.dislikes);
             statsSet = true;
           }
@@ -121,26 +137,45 @@ function setState() {
 }
 
 function likeClicked() {
-  if (storedData.previousState === "disliked") {
-    storedData.dislikes--;
-    setDislikes(numberFormat(storedData.dislikes));
-    storedData.previousState = "liked";
+  if (checkForSignInButton() == false) {
+    if (storedData.previousState == DISLIKED_STATE) {
+      storedData.dislikes--;
+      storedData.likes++;
+      createRateBar(storedData.likes, storedData.dislikes);
+      setDislikes(numberFormat(storedData.dislikes));
+      storedData.previousState = LIKED_STATE;
+    } else if (storedData.previousState == NEUTRAL_STATE) {
+      storedData.likes++;
+      createRateBar(storedData.likes, storedData.dislikes);
+      storedData.previousState = LIKED_STATE;
+    } else if (storedData.previousState = LIKED_STATE) {
+      storedData.likes--;
+      createRateBar(storedData.likes, storedData.dislikes)
+      storedData.previousState = NEUTRAL_STATE;
+    }
   }
 }
 
 function dislikeClicked() {
-  let state = getState().current;
-  if (state == DISLIKED_STATE) {
-    storedData.dislikes++;
-    setDislikes(numberFormat(storedData.dislikes));
-    storedData.previousState = DISLIKED_STATE;
-  } else if (state == NEUTRAL_STATE) {
-    storedData.dislikes--;
-    setDislikes(numberFormat(storedData.dislikes));
-    storedData.previousState = NEUTRAL_STATE;
+  if (checkForSignInButton() == false) {
+    if (storedData.previousState == NEUTRAL_STATE) {
+      storedData.dislikes++;
+      setDislikes(numberFormat(storedData.dislikes));
+      createRateBar(storedData.likes, storedData.dislikes);
+      storedData.previousState = DISLIKED_STATE;
+    } else if (storedData.previousState == DISLIKED_STATE) {
+      storedData.dislikes--;
+      setDislikes(numberFormat(storedData.dislikes));
+      createRateBar(storedData.likes, storedData.dislikes);
+      storedData.previousState = NEUTRAL_STATE;
+    } else if (storedData.previousState == LIKED_STATE) {
+      storedData.likes--;
+      storedData.dislikes++;
+      setDislikes(numberFormat(storedData.dislikes));
+      createRateBar(storedData.likes, storedData.dislikes);
+      storedData.previousState = DISLIKED_STATE;
+    }
   }
-
-  // setState();
 }
 
 function setInitialState() {
@@ -161,7 +196,9 @@ function getVideoId(url) {
 function isVideoLoaded() {
   const videoId = getVideoId(window.location.href);
   return (
-    document.querySelector(`ytd-watch-flexy[video-id='${videoId}']`) !== null
+    document.querySelector(`ytd-watch-flexy[video-id='${videoId}']`) !== null ||
+    // mobile: no video-id attribute
+    document.querySelector('#player[loading="false"]:not([hidden])') !== null
   );
 }
 
@@ -192,8 +229,8 @@ function setEventListeners(evt) {
       clearInterval(jsInitChecktimer);
       const buttons = getButtons();
       if (!window.returnDislikeButtonlistenersSet) {
-        buttons.children[0].addEventListener("click", likeClicked);
-        buttons.children[1].addEventListener("click", dislikeClicked);
+        getLikeButton().addEventListener("click", likeClicked);
+        getDislikeButton().addEventListener("click", dislikeClicked);
         let lastKnownScrollPosition = 0;
         let ticking = false;
         // document.addEventListener('scroll', function(e) {
@@ -223,8 +260,8 @@ function createRateBar(likes, dislikes) {
   var rateBar = document.getElementById("return-youtube-dislike-bar-container");
 
   const widthPx =
-    getButtons().children[0].clientWidth +
-    getButtons().children[1].clientWidth +
+    getLikeButton().clientWidth +
+    getDislikeButton().clientWidth +
     8;
 
   const widthPercent =
@@ -232,8 +269,9 @@ function createRateBar(likes, dislikes) {
 
   if (!rateBar) {
     (
-      document.querySelector("#actions-inner") ||
-      document.getElementById("menu-container")
+      document.getElementById("actions-inner") ||
+      document.getElementById("menu-container") ||
+      document.querySelector("ytm-slim-video-action-bar-renderer")
     ).insertAdjacentHTML(
       "beforeend",
       `
@@ -270,17 +308,20 @@ function createRateBar(likes, dislikes) {
 }
 
 function sendVideoIds() {
-  const ids = Array.from(
+  let links = Array.from(
     document.getElementsByClassName(
       "yt-simple-endpoint ytd-compact-video-renderer"
     )
-  )
-    .concat(
-      Array.from(
-        document.getElementsByClassName("yt-simple-endpoint ytd-thumbnail")
-      )
+  ).concat(
+    Array.from(
+      document.getElementsByClassName("yt-simple-endpoint ytd-thumbnail")
     )
-    .filter((x) => x.href && x.href.indexOf("/watch?v=") > 0)
+  );
+  // 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));
   browser.runtime.sendMessage({
     message: "send_links",

+ 1 - 1
Website/pages/links.vue

@@ -4,7 +4,7 @@
     <h1 class="title-text" >Project Links</h1>
           
     <div style="color: #999">
-      <p style="margin-top: .5rem; margin-bottom: 1rem;">Links to the project and it's developers</p>
+      <p style="margin-top: .5rem; margin-bottom: 1rem;">Links to the project and its developers</p>
     </div>
 
     <v-btn class="mainAltButton" :href="githubLink" target="_blank">