Youtube New UI Fix

Fixes the new UI to one that resembles old one

Versión del día 21/08/2015. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name        Youtube New UI Fix
// @namespace   YtNewUIFix
// @description Fixes the new UI to one that resembles old one
// @author      Roy Scheerens
// @include     https://www.youtube.com/*
// @version     1.8.7
// @grant       none
// ==/UserScript==
/* Original typescript code: https://copy.com/TzRldsobyPt8XcKA */
var YtNewUIFix = (function () {
    function YtNewUIFix() {
        this.watchLaterAdded = false;
        this.playButtonReplaced = false;
        this.moviePlayer = document.querySelector("div.html5-video-player");
        var api = document.querySelector(".player-api");
        this.mouseMoveEvent = document.createEvent('Events');
        this.mouseMoveEvent.initEvent("mousemove", true, false);
        this.addWatchLater = this.getStorage("addWatchLater", true);
        this.autoHideFullScreen = this.getStorage("autoHideFullScreen", false);
        this.removeAllAnimations = this.getStorage("removeAllAnimations", false);
    }
    YtNewUIFix.prototype.applyFix = function () {
        var _this = this;
        this.addCSS();
        if (localStorage) {
            this.addOptions();
        }
        setInterval(function () {
            _this.checkMoviePlayer();
            _this.checkWatchLater();
            _this.removePlayAnim();
        }, 1000);
    };
    YtNewUIFix.prototype.removeSearchPlaceHolder = function () {
        var search = document.querySelector("input#masthead-search-term");
        if (search) {
            search.placeholder = "";
        }
    };
    YtNewUIFix.prototype.getStorage = function (key, defaultVal) {
        if (!localStorage) {
            return defaultVal;
        }
        var result = localStorage.getItem(key);
        if (result) {
            return result == "true";
        }
        else {
            return defaultVal;
        }
    };
    YtNewUIFix.prototype.addCSS = function () {
        var css = document.createElement("style");
        css.id = "YoutubeNewUIFix-Style";
        css.textContent = "/* fixing the colors */\n            .ytp-chrome-bottom { background-color: #1B1B1B!important; }\n            .ytp-svg-fill { fill: #8E8E8E!important; }\n            #movie_player { height: calc(100% + 35px)!important; }\n            .html5-video-content { background-color: black!important; }\n            .ytp-popup, .ytp-panelpopup { background: rgb(28, 28, 28) none repeat scroll 0% 0%!important; }\n\n            /* moving the content below down, but not when the 'Resize YT To Window Size' script is active (.ytwp-window-player) */\n            body:not(.ytwp-window-player) #watch7-content, body:not(.ytwp-window-player) div.watch-stage-mode #watch7-sidebar { transform: translateY(35px)!important; }\n\n            /* controls always visible */\n            " + (this.autoHideFullScreen ? ".html5-video-player:not(.ytp-big-mode) " : "") + ".ytp-chrome-bottom { opacity: 1!important; }\n\n            /* move controls to the right place */\n            #movie_player { height: calc(100% + 35px)!important; }\n            .ytp-gradient-bottom, .ytp-gradient-top, .ytp-chrome-top { display: none!important; }\n            .ytp-chrome-controls { width: calc(100% + 24px)!important; transform: translateX(-12px)!important; }\n\n            /* Fix the theater black bars */\n            .watch-stage-mode #theater-background::after { content: ''; height: 35px; bottom: -35px; left: 0px; position: absolute; background-color: black; width: 100%; }\n\n            /* scale down the controls */\n            .ytp-chrome-bottom { transform: translateY(5px)!important; }\n            .ytp-chrome-bottom::before {content: ''; bottom: 0px; top: -1px; left: -12px; right: -12px; position: absolute; background-color: #1B1B1B; z-index: -1000; }\n            .ytp-chrome-controls { height: 31px!important; line-height: 31px!important; font-size: 11px!important; }\n            .ytp-chrome-controls .ytp-button:not(.ytp-play-button):not(.ytp-watch-later-button) { width: 32px!important; }\n            .ytp-play-button { width: 41px!important; }\n            .ytp-progress-bar-container:not(.ytp-pulling) { height: 5px!important; }\n\n            /* scale down the controls big mode */\n            .ytp-big-mode .ytp-chrome-bottom { transform: translateY(24px)!important; }\n            .html5-video-container { height: 100%!important; }\n            .ytp-cards-button { top: 0!important } /* needed or else focusing the card will move it under the controls */\n            " + (this.autoHideFullScreen ? "" : ".html5-main-video { max-height: calc(100vh - 35px)!important; }") + " /* vh instead of % because chrome is weird */\n            .ytp-big-mode .ytp-progress-bar-container { transform: translateY(-1px)!important; }\n\n            /* Fix the quality badge (red HD rectangle) */\n            .ytp-settings-button.ytp-hd-quality-badge::after,.ytp-settings-button.ytp-4k-quality-badge::after,.ytp-settings-button.ytp-5k-quality-badge::after,.ytp-settings-button.ytp-8k-quality-badge::after\n            {\n    \t        content:''!important;\n    \t        position:absolute!important;\n    \t        top:6px!important;\n    \t        right:4px!important;\n    \t        height:9px!important;\n    \t        width:13px!important;\n    \t        background-color:#f12b24!important;\n    \t        border-radius:1px!important;\n    \t        line-height:normal!important;\n    \t        background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMTMgOSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsLW9wYWNpdHk9IjAuNjQ3MSIgZmlsbD0iIzAwMDAwMCIgZD0iTTUsNyBMNiw3IEw2LDggTDUsOCBMNSw3IFogTTEwLDMgTDEwLDQgTDgsNCBMOCwzIEwxMCwzIFogTTMsNiBMMyw1IEw1LDUgTDUsNiBMMyw2IFogTTIsNyBMMyw3IEwzLDggTDIsOCBMMiw3IFogTTcsNyBMMTAsNyBMMTAsOCBMNyw4IEw3LDcgWiBNMTAsNiBMMTEsNiBMMTEsNyBMMTAsNyBMMTAsNiBaIj48L3BhdGg+DQogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI0ZGRkZGRiIgZD0iTTUsNyBMNSw2IEw1LDUgTDMsNSBMMyw2IEwzLDcgTDIsNyBMMiwyIEwzLDIgTDMsNCBMNSw0IEw1LDIgTDYsMiBMNiw3IEw1LDcgWiBNMTEsNiBMMTAsNiBMMTAsNyBMNyw3IEw3LDIgTDEwLDIgTDEwLDMgTDExLDMgTDExLDYgWiBNMTAsNCBMMTAsMyBMOCwzIEw4LDQgTDgsNiBMMTAsNiBMMTAsNCBaIj48L3BhdGg+DQo8L3N2Zz4NCg==')!important;\n    \t        padding: 0!important;\n            }\n\n            /* Fix the red line under the subtitle icon */\n            .ytp-chrome-controls .ytp-button[aria-pressed=\"true\"]::after\n            {\n                width: 17px!important;\n                height: 2px!important;\n                left: 8px!important;\n                bottom: 7px!important;\n            }\n\n            /* Makes sure the captions/subtitles are at the correct height and don't move up and down */\n            .ytp-player-content, .ytp-subtitles-player-content { bottom: 49px!important; }\n\n            /* rules for the watch later button */\n            .ytp-watch-later-button { width: 24px!important; float: right!important; margin-right: 2px!important; }\n            .ytp-tooltip-image-enabled { bottom: 49px!important; top: auto!important; }\n\n            /* rules for the options */\n            h3.optionChanged::after { content: 'Refresh page to save changes'; color: red; position: relative; left: 15px; }\n\n            /* no animations */\n            " + (this.removeAllAnimations ? ".ytp-bezel { display: none!important; }" : "") + "\n            " + (this.removeAllAnimations ? ".html5-video-player div { transition-property: none !important; animation: none !important; }" : "");
        document.head.appendChild(css);
    };
    YtNewUIFix.prototype.addOptions = function () {
        var content = document.querySelector("div.account-content");
        var footer = document.querySelector("div.account-footer");
        if (content && footer) {
            var accSection = document.createElement("div");
            accSection.classList.add("account-section");
            var header = document.createElement("h3");
            header.classList.add("account-section-header");
            header.textContent = "Youtube New UI Fix Options";
            accSection.appendChild(header);
            accSection.appendChild(this.createOption(this.addWatchLater, "addWatchLater", "Add the watch later button to the controls", header));
            accSection.appendChild(this.createOption(this.autoHideFullScreen, "autoHideFullScreen", "Have the controls automatically hide in full-screen mode", header));
            accSection.appendChild(this.createOption(this.removeAllAnimations, "removeAllAnimations", "Remove all animations", header));
            content.insertBefore(accSection, footer);
        }
    };
    YtNewUIFix.prototype.createOption = function (optionValue, name, description, changeNotifier) {
        var accDiv = document.createElement("div");
        accDiv.classList.add("account-section-setting");
        accDiv.innerHTML = "\n\t\t    <label>\n\t\t\t    <span class='yt-uix-form-input-checkbox-container " + (optionValue ? "checked" : "") + "'>\n                    <input class='yt-uix-form-input-checkbox' name='" + name + "' " + (optionValue ? "checked='checked'" : "") + " type='checkbox'>\n                    <span class='yt-uix-form-input-checkbox-element'></span>\n                </span>\n\t\t\t    " + description + "\n\t\t    </label>";
        var accInput = accDiv.querySelector("input[name='" + name + "']");
        accInput.onclick = function () {
            localStorage.setItem(name, String(accInput.checked));
            changeNotifier.classList.add("optionChanged");
        };
        return accDiv;
    };
    YtNewUIFix.prototype.checkWatchLater = function () {
        if (this.addWatchLater && !this.watchLaterAdded && this.moviePlayer) {
            var watchLater = document.querySelector("button.ytp-watch-later-button");
            if (watchLater) {
                var qaulitybutton = (document.querySelector("button.ytp-subtitles-button") || document.querySelector("button.ytp-settings-button"));
                if (qaulitybutton) {
                    qaulitybutton.parentNode.insertBefore(watchLater, qaulitybutton.nextSibling);
                    this.watchLaterAdded = true;
                }
            }
        }
    };
    YtNewUIFix.prototype.checkMoviePlayer = function () {
        if (!this.moviePlayer || !this.moviePlayer.parentNode) {
            this.moviePlayer = document.querySelector("div.html5-video-player");
        }
        else if (!this.moviePlayer.classList.contains("seeking-mode") && (!this.autoHideFullScreen || !this.moviePlayer.classList.contains("ytp-fullscreen"))) {
            this.moviePlayer.dispatchEvent(this.mouseMoveEvent);
        }
    };
    YtNewUIFix.prototype.removePlayAnim = function () {
        if (this.removeAllAnimations && !this.playButtonReplaced) {
            var button = document.querySelector('button.ytp-play-button');
            var buttonClone = button.cloneNode(false);
            var video = document.querySelector("video.html5-main-video");
            if (button && buttonClone && video) {
                var svgPlay = " <svg width='100%' height='100%' viewBox='0 0 36 36' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>\n\t                                <defs>\n\t\t                                <path id='ytp-19' d='M11,10 L18,13.74 18,22.28 11,26 M18,13.74 L26,18 26,18 18,22.28'></path>\n\t                                </defs>\n\t                                <use xlink:href='#ytp-19' class='ytp-svg-shadow'></use>\n\t                                <use xlink:href='#ytp-19' class='ytp-svg-fill'></use>\n                                </svg>";
                var svgPause = "<svg width='100%' height='100%' viewBox='0 0 36 36' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>\n\t                                <defs>\n\t\t                                <path id='ytp-19' d='M11,10 L17,10 17,26 11,26 M20,10 L26,10 26,26 20,26'></path>\n\t                                </defs>\n\t                                <use xlink:href='#ytp-19' class='ytp-svg-shadow'></use>\n\t                                <use xlink:href='#ytp-19' class='ytp-svg-fill'></use>\n                                </svg>";
                var svgReplay = "<svg width='100%' height='100%' viewBox='0 0 36 36' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>\n\t                                <defs>\n\t\t                                <path id='ytp-19' d='M26.466,21.04 L30.966,16 L27.8,16 C26.873,11.435 22.841,8 18.001,8 C12.474,8 8,12.477 8,18 C8,23.523 12.474,28 18.001,28 C21.181,28 24.009,26.511 25.841,24.197 L24.005,22.361 C22.652,24.217 20.471,25.427 18.001,25.427 C13.899,25.427 10.569,22.101 10.569,18 C10.569,13.898 13.899,10.572 18.001,10.572 C21.407,10.572 24.268,12.871 25.142,16 L21.966,16 L26.466,21.04'></path>\n\t                                </defs>\n\t                                <use xlink:href='#ytp-19' class='ytp-svg-shadow'></use>\n\t                                <use xlink:href='#ytp-19' class='ytp-svg-fill'></use>\n                                </svg>";
                if (video.paused) {
                    buttonClone.innerHTML = svgPlay;
                }
                else if (video.ended) {
                    buttonClone.innerHTML = svgReplay;
                }
                else {
                    buttonClone.innerHTML = svgPause;
                }
                video.onplay = function () { return buttonClone.innerHTML = svgPause; };
                video.onpause = function () { return buttonClone.innerHTML = svgPlay; };
                video.onended = function () { return buttonClone.innerHTML = svgReplay; };
                buttonClone.onclick = function () {
                    if (video.paused) {
                        video.play();
                    }
                    else {
                        video.pause();
                    }
                };
                button.parentElement.replaceChild(buttonClone, button);
                this.playButtonReplaced = true;
            }
        }
    };
    return YtNewUIFix;
})();
new YtNewUIFix().applyFix();
//# sourceMappingURL=Youtube_New_UI_Fix.user.js.map