Browse Source

Merge branch 'main' into refactor--extract-hardcoded-state-values

Sasha Aryutin 3 years ago
parent
commit
d4db7d88e9

+ 84 - 17
Extensions/UserScript/Return Youtube Dislike.user.js

@@ -16,6 +16,7 @@
 // @downloadURL  https://github.com/Anarios/return-youtube-dislike/raw/main/Extensions/UserScript/Return%20Youtube%20Dislike.user.js
 // @downloadURL  https://github.com/Anarios/return-youtube-dislike/raw/main/Extensions/UserScript/Return%20Youtube%20Dislike.user.js
 // @updateURL    https://github.com/Anarios/return-youtube-dislike/raw/main/Extensions/UserScript/Return%20Youtube%20Dislike.user.js
 // @updateURL    https://github.com/Anarios/return-youtube-dislike/raw/main/Extensions/UserScript/Return%20Youtube%20Dislike.user.js
 // @grant        GM.xmlHttpRequest
 // @grant        GM.xmlHttpRequest
+// @connect      youtube.com
 // @grant        GM_addStyle
 // @grant        GM_addStyle
 // @run-at       document-end
 // @run-at       document-end
 // ==/UserScript==
 // ==/UserScript==
@@ -23,12 +24,17 @@ const LIKED_STATE = "LIKED_STATE";
 const DISLIKED_STATE = "DISLIKED_STATE";
 const DISLIKED_STATE = "DISLIKED_STATE";
 const NEUTRAL_STATE = "NEUTRAL_STATE";
 const NEUTRAL_STATE = "NEUTRAL_STATE";
 
 
