// ==UserScript== // @name Piped Button youtube.com // @namespace Violentmonkey Scripts // @match https://www.youtube.com/* // @grant GM_addStyle // @version 1.0 // @author - // @description 3/9/2024, 8:38:47 PM // ==/UserScript== /* Config */ const instanceHostname = "piped.tjkeller.xyz" const instanceProtocol = "https:" const instanceIconLogo = "/img/icons/logo.svg" const instanceUrl = `${instanceProtocol}//${instanceHostname}` const redirectButtonId = "piped-button" GM_addStyle(` a#${redirectButtonId} button { background-color: #272727; border-radius: 18px; border: none; color: white; cursor: pointer; display: flex; font-family: "Roboto","Arial",sans-serif; font-weight: 500; height: 36px; padding: .25em 1em .25em .65em; text-decoration: none; } a#${redirectButtonId} button:hover { background-color: #3f3f3f; } a#${redirectButtonId} button * { align-self: center; max-height: 100%; } `) function newUrl() { return `${instanceProtocol}//${instanceHostname}${document.location.pathname}${document.location.search}` } if (!document.getElementById(redirectButtonId)) { const redirectButton = document.createElement("a") const redirectButtonC = redirectButton.appendChild(document.createElement("button")) const redirectButtonImg = redirectButtonC.appendChild(document.createElement("img")) const redirectButtonTxt = redirectButtonC.appendChild(document.createElement("span")) redirectButton.id = redirectButtonId redirectButtonImg.src = instanceUrl + instanceIconLogo redirectButtonImg.alt = "(Down)" // Logo effectively acts as a test to see whether the instance is up or not as a bonus redirectButtonTxt.innerText = "Piped" redirectButton.addEventListener("mouseover", () => { redirectButton.href = newUrl() }) /* Insert */ document.body.addEventListener("yt-navigate-finish", () => { setTimeout(() => { const headContainer = document.querySelector("#masthead-container #container #start") headContainer.appendChild(redirectButton) }, 500) // Wait 500ms for page load to finish after event called }) }