aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/sass/video-js-custom.scss
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-06-11 15:25:46 +0200
committerChocobozzz <me@florianbigard.com>2018-06-11 15:25:46 +0200
commit2a19a1e4de848c8c60ef4b4e606770220b3a28df (patch)
treef4d37dc34887df5ade26fab2a25a741674b0d77c /client/src/sass/video-js-custom.scss
parentf286060081609f9f96475da7f80225f47de92787 (diff)
downloadPeerTube-2a19a1e4de848c8c60ef4b4e606770220b3a28df.tar.gz
PeerTube-2a19a1e4de848c8c60ef4b4e606770220b3a28df.tar.zst
PeerTube-2a19a1e4de848c8c60ef4b4e606770220b3a28df.zip
Split player sass file
Diffstat (limited to 'client/src/sass/video-js-custom.scss')
-rw-r--r--client/src/sass/video-js-custom.scss846
1 files changed, 0 insertions, 846 deletions
diff --git a/client/src/sass/video-js-custom.scss b/client/src/sass/video-js-custom.scss
deleted file mode 100644
index c69423fe2..000000000
--- a/client/src/sass/video-js-custom.scss
+++ /dev/null
@@ -1,846 +0,0 @@
1@import '_variables';
2@import '_mixins';
3
4@mixin big-play-button-triangle-size($triangle-size) {
5 width: $triangle-size;
6 height: $triangle-size;
7 top: calc(50% - #{$triangle-size / 2});
8 left: calc(53% - #{($triangle-size / 2)});
9}
10
11$primary-foreground-color: #fff;
12$primary-foreground-opacity: 0.9;
13$primary-foreground-opacity-hover: 1;
14$primary-background-color: #000;
15
16$font-size: 13px;
17$control-bar-height: 34px;
18
19$slider-bg-color: lighten($primary-background-color, 33%);
20
21$setting-transition-duration: 0.15s;
22$setting-transition-easing: ease-out;
23
24$context-menu-width: 350px;
25
26$progress-margin: 10px;
27
28.video-js.vjs-peertube-skin {
29 font-size: $font-size;
30 color: $primary-foreground-color;
31
32 .vjs-dock-text {
33 padding-right: 10px;
34 }
35
36 .vjs-dock-description {
37 font-size: 11px;
38
39 &::before, &::after {
40 display: inline-block;
41 content: '\1F308';
42 }
43
44 &::before {
45 margin-right: 4px;
46 }
47
48 &::after {
49 margin-left: 4px;
50 transform: scale(-1, 1);
51 }
52 }
53
54 .vjs-button > .vjs-icon-placeholder::before {
55 line-height: $control-bar-height;
56 }
57
58 .vjs-volume-level::before {
59 content: ''; /* Remove Circle From Progress Bar */
60 }
61
62 .vjs-audio-button {
63 display: none;
64 }
65
66 .vjs-big-play-button {
67 outline: 0;
68 font-size: 6em;
69
70 $big-play-width: 1.2em;
71 $big-play-height: 1.2em;
72
73 border: 6px solid #fff;
74 border-radius: 100%;
75
76 left: 50%;
77 top: 50%;
78 width: $big-play-width;
79 height: $big-play-height;
80 line-height: $big-play-height;
81 margin-left: -($big-play-width / 2);
82 margin-top: -($big-play-height / 2);
83 transition: 0.4s opacity;
84
85 &::-moz-focus-inner {
86 border: 0;
87 padding: 0
88 }
89
90 .vjs-icon-placeholder::before {
91 @include big-play-button-triangle-size(45px);
92
93 content: '';
94 background-image: url('../assets/player/images/big-play-button.svg');
95 }
96
97 &:hover {
98 opacity: 0.8;
99 }
100 }
101
102 // Small effect when we click on the play button
103 &.vjs-has-big-play-button-clicked {
104
105 .vjs-big-play-button, .vjs-poster {
106 display: block;
107 visibility: hidden;
108
109 &.vjs-big-play-button, &.vjs-big-play-button::before {
110 opacity: 0;
111 transition: visibility 0.2s, opacity 0.2s;
112 }
113
114 &.vjs-poster, &.vjs-poster::before {
115 opacity: 0;
116 transition: visibility 0.3s, opacity 0.3s;
117 transition-delay: 0.05s;
118 }
119 }
120 }
121
122 // Hide the big play button on autoplay
123 &.vjs-has-autoplay {
124 .vjs-big-play-button {
125 display: none !important;
126 }
127 }
128
129 .vjs-control-bar,
130 .vjs-big-play-button,
131 .vjs-settings-dialog {
132 background-color: rgba($primary-background-color, 0.5);
133 }
134
135 .vjs-poster {
136 outline: none; /* Remove Blue Outline on Click*/
137 outline: 0;
138 }
139
140 .vjs-control-bar {
141 height: $control-bar-height;
142 background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.6));
143 box-shadow: 0 -15px 40px 10px rgba(0, 0, 0, 0.2);
144 text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
145
146 .vjs-progress-control,
147 .vjs-play-control,
148 .vjs-playback-rate,
149 .vjs-mute-control,
150 .vjs-volume-control,
151 .vjs-resolution-control,
152 .vjs-fullscreen-control,
153 .vjs-peertube-link,
154 .vjs-settings
155 {
156 color: $primary-foreground-color !important;
157 opacity: $primary-foreground-opacity;
158 transition: opacity .1s;
159
160 &:hover {
161 opacity: $primary-foreground-opacity-hover;
162 }
163 }
164
165 .vjs-current-time,
166 .vjs-duration,
167 .vjs-peertube {
168 color: $primary-foreground-color;
169 opacity: $primary-foreground-opacity;
170 }
171
172 .vjs-progress-control {
173 position: absolute;
174 z-index: 100; // On top of the progress bar
175 bottom: 29px;
176 width: calc(100% - (2 * #{$progress-margin}));
177 margin-left: $progress-margin;
178 height: 14px;
179
180 .vjs-slider {
181 margin: 0;
182 border-radius: 0;
183 background-color: rgba(255, 255, 255, .2);
184 height: 3px;
185 transition: none;
186
187 .vjs-play-progress {
188 background: $primary-foreground-color;
189
190 // Not display the circle if the progress is not hovered
191 &::before {
192 opacity: 0;
193 transition: opacity 0.1s ease;
194 font-size: 14px;
195
196 top: -0.3em;
197 }
198
199 .vjs-time-tooltip {
200 display: none;
201 }
202 }
203
204 .vjs-load-progress {
205 &, & div {
206 background: rgba(255, 255, 255, .2);
207 }
208 }
209 }
210 }
211
212 .vjs-progress-control:hover .vjs-slider,
213 .vjs-slider.vjs-sliding {
214 height: 5px;
215
216 .vjs-play-progress::before {
217 opacity: 1;
218 }
219 }
220
221
222 .vjs-play-control {
223 @include disable-outline;
224
225 cursor: pointer;
226 font-size: $font-size;
227 margin-right: 5px;
228 }
229
230 .vjs-time-control {
231 line-height: inherit;
232
233 &.vjs-current-time {
234 font-size: $font-size;
235 display: inline-block;
236 padding: 0;
237
238 .vjs-current-time-display {
239 line-height: calc(#{$control-bar-height} + 1px);
240
241 &::after {
242 content: "/";
243 margin: 0 1px 0 2px;
244 }
245 }
246 }
247
248 &.vjs-duration {
249 font-size: $font-size;
250 display: inline-block;
251 padding: 0;
252 .vjs-duration-display {
253 line-height: calc(#{$control-bar-height} + 1px);
254 }
255 }
256
257 &.vjs-remaining-time {
258 display: none;
259 }
260 }
261
262 .vjs-peertube {
263 width: 100%;
264 line-height: $control-bar-height;
265 text-align: right;
266
267 .vjs-peertube-displayed {
268 display: block;
269 }
270
271 .vjs-peertube-hidden {
272 display: none;
273 }
274
275 .download-speed-number, .upload-speed-number, .peers-number {
276 font-weight: $font-semibold;
277 }
278
279 .download-speed-text, .upload-speed-text, .peers-text {
280 margin-right: 15px;
281 }
282
283 .icon {
284 display: inline-block;
285 width: 15px;
286 height: 15px;
287 background-size: contain;
288 vertical-align: middle;
289 background-repeat: no-repeat;
290 margin-right: 6px;
291 position: relative;
292 top: -1px;
293
294 &.icon-download {
295 background-image: url('../assets/player/images/arrow-down.svg');
296 }
297
298 &.icon-upload {
299 background-image: url('../assets/player/images/arrow-up.svg');
300 }
301 }
302 }
303
304 .vjs-playback-rate {
305 font-size: 10px;
306 width: 37px !important;
307
308 .vjs-playback-rate-value {
309 font-size: 13px;
310 line-height: $control-bar-height;
311 }
312
313 .vjs-menu .vjs-menu-content {
314 width: 37px !important;
315 }
316 }
317
318 .vjs-mute-control {
319 @include disable-outline;
320
321 line-height: $control-bar-height;
322 padding: 0;
323 width: 30px;
324
325 .vjs-icon-placeholder {
326 display: inline-block;
327 width: 22px;
328 height: 22px;
329 vertical-align: middle;
330 background: url('../assets/player/images/volume.svg') no-repeat;
331 background-size: contain;
332
333 &::before {
334 content: '';
335 }
336 }
337
338 &.vjs-vol-0 .vjs-icon-placeholder {
339 background: url('../assets/player/images/volume-mute.svg') no-repeat;
340 background-size: contain;
341 }
342 }
343
344 .vjs-volume-control {
345 width: 30px;
346 margin: 0 5px 0 0;
347 }
348
349 .vjs-volume-bar {
350 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAcCAQAAACw95UnAAAAMElEQVRIx2NgoBL4n4YKGUYNHkEG4zJg1OCRYDCpBowaPJwMppbLRg0eNXjUYBLEAXWNUA6QNm1lAAAAAElFTkSuQmCC) no-repeat;
351 background-size: 22px 14px;
352 height: 100%;
353 width: 100%;
354 max-width: 22px;
355 max-height: 14px;
356 margin: 7px 4px;
357 border-radius: 0;
358 top: 3px;
359
360 .vjs-volume-level {
361 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAcAQAAAAAyhWABAAAAAnRSTlMAAHaTzTgAAAAZSURBVHgBYwAB/g9EUv+JokCqiaT+U4MCAPKPS7WUUOc1AAAAAElFTkSuQmCC) no-repeat;
362 background-size: 22px 14px;
363 max-width: 22px;
364 max-height: 14px;
365 height: 100%;
366 }
367 }
368
369 .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,
370 .vjs-volume-panel.vjs-volume-panel-horizontal:active,
371 .vjs-volume-panel.vjs-volume-panel-horizontal:focus,
372 .vjs-volume-panel.vjs-volume-panel-horizontal:hover {
373 width: 6em;
374 transition-property: none;
375 }
376
377 .vjs-volume-panel .vjs-mute-control:hover ~ .vjs-volume-control.vjs-volume-horizontal {
378 width: 3em;
379 height: auto;
380 }
381
382 .vjs-volume-panel .vjs-mute-control:hover ~ .vjs-volume-control {
383 transition-property: none;
384 }
385
386 .vjs-volume-panel {
387 .vjs-mute-control {
388 width: 2em;
389 z-index: 1;
390 padding: 0;
391 }
392
393 .vjs-volume-control {
394 display: inline-block;
395 position: relative;
396 left: 5px;
397 opacity: 1;
398 width: 3em;
399 height: auto;
400 }
401 }
402
403 .vjs-peertube-link {
404 @include disable-outline;
405 @include disable-default-a-behaviour;
406
407 text-decoration: none;
408 line-height: $control-bar-height;
409 font-weight: $font-semibold;
410 padding: 0 5px;
411 }
412
413 .vjs-fullscreen-control {
414 @include disable-outline;
415
416 width: 37px;
417 margin-right: 11px;
418
419 .vjs-icon-placeholder {
420 display: inline-block;
421 width: 22px;
422 height: 22px;
423 vertical-align: middle;
424 background: url('../assets/player/images/fullscreen.svg') no-repeat;
425 background-size: contain;
426
427 &::before {
428 content: '';
429 }
430 }
431 }
432
433 .vjs-menu-button-popup {
434 font-weight: $font-semibold;
435 width: 50px;
436
437 .vjs-resolution-button {
438 @include disable-outline;
439 }
440
441 .vjs-menu {
442 top: 20px;
443 left: 0;
444
445 .vjs-menu-content {
446 width: 50px;
447 bottom: 20px;
448 }
449
450 li {
451 text-transform: none;
452 font-size: 13px;
453 }
454 }
455 }
456 }
457
458 @media screen and (max-width: 750px) {
459 .vjs-dock-text {
460 font-size: 16px;
461 }
462
463 .vjs-dock-description {
464 font-size: 9px;
465 }
466
467 .vjs-big-play-button {
468 font-size: 5em;
469 border-width: 5px;
470
471 .vjs-icon-placeholder::before {
472 @include big-play-button-triangle-size(32px);
473 }
474 }
475 }
476
477 @media screen and (max-width: 570px) {
478 .vjs-dock-text {
479 font-size: 14px;
480 }
481
482 .vjs-big-play-button {
483 font-size: 4.5em;
484 border-width: 4.5px;
485
486 .vjs-icon-placeholder::before {
487 @include big-play-button-triangle-size(27px);
488 }
489 }
490
491 .vjs-playback-rate {
492 display: none;
493 }
494
495 .vjs-peertube {
496 padding: 0 !important;
497
498 .vjs-peertube-displayed {
499 display: none !important;
500 }
501 }
502 }
503
504 @media screen and (max-width: 300px) {
505 .vjs-dock-text {
506 font-size: 13px;
507 }
508
509 .vjs-big-play-button {
510 font-size: 3em;
511 border-width: 3px;
512
513 .vjs-icon-placeholder::before {
514 @include big-play-button-triangle-size(20px);
515 }
516 }
517
518 .vjs-volume-control {
519 display: none !important;
520 }
521
522 .vjs-peertube-link {
523 padding: 0 !important;
524 }
525
526 .vjs-settings {
527 width: 33px;
528 }
529 }
530}
531
532// Play/pause animations
533.vjs-has-started .vjs-play-control {
534 &.vjs-playing {
535 animation: remove-pause-button 0.25s ease;
536 }
537
538 &.vjs-paused {
539 animation: add-play-button 0.25s ease;
540 }
541
542 @keyframes remove-pause-button {
543 0% {
544 transform: rotate(90deg);
545 }
546 100% {
547 transform: rotate(0deg);
548 }
549 }
550
551 @keyframes add-play-button {
552 0% {
553 transform: rotate(-90deg);
554 }
555 100% {
556 transform: rotate(0deg);
557 }
558 }
559}
560
561// Thanks: https://projects.lukehaas.me/css-loaders/
562.vjs-loading-spinner {
563 left: 50%;
564 font-size: 10px;
565 text-indent: -9999em;
566 border: 0.7em solid rgba(255, 255, 255, 0.2);
567 border-left-color: #ffffff;
568 transform: translateZ(0);
569 animation: 0.3s ease-out 1.1s forwards vjs-spinner-show, spinner 1.4s infinite linear !important;
570 overflow: hidden;
571 visibility: hidden;
572
573 &::before {
574 animation: none !important;
575 }
576
577 &::after {
578 border-radius: 50%;
579 width: 6em;
580 height: 6em;
581 animation: none !important;
582 }
583
584 @keyframes spinner {
585 0% {
586 transform: rotate(0deg);
587 }
588 100% {
589 transform: rotate(360deg);
590 }
591 }
592
593 @keyframes vjs-spinner-show {
594 0% {
595 display: none;
596 opacity: 0;
597 }
598
599 1% {
600 display: block;
601 visibility: visible;
602 opacity: 0;
603 }
604
605 100% {
606 display: block;
607 visibility: visible;
608 opacity: 1;
609 }
610 }
611}
612
613// Error display disabled
614.vjs-error:not(.vjs-error-display-enabled) {
615 .vjs-error-display {
616 display: none;
617 }
618
619 .vjs-loading-spinner {
620 display: block;
621 }
622}
623
624// Error display enabled
625.vjs-error.vjs-error-display-enabled {
626 .vjs-error-display {
627 display: block;
628 }
629}
630
631
632/* Sass for videojs-settings-menu */
633
634.video-js {
635
636 .vjs-settings {
637 @include disable-outline;
638
639 cursor: pointer;
640 width: 37px;
641
642 .vjs-icon-placeholder {
643 display: inline-block;
644 width: 17px;
645 height: 17px;
646 vertical-align: middle;
647 background: url('../assets/player/images/settings.svg') no-repeat;
648 background-size: contain;
649
650 &::before {
651 content: '';
652 }
653 }
654 }
655
656 .vjs-settings-sub-menu-title {
657 width: 4em;
658 text-transform: initial;
659 }
660
661 .vjs-settings-dialog {
662 position: absolute;
663 right: .5em;
664 bottom: 3.5em;
665 color: $primary-foreground-color;
666 opacity: $primary-foreground-opacity;
667 margin: 0 auto;
668 font-size: $font-size !important;
669
670 width: auto;
671 overflow: hidden;
672
673 transition: width $setting-transition-duration $setting-transition-easing, height $setting-transition-duration $setting-transition-easing;
674
675 .vjs-settings-sub-menu-value,
676 .vjs-settings-sub-menu-title {
677 display: table-cell;
678 padding: 0 5px;
679 }
680
681 .vjs-settings-sub-menu-title {
682 text-align: left;
683 font-weight: $font-semibold;
684 }
685
686 .vjs-settings-sub-menu-value {
687 width: 100%;
688 text-align: right;
689
690 small {
691 font-size: 0.85em;
692 opacity: 0.8;
693 }
694 }
695
696 .vjs-settings-panel {
697 position: absolute;
698 bottom: 0;
699 right: 0;
700 overflow-y: auto;
701 overflow-x: hidden;
702 border-radius: 1px;
703 }
704
705 .vjs-settings-panel-child {
706 display: flex;
707
708 align-items: flex-end;
709 white-space: nowrap;
710
711 &:focus,
712 &:active {
713 outline: none;
714 }
715
716 > .vjs-menu {
717 flex: 1;
718 min-width: 200px;
719 }
720
721 > .vjs-menu,
722 > .vjs-settings-sub-menu {
723 transition: all $setting-transition-duration $setting-transition-easing;
724
725 .vjs-menu-item {
726
727 &:hover {
728 background-color: rgba(255, 255, 255, 0.2);
729 }
730
731 &:first-child {
732 margin-top: 5px;
733 }
734
735 &:last-child {
736 margin-bottom: 5px;
737 }
738 }
739
740 li {
741 font-size: 1em;
742 text-transform: initial;
743
744 &:hover {
745 cursor: pointer;
746 }
747 }
748 }
749
750 > .vjs-menu {
751 .vjs-menu-item {
752 padding: 8px 16px;
753 }
754
755 .vjs-settings-sub-menu-value::after {
756 @include chevron-right(9px, 2px);
757
758 margin-left: 5px;
759 }
760 }
761
762 > .vjs-settings-sub-menu {
763 width: 80px;
764
765 .vjs-menu-item {
766 outline: 0;
767 font-weight: $font-semibold;
768
769 padding: 5px 8px;
770 text-align: right;
771
772 &.vjs-back-button {
773 background-color: inherit;
774 padding: 8px 8px 13px 8px;
775 margin-bottom: 5px;
776 border-bottom: 1px solid grey;
777
778 &::before {
779 @include chevron-left(9px, 2px);
780
781 margin-right: 5px;
782 }
783 }
784
785 &.vjs-selected {
786 background-color: inherit;
787 color: inherit;
788 position: relative;
789
790 &::before {
791 @include icon(15px);
792
793 position: absolute;
794 left: 8px;
795 content: ' ';
796 margin-top: 1px;
797 background-image: url('../assets/player/images/tick.svg');
798 }
799 }
800 }
801 }
802 }
803 }
804}
805
806/* Sass for videojs-contextmenu-ui */
807
808.video-js .vjs-contextmenu-ui-menu {
809 position: absolute;
810 background-color: rgba(0, 0, 0, 0.5);
811 padding: 5px 0;
812 width: $context-menu-width;
813
814 .vjs-menu-content {
815 opacity: $primary-foreground-opacity;
816 color: $primary-foreground-color;
817 font-size: $font-size !important;
818 font-weight: $font-semibold;
819 }
820
821 .vjs-menu-item {
822 cursor: pointer;
823 font-size: 1em;
824 padding: 8px 16px;
825 text-align: left;
826 text-transform: none;
827
828 &:hover {
829 background-color: rgba(255, 255, 255, 0.2);
830 }
831 }
832}
833
834/* Special mobile style */
835
836.video-js.vjs-peertube-skin.vjs-is-mobile {
837 .vjs-control-bar {
838 .vjs-progress-control .vjs-slider .vjs-play-progress {
839 // Always display the circle on mobile
840 &::before {
841 margin-top: -1px;
842 opacity: 1;
843 }
844 }
845 }
846} \ No newline at end of file