+var isMobile = (location.hostname == "m.youtube.com");
+var mobileDislikes = 0;
 function cLog(text, subtext = '') {
 function cLog(text, subtext = '') {
   subtext = subtext.trim() === '' ? '' : `(${subtext})`;
   subtext = subtext.trim() === '' ? '' : `(${subtext})`;
   console.log(`[Return YouTube Dislikes] ${text} ${subtext}`);
   console.log(`[Return YouTube Dislikes] ${text} ${subtext}`);
 }
 }
 
 
 function getButtons() {
 function getButtons() {
+  if (isMobile) {
+    return document.querySelector(".slim-video-action-bar-actions");
+  }
   if (document.getElementById("menu-container").offsetParent === null) {
   if (document.getElementById("menu-container").offsetParent === null) {
     return document.querySelector("ytd-menu-renderer.ytd-watch-metadata > div");
     return document.querySelector("ytd-menu-renderer.ytd-watch-metadata > div");
   } else {
   } else {
@@ -47,18 +53,30 @@ function getDislikeButton() {
 }
 }
 
 
 function isVideoLiked() {
 function isVideoLiked() {
+  if (isMobile) {
+    return getLikeButton().querySelector("button").getAttribute("aria-label") == "true";
+  }
   return getLikeButton().classList.contains("style-default-active");
   return getLikeButton().classList.contains("style-default-active");
 }
 }
 
 
 function isVideoDisliked() {
 function isVideoDisliked() {
+  if (isMobile) {
+    return getDislikeButton().querySelector("button").getAttribute("aria-label") == "true";
+  }
   return getDislikeButton().classList.contains("style-default-active");
   return getDislikeButton().classList.contains("style-default-active");
 }
 }
 
 
 function isVideoNotLiked() {
 function isVideoNotLiked() {
+  if (isMobile) {
+    return !isVideoLiked();
+  }
   return getLikeButton().classList.contains("style-text");
   return getLikeButton().classList.contains("style-text");
 }
 }
 
 
 function isVideoNotDisliked() {
 function isVideoNotDisliked() {
+  if (isMobile) {
+    return !isVideoDisliked();
+  }
   return getDislikeButton().classList.contains("style-text");
   return getDislikeButton().classList.contains("style-text");
 }
 }
 
 
@@ -73,10 +91,18 @@ function getState() {
 }
 }
 
 
 function setLikes(likesCount) {
 function setLikes(likesCount) {
+  if (isMobile) {
+    getButtons().children[0].querySelector(".button-renderer-text").innerText = likesCount;
+    return;
+  }
   getButtons().children[0].querySelector("#text").innerText = likesCount;
   getButtons().children[0].querySelector("#text").innerText = likesCount;
 }
 }
 
 
 function setDislikes(dislikesCount) {
 function setDislikes(dislikesCount) {
+  if (isMobile) {
+    mobileDislikes = dislikesCount;
+    return;
+  }
   getButtons().children[1].querySelector("#text").innerText = dislikesCount;
   getButtons().children[1].querySelector("#text").innerText = dislikesCount;
 }
 }
 
 
@@ -117,6 +143,9 @@ function setDislikes(dislikesCount) {
   `);
   `);
 
 
 function createRateBar(likes, dislikes) {
 function createRateBar(likes, dislikes) {
+  if (isMobile) {
+    return;
+  }
   var rateBar = document.getElementById("return-youtube-dislike-bar-container");
   var rateBar = document.getElementById("return-youtube-dislike-bar-container");
 
 
   const widthPx =
   const widthPx =
@@ -165,22 +194,45 @@ function createRateBar(likes, dislikes) {
 function setState() {
 function setState() {
   cLog("Fetching votes...");
   cLog("Fetching votes...");
   let statsSet = false;
   let statsSet = false;
-
-  fetch(`https://www.youtube.com/watch?v=${getVideoId()}`).then((response) => {
-    response.text().then((text) => {
-      let result = getDislikesFromYoutubeResponse(text);
-      if (result) {
-        cLog("response from youtube:");
-        cLog(JSON.stringify(result));
-        if (result.likes && result.dislikes) {
-          const formattedDislike = numberFormat(result.dislikes);
-          setDislikes(formattedDislike);
-          createRateBar(result.likes, result.dislikes);
-          statsSet = true;
+  if (isMobile) {
+    GM.xmlHttpRequest({
+      method: "GET",
+      url: `https://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"
+      },
+      onload: (response) => {
+        let result = getDislikesFromYoutubeResponse(response.responseText);
+        if (result) {
+          cLog("response from youtube:");
+          cLog(JSON.stringify(result));
+          if (result.likes && result.dislikes) {
+            const formattedDislike = numberFormat(result.dislikes);
+            setDislikes(formattedDislike);
+            createRateBar(result.likes, result.dislikes);
+            statsSet = true;
+          }
         }
         }
       }
       }
     });
     });
-  });
+  }
+  else {
+    fetch(`https://youtube.com/watch?v=${getVideoId()}`).then((response) => {
+      response.text().then((text) => {
+        let result = getDislikesFromYoutubeResponse(text);
+        if (result) {
+          cLog("response from youtube:");
+          cLog(JSON.stringify(result));
+          if (result.likes && result.dislikes) {
+            const formattedDislike = numberFormat(result.dislikes);
+            setDislikes(formattedDislike);
+            createRateBar(result.likes, result.dislikes);
+            statsSet = true;
+          }
+        }
+      });
+    });
+  }
 
 
   fetch(
   fetch(
     `https://returnyoutubedislikeapi.com/votes?videoId=${getVideoId()}`
     `https://returnyoutubedislikeapi.com/votes?videoId=${getVideoId()}`
@@ -206,7 +258,7 @@ function dislikeClicked() {
   setState();
   setState();
 }
 }
 
 
-function setInitalState() {
+function setInitialState() {
   setState();
   setState();
 }
 }
 
 
@@ -218,6 +270,9 @@ function getVideoId() {
 }
 }
 
 
 function isVideoLoaded() {
 function isVideoLoaded() {
+  if (isMobile) {
+    return document.getElementById("player").getAttribute("loading") == "false";
+  }
   const videoId = getVideoId();
   const videoId = getVideoId();
 
 
   return (
   return (
@@ -277,7 +332,8 @@ function getDislikesFromYoutubeResponse(htmlResponse) {
 }
 }
 
 
 function setEventListeners(evt) {
 function setEventListeners(evt) {
-  function checkForJS_Finish() {
+  function checkForJS_Finish(check) {
+    console.log()
     if (getButtons()?.offsetParent && isVideoLoaded()) {
     if (getButtons()?.offsetParent && isVideoLoaded()) {
       clearInterval(jsInitChecktimer);
       clearInterval(jsInitChecktimer);
       const buttons = getButtons();
       const buttons = getButtons();
@@ -288,11 +344,11 @@ function setEventListeners(evt) {
         buttons.children[1].addEventListener("click", dislikeClicked);
         buttons.children[1].addEventListener("click", dislikeClicked);
         window.returnDislikeButtonlistenersSet = true;
         window.returnDislikeButtonlistenersSet = true;
       }
       }
-      setInitalState();
+      setInitialState();
     }
     }
   }
   }
 
 
-  if (window.location.href.indexOf("watch?") >= 0) {
+  if (window.location.href.indexOf("watch?") >= 0 || (isMobile && evt?.indexOf("watch?") >= 0)) {
     cLog("Setting up...");
     cLog("Setting up...");
     var jsInitChecktimer = setInterval(checkForJS_Finish, 111);
     var jsInitChecktimer = setInterval(checkForJS_Finish, 111);
   }
   }
@@ -303,3 +359,14 @@ function setEventListeners(evt) {
   window.addEventListener("yt-navigate-finish", setEventListeners, true);
   window.addEventListener("yt-navigate-finish", setEventListeners, true);
   setEventListeners();
   setEventListeners();
 })();
 })();
+if (isMobile) {
+  let originalPush = history.pushState;
+  history.pushState = function (...args) {
+    window.returnDislikeButtonlistenersSet = false;
+    setEventListeners(args[2]);
+    return originalPush.apply(history, args);
+  }
+  setInterval(() => {
+    getDislikeButton().querySelector(".button-renderer-text").innerText = mobileDislikes;
+  }, 1000);
+}

+ 2 - 2
Extensions/chrome/return-youtube-dislike.script.js

@@ -151,7 +151,7 @@ const NEUTRAL_STATE = "NEUTRAL_STATE";
     // setState();
     // setState();
   }
   }
 
 
-  function setInitalState() {
+  function setInitialState() {
     setState();
     setState();
     setTimeout(() => sendVideoIds(), 1500);
     setTimeout(() => sendVideoIds(), 1500);
   }
   }
@@ -200,7 +200,7 @@ const NEUTRAL_STATE = "NEUTRAL_STATE";
           buttons.children[1].addEventListener("click", dislikeClicked);
           buttons.children[1].addEventListener("click", dislikeClicked);
           window.returnDislikeButtonlistenersSet = true;
           window.returnDislikeButtonlistenersSet = true;
         }
         }
-        setInitalState();
+        setInitialState();
       }
       }
     }
     }
 
 

+ 2 - 2
Extensions/firefox/return-youtube-dislike.script.js

@@ -137,7 +137,7 @@ function dislikeClicked() {
   // setState();
   // setState();
 }
 }
 
 
-function setInitalState() {
+function setInitialState() {
   setState();
   setState();
   // setTimeout(() => sendVideoIds(), 1500);
   // setTimeout(() => sendVideoIds(), 1500);
 }
 }
@@ -197,7 +197,7 @@ function setEventListeners(evt) {
         // });
         // });
         window.returnDislikeButtonlistenersSet = true;
         window.returnDislikeButtonlistenersSet = true;
       }
       }
-      setInitalState();
+      setInitialState();
     }
     }
   }
   }
 
 

+ 1 - 1
Website/pages/faq.vue

@@ -37,7 +37,7 @@
         },
         },
         { 
         { 
           question: "Why isn't the dislike count updating?",
           question: "Why isn't the dislike count updating?",
-          answer: "Right now video dislikes are cached and they arent updated very frequenly. Currently this is set to update once every 2–3 days.  This isn't ideal and we are working on improving how often we can update them"
+          answer: "Right now video dislikes are cached and they aren't updated very frequently. Currently this is set to update once every 2–3 days.  This isn't ideal and we are working on improving how often we can update them."
         },
         },
         { 
         { 
           question: "How does this work?",
           question: "How does this work?",