- // ==UserScript==
- // @name YouTube: Revert Icon Dropdown
- // @namespace https://greasyfork.org/en/users/1008366-trickyclock
- // @author TrickyClock
- // @version 1.4
- // @description Replace 'Google Account' with 'Your channel' on the Icon Dropdown
- // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
- // @license MIT
- // @match https://www.youtube.com/*
- // @grant none
- // @run-at document-body
- // @require https://cdn.jsdelivr.net/gh/rybak/userscript-libs@e86c722f2c9cc2a96298c8511028f15c45180185/waitForElement.js
- // ==/UserScript==
- "use strict";
-
- function sleep(ms) {
- return new Promise(resolve => setTimeout(resolve, ms));
- }
-
- function insertAfter(newNode, referenceNode) {
- referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
- }
-
- (async () => {
- const channelIcon = `<div style="width: 100%; height: 100%; fill: currentcolor;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;">
- <path d="M3,3v18h18V3H3z M4.99,20c0.39-2.62,2.38-5.1,7.01-5.1s6.62,2.48,7.01,5.1H4.99z M9,10c0-1.65,1.35-3,3-3s3,1.35,3,3 c0,1.65-1.35,3-3,3S9,11.65,9,10z M12.72,13.93C14.58,13.59,16,11.96,16,10c0-2.21-1.79-4-4-4c-2.21,0-4,1.79-4,4 c0,1.96,1.42,3.59,3.28,3.93c-4.42,0.25-6.84,2.8-7.28,6V4h16v15.93C19.56,16.73,17.14,14.18,12.72,13.93z"></path>
- </svg></div>`;
-
- // Hide 'Your channel' button from the sidebar
- waitForElement('#contentContainer #endpoint[title="Your channel"]').then((yourChannelButton) => {
- yourChannelButton.parentNode.style.display = "none";
- });
-
- // Observe when Icon Dropdown changes
- const observer = new MutationObserver((mutations) => {
- const intervalId = setInterval(async () => {
- // Find 'Google Account' Button
- var googleAccountButton = await waitForElement('tp-yt-iron-dropdown #sections yt-multi-page-menu-section-renderer:nth-child(1) #endpoint:nth-child(1)');
-
- // Copy 'Google Account Button' to make sure it doesn't get too modified again
- if (!googleAccountButton.parentNode.hasAttribute('cloned')) {
- const newFullGoogleAccountButton = googleAccountButton.parentNode.cloneNode(true);
- const newGoogleAccountButton = newFullGoogleAccountButton.querySelector('#endpoint');
- newFullGoogleAccountButton.setAttribute('cloned', '');
- newFullGoogleAccountButton.setAttribute('prevHref', googleAccountButton.href);
- googleAccountButton.parentNode.parentNode.replaceChild(newFullGoogleAccountButton, googleAccountButton.parentNode);
- googleAccountButton = await waitForElement('tp-yt-iron-dropdown #sections yt-multi-page-menu-section-renderer:nth-child(1) #endpoint:nth-child(1)');
- }
-
- // Find 'View your channel' Button, Get the Channel URL, and replace it with 'Manage your Google Account'
- var viewYourChannelButton = await waitForElement('#channel-container #manage-account a:nth-child(1)');
- const channelUrl = viewYourChannelButton.hasAttribute('prevHref') ? viewYourChannelButton.getAttribute('prevHref') : viewYourChannelButton.href;
- viewYourChannelButton.setAttribute('prevHref', channelUrl);
-
- if (!viewYourChannelButton.parentNode.hasAttribute('cloned')) {
- const clonedViewYourChannelButton = viewYourChannelButton.cloneNode(true);
- clonedViewYourChannelButton.setAttribute('cloned', '');
- viewYourChannelButton.parentNode.replaceChild(clonedViewYourChannelButton, viewYourChannelButton);
- viewYourChannelButton = await waitForElement('#channel-container #manage-account a:nth-child(1)');
- }
-
- viewYourChannelButton.innerHTML = "Manage your Google Account";
- viewYourChannelButton.href = googleAccountButton.parentNode.getAttribute('prevHref');
- viewYourChannelButton.target = "_blank";
-
- // 'Google Account' Button Icons and Labels
- const googleAccountIcon = googleAccountButton.querySelector('#content-icon yt-icon');
- const googleAccountLabel = googleAccountButton.querySelector('#primary-text-container #label .yt-formatted-string');
-
- // Put things onto the copied 'Google Account' Button
- googleAccountButton.href = channelUrl;
- googleAccountButton.tabIndex = -1;
- googleAccountButton.dir = "auto";
- googleAccountLabel.innerHTML = "Your channel";
- googleAccountIcon.innerHTML = channelIcon;
-
- // Move 'YouTube Studio' Button below 'Your channel' Button
- const youTubeStudioButton = document.querySelector('tp-yt-iron-dropdown #endpoint[href^="https://studio.youtube.com"]');
- if (youTubeStudioButton) {
- insertAfter(youTubeStudioButton.parentNode, googleAccountButton.parentNode);
- }
-
- // Clear Interval so it doesn't run forever!
- clearInterval(intervalId);
- }, 100);
- });
-
- observer.observe((await waitForElement('#contentWrapper ytd-multi-page-menu-renderer #container')), {
- attributes: true,
- });
- })();