]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/+videos/+video-watch/video-watch.component.scss
Don't stuck state when move transcoding job failed
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / +video-watch / video-watch.component.scss
CommitLineData
8cbc40b2
C
1@use 'sass:math';
2@use '_variables' as *;
3@use '_mixins' as *;
fa12eacc 4@use '_bootstrap-variables';
8cbc40b2 5@use '_miniature' as *;
19f22055 6
d4f0b2ec
C
7$video-height: 66vh;
8
931d3430 9@function getPlayerHeight ($width) {
b0c43e36 10 @return calc(#{$width} / #{$video-watch-player-factor});
9a18a625
C
11}
12
931d3430 13@function getPlayerWidth ($height) {
b0c43e36 14 @return calc(#{$height} * #{$video-watch-player-factor});
9a18a625
C
15}
16
17@mixin playlist-below-player {
72675ebe
C
18 width: 100% !important;
19 height: auto !important;
20 max-height: 300px !important;
67c68723 21 max-width: initial;
72675ebe 22 border-bottom: 1px solid $separator-border-color !important;
9a18a625
C
23}
24
d4f0b2ec
C
25.blocked-label {
26 font-weight: $font-semibold;
27}
28
29.placeholder-image {
30 height: 100%;
71ab0c07
C
31 max-width: 100%;
32 object-fit: contain;
d4f0b2ec
C
33}
34
d4f0b2ec
C
35.flex-direction-column {
36 flex-direction: column;
37}
38
9a18a625 39.root {
9a18a625 40 &.theater-enabled #video-wrapper {
931d3430
C
41 $height: calc(100vh - #{$header-height} - #{$theater-bottom-space});
42
9a18a625
C
43 flex-direction: column;
44 justify-content: center;
45
46 #videojs-wrapper {
47 width: 100%;
f8c00564 48 height: $height;
9a18a625
C
49 }
50
03652b31 51 ::ng-deep .video-js {
9a18a625
C
52 height: $height;
53 width: 100%;
466e3f20 54 max-width: initial;
9a18a625
C
55 }
56
03652b31 57 my-video-watch-playlist ::ng-deep .playlist {
9a18a625
C
58 @include playlist-below-player;
59 }
60 }
191764f3
C
61}
62
e2f01c47 63#video-wrapper {
be6a4802
C
64 background-color: #000;
65 display: flex;
66 justify-content: center;
6d88de72 67
03652b31 68 ::ng-deep .video-js {
58f3c3f1 69 width: 100%;
d4f0b2ec 70 max-width: getPlayerWidth($video-height);
a5cf76af 71 height: $video-height;
3b492bff 72
7b272fd7
C
73 // VideoJS create an inner video player
74 video {
75 outline: 0;
b9828abe 76 position: relative !important;
7b272fd7 77 }
be6a4802 78 }
e56b20f5
C
79}
80
d4f0b2ec
C
81#videojs-wrapper {
82 display: flex;
83 justify-content: center;
84 flex-grow: 1;
85 height: $video-height;
2186386c
C
86}
87
d4f0b2ec
C
88.remote-server-down {
89 color: #fff;
90 display: flex;
7fc441cc 91 flex-direction: column;
d4f0b2ec
C
92 align-items: center;
93 text-align: center;
94 justify-content: center;
95 background-color: #141313;
96 width: 100%;
97 font-size: 24px;
98 height: 500px;
99
100 @media screen and (max-width: 1000px) {
101 font-size: 20px;
102 }
103
104 @media screen and (max-width: 600px) {
105 font-size: 16px;
106 }
7fc441cc
RK
107}
108
9c89a45c
C
109#video-not-found {
110 height: 300px;
111 line-height: 300px;
112 margin-top: 50px;
113 text-align: center;
fb4fd623
C
114 font-weight: $font-semibold;
115 font-size: 15px;
9c89a45c
C
116}
117
b1fa3eba 118.video-bottom {
9a18a625 119 display: flex;
46788f21 120 margin-top: 1.5rem;
d4f0b2ec 121}
d1992b93 122
d4f0b2ec
C
123.video-info {
124 flex-grow: 1;
125 // Set min width for flex item
126 min-width: 1px;
127 max-width: 100%;
128}
129
130.video-info-first-row {
131 display: flex;
132
133 > div:first-child {
b1fa3eba 134 flex-grow: 1;
d4f0b2ec
C
135 }
136}
137
138.video-info-name {
139 @include peertube-word-wrap;
140
141 @include margin-right(30px);
142
143 min-height: 40px; // Align with the action buttons
144 font-size: 27px;
145 font-weight: $font-semibold;
146 flex-grow: 1;
147}
148
149.video-info-first-row-bottom {
150 display: flex;
151 flex-wrap: wrap;
152 align-items: center;
153 width: 100%;
154}
155
156.video-info-date-views {
157 @include margin-right(10px);
158
159 margin-bottom: 10px;
160 align-self: start;
161 font-size: 1em;
162}
163
164.video-info-channel {
165 font-weight: $font-semibold;
166 font-size: 15px;
167
168 a {
169 @include disable-default-a-behaviour;
170 @include peertube-word-wrap;
171
172 color: pvar(--mainForegroundColor);
173
174 &:hover {
175 opacity: 0.8;
176 }
177 }
178}
179
180.video-info-channel-left {
181 flex-grow: 1;
182
183 .video-info-channel-left-links {
184 display: flex;
185 flex-direction: column;
186 position: relative;
187 line-height: 1.37;
188
189 a:nth-of-type(2) {
190 font-weight: $font-regular;
191 font-size: 90%;
d1992b93
C
192 }
193
d4f0b2ec
C
194 a.single-link {
195 margin-top: 7px;
dd4f25ee 196 }
d4f0b2ec
C
197 }
198}
199
200my-subscribe-button {
201 @include margin-left(5px);
202}
203
c894a1ea 204my-video-attributes {
d4f0b2ec
C
205 @include margin-left($video-watch-info-margin-left);
206
c894a1ea
C
207 display: block;
208 margin-bottom: 15px;
0f7407d9 209}
41c3dfac 210
06a55579
C
211my-action-buttons {
212 @include margin-left(auto);
213 @include margin-right(0);
214
215 display: block;
216 margin-top: 0;
217 margin-bottom: 10px;
218
219 align-items: start;
220 width: max-content;
221}
222
0f7407d9 223my-recommended-videos {
27bc9586
C
224 @include padding-left(15px);
225
0f7407d9 226 display: block;
0f7407d9 227 min-width: 250px;
d1992b93 228}
41c3dfac 229
1d6587aa
C
230my-video-comments {
231 display: inline-block;
66467298 232 width: 100%;
1d6587aa
C
233 margin-bottom: 20px;
234}
235
0f7407d9 236// Use the same breakpoint than in the typescript component to display the other video miniatures as row
9a18a625 237@media screen and (max-width: 1100px) {
3143ae17
C
238 #video-wrapper {
239 flex-direction: column;
240 justify-content: center;
241
03652b31 242 my-video-watch-playlist ::ng-deep .playlist {
3143ae17
C
243 @include playlist-below-player;
244 }
245 }
246
9a18a625
C
247 .video-bottom {
248 flex-direction: column;
0f7407d9 249 }
9a18a625 250
0f7407d9 251 my-recommended-videos {
27bc9586 252 @include padding-left(0);
9a18a625
C
253 }
254}
255
1f788f20 256@media screen and (max-width: 600px) {
d4f0b2ec
C
257 #videojs-wrapper {
258 height: getPlayerHeight(100vw) !important;
259
260 .remote-server-down,
261 ::ng-deep .video-js {
262 width: 100vw;
263 height: getPlayerHeight(100vw) !important;
264 }
265 }
266
b2731bff 267 .video-bottom {
c2a89b70 268 margin-top: 20px !important;
46788f21 269 padding-bottom: 20px !important;
d4f0b2ec 270 }
1f788f20 271
d4f0b2ec
C
272 .video-info {
273 padding: 0;
274 }
1f788f20 275
d4f0b2ec
C
276 .video-info-name {
277 font-size: 20px;
278 height: auto;
b2731bff
C
279 }
280}
07fa4c97
C
281
282@media screen and (max-width: 450px) {
d4f0b2ec
C
283 .video-info-name {
284 font-size: 18px;
285 }
286
287 .video-info-date-views {
288 font-size: 14px;
07fa4c97 289 }
06a55579
C
290
291 my-action-buttons {
292 margin-top: 10px;
293 }
07fa4c97 294}
d45f3641 295
d45f3641
C
296// Special case for iOS, that takes into account the width for fullscreens
297#video-wrapper ::ng-deep .video-js.vjs-fullscreen {
298 max-width: unset;
299}