Enables keyboard shortcuts to like/dislike a video on YouTube.
当前为
// ==UserScript==
// @name YouTube Like/Dislike Shortcut
// @name:pt-BR Atalhos Gostei/Não Gostei no YouTube
// @namespace will64gamer
// @author will64gamer
// @description Enables keyboard shortcuts to like/dislike a video on YouTube.
// @description:pt-BR Cria atalhos para os botões gostei/não gostei em um vídeo no YouTube.
// @include https://www.youtube.com/*
// @license MIT
// @version 1.9.1
// ==/UserScript==
const codeLike = "NumpadAdd";
const codeDislike = "NumpadSubtract";
let isShort = false;
let tag, like, dislike, sLike, sDislike;
const observer = new MutationObserver(findButtons);
addEventListener('yt-page-data-updated', reset);
addEventListener('popstate', reset);
function reset() {
isShort = /^\/shorts/.test(location.pathname);
if (/^\/watch/.test(location.pathname)||isShort) {
removeEventListener("keydown", press);
observer.observe(document.documentElement, {childList: true, subtree: true});
like = null; dislike = null; sLike = null; sDislike = null;
findButtons();
}
}
function findButtons() {
if ((like && dislike) || (sLike && sDislike)) {
addEventListener("keydown", press);
observer.disconnect();
let currentURL = location.href;
new MutationObserver(() => {
if (location.href !== currentURL && isShort) {
currentURL = location.href;
location.reload();
}
}).observe(document, {subtree: true, childList: true});
return;
}
if (isShort) {
sLike = document.getElementById("like-button")?.getElementsByTagName('button')[0];
sDislike = document.getElementById("dislike-button")?.getElementsByTagName('button')[0];
} else {
like = document.getElementsByTagName("like-button-view-model")[0]?.firstElementChild?.firstElementChild?.firstElementChild;
dislike = document.getElementsByTagName("dislike-button-view-model")[0]?.firstElementChild?.firstElementChild?.firstElementChild;
}
}
function press(e) {
if (e.target.getAttribute("contenteditable") === "true") {return;}
tag = e.target.tagName.toLowerCase();
if (tag === "input" || tag === "textarea") {return;}
switch (e.code) {
case codeLike:
if (like) {like.click();}
else if (sLike) {sLike.click();}
break;
case codeDislike:
if (dislike) {dislike.click();}
else if (sDislike) {sDislike.click();}
break;
}
}