Skip to content

Commit 9ccdeb2

Browse files
FrancescoMolinaroatarix83
authored andcommitted
Merged in task/ux-plus-2023_02_x/UXP-104 (pull request #1)
Task/ux plus 2023 02 x/UXP-104 Approved-by: Giuseppe Digilio
2 parents 4a4df56 + 7d799e0 commit 9ccdeb2

6 files changed

Lines changed: 93 additions & 37 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@
160160
"video.js": "^7.21.4",
161161
"videojs-contrib-quality-levels": "^2.0.9",
162162
"videojs-hls-quality-selector": "^1.1.1",
163-
"videojs-wavesurfer": "^3.9.0",
163+
"videojs-wavesurfer": "^3.10.0",
164164
"webfontloader": "1.6.28",
165165
"zone.js": "~0.11.5"
166166
},

src/app/shared/media-player/media-player.component.html

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
<div class="media-container d-flex" *ngIf="(isPlatformBrowser | async)">
2-
<div class="media-wrapper">
3-
<div class="h-100 w-100">
1+
<div class="media-container w-100 h-100 d-flex" *ngIf="(isPlatformBrowser | async)">
2+
<div class="media-wrapper h-100 w-100">
43
<ds-themed-loading *ngIf="!(isVideoPlayerInitialized$ | async) && !(isAudioPlayerInitialized$ | async)" [showMessage]="false"></ds-themed-loading>
54
<div class="overlay-onchange" *ngIf="isLoadingOnChange$ | async">
65
<ds-themed-loading [spinner]="true" [showMessage]="false"></ds-themed-loading>
76
</div>
8-
<div id="video-content-wrapper h-100 w-100" *ngIf="(isVideoPlayerInitialized$ | async) && (isVideo$ | async)">
9-
<video class="video-js vjs-big-play-centered vjs-fluid" id="video_player" controls playsinline
10-
preload="none"></video>
7+
<div #videoContainerRef>
8+
<div id="video-content-wrapper h-100 w-100" *ngIf="(isVideoPlayerInitialized$ | async) && (isVideo$ | async)">
9+
<video class="video-js vjs-big-play-centered" id="video_player" controls playsinline
10+
preload="none"></video>
11+
</div>
12+
<div id="audio-content-wrapper h-100 w-100" *ngIf="(isAudioPlayerInitialized$ | async) && !(isVideo$ | async)">
13+
<audio class="video-js" id="audio_player" controls preload="none"></audio>
14+
</div>
1115
</div>
12-
<div id="audio-content-wrapper h-100 w-100" *ngIf="(isAudioPlayerInitialized$ | async) && !(isVideo$ | async)">
13-
<audio class="video-js vjs-fluid" id="audio_player" controls playsinline preload="none"></audio>
14-
</div>
15-
</div>
16+
1617

1718
<ds-media-selection-bar *ngIf="isVideoPlayerInitialized$ | async"
1819
[startUUID]="startUUID"
@@ -21,7 +22,7 @@
2122
(selectItem)="setNewTimestamp($event)"></ds-media-selection-bar>
2223

2324
</div>
24-
<div class="playlist-wrapper w-100">
25+
<div #playlistContainerRef class="playlist-wrapper w-100">
2526
<ds-media-player-playlist [itemUUID]="itemUUID"
2627
[startUUID]="startUUID"
2728
(selectItem)="setNewMediaItem($event)"></ds-media-player-playlist>

src/app/shared/media-player/media-player.component.scss

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
margin-bottom: 140px;
77
}
88

9+
910
.media-wrapper {
1011
background-color: black;
1112
position: relative;
13+
flex-basis: 80%;
14+
}
15+
16+
.playlist-wrapper {
17+
flex-basis: 20%;
1218
}
1319

1420
.overlay-onchange {
@@ -22,6 +28,17 @@
2228
align-items: center;
2329
justify-content: center;
2430
}
31+
32+
@include media-breakpoint-down(md) {
33+
.media-container {
34+
flex-direction: column;
35+
}
36+
37+
.playlist-wrapper {
38+
padding-top: 1rem;
39+
}
40+
}
41+
2542
.video-js {
26-
width: 85em !important;
43+
width: 100%;
2744
}

