Procházet zdrojové kódy

Extensions: Supports YouTube Shorts

RyanBurgert219 před 3 roky
rodič
revize
1cc579d00d

+ 2 - 1
Extensions/combined/ryd.content-script.js

@@ -9,6 +9,7 @@ import {
 //---   Import State Functions   ---//
 //---   Import State Functions   ---//
 import {
 import {
   isMobile,
   isMobile,
+  isShorts,
   isVideoDisliked,
   isVideoDisliked,
   isVideoLiked,
   isVideoLiked,
   getState,
   getState,
@@ -35,7 +36,7 @@ let jsInitChecktimer = null;
 
 
 function setEventListeners(evt) {
 function setEventListeners(evt) {
   function checkForJS_Finish() {
   function checkForJS_Finish() {
-    if (getButtons()?.offsetParent && isVideoLoaded()) {
+    if (isShorts() || getButtons()?.offsetParent && isVideoLoaded()) {
       clearInterval(jsInitChecktimer);
       clearInterval(jsInitChecktimer);
       jsInitChecktimer = null;
       jsInitChecktimer = null;
       addLikeDislikeEventListener();
       addLikeDislikeEventListener();

+ 1 - 1
Extensions/combined/src/bar.js

@@ -1,5 +1,5 @@
 import { getButtons } from "./buttons";
 import { getButtons } from "./buttons";
-import { likesDisabledState } from "./state";
+import { isMobile, likesDisabledState } from "./state";
 import { cLog } from "./utils";
 import { cLog } from "./utils";
 
 
 function createRateBar(likes, dislikes) {
 function createRateBar(likes, dislikes) {

+ 14 - 1
Extensions/combined/src/buttons.js

@@ -1,6 +1,19 @@
-import { isMobile } from "./state";
+import { isMobile, isShorts } from "./state";
+import { isInViewport } from "./utils";
 
 
 function getButtons() {
 function getButtons() {
+  //---   If Watching Youtube Shorts:   ---//
+  if(isShorts()) {
+    let elements=document.querySelectorAll("#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()) {
   if (isMobile()) {
     return document.querySelector(".slim-video-action-bar-actions");
     return document.querySelector(".slim-video-action-bar-actions");
   }
   }

+ 10 - 0
Extensions/combined/src/state.js

@@ -27,6 +27,10 @@ function isMobile() {
   return location.hostname == "m.youtube.com";
   return location.hostname == "m.youtube.com";
 }
 }
 
 
+function isShorts() {
+  return location.pathname.startsWith("/shorts")
+}
+
 function isVideoLiked() {
 function isVideoLiked() {
   if (isMobile()) {
   if (isMobile()) {
     return (
     return (
@@ -85,6 +89,11 @@ function setDislikes(dislikesCount) {
 }
 }
 
 
 function getLikeCountFromButton() {
 function getLikeCountFromButton() {
+  if(isShorts()) {
+    //Youtube Shorts don't work with this query. It's not nessecary; we can skip it and still see the results.
+    //It should be possible to fix this function, but it's not critical to showing the dislike count.
+    return 0;
+  }
   let likesStr = getLikeButton()
   let likesStr = getLikeButton()
     .querySelector("button")
     .querySelector("button")
     .getAttribute("aria-label")
     .getAttribute("aria-label")
@@ -156,6 +165,7 @@ function initializeDisableVoteSubmission() {
 
 
 export {
 export {
   isMobile,
   isMobile,
+  isShorts,
   isVideoDisliked,
   isVideoDisliked,
   isVideoLiked,
   isVideoLiked,
   getState,
   getState,

+ 16 - 1
Extensions/combined/src/utils.js

@@ -45,10 +45,25 @@ function getVideoId(url) {
   if (pathname.startsWith("/clip")) {
   if (pathname.startsWith("/clip")) {
     return document.querySelector("meta[itemprop='videoId']").content;
     return document.querySelector("meta[itemprop='videoId']").content;
   } else {
   } else {
+    if (pathname.startsWith("/shorts")) {
+      return pathname.substr(8);
+    }
     return urlObject.searchParams.get("v");
     return urlObject.searchParams.get("v");
   }
   }
 }
 }
 
 
+function isInViewport(element) {
+  const rect = element.getBoundingClientRect();
+  const height = innerHeight || document.documentElement.clientHeight;
+  const width = innerWidth || document.documentElement.clientWidth;
+  return (
+      rect.top >= 0 &&
+      rect.left >= 0 &&
+      rect.bottom <= height &&
+      rect.right <= width
+  );
+}
+
 function isVideoLoaded() {
 function isVideoLoaded() {
   const videoId = getVideoId(window.location.href);
   const videoId = getVideoId(window.location.href);
   return (
   return (
@@ -67,4 +82,4 @@ function cLog(message, writer) {
   }
   }
 }
 }
 
 
-export { numberFormat, getBrowser, getVideoId, isVideoLoaded, cLog }
+export { numberFormat, getBrowser, getVideoId, isInViewport, isVideoLoaded, cLog }