YouTube Simplificator

Simplificates the youtube interface for a better user experience

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==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);
})();