src/app/shared/media-player/media-player.component.ts

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
1-
import { Component, Inject, Input, OnDestroy, OnInit, PLATFORM_ID, ViewEncapsulation } from '@angular/core';
1+
import {
2+
Component,
3+
HostListener,
4+
Inject,
5+
Input,
6+
OnDestroy,
7+
OnInit,
8+
PLATFORM_ID,
9+
ViewChild,
10+
ViewEncapsulation
11+
} from '@angular/core';
212
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
313

414
import { BehaviorSubject, Observable } from 'rxjs';
515

616
import { MediaViewerItem } from '../../core/shared/media-viewer-item.model';
717
import { VideojsService } from './services/videojs.service';
18+
import { hasValue } from '../empty.util';
819

920
@Component({
1021
selector: 'ds-media-player',
@@ -24,6 +35,17 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
2435
*/
2536
@Input() startUUID: string;
2637

38+
/**
39+
* A reference to the video player container
40+
*/
41+
@ViewChild('videoContainerRef', {static: false}) videoContainerRef;
42+
43+
/**
44+
* A reference to the video playlist container
45+
*/
46+
@ViewChild('playlistContainerRef', {static: false}) playlistContainerRef;
47+
48+
2749
/**
2850
* A boolean representing whether audio player is initialized or not
2951
*/
@@ -103,15 +125,15 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
103125
this.isVideo$.next(this.mediaIsVideo(item));
104126
if (this.isVideo$.value) {
105127
if (this.isVideoPlayerInitialized$.value) {
106-
this.changePlayingItem(item);
128+
this.changePlayingItem();
107129
} else {
108-
this.initPlayer(item);
130+
this.initPlayer();
109131
}
110132
} else {
111133
if (this.isAudioPlayerInitialized$.value) {
112-
this.changePlayingItem(item);
134+
this.changePlayingItem();
113135
} else {
114-
this.initPlayer(item);
136+
this.initPlayer();
115137
}
116138
}
117139
}
@@ -125,13 +147,20 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
125147
}
126148
}
127149

150+
/**
151+
* Listen to window resize to adapt playlist size based on video size
152+
*/
153+
@HostListener('window:resize')
154+
onResize(): void {
155+
this.resizeMediaPlaylist();
156+
}
157+
128158
/**
129159
* Init videojs player with the given item as source
130160
*
131-
* @param item
132161
* @private
133162
*/
134-
private initPlayer(item: MediaViewerItem): void {
163+
private initPlayer(): void {
135164
if (this.isVideo$.value) {
136165
this.isVideoPlayerInitialized$.next(true);
137166
// stop audio player when switching from audio to video
@@ -141,6 +170,7 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
141170
this._document.getElementById('video_player'),
142171
this.currentItem$?.value
143172
);
173+
this.resizeMediaPlaylist();
144174
}, 100);
145175

146176
} else {
@@ -152,6 +182,7 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
152182
this._document.getElementById('audio_player'),
153183
this.currentItem$?.value
154184
);
185+
this.resizeMediaPlaylist();
155186
}, 100);
156187

