YT Youtube Miniplayer Killer Remove Delete

remove mini player in youtube

// ==UserScript==
// @name         YT Youtube Miniplayer Killer Remove Delete
// @namespace    http://tampermonkey.net/
// @version      3
// @description  remove mini player in youtube
// @author       SergoZar
// @match        https://*.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @license      GPLv3
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// ==/UserScript==

(function() {
    'use strict';

    // commands in menu
    ////////////////////////////////////////////////////////////////////
    console.log("AAAAAAAAAAAAAAAAAAAAAAAA");
    var commandIdF1 = null, commandIdF2 = null, commandIdF3 = null;
    var isF1 = true, isF2 = true, isF3 = true;

    function localStorageSave(){
        var iss = `${isF1-0}${isF2-0}${isF3-0}`;
        console.log("save", iss);
        localStorage.setItem("ytttttt", iss);
    }

    function localStorageLoad(){
        var iss = localStorage.getItem("ytttttt");
        if (iss){
            // я знаю що це пиздець але це працює
            // i know it sucks but it works
            console.log("load", iss);
            isF1 = iss[0] === "1";
            isF2 = iss[1] === "1";
            isF3 = iss[2] === "1";
            console.log("load",isF1,isF2,isF3);
        }
        else localStorageSave();
    }

    localStorageLoad();
    if(isF1) f1();
    if(isF2) f2();
    if(isF3) f3();

    function toggleF(f) {
             if (f == 1) isF1 = !isF1;
        else if (f == 2) isF2 = !isF2;
        else if (f == 3) isF3 = !isF3;

        localStorageSave();
        location.reload();
    }

    function commandF(isF, commandId, func, text){
        if (commandId !== null) GM_unregisterMenuCommand(commandId);
        commandId = GM_registerMenuCommand(`${isF ? '✔️':'❌'} ${text}`, func);
    }

    commandF(isF1, commandIdF1, function () { toggleF(1) }, "waiting miniplayer" );
    commandF(isF2, commandIdF2, function () { toggleF(2) }, "constant checking for presence of miniplayer");
    commandF(isF3, commandIdF3, function () { toggleF(3) }, 'press "i" again');

    ////////////////////////////////////////////////////////////////////



    // close when it appears .ytp-miniplayer-close-button
    // I don't know if it really works, but it seems to
    function f1(){
        console.log("Miniplayer Killer - f1 - waiting miniplayer ON");
        const targetNode = document.body;
        const config = { childList: true, subtree: true };
        const callback = function(mutationsList, observer) {
            for (let mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    const newElement = document.querySelector('.ytp-miniplayer-close-button');
                    if (newElement) {
                        if (newElement && document.querySelector(".ytp-miniplayer-ui").style.display !== "none"){
                            newElement.click();
                        }
                        observer.disconnect();
                    }
                }
            }
        };
        const observer = new MutationObserver(callback);
        observer.observe(targetNode, config);
    }


    // click close minuplayer. repeat 500ms
    // it will work guaranteed
    function f2(){
        console.log("Miniplayer Killer - f2 - constant checking for presence of miniplayer ON");
        setInterval(function(){
            var c = document.querySelector(".ytp-miniplayer-close-button");
            if (c && document.querySelector(".ytp-miniplayer-ui").style.display !== "none"){
                c.click();
            }
        },500);
    }


    // press i after i press
    // sometimes it may not work
    function f3(){
        console.log("Miniplayer Killer - f3 - press key i simulation ON");
        document.addEventListener('keydown', function(event) {
            if (event.keyCode === 73 && !event.ctrlKey && !event.altKey && !event.shiftKey && !['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName) && document.activeElement.id !== "contenteditable-root" ) {
                console.log("IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", document.activeElement);
                // press key i simulation
                document.dispatchEvent(new KeyboardEvent('keydown', {
                    key: 'i',
                    code: 'KeyI',
                    keyCode: 73,
                    charCode: 73,
                    which: 73,
                    bubbles: true,
                    cancelable: true
                }));
            }
        });
    }

    setInterval(function(){
        var button = document.querySelector(".ytp-miniplayer-button.ytp-button");
        if (button && button.style.display !== "none") button.style.display = "none";
    },250);
})();