From 9d2d93a677501d6bcd142733907acd8ddbf7b75b Mon Sep 17 00:00:00 2001 From: Ruin0x11 Date: Mon, 27 Jan 2020 01:07:09 -0800 Subject: [PATCH] Redesign videojs player controls for better mobile usage --- assets/css/default.css | 188 ------------ assets/css/videojs-theme.css | 286 ++++++++++++++++++ .../views/components/player_sources.ecr | 1 + 3 files changed, 287 insertions(+), 188 deletions(-) create mode 100644 assets/css/videojs-theme.css diff --git a/assets/css/default.css b/assets/css/default.css index ea139b40..4e3e88d2 100644 --- a/assets/css/default.css +++ b/assets/css/default.css @@ -281,191 +281,3 @@ input[type="search"]::-webkit-search-cancel-button { transform: rotate(360deg); } } - -/* Control Bar */ -@media screen and (max-width: 640px) { - .video-js .vjs-control-bar, - .vjs-menu-button-popup .vjs-menu .vjs-menu-content { - overflow-x: scroll; - } -} - -ul.vjs-menu-content::-webkit-scrollbar { - display: none; -} - -.vjs-user-inactive { - cursor: none; -} - -.video-js .vjs-text-track-display > div > div > div { - background-color: rgba(0, 0, 0, 0.75) !important; - border-radius: 9px !important; - padding: 5px !important; -} - -.vjs-play-control, -.vjs-volume-panel, -.vjs-current-time, -.vjs-time-control, -.vjs-duration, -.vjs-progress-control, -.vjs-remaining-time { - order: 1; -} - -.vjs-captions-button { - order: 2; -} - -.vjs-quality-selector, -.video-js .vjs-http-source-selector { - order: 3; -} - -.vjs-playback-rate { - order: 4; -} - -.vjs-share-control { - order: 5; -} - -.vjs-fullscreen-control { - order: 6; -} - -.vjs-playback-rate > .vjs-menu { - width: 50px; -} - -.vjs-control-bar { - display: flex; - flex-direction: row; - scrollbar-width: none; -} - -.vjs-control-bar::-webkit-scrollbar { - display: none; -} - -.video-js .vjs-icon-cog { - font-size: 18px; -} - -.video-js .vjs-control-bar, -.vjs-menu-button-popup .vjs-menu .vjs-menu-content { - background-color: rgba(35, 35, 35, 0.75); -} - -.vjs-menu li.vjs-menu-item:focus, -.vjs-menu li.vjs-menu-item:hover { - background-color: rgba(255, 255, 255, 0.75); - color: rgba(49, 49, 51, 0.75); -} - -.vjs-menu li.vjs-selected, -.vjs-menu li.vjs-selected:focus, -.vjs-menu li.vjs-selected:hover { - background-color: rgba(0, 182, 240, 0.75); -} - -/* Progress Bar */ -.video-js .vjs-slider { - background-color: rgba(15, 15, 15, 0.5); -} - -fieldset > select, -span > select { - color: rgba(49, 49, 51, 1); -} - -.video-js .vjs-load-progress, -.video-js .vjs-load-progress div { - background: rgba(87, 87, 88, 1); -} - -.video-js .vjs-slider:hover, -.video-js button:hover { - color: rgba(0, 182, 240, 1); -} - -.video-js .vjs-play-progress { - background-color: rgba(0, 182, 240, 1); -} - -/* Overlay */ -.video-js .vjs-overlay { - background-color: rgba(35, 35, 35, 0.75); - color: rgba(255, 255, 255, 1); -} - -/* ProgressBar marker */ -.vjs-marker { - background-color: rgba(255, 255, 255, 1); - z-index: 0; -} - -/* Big "Play" Button */ -.video-js .vjs-big-play-button { - background-color: rgba(35, 35, 35, 0.5); -} - -.video-js:hover .vjs-big-play-button { - background-color: rgba(35, 35, 35, 0.75); -} - -.video-js .vjs-current-time, -.video-js .vjs-time-divider, -.video-js .vjs-duration { - display: block; -} - -.video-js .vjs-time-divider { - min-width: 0px; - padding-left: 0px; - padding-right: 0px; -} - -.video-js .vjs-poster { - background-size: cover; - object-fit: cover; -} - -.player-dimensions.vjs-fluid { - padding-top: 82vh; -} - -video.video-js { - position: absolute; - height: 100%; -} - -#player-container { - position: relative; - padding-bottom: 82vh; - height: 0; -} - -.pure-control-group label { - word-wrap: normal; -} - -.video-js.player-style-invidious { - /* This is already the default */ -} - -.video-js.player-style-youtube .vjs-control-bar { - display: flex; - flex-direction: row; -} -.video-js.player-style-youtube .vjs-big-play-button { - /* - Styles copied from video-js.min.css, definition of - .vjs-big-play-centered .vjs-big-play-button - */ - top: 50%; - left: 50%; - margin-top: -0.81666em; - margin-left: -1.5em; -} diff --git a/assets/css/videojs-theme.css b/assets/css/videojs-theme.css new file mode 100644 index 00000000..7a8d14a9 --- /dev/null +++ b/assets/css/videojs-theme.css @@ -0,0 +1,286 @@ +.video-js .vjs-control-bar { + height: 70px; + padding-top: 20px; +} + +.vjs-button > .vjs-icon-placeholder::before { + line-height: 52px; +} + +.vjs-play-progress::before { + display: none; +} + +.video-js .vjs-progress-control { + position: absolute; + top: 0; + right: 0; + left: 0; + width: 100%; + height: 20px; +} + +.video-js .vjs-progress-control .vjs-progress-holder { + position: absolute; + top: 20px; + right: 0; + left: 0; + width: 100%; + margin: 0; +} + +.video-js .vjs-play-progress { + background-color: rgba(0, 182, 240, 1); +} + +.video-js .vjs-remaining-time { + order: 2; + line-height: 52px; + text-align: left; +} + +.video-js .vjs-duration { + flex: 3; +} + +.video-js .vjs-play-control { + order: 1; + font-size: 1.25em; +} + +.vjs-volume-panel, +.vjs-picture-in-picture-control, +.vjs-fullscreen-control { + order: 3; + flex: 1; +} + +/* Volume stuff */ +.vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal { + height: 100%; +} + +.vjs-mute-control { + display: none; +} + +.vjs-volume-panel { + margin-left: 0.5em; + margin-right: 0.5em; + padding-top: 1.5em; +} + +.vjs-slider-horizontal .vjs-volume-level::before { + top: -.4em; +} + +.video-js .vjs-volume-bar { + margin: 2.40em .45em; +} + +/* Control Bar */ +@media screen and (max-width: 640px) { + .video-js .vjs-control-bar, + .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + overflow-x: scroll; + } +} + +ul.vjs-menu-content::-webkit-scrollbar { + display: none; +} + +.vjs-user-inactive { + cursor: none; +} + +.video-js .vjs-text-track-display > div > div > div { + background-color: rgba(0, 0, 0, 0.75) !important; + border-radius: 9px !important; + padding: 5px !important; +} + +.vjs-play-control, +.vjs-volume-panel, +.vjs-current-time, +.vjs-time-control, +.vjs-duration, +.vjs-progress-control, +.vjs-remaining-time { + order: 1; +} + +.vjs-captions-button { + order: 2; +} + +.vjs-quality-selector, +.video-js .vjs-http-source-selector { + order: 3; +} + +.vjs-playback-rate { + order: 4; +} + +.vjs-share-control { + order: 5; +} + +.vjs-fullscreen-control { + order: 6; +} + +.vjs-playback-rate > .vjs-menu { + width: 52px; +} + +.vjs-control-bar{ + display: flex; + flex-direction: row; + scrollbar-width: none; +} + +.vjs-control-bar::-webkit-scrollbar { + display: none; +} + +.video-js .vjs-icon-cog { + font-size: 18px; +} + +.vjs-button > .vjs-icon-placeholder::before { + font-size: 2.2em; +} + +.vjs-button::before { + font-size: 2.0em; +} + +.video-js .vjs-control-bar, +.vjs-menu-button-popup .vjs-menu .vjs-menu-content { + background-color: rgba(35, 35, 35, 0.75); + background-clip: content-box; +} + +.vjs-menu-button-popup .vjs-menu .vjs-menu-content { + bottom: 2em; +} + +.vjs-menu li.vjs-menu-item:focus, +.vjs-menu li.vjs-menu-item:hover { + background-color: rgba(255, 255, 255, 0.75); + color: rgba(49, 49, 51, 0.75); +} + +.vjs-menu li.vjs-selected, +.vjs-menu li.vjs-selected:focus, +.vjs-menu li.vjs-selected:hover { + background-color: rgba(0, 182, 240, 0.75); +} + +/* Progress Bar */ +.video-js .vjs-slider { + background-color: rgba(15, 15, 15, 0.5); +} + +fieldset > select, +span > select { + color: rgba(49, 49, 51, 1); +} + +.video-js .vjs-load-progress, +.video-js .vjs-load-progress div { + background: rgba(87, 87, 88, 1); +} + +.video-js .vjs-slider:hover, +.video-js button:hover { + color: rgba(0, 182, 240, 1); +} + +.video-js .vjs-play-progress { + background-color: rgba(0, 182, 240, 1); +} + +/* Overlay */ +.video-js .vjs-overlay { + background-color: rgba(35, 35, 35, 0.75); + color: rgba(255, 255, 255, 1); +} + +/* ProgressBar marker */ +.vjs-marker { + background-color: rgba(255, 255, 255, 1); + z-index: 0; +} + +/* Big "Play" Button */ +.video-js .vjs-big-play-button { + background-color: rgba(35, 35, 35, 0.5); +} + +.video-js:hover .vjs-big-play-button { + background-color: rgba(35, 35, 35, 0.75); +} + +.video-js .vjs-current-time, +.video-js .vjs-time-divider, +.video-js .vjs-duration { + display: block; + line-height: 52px; + text-align: left; +} + +.video-js .vjs-playback-rate .vjs-playback-rate-value { + line-height: 52px; +} + +.video-js .vjs-time-divider { + min-width: 0px; + padding-left: 0px; + padding-right: 0px; +} + +.video-js .vjs-poster { + background-size: cover; + object-fit: cover; +} + +.player-dimensions.vjs-fluid { + padding-top: 82vh; +} + +video.video-js { + position: absolute; + height: 100%; +} + +#player-container { + position: relative; + padding-bottom: 82vh; + height: 0; +} + +.pure-control-group label { + word-wrap: normal; +} + +.video-js.player-style-invidious { + /* This is already the default */ +} + +.video-js.player-style-youtube .vjs-control-bar { + display: flex; + flex-direction: row; +} +.video-js.player-style-youtube .vjs-big-play-button { + /* + Styles copied from video-js.min.css, definition of + .vjs-big-play-centered .vjs-big-play-button + */ + top: 50%; + left: 50%; + margin-top: -0.81666em; + margin-left: -1.5em; +} diff --git a/src/invidious/views/components/player_sources.ecr b/src/invidious/views/components/player_sources.ecr index d950e0da..9bd93628 100644 --- a/src/invidious/views/components/player_sources.ecr +++ b/src/invidious/views/components/player_sources.ecr @@ -3,6 +3,7 @@ +