From 1883b7ef3171ac4a1021b5937ad06bf48810c2a6 Mon Sep 17 00:00:00 2001 From: Forrest Fuqua <804052+JRWR@users.noreply.github.com> Date: Mon, 15 Nov 2021 10:33:04 -0500 Subject: [PATCH 1/3] Create Return Youtube Dislike.user.js --- .../UserScript/Return Youtube Dislike.user.js | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Extensions/UserScript/Return Youtube Dislike.user.js diff --git a/Extensions/UserScript/Return Youtube Dislike.user.js b/Extensions/UserScript/Return Youtube Dislike.user.js new file mode 100644 index 0000000..48854a8 --- /dev/null +++ b/Extensions/UserScript/Return Youtube Dislike.user.js @@ -0,0 +1,136 @@ +// ==UserScript== +// @name Return Youtube Dislike +// @namespace https://www.returnyoutubedislike.com/ +// @version 0.1 +// @description Return of the Youtube Dislike, Based off https://www.returnyoutubedislike.com/ +// @author Anarios & JRWR +// @match *://*.youtube.com/* +// @include *://*.youtube.com/* +// @compatible chrome +// @compatible firefox +// @compatible opera +// @compatible safari +// @compatible edge +// @downloadURL +// @grant GM_xmlhttpRequest +// ==/UserScript== +function getButtons() { + return document + .getElementById("menu-container") + ?.querySelector("#top-level-buttons-computed"); +} + +function getLikeButton() { + return getButtons().children[0]; +} + +function getDislikeButton() { + return getButtons().children[1]; +} + +function isVideoLiked() { + return getLikeButton().classList.contains("style-default-active"); +} + +function isVideoDisliked() { + return getDislikeButton().classList.contains("style-default-active"); +} + +function isVideoNotLiked() { + return getLikeButton().classList.contains("style-text"); +} + +function isVideoNotDisliked() { + return getDislikeButton().classList.contains("style-text"); +} + +function getState() { + if (isVideoLiked()) { + return "liked"; + } + if (isVideoDisliked()) { + return "disliked"; + } + return "neutral"; +} + +function setLikes(likesCount) { + getButtons().children[0].querySelector("#text").innerText = likesCount; +} + +function setDislikes(dislikesCount) { + getButtons().children[1].querySelector("#text").innerText = dislikesCount; +} + +function setState() { + GM_xmlhttpRequest({ + method: "GET", + responseType: "json", + url: "https://return-youtube-dislike-api.azurewebsites.net/votes?videoId=" + getVideoId(), + onload: function(response) { + if (response != undefined) { + const formattedDislike = numberFormat(response.response.dislikes); + console.log(response); + setDislikes(formattedDislike); + } + } + }); +} + +function likeClicked() { + console.log("like" + getState()); + setState(); +} + +function dislikeClicked() { + console.log("dislike" + getState()); + setState(); +} + +function setInitalState() { + setState(); +} + +function getVideoId() { + const urlParams = new URLSearchParams(window.location.search); + const videoId = urlParams.get("v"); + return videoId; +} + +function isVideoLoaded() { + const videoId = getVideoId(); + return ( + document.querySelector(`ytd-watch-flexy[video-id='${videoId}']`) !== null + ); +} + +function numberFormat(numberState) { + const userLocales = navigator.language; + const formatter = Intl.NumberFormat(userLocales, { notation: "compact" }); + return formatter.format(numberState); +} + +function setEventListeners(evt) { + function checkForJS_Finish() { + if (getButtons()?.offsetParent && isVideoLoaded()) { + clearInterval(jsInitChecktimer); + const buttons = getButtons(); + if (!window.returnDislikeButtonlistenersSet) { + buttons.children[0].addEventListener("click", likeClicked); + buttons.children[1].addEventListener("click", dislikeClicked); + window.returnDislikeButtonlistenersSet = true; + } + setInitalState(); + } + } + + if (window.location.href.indexOf("watch?") >= 0) { + var jsInitChecktimer = setInterval(checkForJS_Finish, 111); + } +} + +(function() { + 'use strict'; + setEventListeners(); + +})(); From 110c40f59065da777b0ec384f5f3663bf9c11e17 Mon Sep 17 00:00:00 2001 From: Forrest Fuqua <804052+JRWR@users.noreply.github.com> Date: Mon, 15 Nov 2021 10:35:39 -0500 Subject: [PATCH 2/3] Update Return Youtube Dislike.user.js --- Extensions/UserScript/Return Youtube Dislike.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Extensions/UserScript/Return Youtube Dislike.user.js b/Extensions/UserScript/Return Youtube Dislike.user.js index 48854a8..388f42e 100644 --- a/Extensions/UserScript/Return Youtube Dislike.user.js +++ b/Extensions/UserScript/Return Youtube Dislike.user.js @@ -11,7 +11,8 @@ // @compatible opera // @compatible safari // @compatible edge -// @downloadURL +// @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 // @grant GM_xmlhttpRequest // ==/UserScript== function getButtons() { From 4ae5622028069746958d07035aa15709da610752 Mon Sep 17 00:00:00 2001 From: Forrest Fuqua <804052+JRWR@users.noreply.github.com> Date: Mon, 15 Nov 2021 12:10:08 -0500 Subject: [PATCH 3/3] Added Userscript fix to notice when a new page is loaded --- Extensions/UserScript/Return Youtube Dislike.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Extensions/UserScript/Return Youtube Dislike.user.js b/Extensions/UserScript/Return Youtube Dislike.user.js index 388f42e..b21b44b 100644 --- a/Extensions/UserScript/Return Youtube Dislike.user.js +++ b/Extensions/UserScript/Return Youtube Dislike.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Return Youtube Dislike // @namespace https://www.returnyoutubedislike.com/ -// @version 0.1 +// @version 0.2 // @description Return of the Youtube Dislike, Based off https://www.returnyoutubedislike.com/ // @author Anarios & JRWR // @match *://*.youtube.com/* @@ -132,6 +132,6 @@ function setEventListeners(evt) { (function() { 'use strict'; + window.addEventListener("yt-navigate-finish", setEventListeners, true); setEventListeners(); - })();