Youtube New UI Fix

Fixes the new UI to one that resembles old one

Versione datata 13/08/2015. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==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.3
// @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.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-panelpopup { background: rgb(28, 28, 28) none repeat scroll 0% 0%!important; }\n\n            /* moving the content below down */\n            #watch7-content, 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                left: 8px!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 = 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