// ==UserScript== // @name YouTube - Non-Rounded Design // @version 2.5.0 // @description This script disables YouTube's new rounded corners (reverts back to the layout from 2021.) // @author Magma_Craft // @license MIT // @match *://*.youtube.com/* // @namespace https://greasyfork.org/en/users/933798 // @icon https://www.youtube.com/favicon.ico // @run-at document-start // @grant none // @downloadURL none // ==/UserScript== // Attributes to remove from const ATTRS = [ ]; // Regular config keys. const CONFIGS = { BUTTON_REWORK: false } // Experiment flags. const EXPFLAGS = { kevlar_watch_metadata_refresh: false, kevlar_watch_modern_metapanel: false, kevlar_watch_modern_panels: false, web_rounded_containers: false, web_rounded_thumbnails: false, web_modern_dialogs: false, web_modern_chips: false, web_modern_subscribe: false, web_modern_buttons: false, web_modern_playlists: false, enable_programmed_playlist_redesign: false, web_amsterdam_playlists: false, web_searchbar_style: "default", web_button_rework: false, web_darker_dark_theme: false, kevlar_watch_cinematics: false, kevlar_refresh_on_theme_change: false, web_guide_ui_refresh: false, web_sheets_ui_refresh: false, web_snackbar_ui_refresh: false, web_segmented_like_dislike_button: false, web_animated_like: false, web_animated_like_lazy_load: false, kevlar_use_ytd_player: false } // Player flags // !!! USE STRINGS FOR VALUES !!! // For example: "true" instead of true const PLYRFLAGS = { web_player_move_autonav_toggle: "true" } class YTP { static observer = new MutationObserver(this.onNewScript); static _config = {}; static isObject(item) { return (item && typeof item === "object" && !Array.isArray(item)); } static mergeDeep(target, ...sources) { if (!sources.length) return target; const source = sources.shift(); if (this.isObject(target) && this.isObject(source)) { for (const key in source) { if (this.isObject(source[key])) { if (!target[key]) Object.assign(target, { [key]: {} }); this.mergeDeep(target[key], source[key]); } else { Object.assign(target, { [key]: source[key] }); } } } return this.mergeDeep(target, ...sources); } static onNewScript(mutations) { for (var mut of mutations) { for (var node of mut.addedNodes) { YTP.bruteforce(); } } } static start() { this.observer.observe(document, {childList: true, subtree: true}); } static stop() { this.observer.disconnect(); } static bruteforce() { if (!window.yt) return; if (!window.yt.config_) return; this.mergeDeep(window.yt.config_, this._config); } static setCfg(name, value) { this._config[name] = value; } static setCfgMulti(configs) { this.mergeDeep(this._config, configs); } static setExp(name, value) { if (!("EXPERIMENT_FLAGS" in this._config)) this._config.EXPERIMENT_FLAGS = {}; this._config.EXPERIMENT_FLAGS[name] = value; } static setExpMulti(exps) { if (!("EXPERIMENT_FLAGS" in this._config)) this._config.EXPERIMENT_FLAGS = {}; this.mergeDeep(this._config.EXPERIMENT_FLAGS, exps); } static decodePlyrFlags(flags) { var obj = {}, dflags = flags.split("&"); for (var i = 0; i < dflags.length; i++) { var dflag = dflags[i].split("="); obj[dflag[0]] = dflag[1]; } return obj; } static encodePlyrFlags(flags) { var keys = Object.keys(flags), response = ""; for (var i = 0; i < keys.length; i++) { if (i > 0) { response += "&"; } response += keys[i] + "=" + flags[keys[i]]; } return response; } static setPlyrFlags(flags) { if (!window.yt) return; if (!window.yt.config_) return; if (!window.yt.config_.WEB_PLAYER_CONTEXT_CONFIGS) return; var conCfgs = window.yt.config_.WEB_PLAYER_CONTEXT_CONFIGS; if (!("WEB_PLAYER_CONTEXT_CONFIGS" in this._config)) this._config.WEB_PLAYER_CONTEXT_CONFIGS = {}; for (var cfg in conCfgs) { var dflags = this.decodePlyrFlags(conCfgs[cfg].serializedExperimentFlags); this.mergeDeep(dflags, flags); this._config.WEB_PLAYER_CONTEXT_CONFIGS[cfg] = { serializedExperimentFlags: this.encodePlyrFlags(dflags) } } } } window.addEventListener("yt-page-data-updated", function tmp() { YTP.stop(); for (i = 0; i < ATTRS.length; i++) { document.getElementsByTagName("html")[0].removeAttribute(ATTRS[i]); } window.removeEventListener("yt-page-date-updated", tmp); }); YTP.start(); YTP.setCfgMulti(CONFIGS); YTP.setExpMulti(EXPFLAGS); YTP.setPlyrFlags(PLYRFLAGS); function $(q) { return document.querySelector(q); } // Fix for Return YouTube Dislike including action buttons const abtnconfig = { unsegmentLikeButton: false, noFlexibleItems: true }; function updateBtns() { var watchFlexy = document.querySelector("ytd-watch-flexy"); var results = watchFlexy.data.contents.twoColumnWatchNextResults.results.results.contents; for (var i = 0; i < results.length; i++) { if (results[i].videoPrimaryInfoRenderer) { var actions = results[i].videoPrimaryInfoRenderer.videoActions.menuRenderer; if (abtnconfig.unsegmentLikeButton) { if (actions.topLevelButtons[0].segmentedLikeDislikeButtonRenderer) { var segmented = actions.topLevelButtons[0].segmentedLikeDislikeButtonRenderer; actions.topLevelButtons.splice(0, 1); actions.topLevelButtons.unshift(segmented.dislikeButton); actions.topLevelButtons.unshift(segmented.likeButton); } } if (abtnconfig.noFlexibleItems) { for (var i = 0; i < actions.flexibleItems.length; i++) { actions.topLevelButtons.push(actions.flexibleItems[i].menuFlexibleItemRenderer.topLevelButton); } delete actions.flexibleItems } } } var temp = watchFlexy.data; watchFlexy.data = {}; watchFlexy.data = temp; } document.addEventListener("yt-page-data-updated", (e) => { if (e.detail.pageType == "watch") { updateBtns(); } }); addEventListener('yt-page-data-updated', function() { if(!location.pathname.startsWith('/watch')) return; var lds = $('ytd-video-primary-info-renderer div#top-level-buttons-computed'); var like = $('ytd-video-primary-info-renderer div#segmented-like-button > ytd-toggle-button-renderer'); var share = $('ytd-video-primary-info-renderer div#top-level-buttons-computed > ytd-segmented-like-dislike-button-renderer + ytd-button-renderer'); lds.insertBefore(like, share); like.setAttribute('class', like.getAttribute('class').replace('ytd-segmented-like-dislike-button-renderer', 'ytd-menu-renderer force-icon-button')); like.removeAttribute('is-paper-button-with-icon'); like.removeAttribute('is-paper-button'); like.setAttribute('style-action-button', ''); like.setAttribute('is-icon-button', ''); like.querySelector('a').insertBefore(like.querySelector('yt-formatted-string'), like.querySelector('tp-yt-paper-tooltip')); try { like.querySelector('paper-ripple').remove(); } catch(e) {} var paper = like.querySelector('tp-yt-paper-button'); paper.removeAttribute('style-target'); paper.removeAttribute('animated'); paper.removeAttribute('elevation'); like.querySelector('a').insertBefore(paper.querySelector('yt-icon'), like.querySelector('yt-formatted-string')); paper.outerHTML = paper.outerHTML.replace('', ''); paper = like.querySelector('yt-icon-button'); paper.querySelector('button#button').appendChild(like.querySelector('yt-icon')); var dislike = $('ytd-video-primary-info-renderer div#segmented-dislike-button > ytd-toggle-button-renderer'); lds.insertBefore(dislike, share); $('ytd-video-primary-info-renderer ytd-segmented-like-dislike-button-renderer').remove(); dislike.setAttribute('class', dislike.getAttribute('class').replace('ytd-segmented-like-dislike-button-renderer', 'ytd-menu-renderer force-icon-button')); dislike.removeAttribute('has-no-text'); dislike.setAttribute('style-action-button', ''); var dlabel = document.createElement('yt-formatted-stringx'); dlabel.setAttribute('id', 'text'); if(dislike.getAttribute('class').includes('style-default-active')) dlabel.setAttribute('class', dlabel.getAttribute('class').replace('style-default', 'style-default-active')); dislike.querySelector('a').insertBefore(dlabel, dislike.querySelector('tp-yt-paper-tooltip')); $('ytd-video-primary-info-renderer').removeAttribute('flex-menu-enabled'); }); // CSS adjustments and UI fixes (function() { ApplyCSS(); function ApplyCSS() { var styles = document.createElement("style"); styles.innerHTML=` #cinematics.ytd-watch-flexy { display: none; } div#clarify-box.attached-message.style-scope.ytd-watch-flexy { margin-top: 0px; } ytd-clarification-renderer.style-scope.ytd-item-section-renderer { border: 1px solid; border-color: #0000001a; border-radius: 0px; } ytd-clarification-renderer.style-scope.ytd-watch-flexy { border: 1px solid; border-color: #0000001a; border-radius: 0px; } yt-formatted-string.description.style-scope.ytd-clarification-renderer { font-size: 1.4rem; } div.content-title.style-scope.ytd-clarification-renderer { padding-bottom: 4px; } div.ytp-sb-subscribe.ytp-sb-rounded, .ytp-sb-unsubscribe.ytp-sb-rounded { border-radius: 2px; } .yt-spec-button-shape-next--size-m { background-color: transparent; padding-right: 6px; } .yt-spec-button-shape-next--mono.yt-spec-button-shape-next--tonal { background-color: transparent; } div.cbox.yt-spec-button-shape-next--button-text-content { display: none; } div.yt-spec-button-shape-next__secondary-icon { display: none; } div#ytp-id-18.ytp-popup,ytp-settings-menu.ytp-rounded-menu { border-radius: 2px; } div.branding-context-container-inner.ytp-rounded-branding-context { border-radius: 2px; } div.iv-card.iv-card-video.ytp-rounded-info { border-radius: 0px; } div.iv-card.iv-card-playlist.ytp-rounded-info { border-radius: 0px; } div.iv-card.iv-card-channel.ytp-rounded-info { border-radius: 0px; } div.iv-card.ytp-rounded-info { border-radius: 0px; } .ytp-tooltip.ytp-rounded-tooltip.ytp-text-detail.ytp-preview, .ytp-tooltip.ytp-rounded-tooltip.ytp-text-detail.ytp-preview .ytp-tooltip-bg { border-radius: 0px; } .ytp-ce-video.ytp-ce-medium-round, .ytp-ce-playlist.ytp-ce-medium-round, .ytp-ce-medium-round .ytp-ce-expanding-overlay-background { border-radius: 0px; }` document.head.appendChild(styles); } })();