Youtube New UI Fix

Moves the controls under the video and makes the UI look like it was before august 2015

当前为 2016-09-05 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Youtube New UI Fix
  3. // @namespace YtNewUIFix
  4. // @description Moves the controls under the video and makes the UI look like it was before august 2015
  5. // @author Roy Scheerens
  6. // @homepageURL https://greasyfork.org/en/scripts/11485-youtube-new-ui-fix
  7. // @include https://www.youtube.com/*
  8. // @include https://youtube.googleapis.com/embed/*
  9. // @include https://www.youtube-nocookie.com/embed/*
  10. // @version 2.0.0
  11. // @grant none
  12. // ==/UserScript==
  13. /* Original typescript code: https://mega.nz/#!gVIDxJgZ!-xXTYG6lNc7aGtW4ITPq0yNe62emBNGdfKg9cB58whs */
  14. var YtNewUIFix = (function () {
  15. function YtNewUIFix() {
  16. this.isEmbedded = window.top != window.self;
  17. this.addWatchLater = this.getStorage("addWatchLater", true);
  18. this.hideControlsFullscreen = this.getStorage("hideControlsFullscreen", false);
  19. this.removeAnimations = this.getStorage("removeAnimations", false);
  20. this.optionsReversed = this.getStorage("optionsReversed", false);
  21. this.progressBigger = this.getStorage("progressBigger", false);
  22. this.showTitleOnHover = this.getStorage("showTitleOnHover", false);
  23. this.alwaysVolume = this.getStorage("alwaysVolume", false);
  24. }
  25. YtNewUIFix.prototype.applyFix = function () {
  26. var _this = this;
  27. if (document.body.innerHTML.length === 0) {
  28. //empty page can be ignored (in share tab before it's active)
  29. return;
  30. }
  31. this.addCSS();
  32. if (localStorage) {
  33. this.addOptions();
  34. }
  35. this.checkMoviePlayer();
  36. window.setInterval(function () {
  37. _this.checkMoviePlayer();
  38. }, 1000);
  39. };
  40. YtNewUIFix.prototype.getStorage = function (key, defaultVal) {
  41. if (!localStorage) {
  42. return defaultVal;
  43. }
  44. var result = localStorage.getItem(key);
  45. if (result) {
  46. return result == "true";
  47. }
  48. else {
  49. return defaultVal;
  50. }
  51. };
  52. YtNewUIFix.timeFormat = function (t) {
  53. t = 0 > t ? 0 : Math.round(t);
  54. return 3600 <= t ? "" + Math.floor(t / 3600) + ":" + ("0" + Math.floor(t / 60) % 60).slice(-2) + ":" + ("0" + t % 60).slice(-2) : "" + Math.floor(t / 60) % 60 + ":" + ("0" + t % 60).slice(-2);
  55. };
  56. YtNewUIFix.prototype.checkMoviePlayer = function () {
  57. if (!this.moviePlayer || !this.moviePlayer.parentNode) {
  58. this.moviePlayer = document.querySelector("div.html5-video-player");
  59. if (this.moviePlayer && this.moviePlayer.parentNode) {
  60. var video = document.querySelector(".html5-main-video");
  61. var playProgress = document.querySelector(".ytp-play-progress");
  62. var loadProgress = document.querySelector(".ytp-load-progress");
  63. var currentTime = document.querySelector(".ytp-time-current");
  64. if (video) {
  65. if (playProgress && currentTime) {
  66. video.addEventListener("timeupdate", function () {
  67. playProgress.style.transform = "scaleX(" + (video.currentTime / video.duration) + ")";
  68. currentTime.innerText = YtNewUIFix.timeFormat(video.currentTime);
  69. });
  70. }
  71. if (loadProgress) {
  72. video.addEventListener("progress", function () {
  73. loadProgress.style.transform = "scaleX(" + (video.buffered.end(video.buffered.length - 1) / video.duration) + ")";
  74. });
  75. }
  76. }
  77. }
  78. }
  79. if (this.moviePlayer) {
  80. console.log((this.isEmbedded ? "emb " : "not emb ") + (this.hideControlsFullscreen ? "hide in fullscreen" : "don't hide in fullscreen"));
  81. if (this.hideControlsFullscreen) {
  82. this.moviePlayer.classList.add("auto-hide-fullscreen");
  83. }
  84. if (this.addWatchLater) {
  85. var watchLater = document.querySelector(".ytp-chrome-top .ytp-watch-later-button");
  86. var settingsButton = document.querySelector(".ytp-settings-button");
  87. if (watchLater) {
  88. settingsButton.parentNode.insertBefore(watchLater, settingsButton);
  89. }
  90. }
  91. if (this.showTitleOnHover) {
  92. this.moviePlayer.classList.remove("ytp-hide-info-bar");
  93. }
  94. }
  95. };
  96. YtNewUIFix.prototype.addCSS = function () {
  97. var css = "";
  98. css = this.fixColors(css);
  99. css = this.fixControls(css);
  100. css = this.fixBigMode(css);
  101. css = this.addExtras(css);
  102. var style = document.createElement("style");
  103. style.id = "YoutubeNewUIFix-Style";
  104. style.textContent = css;
  105. document.head.appendChild(style);
  106. };
  107. YtNewUIFix.prototype.fixControls = function (css) {
  108. //options
  109. css += "h3.optionChanged::after { content: 'Refresh page to save changes'; color: red; position: relative; left: 15px; }\n\n";
  110. ///* moved to options */css += "html:not(.floater) .html5-video-player { height: calc(100% + 35px)!important; }\n";
  111. css += ".html5-video-container { height: 100%; }";
  112. css += ".html5-video-player:not(.auto-hide-fullscreen):not(.ytp-hide-controls) .html5-main-video, .html5-video-player:not(.ytp-fullscreen):not(.ytp-hide-controls) .html5-main-video, .html5-video-player:not(.auto-hide-fullscreen):not(.ytp-fullscreen):not(.ytp-hide-controls) .html5-main-video { height: calc(100% - 35px)!important; }";
  113. css += ".html5-video-player:not(.auto-hide-fullscreen):not(.ytp-hide-controls) .ytp-chrome-bottom, .html5-video-player:not(.ytp-fullscreen):not(.ytp-hide-controls) .ytp-chrome-bottom, .html5-video-player:not(.auto-hide-fullscreen):not(.ytp-fullscreen):not(.ytp-hide-controls) .ytp-chrome-bottom { opacity: 1!important; }\n";
  114. css += ".ytp-chrome-bottom { left: 0 !important; }\n";
  115. css += ".ytp-chrome-controls { margin: 0 -12px; }\n";
  116. css += "#placeholder-player { padding-bottom: 35px; }\n";
  117. css += "body:not(.ytwp-window-player) #page:not(.watch-stage-mode) #watch7-sidebar { transform: translateY(-35px); }\n";
  118. css += ".html5-main-video { top: 0!important; }\n";
  119. css += "#theater-background { padding-bottom: 35px; }\n\n";
  120. // progressbar
  121. css += ".ytp-progress-bar-container:not(.ytp-pulling) { height: 5px!important; bottom: 30.5px!important; }\n";
  122. css += ".ytp-progress-list { transform-origin: center top; }\n\n";
  123. css += ".ytp-big-mode .ytp-progress-list { -moz-transform: scaleY(0.6); -ms-transform: scaleY(0.6); -webkit-transform: scaleY(0.6); transform: scaleY(0.6); }\n\n";
  124. // scale down
  125. css += ".ytp-chrome-bottom { height: 35px!important; padding: 0!important; }\n";
  126. css += ".ytp-chrome-controls .ytp-button:not(.ytp-watch-later-button) { width: 33px!important; }\n";
  127. css += ".ytp-chrome-controls .ytp-watch-later-button { width: 24px!important; }\n";
  128. css += ".ytp-left-controls { margin-left: 5px }\n";
  129. css += ".ytp-time-display { height: 31px; line-height: 32px!important; font-size: 12px!important; }\n";
  130. css += ".ytp-left-controls, .ytp-right-controls { height: 32px!important; margin-top: 3px; line-height: 36px; }\n\n";
  131. // badges
  132. css += ".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 { content:''!important; top:6px!important; right:4px!important; height:9px!important; width:13px!important; padding: 0!important; }\n";
  133. css += ".ytp-settings-button.ytp-hd-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik01LDcgTDYsNyBMNiw4IEw1LDggTDUsNyBaIE0xMCwzIEwxMCw0IEw4LDQgTDgsMyBMMTAsMyBaIE0zLDYgTDMsNSBMNSw1IEw1LDYgTDMsNiBaIE0yLDcgTDMsNyBMMyw4IEwyLDggTDIsNyBaIE03LDcgTDEwLDcgTDEwLDggTDcsOCBMNyw3IFogTTEwLDYgTDExLDYgTDExLDcgTDEwLDcgTDEwLDYgWiIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwLjY0NzEiIGZpbGwtcnVsZT0iZXZlbm9kZCIgLz48cGF0aCBkPSJNNSw3IEw1LDYgTDUsNSBMMyw1IEwzLDYgTDMsNyBMMiw3IEwyLDIgTDMsMiBMMyw0IEw1LDQgTDUsMiBMNiwyIEw2LDcgTDUsNyBaIE0xMSw2IEwxMCw2IEwxMCw3IEw3LDcgTDcsMiBMMTAsMiBMMTAsMyBMMTEsMyBMMTEsNiBaIE0xMCw0IEwxMCwzIEw4LDMgTDgsNCBMOCw2IEwxMCw2IEwxMCw0IFoiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgLz48L3N2Zz4=)!important; }";
  134. css += ".ytp-settings-button.ytp-4k-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0xMCw0IEwxMSw0IEwxMSw1IEwxMCw1IEwxMCw0IFogTTEwLDcgTDExLDcgTDExLDggTDEwLDggTDEwLDcgWiBNOCw1IEwxMCw1IEwxMCw2IEw4LDYgTDgsNSBaIE03LDcgTDgsNyBMOCw4IEw3LDggTDcsNyBaIE01LDYgTDYsNiBMNiw3IEw1LDcgTDUsNiBaIE00LDcgTDUsNyBMNSw4IEw0LDggTDQsNyBaIE0yLDYgTDQsNiBMNCw3IEwyLDcgTDIsNiBaIE0zLDQgTDQsNCBMNCw1IEwzLDUgTDMsNCBaIiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjAuNjQ3MSIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjxwYXRoIGQ9Ik0xMSw1IEwxMSw3IEwxMCw3IEwxMCw2IEwxMCw1IEwxMSw1IFogTTEwLDUgTDgsNSBMOCw2IEw4LDcgTDcsNyBMNywyIEw4LDIgTDgsNCBMMTAsNCBMMTAsNSBaIE00LDQgTDMsNCBMMyw1IEw0LDUgTDQsNCBaIE00LDcgTDQsNiBMMiw2IEwyLDQgTDMsNCBMMywzIEw0LDMgTDQsMiBMNSwyIEw1LDUgTDYsNSBMNiw2IEw1LDYgTDUsNyBMNCw3IFogTTEwLDIgTDExLDIgTDExLDQgTDEwLDQgTDEwLDIgWiIgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjwvc3ZnPg==)!important; }";
  135. css += ".ytp-settings-button.ytp-5k-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0xMCw0IEwxMSw0IEwxMSw1IEwxMCw1IEwxMCw0IFogTTEwLDcgTDExLDcgTDExLDggTDEwLDggTDEwLDcgWiBNOCw1IEwxMCw1IEwxMCw2IEw4LDYgTDgsNSBaIE03LDcgTDgsNyBMOCw4IEw3LDggTDcsNyBaIE01LDYgTDYsNiBMNiw3IEw1LDcgTDUsNiBaIE0yLDcgTDUsNyBMNSw4IEwyLDggTDIsNyBaIE0yLDUgTDUsNSBMNSw2IEwyLDYgTDIsNSBaIiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjAuNjQ3MSIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjxwYXRoIGQ9Ik0xMSw1IEwxMSw3IEwxMCw3IEwxMCw2IEwxMCw1IEwxMSw1IE0xMCw1IEw4LDUgTDgsNiBMOCw3IEw3LDcgTDcsMiBMOCwyIEw4LDQgTDEwLDQgTDEwLDUgTTEwLDIgTDExLDIgTDExLDQgTDEwLDQgTDEwLDIgTTIsNiBMNSw2IEw1LDcgTDIsNyBNNSw1IEw2LDUgTDYsNiBMNSw2IE01LDQgTDMsNCBMMywzIEw2LDMgTDYsMiBMMiwyIEwyLDUgTDUsNSBMNSw0IFoiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgLz48L3N2Zz4=)!important; }";
  136. css += ".ytp-settings-button.ytp-8k-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0xMCw0IEwxMSw0IEwxMSw1IEwxMCw1IEwxMCw0IFogTTEwLDcgTDExLDcgTDExLDggTDEwLDggTDEwLDcgWiBNOCw1IEwxMCw1IEwxMCw2IEw4LDYgTDgsNSBaIE03LDcgTDgsNyBMOCw4IEw3LDggTDcsNyBaIE01LDYgTDYsNiBMNiw3IEw1LDcgTDUsNiBaIE0zLDUgTDUsNSBMNSw2IEwzLDYgTDMsNSBaIE0zLDMgTDUsMyBMNSw0IEwzLDQgTDMsMyBaIE01LDQgTDYsNCBMNiw1IEw1LDUgTDUsNCBaIE0yLDQgTDMsNCBMMyw1IEwyLDUgTDIsNCBaIE0yLDYgTDMsNiBMMyw3IEwyLDcgTDIsNiBaIE0zLDcgTDUsNyBMNSw4IEwzLDggTDMsNyBaIiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjAuNjQ3MSIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjxwYXRoIGQ9Ik0xMSw1IEwxMSw3IEwxMCw3IEwxMCw2IEwxMCw1IEwxMSw1IE0xMCw1IEw4LDUgTDgsNiBMOCw3IEw3LDcgTDcsMiBMOCwyIEw4LDQgTDEwLDQgTDEwLDUgTTEwLDIgTDExLDIgTDExLDQgTDEwLDQgTDEwLDIgTTMsNiBMNSw2IEw1LDcgTDMsNyBNMywyIEw1LDIgTDUsMyBMMywzIEwzLDIgWiBNNSw1IEw2LDUgTDYsNiBMNSw2IEw1LDUgWiBNMyw0IEw1LDQgTDUsNSBMMyw1IEwzLDQgWiBNNSwzIEw2LDMgTDYsNCBMNSw0IEw1LDMgWiBNMiw1IEwzLDUgTDMsNiBMMiw2IEwyLDUgWiBNMiwzIEwzLDMgTDMsNCBMMiw0IEwyLDMgWiIgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjwvc3ZnPg==)!important; }";
  137. css += ".ytp-settings-button.ytp-3d-badge-grey:after,.ytp-settings-button.ytp-3d-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0yIDJoNHY1aC00di0xaDN2LTFoLTN2LTFoM3YtMWgtM3pNNyAyaDN2MWgtMnYzaDJ2MWgtM3pNMTAgM2gxdjNoLTF6IiBmaWxsPSIjZmZmIiAvPjxwYXRoIGQ9Ik0yIDNoM3YxaC0zek04IDNoMnYxaC0yek0yIDVoM3YxaC0zek0xMCA2aDF2MWgtMXpNMiA3aDR2MWgtNHpNNyA3aDN2MWgtM3oiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMC42NDcxIiAvPjwvc3ZnPg==)!important; }";
  138. css += ".ytp-color-white .ytp-settings-button.ytp-hd-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik01LDcgTDUsNiBMNSw1IEwzLDUgTDMsNiBMMyw3IEwyLDcgTDIsMiBMMywyIEwzLDQgTDUsNCBMNSwyIEw2LDIgTDYsNyBMNSw3IFogTTExLDYgTDEwLDYgTDEwLDcgTDcsNyBMNywyIEwxMCwyIEwxMCwzIEwxMSwzIEwxMSw2IFogTTEwLDQgTDEwLDMgTDgsMyBMOCw0IEw4LDYgTDEwLDYgTDEwLDQgWiIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjwvc3ZnPg==)!important; }";
  139. css += ".ytp-color-white .ytp-settings-button.ytp-4k-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0xMSw1IEwxMSw3IEwxMCw3IEwxMCw2IEwxMCw1IEwxMSw1IFogTTEwLDUgTDgsNSBMOCw2IEw4LDcgTDcsNyBMNywyIEw4LDIgTDgsNCBMMTAsNCBMMTAsNSBaIE00LDQgTDMsNCBMMyw1IEw0LDUgTDQsNCBaIE00LDcgTDQsNiBMMiw2IEwyLDQgTDMsNCBMMywzIEw0LDMgTDQsMiBMNSwyIEw1LDUgTDYsNSBMNiw2IEw1LDYgTDUsNyBMNCw3IFogTTEwLDIgTDExLDIgTDExLDQgTDEwLDQgTDEwLDIgWiIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjwvc3ZnPg==)!important; }";
  140. css += ".ytp-color-white .ytp-settings-button.ytp-5k-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0xMSw1IEwxMSw3IEwxMCw3IEwxMCw2IEwxMCw1IEwxMSw1IE0xMCw1IEw4LDUgTDgsNiBMOCw3IEw3LDcgTDcsMiBMOCwyIEw4LDQgTDEwLDQgTDEwLDUgTTEwLDIgTDExLDIgTDExLDQgTDEwLDQgTDEwLDIgTTIsNiBMNSw2IEw1LDcgTDIsNyBNNSw1IEw2LDUgTDYsNiBMNSw2IE01LDQgTDMsNCBMMywzIEw2LDMgTDYsMiBMMiwyIEwyLDUgTDUsNSBMNSw0IFoiIGZpbGwtcnVsZT0iZXZlbm9kZCIgLz48L3N2Zz4=)!important; }";
  141. css += ".ytp-color-white .ytp-settings-button.ytp-8k-quality-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0xMSw1IEwxMSw3IEwxMCw3IEwxMCw2IEwxMCw1IEwxMSw1IE0xMCw1IEw4LDUgTDgsNiBMOCw3IEw3LDcgTDcsMiBMOCwyIEw4LDQgTDEwLDQgTDEwLDUgTTEwLDIgTDExLDIgTDExLDQgTDEwLDQgTDEwLDIgTTMsNiBMNSw2IEw1LDcgTDMsNyBNMywyIEw1LDIgTDUsMyBMMywzIEwzLDIgWiBNNSw1IEw2LDUgTDYsNiBMNSw2IEw1LDUgWiBNMyw0IEw1LDQgTDUsNSBMMyw1IEwzLDQgWiBNNSwzIEw2LDMgTDYsNCBMNSw0IEw1LDMgWiBNMiw1IEwzLDUgTDMsNiBMMiw2IEwyLDUgWiBNMiwzIEwzLDMgTDMsNCBMMiw0IEwyLDMgWiIgZmlsbC1ydWxlPSJldmVub2RkIiAvPjwvc3ZnPg==)!important; }";
  142. css += ".ytp-color-white .ytp-settings-button.ytp-3d-badge-grey:after,.ytp-color-white .ytp-settings-button.ytp-3d-badge:after { background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTMgOSIgd2lkdGg9IjEwMCUiPjxwYXRoIGQ9Ik0yIDJoNHY1aC00di0xaDN2LTFoLTN2LTFoM3YtMWgtM3pNNyAyaDN2MWgtMnYzaDJ2MWgtM3pNMTAgM2gxdjNoLTF6IiBmaWxsPSIjMDAwIiAvPjwvc3ZnPg==)!important; }";
  143. // closed captions (line under the button, and position of captions)
  144. css += ".ytp-chrome-controls .ytp-button[aria-pressed='true']::after { width: 18px; left: 8px; }\n";
  145. css += ".caption-window.ytp-caption-window-bottom { margin-bottom:40px!important }\n";
  146. return css;
  147. };
  148. YtNewUIFix.prototype.fixBigMode = function (css) {
  149. /* big mode: smaller scrubber */
  150. css += ".ytp-big-mode .ytp-scrubber-button { height: 13px!important; width: 13px!important; border-radius: 6.5px!important; }\n";
  151. css += ".ytp-big-mode .ytp-scrubber-container { top: -4px; left: -6.5px; }\n\n";
  152. /* big mode: 24px edges instead of 12px */
  153. css += ".ytp-big-mode .ytp-left-controls { margin-left: -7px }\n";
  154. css += ".ytp-big-mode .ytp-fullscreen-button { margin-right: -7px }\n";
  155. css += ".ytp-big-mode .ytp-chrome-bottom { border-left: 24px solid #1B1B1B; border-right: 24px solid #1B1B1B; }\n\n";
  156. /* big mode: smaller volume slider */
  157. css += ".ytp-big-mode .ytp-volume-slider-handle { width: 12px; height: 12px; border-radius: 6px; margin-top: -6px; }\n";
  158. css += ".ytp-big-mode .ytp-volume-slider-active .ytp-volume-panel { width: 72px; }\n\n";
  159. return css;
  160. };
  161. YtNewUIFix.prototype.fixColors = function (css) {
  162. css += ".ytp-gradient-bottom, .ytp-gradient-top { display: none!important; }\n";
  163. css += ".ytp-chrome-bottom { background-color: #1B1B1B; border-left: 12px solid #1B1B1B; border-right: 12px solid #1B1B1B; }\n";
  164. css += ".ytp-chrome-controls svg path { fill: #8E8E8E }\n";
  165. css += "\n";
  166. return css;
  167. };
  168. YtNewUIFix.prototype.addExtras = function (css) {
  169. if (this.hideControlsFullscreen) {
  170. // only force in non fullscreen
  171. if (!this.isEmbedded) {
  172. css += "html:not(.floater) .html5-video-player:not(.ytp-fullscreen) { height: calc(100% + 35px)!important; }\n";
  173. }
  174. }
  175. else {
  176. // force always
  177. if (!this.isEmbedded) {
  178. css += "html:not(.floater) .html5-video-player { height: calc(100% + 35px)!important; }\n";
  179. }
  180. }
  181. if (this.isEmbedded) {
  182. css += ".html5-video-player:not(.ytp-fullscreen):not(.ytp-hide-controls) .html5-main-video { height: calc(100% - 35px)!important; }";
  183. }
  184. if (!this.showTitleOnHover) {
  185. // hide always
  186. css += ".ytp-chrome-top { display: none!important; }\n";
  187. }
  188. if (this.removeAnimations) {
  189. css += ".ytp-bezel { display: none!important; }\n";
  190. css += ".html5-endscreen *, .html5-video-player div { transition-property: none !important; animation: none !important; }\n";
  191. }
  192. if (this.optionsReversed) {
  193. css += ".ytp-panel { display: -webkit-flex; -webkit-flex-direction: column; display: flex; flex-direction: column; }\n";
  194. css += ".ytp-panel-header { order: 2; border-top: 1px solid #444; border-bottom: none; }\n";
  195. css += ".ytp-panel-content { order: 1; }\n";
  196. }
  197. if (this.alwaysVolume) {
  198. /* Have the volume slider always be visible */
  199. css += ".ytp-volume-panel { width: 52px; margin-right: 3px; } .ytp-big-mode .ytp-volume-panel { width: 78px; }";
  200. }
  201. if (this.progressBigger) {
  202. /* Make the progressbar fill up the entire space when not hovering over (thanks to Takato) */
  203. css += ".ytp-progress-bar-container:not(:hover):not(.ytp-pulling) .ytp-progress-list { width: calc(100% + 24px); left: -12px; }";
  204. css += ".ytp-big-mode .ytp-progress-bar-container:not(:hover):not(.ytp-pulling) .ytp-progress-list { width: calc(100% + 48px); left: -24px; }";
  205. }
  206. return css;
  207. };
  208. YtNewUIFix.prototype.addOptions = function () {
  209. if (window.location.href.indexOf("account_playback") < 0) {
  210. return;
  211. }
  212. var content = document.querySelector("div.account-content");
  213. var footer = document.querySelector("div.account-footer");
  214. if (content && footer) {
  215. var accSection = document.createElement("div");
  216. accSection.classList.add("account-section");
  217. var header = document.createElement("h3");
  218. header.classList.add("account-section-header");
  219. header.textContent = "Youtube New UI Fix Options";
  220. accSection.appendChild(header);
  221. {
  222. accSection.appendChild(this.createOption(this.addWatchLater, "addWatchLater", "Add the watch later button to the controls", header));
  223. accSection.appendChild(this.createOption(this.hideControlsFullscreen, "hideControlsFullscreen", "Have the controls automatically hide in full-screen mode", header));
  224. accSection.appendChild(this.createOption(this.removeAnimations, "removeAnimations", "Remove all animations", header));
  225. accSection.appendChild(this.createOption(this.optionsReversed, "optionsReversed", "Move the 'go back' button in the settings menus to the bottom", header));
  226. accSection.appendChild(this.createOption(this.progressBigger, "progressBigger", "Make the progressbar take up the whole width (but not when hovering over)", header));
  227. accSection.appendChild(this.createOption(this.showTitleOnHover, "showTitleOnHover", "Have the title show when hovering over the video", header));
  228. accSection.appendChild(this.createOption(this.alwaysVolume, "alwaysVolume", "Have the volume slider be always visible", header));
  229. }
  230. content.insertBefore(accSection, footer);
  231. }
  232. };
  233. YtNewUIFix.prototype.createOption = function (optionValue, name, description, changeNotifier) {
  234. var accDiv = document.createElement("div");
  235. accDiv.classList.add("account-section-setting");
  236. 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>";
  237. var accInput = accDiv.querySelector("input[name='" + name + "']");
  238. accInput.onclick = function () {
  239. localStorage.setItem(name, String(accInput.checked));
  240. changeNotifier.classList.add("optionChanged");
  241. };
  242. return accDiv;
  243. };
  244. return YtNewUIFix;
  245. }());
  246. new YtNewUIFix().applyFix();
  247. //# sourceMappingURL=Youtube_New_UI_Fix.user.js.map