YouTube Simplificator

Simplificates the youtube interface for a better user experience

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         YouTube Simplificator
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Simplificates the youtube interface for a better user experience
// @author       Stavros
// @match        https://www.youtube.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // Function to remove specific elements
    function removeElements() {
        const selectors = [
            'button.ytp-button[data-tooltip-target-id="ytp-autonav-toggle-button"]',
            '.ytp-miniplayer-button',
            '.ytp-next-button.ytp-button',
            '.ytp-prev-button.ytp-button',
            '.yt-spec-touch-feedback-shape',
            '.yt-spec-touch-feedback-shape--touch-response',
            '.style-scope.ytd-masthead #guide-button',
            '.style-scope.ytd-masthead #guide-button yt-icon',
            '.ytp-fullerscreen-edu-chevron',
            '.ytp-fullerscreen-edu-button',
            '.ytp-fullerscreen-edu-button-subtle',
            '.yt-spec-button-shape-next.yt-spec-button-shape-next--tonal.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--size-s.yt-spec-button-shape-next--icon-leading',
            '.style-scope.ytd-structured-description-content-renderer',
            '.yt-spec-button-view-model.style-scope.ytd-menu-renderer',
            '.ytp-subtitles-button.ytp-button', // Subtitles button
            'ytd-expandable-metadata-renderer.style-scope.ytd-watch-flexy' // Added element
        ];

        // Remove general elements from the selectors list
        selectors.forEach(selector => {
            document.querySelectorAll(selector).forEach(element => element.remove());
        });

        // Remove ONLY the channel icon inside the description (but not the one at the top)
        document.querySelectorAll('#description .style-scope.yt-img-shadow').forEach(element => element.remove());

        // Remove the item with ID title inside the description
        const descriptionTitleElement = document.querySelector('#description #title');
        if (descriptionTitleElement) {
            descriptionTitleElement.remove();
        }

        // Remove the item with ID subtitle inside the description
        const descriptionSubtitleElement = document.querySelector('#description #subtitle');
        if (descriptionSubtitleElement) {
            descriptionSubtitleElement.remove();
        }

        // Remove the icon with the specified classes in the description
        document.querySelectorAll('#description .yt-spec-button-shape-next.yt-spec-button-shape-next--outline.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--size-m.yt-spec-button-shape-next--icon-leading').forEach(element => element.remove());

        // Completely remove elements with the specific class combination
        document.querySelectorAll('.yt-core-attributed-string__link.yt-core-attributed-string__link--call-to-action-color.yt-core-attributed-string--link-inherit-color')
            .forEach(element => element.remove());
    }

    // Observe DOM changes to remove dynamically added elements
    const observer = new MutationObserver(() => removeElements());
    observer.observe(document.body, { childList: true, subtree: true });

    // Reinforce removal with an interval
    setInterval(removeElements, 1000);

    // Initial cleanup when the window loads
    window.addEventListener('load', removeElements);
})();