157188
}
@@ -165,10 +196,9 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
165196
/**
166197
* Change the source according to the given item
167198
*
168-
* @param item
169199
* @private
170200
*/
171-
private changePlayingItem(item: MediaViewerItem) {
201+
private changePlayingItem() {
172202
if (this.isVideo$.value) {
173203
// stop audio player when switching from audio to video
174204
this.disposeAudioPlayer();
@@ -233,4 +263,13 @@ export class MediaPlayerComponent implements OnInit, OnDestroy {
233263
this.isVideoPlayerInitialized$.next(false);
234264
}
235265
}
266+
267+
/**
268+
* Resize playlist container
269+
*/
270+
private resizeMediaPlaylist(): void {
271+
if (hasValue(this.playlistContainerRef?.nativeElement)) {
272+
this.playlistContainerRef.nativeElement.style.height = `${this.videoContainerRef.nativeElement.getBoundingClientRect().height}px`;
273+
}
274+
}
236275
}

src/app/shared/media-player/services/browser-videojs.service.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ export class BrowserVideojsService implements VideojsService {
1818
controls: true,
1919
bigPlayButton: false,
2020
autoplay: false,
21-
fluid: false,
21+
responsive: true,
22+
fluid: true,
2223
loop: false,
23-
with: 600,
24-
height: 480,
2524
plugins: {
2625
wavesurfer: {
2726
backend: 'MediaElement',
@@ -43,10 +42,9 @@ export class BrowserVideojsService implements VideojsService {
4342
controls: true,
4443
bigPlayButton: true,
4544
autoplay: false,
46-
fluid: false,
4745
loop: false,
48-
with: 600,
49-
height: 480
46+
responsive: true,
47+
fluid: true,
5048
};
5149

5250
/**
@@ -75,4 +73,5 @@ export class BrowserVideojsService implements VideojsService {
7573

7674
return videoPlayer;
7775
}
76+
7877
}

yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13739,13 +13739,13 @@ videojs-vtt.js@^0.15.5:
1373913739
dependencies:
1374013740
global "^4.3.1"
1374113741

13742-
videojs-wavesurfer@^3.9.0:
13743-
version "3.9.0"
13744-
resolved "https://registry.yarnpkg.com/videojs-wavesurfer/-/videojs-wavesurfer-3.9.0.tgz#685b0874540167887b3df4c86b11fd617bc20c21"
13745-
integrity sha512-gAQUFLlAmNXW8hCQwlJRsMl98Q4LyPzd318yDmuzzWLlupBpV3b4riAguYIHLC0d3svt1pgX8Vz8cX91OaPgWQ==
13742+
videojs-wavesurfer@^3.10.0:
13743+
version "3.10.0"
13744+
resolved "https://registry.yarnpkg.com/videojs-wavesurfer/-/videojs-wavesurfer-3.10.0.tgz#4d19ef53b13903327918f413c15e882f780b57ee"
13745+
integrity sha512-NFLnPtlq3poxvPIAAHsIaT53SifF3Npu5q1F932/WLkTA/uuPKAohSUw2WjzDgJ/2/xtGnuCGE6CGQYYhoeatg==
1374613746
dependencies:
1374713747
video.js ">=7.0.5"
13748-
wavesurfer.js ">=6.3.0"
13748+
wavesurfer.js ">=6.3.0 <7.0.0"
1374913749

1375013750
virtual-dom@^2.1.1:
1375113751
version "2.1.1"
@@ -13812,10 +13812,10 @@ watchpack@^2.4.0:
1381213812
glob-to-regexp "^0.4.1"
1381313813
graceful-fs "^4.1.2"
1381413814

13815-
wavesurfer.js@>=6.3.0:
13816-
version "7.4.6"
13817-
resolved "https://registry.yarnpkg.com/wavesurfer.js/-/wavesurfer.js-7.4.6.tgz#5fd381c773d2e184b2def732fabe41aa3ce767e5"
13818-
integrity sha512-uQDw132ucreP6rqJKou9vWe59QPZQ4PGftQml58JbwMzna4pJjUxXDZv+ubV7LJBkX1kaO/9BEmBRpmR64O3rQ==
13815+
"wavesurfer.js@>=6.3.0 <7.0.0":
13816+
version "6.6.4"
13817+
resolved "https://registry.yarnpkg.com/wavesurfer.js/-/wavesurfer.js-6.6.4.tgz#45e2d613fbfd60d906362ed6e11b649f481e4485"
13818+
integrity sha512-nBbc0pD/3FdClxKUKL1UW2V9AJPL+JOjC8T6/YF9/FCAn4uo+H6Y8VBkXo9UJXIHoBewoc7iXj3tPeL0UCJhjA==
1381913819

1382013820
wbuf@^1.1.0, wbuf@^1.7.3:
1382113821
version "1.7.3"

0 commit comments

Comments
 (0)