diff options
Diffstat (limited to 'youtube')
| -rw-r--r-- | youtube/disable-mini-player.js | 31 | ||||
| -rw-r--r-- | youtube/piped-button.js | 79 | ||||
| -rw-r--r-- | youtube/remove-home-shorts.js | 62 | 
3 files changed, 172 insertions, 0 deletions
diff --git a/youtube/disable-mini-player.js b/youtube/disable-mini-player.js new file mode 100644 index 0000000..da8349c --- /dev/null +++ b/youtube/disable-mini-player.js @@ -0,0 +1,31 @@ +// ==UserScript== +// @name        Disable YouTube Miniplayer +// @author      tjkeller.xyz +// @include     *youtube.com* +// @grant       GM_addStyle +// ==/UserScript== + +// Remove home and shorts button +GM_addStyle(` +  ytd-miniplayer, +  .ytp-miniplayer-button +  { +    display: none !important; /* Needs !important flag */ +  } +`) + + +// Pause video before navigating +document.body.addEventListener("yt-navigate-start", () => { +  if (window.location.pathname == "/watch") +    document.querySelector("ytd-player video").pause() +}) + +// Close miniplayer by clicking close button in code +document.body.addEventListener("yt-navigate-finish", () => { +  setTimeout(() => { +    const miniplayerCloseButton = document.querySelector("button.ytp-miniplayer-close-button") +    if (miniplayerCloseButton) +      miniplayerCloseButton.click() +  }, 500) // Wait 500ms to close consistantly since miniplayer loads a little after this event +}) diff --git a/youtube/piped-button.js b/youtube/piped-button.js new file mode 100644 index 0000000..fd4b331 --- /dev/null +++ b/youtube/piped-button.js @@ -0,0 +1,79 @@ +// ==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) +      /* +      const actionDiv = document.querySelector("#actions #menu") + +      const pipedLink = actionDiv.appendChild(document.createElement("a")) +      pipedLink.id = "piped" +      pipedLink.href = `${document.location.protocol}//${pipedInstance}${document.location.pathname}${document.location.search}` + +      const pipedButton = pipedLink.appendChild(document.createElement("button")) // Simplify styling + +      const pipedLogo = pipedButton.appendChild(document.createElement("img")) +      pipedLogo.src = `${document.location.protocol}//${pipedInstance}/img/icons/logo.svg` +      pipedLogo.alt = "(Down)" // Indicates instance is down if logo cannot be loaded + +      const pipedText = pipedButton.appendChild(document.createElement("span")) +      pipedText.innerText = "Piped" +      */ +    }, 500) // Wait 500ms for page load to finish after event called +  }) +} diff --git a/youtube/remove-home-shorts.js b/youtube/remove-home-shorts.js new file mode 100644 index 0000000..a5e3634 --- /dev/null +++ b/youtube/remove-home-shorts.js @@ -0,0 +1,62 @@ +// ==UserScript== +// @name        Remove youtube home and shorts +// @namespace   Violentmonkey Scripts +// @include      *youtube.com* +// @grant       GM_addStyle +// @version     1.0 +// @author      tjk918 +// @description 9/21/2023, 9:44:13 AM +// @license     MIT +// ==/UserScript== + + +// Remove home and shorts button +GM_addStyle(` +  tp-yt-app-drawer a[title=Home], +  tp-yt-app-drawer a[title=Shorts], +  ytd-mini-guide-renderer a[title=Home], +  ytd-mini-guide-renderer a[title=Shorts] +  { +    display: none !important; /* Needs !important flag */ +  } +`) + + +// Subscriptions page is new homepage +const subscriptionsPath = "/feed/subscriptions" + +function redirectToSubscriptions() { +  // Invoke clicking the subscriptions button to use youtube's hot page reloading if possible instead of reloading the whole page +  const subscriptionsButton = document.querySelector("tp-yt-app-drawer a[title=Subscriptions]") +  if (subscriptionsButton) +    subscriptionsButton.click() +  else +    window.location.replace(subscriptionsPath) +} + + +// Redirect to new homepage +function redirectIfHome() { +   if (window.location.pathname === "/") +    redirectToSubscriptions() +} + +redirectIfHome() +window.addEventListener("popstate", redirectIfHome) +//document.body.addEventListener("yt-navigate-finish", redirectIfHome) + + +// Youtube logo navigate to subscriptions +/* Needs to be done safely in case youtube changes and also because it throws + * an error otherwise because violentmonkey seems to load the script twice */ + +const logo = document.querySelector("#logo a") +if (logo) { +  logo.href = subscriptionsPath +  logo.addEventListener("click", e => { +    // Seems there is an event listener that forces redirect to site root, so stop that first +    e.stopPropagation() +    e.preventDefault() +    redirectToSubscriptions() +  }) +}  | 
