-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInvidious Dislike Counter.user.js
49 lines (43 loc) · 1.83 KB
/
Invidious Dislike Counter.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// ==UserScript==
// @name Invidious Dislike Counter
// @match *://*/watch?v=*
// @connect ryd-proxy.kavin.rocks
// @grant none
// @version 1.0.0
// @author NoUser
// @description Displays the dislike count on Invidious videos using a privacy preserving proxy to the Return YouTube Dislike API.
// @run-at document-end
// @grant GM.xmlHttpRequest
// @grant GM_xmlhttpRequest
// @namespace https://greasyfork.org/en/scripts/461909-invidious-dislike-counter
// @homepage https://greasyfork.org/en/scripts/461909-invidious-dislike-counter
// @license MIT
// ==/UserScript==
// This script is based on
// https://codeberg.org/sun/userscripts/src/branch/main/user/ReturnInvidiousDislike.user.js
// Instead of using the official Return YouTube Dislike API it uses a privacy
// preserving proxy which can be found here: https://github.com/TeamPiped/RYD-Proxy
(function () {
"use strict";
const video = new URLSearchParams(window.location.search).get("v");
const likes = document.getElementById("likes")?.childNodes[1];
const dislikes = document.getElementById("dislikes")?.childNodes[1];
if (video) {
GM.xmlHttpRequest({
url: "https://ryd-proxy.kavin.rocks/votes/" + video,
onload: (response) => {
const data = JSON.parse(response.responseText);
if (dislikes) {
dislikes.textContent = " " + data.dislikes.toLocaleString();
} else {
const clone = likes.parentElement.cloneNode(true);
const icon = clone.getElementsByClassName("icon")[0];
const text = clone.childNodes[1];
icon.classList.replace("ion-ios-thumbs-up", "ion-ios-thumbs-down");
text.textContent = " " + data.dislikes.toLocaleString();
likes.parentElement.insertAdjacentElement("afterend", clone);
}
},
});
}
})();