@gcorevideo/player 2.21.3 → 2.21.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/audio-selector/style.scss +1 -1
- package/assets/audio-selector/track-selector.ejs +3 -3
- package/assets/bottom-gear/bottomgear.ejs +2 -2
- package/assets/dvr-controls/dvr_controls.scss +7 -25
- package/assets/dvr-controls/index.ejs +2 -2
- package/assets/media-control/container.scss +1 -1
- package/assets/media-control/media-control.ejs +1 -6
- package/assets/media-control/media-control.scss +14 -7
- package/assets/media-control/width270.scss +1 -1
- package/assets/media-control/width370.scss +5 -5
- package/assets/playback-rate/button.ejs +2 -2
- package/assets/playback-rate/list.ejs +4 -4
- package/assets/style/theme.scss +1 -1
- package/assets/subtitles/combobox.ejs +5 -5
- package/assets/subtitles/string.ejs +1 -1
- package/assets/subtitles/style.scss +2 -2
- package/dist/core.js +2 -1
- package/dist/index.css +993 -993
- package/dist/index.js +199 -178
- package/dist/player.d.ts +141 -119
- package/dist/plugins/index.css +1118 -1118
- package/dist/plugins/index.js +191 -173
- package/docs/api/player.bottomgear.getelement.md +2 -2
- package/docs/api/player.bottomgear.md +1 -1
- package/docs/api/{player.subtitles.hide.md → player.closedcaptions.hide.md} +2 -2
- package/docs/api/{player.subtitles.md → player.closedcaptions.md} +11 -11
- package/docs/api/{player.subtitles.show.md → player.closedcaptions.show.md} +2 -2
- package/docs/api/player.closedcaptionspluginsettings.md +13 -0
- package/docs/api/player.gearitemelement.md +6 -4
- package/docs/api/player.gearoptionsitem.md +16 -0
- package/docs/api/player.md +48 -12
- package/docs/api/player.mediacontrol.putelement.md +2 -2
- package/docs/api/player.mediacontrolelement.md +1 -1
- package/docs/api/player.playbackrate.md +1 -1
- package/docs/api/player.subtitlespluginsettings.md +18 -0
- package/docs/api/player.texttrackitem.id.md +11 -0
- package/docs/api/player.texttrackitem.md +87 -0
- package/docs/api/player.texttrackitem.name.md +11 -0
- package/docs/api/player.texttrackitem.track.md +11 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.plugins.d.ts +2 -1
- package/lib/index.plugins.d.ts.map +1 -1
- package/lib/index.plugins.js +2 -1
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +1 -0
- package/lib/plugins/audio-selector/AudioSelector.d.ts +2 -3
- package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
- package/lib/plugins/audio-selector/AudioSelector.js +6 -7
- package/lib/plugins/bottom-gear/BottomGear.d.ts +6 -2
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +2 -1
- package/lib/plugins/dvr-controls/DvrControls.d.ts +0 -3
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +13 -38
- package/lib/plugins/media-control/MediaControl.d.ts +14 -18
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +105 -72
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +1 -0
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
- package/lib/plugins/picture-in-picture/PictureInPicture.js +4 -4
- package/lib/plugins/playback-rate/PlaybackRate.d.ts +0 -1
- package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +23 -14
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +118 -0
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -0
- package/lib/plugins/subtitles/ClosedCaptions.js +348 -0
- package/lib/plugins/subtitles/Subtitles.d.ts +12 -9
- package/lib/plugins/subtitles/Subtitles.d.ts.map +1 -1
- package/lib/plugins/subtitles/Subtitles.js +31 -32
- package/lib/testUtils.d.ts +26 -19
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +30 -45
- package/package.json +1 -1
- package/src/index.plugins.ts +2 -1
- package/src/index.ts +1 -1
- package/src/playback/dash-playback/DashPlayback.ts +1 -0
- package/src/plugins/audio-selector/AudioSelector.ts +9 -8
- package/src/plugins/bottom-gear/BottomGear.ts +11 -4
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
- package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +2 -2
- package/src/plugins/dvr-controls/DvrControls.ts +16 -44
- package/src/plugins/dvr-controls/__tests__/DvrControls.test.ts +18 -22
- package/src/plugins/dvr-controls/__tests__/__snapshots__/DvrControls.test.ts.snap +6 -30
- package/src/plugins/media-control/MediaControl.ts +130 -85
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +132 -0
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +299 -0
- package/src/plugins/picture-in-picture/PictureInPicture.ts +5 -5
- package/src/plugins/playback-rate/PlaybackRate.ts +142 -100
- package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +65 -0
- package/src/plugins/playback-rate/__tests__/__snapshots__/PlaybackRate.test.ts.snap +11 -0
- package/src/plugins/subtitles/{Subtitles.ts → ClosedCaptions.ts} +42 -34
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +58 -0
- package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +25 -0
- package/src/testUtils.ts +30 -45
- package/temp/player.api.json +269 -89
- package/tsconfig.tsbuildinfo +1 -1
- package/src/plugins/index.ts +0 -39
|
@@ -37,7 +37,6 @@ export declare class DvrControls extends UICorePlugin {
|
|
|
37
37
|
*/
|
|
38
38
|
get attributes(): {
|
|
39
39
|
class: string;
|
|
40
|
-
'data-dvr-controls': string;
|
|
41
40
|
};
|
|
42
41
|
/**
|
|
43
42
|
* @internal
|
|
@@ -45,9 +44,7 @@ export declare class DvrControls extends UICorePlugin {
|
|
|
45
44
|
bindEvents(): void;
|
|
46
45
|
private onCoreReady;
|
|
47
46
|
private bindContainerEvents;
|
|
48
|
-
private onDvrChanged;
|
|
49
47
|
private click;
|
|
50
|
-
private settingsUpdate;
|
|
51
48
|
private shouldRender;
|
|
52
49
|
/**
|
|
53
50
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DvrControls.d.ts","sourceRoot":"","sources":["../../../src/plugins/dvr-controls/DvrControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAY,MAAM,cAAc,CAAA;AAM7E,OAAO,gDAAgD,CAAA;AAMvD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAEpD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACH,IAAa,UAAU
|
|
1
|
+
{"version":3,"file":"DvrControls.d.ts","sourceRoot":"","sources":["../../../src/plugins/dvr-controls/DvrControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAY,MAAM,cAAc,CAAA;AAM7E,OAAO,gDAAgD,CAAA;AAMvD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAEpD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACM,MAAM;CAyBhB"}
|
|
@@ -47,7 +47,6 @@ export class DvrControls extends UICorePlugin {
|
|
|
47
47
|
get attributes() {
|
|
48
48
|
return {
|
|
49
49
|
class: 'dvr-controls',
|
|
50
|
-
'data-dvr-controls': '',
|
|
51
50
|
};
|
|
52
51
|
}
|
|
53
52
|
/**
|
|
@@ -55,40 +54,18 @@ export class DvrControls extends UICorePlugin {
|
|
|
55
54
|
*/
|
|
56
55
|
bindEvents() {
|
|
57
56
|
this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
|
|
58
|
-
this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.render);
|
|
59
57
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.bindContainerEvents);
|
|
60
58
|
}
|
|
61
59
|
onCoreReady() {
|
|
62
60
|
const mediaControl = this.core.getPlugin('media_control');
|
|
63
61
|
assert(mediaControl, 'media_control plugin is required');
|
|
64
|
-
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.
|
|
65
|
-
|
|
62
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
|
|
63
|
+
// MediaControl has been rendered
|
|
64
|
+
this.render();
|
|
66
65
|
}
|
|
67
66
|
bindContainerEvents() {
|
|
67
|
+
trace(`${T} bindContainerEvents`);
|
|
68
68
|
this.listenToOnce(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.render);
|
|
69
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrChanged);
|
|
70
|
-
}
|
|
71
|
-
onDvrChanged(dvrInUse) {
|
|
72
|
-
trace(`${T} onDvrChanged`, {
|
|
73
|
-
dvrInUse,
|
|
74
|
-
});
|
|
75
|
-
if (this.core.getPlaybackType() !== Playback.LIVE) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
this.render();
|
|
79
|
-
const mediaControl = this.core.getPlugin('media_control');
|
|
80
|
-
mediaControl.$el.addClass('live');
|
|
81
|
-
if (dvrInUse) {
|
|
82
|
-
mediaControl.$el
|
|
83
|
-
.addClass('dvr')
|
|
84
|
-
.find(
|
|
85
|
-
// TODO add API, test
|
|
86
|
-
'.media-control-indicator[data-position], .media-control-indicator[data-duration]')
|
|
87
|
-
.hide();
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
mediaControl.$el.removeClass('dvr');
|
|
91
|
-
}
|
|
92
69
|
}
|
|
93
70
|
click() {
|
|
94
71
|
const container = this.core.activeContainer;
|
|
@@ -97,13 +74,8 @@ export class DvrControls extends UICorePlugin {
|
|
|
97
74
|
}
|
|
98
75
|
container.seek(container.getDuration());
|
|
99
76
|
}
|
|
100
|
-
settingsUpdate() {
|
|
101
|
-
this.core.getPlugin('media_control').$el.removeClass('live');
|
|
102
|
-
this.render();
|
|
103
|
-
}
|
|
104
77
|
shouldRender() {
|
|
105
|
-
|
|
106
|
-
return useDvrControls && this.core.getPlaybackType() === Playback.LIVE;
|
|
78
|
+
return this.core.getPlaybackType() === Playback.LIVE;
|
|
107
79
|
}
|
|
108
80
|
/**
|
|
109
81
|
* @internal
|
|
@@ -113,16 +85,19 @@ export class DvrControls extends UICorePlugin {
|
|
|
113
85
|
dvrEnabled: this.core.activePlayback?.dvrEnabled,
|
|
114
86
|
playbackType: this.core.getPlaybackType(),
|
|
115
87
|
});
|
|
88
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
89
|
+
if (!mediaControl) {
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
116
92
|
if (!this.shouldRender()) {
|
|
117
93
|
return this;
|
|
118
94
|
}
|
|
95
|
+
mediaControl.toggleElement('duration', false);
|
|
96
|
+
mediaControl.toggleElement('position', false);
|
|
119
97
|
this.$el.html(DvrControls.template({
|
|
120
|
-
|
|
121
|
-
backToLive: this.core.i18n.t('back_to_live'),
|
|
98
|
+
i18n: this.core.i18n,
|
|
122
99
|
}));
|
|
123
|
-
|
|
124
|
-
mediaControl.$el.addClass('live');
|
|
125
|
-
mediaControl.getLeftPanel().append(this.$el);
|
|
100
|
+
mediaControl.putElement('dvr', this.el);
|
|
126
101
|
return this;
|
|
127
102
|
}
|
|
128
103
|
}
|
|
@@ -5,7 +5,7 @@ import '../../../assets/media-control/media-control.scss';
|
|
|
5
5
|
* Media control elements, mount points for additional plugins
|
|
6
6
|
* @beta
|
|
7
7
|
*/
|
|
8
|
-
export type MediaControlElement = '
|
|
8
|
+
export type MediaControlElement = 'audiotracks' | 'cc' | 'clipText' | 'dvr' | 'duration' | 'gear' | 'pip' | 'playbackRate' | 'position' | 'seekBarContainer';
|
|
9
9
|
/**
|
|
10
10
|
* Custom events emitted by the plugins to communicate with one another
|
|
11
11
|
* @beta
|
|
@@ -23,7 +23,6 @@ export declare enum MediaControlEvents {
|
|
|
23
23
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
24
24
|
*/
|
|
25
25
|
export declare class MediaControl extends UICorePlugin {
|
|
26
|
-
private advertisementPlaying;
|
|
27
26
|
private buttonsColor;
|
|
28
27
|
private currentDurationValue;
|
|
29
28
|
private currentPositionValue;
|
|
@@ -38,7 +37,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
38
37
|
private hideId;
|
|
39
38
|
private hideVolumeId;
|
|
40
39
|
private intendedVolume;
|
|
41
|
-
private isHD;
|
|
42
40
|
private keepVisible;
|
|
43
41
|
private kibo;
|
|
44
42
|
private lastMouseX;
|
|
@@ -165,7 +163,7 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
165
163
|
*/
|
|
166
164
|
setInitialVolume(): void;
|
|
167
165
|
private onVolumeChanged;
|
|
168
|
-
private
|
|
166
|
+
private onLoadedMetadata;
|
|
169
167
|
private updateVolumeUI;
|
|
170
168
|
private changeTogglePlay;
|
|
171
169
|
private mousemoveOnSeekBar;
|
|
@@ -199,16 +197,14 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
199
197
|
private renderSeekBar;
|
|
200
198
|
private drawDurationAndPosition;
|
|
201
199
|
private seek;
|
|
202
|
-
private setKeepVisible;
|
|
203
|
-
private resetKeepVisible;
|
|
204
200
|
private setUserKeepVisible;
|
|
205
201
|
private resetUserKeepVisible;
|
|
206
202
|
private isVisible;
|
|
207
203
|
private show;
|
|
208
204
|
private hide;
|
|
209
205
|
private updateCursorStyle;
|
|
210
|
-
private
|
|
211
|
-
private
|
|
206
|
+
private updateSettings;
|
|
207
|
+
private onHdUpdate;
|
|
212
208
|
private createCachedElements;
|
|
213
209
|
/**
|
|
214
210
|
* Get a media control element DOM node
|
|
@@ -230,18 +226,16 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
230
226
|
* ```
|
|
231
227
|
*/
|
|
232
228
|
getElement(name: MediaControlElement): ZeptoResult | null;
|
|
233
|
-
putElement(name: MediaControlElement, element:
|
|
229
|
+
putElement(name: MediaControlElement, element: HTMLElement): void;
|
|
234
230
|
/**
|
|
235
|
-
*
|
|
236
|
-
* @
|
|
237
|
-
|
|
238
|
-
getRightPanel(): any;
|
|
239
|
-
/**
|
|
240
|
-
* Get the left panel area to append custom elements to
|
|
241
|
-
* @returns ZeptoSelector of the left panel element
|
|
231
|
+
* Toggle the visibility of a media control element
|
|
232
|
+
* @param name - The name of the media control element
|
|
233
|
+
* @param show - Whether to show or hide the element
|
|
242
234
|
*/
|
|
243
|
-
|
|
244
|
-
|
|
235
|
+
toggleElement(name: MediaControlElement, show: boolean): void;
|
|
236
|
+
private getRightPanel;
|
|
237
|
+
private getLeftPanel;
|
|
238
|
+
private getCenterPanel;
|
|
245
239
|
private resetIndicators;
|
|
246
240
|
private initializeIcons;
|
|
247
241
|
private setSeekPercentage;
|
|
@@ -275,5 +269,7 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
275
269
|
*/
|
|
276
270
|
disabledControlButton(): void;
|
|
277
271
|
private isSeekEnabledForHtml5Playback;
|
|
272
|
+
private getElementLocation;
|
|
273
|
+
private onDvrStateChanged;
|
|
278
274
|
}
|
|
279
275
|
//# sourceMappingURL=MediaControl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,YAAY,EAMZ,IAAI,EACL,MAAM,cAAc,CAAA;AASrB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C,OAAO,kDAAkD,CAAA;AAWzD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,12 @@ import volumeMaxIcon from '../../../assets/icons/new/volume-max.svg';
|
|
|
19
19
|
import volumeOffIcon from '../../../assets/icons/new/volume-off.svg';
|
|
20
20
|
import fullscreenOffIcon from '../../../assets/icons/new/fullscreen-off.svg';
|
|
21
21
|
import fullscreenOnIcon from '../../../assets/icons/new/fullscreen-on.svg';
|
|
22
|
+
const DEFAULT_SETTINGS = {
|
|
23
|
+
left: [],
|
|
24
|
+
right: [],
|
|
25
|
+
default: [],
|
|
26
|
+
seekEnabled: true,
|
|
27
|
+
};
|
|
22
28
|
/**
|
|
23
29
|
* Custom events emitted by the plugins to communicate with one another
|
|
24
30
|
* @beta
|
|
@@ -34,7 +40,8 @@ const T = 'plugins.media_control';
|
|
|
34
40
|
const LEFT_ORDER = [
|
|
35
41
|
'playpause',
|
|
36
42
|
'playstop',
|
|
37
|
-
'live',
|
|
43
|
+
// 'live',
|
|
44
|
+
'dvr',
|
|
38
45
|
'volume',
|
|
39
46
|
'position',
|
|
40
47
|
'duration',
|
|
@@ -53,7 +60,7 @@ function orderByOrderPattern(arr, order) {
|
|
|
53
60
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
54
61
|
*/
|
|
55
62
|
export class MediaControl extends UICorePlugin {
|
|
56
|
-
advertisementPlaying = false
|
|
63
|
+
// private advertisementPlaying = false
|
|
57
64
|
buttonsColor = null;
|
|
58
65
|
currentDurationValue = 0;
|
|
59
66
|
currentPositionValue = 0;
|
|
@@ -68,14 +75,13 @@ export class MediaControl extends UICorePlugin {
|
|
|
68
75
|
hideId = null;
|
|
69
76
|
hideVolumeId = null;
|
|
70
77
|
intendedVolume = 100;
|
|
71
|
-
isHD = false;
|
|
72
78
|
keepVisible = false;
|
|
73
79
|
kibo;
|
|
74
80
|
lastMouseX = 0;
|
|
75
81
|
lastMouseY = 0;
|
|
76
82
|
persistConfig;
|
|
77
83
|
rendered = false;
|
|
78
|
-
settings =
|
|
84
|
+
settings = DEFAULT_SETTINGS;
|
|
79
85
|
userDisabled = false;
|
|
80
86
|
userKeepVisible = false;
|
|
81
87
|
verticalVolume = false;
|
|
@@ -219,8 +225,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
219
225
|
* @internal
|
|
220
226
|
*/
|
|
221
227
|
bindEvents() {
|
|
222
|
-
// @ts-ignore
|
|
223
|
-
this.stopListening();
|
|
224
228
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
225
229
|
this.listenTo(this.core, Events.CORE_MOUSE_MOVE, this.show);
|
|
226
230
|
this.listenTo(this.core, Events.CORE_MOUSE_LEAVE, () => this.hide(this.options.hideMediaControlDelay));
|
|
@@ -256,18 +260,16 @@ export class MediaControl extends UICorePlugin {
|
|
|
256
260
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_DBLCLICK, this.toggleFullscreen);
|
|
257
261
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
258
262
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_PROGRESS, this.updateProgressBar);
|
|
259
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_SETTINGSUPDATE, this.
|
|
260
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.
|
|
261
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.
|
|
263
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_SETTINGSUPDATE, this.updateSettings);
|
|
264
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrStateChanged);
|
|
265
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.onHdUpdate);
|
|
262
266
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_MEDIACONTROL_DISABLE, this.disable);
|
|
263
267
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_MEDIACONTROL_ENABLE, this.enable);
|
|
264
268
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_ENDED, this.ended);
|
|
265
269
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_VOLUME, this.onVolumeChanged);
|
|
266
270
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_OPTIONS_CHANGE, this.setInitialVolume);
|
|
267
|
-
if
|
|
268
|
-
|
|
269
|
-
this.listenToOnce(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadataOnVideoTag);
|
|
270
|
-
}
|
|
271
|
+
// wait until the metadata has loaded and then check if fullscreen on video tag is supported
|
|
272
|
+
this.listenToOnce(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadata);
|
|
271
273
|
}
|
|
272
274
|
/**
|
|
273
275
|
* Hides the media control UI
|
|
@@ -302,13 +304,19 @@ export class MediaControl extends UICorePlugin {
|
|
|
302
304
|
onVolumeChanged() {
|
|
303
305
|
this.updateVolumeUI();
|
|
304
306
|
}
|
|
305
|
-
|
|
307
|
+
onLoadedMetadata() {
|
|
306
308
|
const video = this.core.activePlayback?.el;
|
|
307
309
|
// video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
|
|
308
310
|
// see https://github.com/clappr/clappr/issues/1127
|
|
309
311
|
if (!Fullscreen.fullscreenEnabled() && video.webkitSupportsFullscreen) {
|
|
310
312
|
this.fullScreenOnVideoTagSupported = true;
|
|
311
|
-
|
|
313
|
+
}
|
|
314
|
+
this.updateSettings();
|
|
315
|
+
if (this.core.activeContainer.getPlaybackType() === Playback.LIVE) {
|
|
316
|
+
this.$el.addClass('live');
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
this.$el.removeClass('live');
|
|
312
320
|
}
|
|
313
321
|
}
|
|
314
322
|
updateVolumeUI() {
|
|
@@ -317,8 +325,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
317
325
|
return;
|
|
318
326
|
}
|
|
319
327
|
assert.ok(this.$volumeBarContainer, 'volume bar container must be present');
|
|
320
|
-
// update volume bar scrubber/fill on bar mode
|
|
321
|
-
// this.$volumeBarContainer.find('.bar-fill-2').css({});
|
|
322
328
|
const containerWidth = this.$volumeBarContainer.width();
|
|
323
329
|
assert.ok(this.$volumeBarBackground, 'volume bar background must be present');
|
|
324
330
|
const barWidth = this.$volumeBarBackground.width();
|
|
@@ -507,17 +513,18 @@ export class MediaControl extends UICorePlugin {
|
|
|
507
513
|
// if the container is not ready etc
|
|
508
514
|
this.intendedVolume = value;
|
|
509
515
|
this.persistConfig && !isInitialVolume && Config.persist('volume', value);
|
|
516
|
+
// TODO
|
|
510
517
|
const setWhenContainerReady = () => {
|
|
511
|
-
if (this.
|
|
512
|
-
this.
|
|
518
|
+
if (this.core.activeContainer && this.core.activeContainer.isReady) {
|
|
519
|
+
this.core.activeContainer.setVolume(value);
|
|
513
520
|
}
|
|
514
521
|
else {
|
|
515
|
-
this.listenToOnce(this.
|
|
516
|
-
this.
|
|
522
|
+
this.listenToOnce(this.core.activeContainer, Events.CONTAINER_READY, () => {
|
|
523
|
+
this.core.activeContainer.setVolume(value);
|
|
517
524
|
});
|
|
518
525
|
}
|
|
519
526
|
};
|
|
520
|
-
if (!this.
|
|
527
|
+
if (!this.core.activeContainer) {
|
|
521
528
|
this.listenToOnce(this, Events.MEDIACONTROL_CONTAINERCHANGED, () => setWhenContainerReady());
|
|
522
529
|
}
|
|
523
530
|
else {
|
|
@@ -527,7 +534,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
527
534
|
toggleFullscreen() {
|
|
528
535
|
if (!Browser.isMobile) {
|
|
529
536
|
this.trigger(Events.MEDIACONTROL_FULLSCREEN, this.name);
|
|
530
|
-
this.
|
|
537
|
+
this.core.activeContainer.fullscreen();
|
|
531
538
|
this.core.toggleFullscreen();
|
|
532
539
|
this.resetUserKeepVisible();
|
|
533
540
|
}
|
|
@@ -538,7 +545,8 @@ export class MediaControl extends UICorePlugin {
|
|
|
538
545
|
this.setInitialVolume();
|
|
539
546
|
this.changeTogglePlay();
|
|
540
547
|
this.bindContainerEvents();
|
|
541
|
-
this.
|
|
548
|
+
this.updateSettings();
|
|
549
|
+
// TODO remove
|
|
542
550
|
this.core.activeContainer.trigger(Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
543
551
|
// TODO test
|
|
544
552
|
if (this.core.activeContainer.mediaControlDisabled) {
|
|
@@ -609,9 +617,9 @@ export class MediaControl extends UICorePlugin {
|
|
|
609
617
|
}
|
|
610
618
|
// default to 100%
|
|
611
619
|
this.currentSeekBarPercentage = 100;
|
|
612
|
-
if (this.
|
|
613
|
-
(this.
|
|
614
|
-
this.
|
|
620
|
+
if (this.core.activeContainer &&
|
|
621
|
+
(this.core.activeContainer.getPlaybackType() !== Playback.LIVE ||
|
|
622
|
+
this.core.activeContainer.isDvrInUse())) {
|
|
615
623
|
this.currentSeekBarPercentage =
|
|
616
624
|
(this.currentPositionValue / this.currentDurationValue) * 100;
|
|
617
625
|
}
|
|
@@ -638,16 +646,10 @@ export class MediaControl extends UICorePlugin {
|
|
|
638
646
|
const offsetX = MediaControl.getPageX(event) - this.$seekBarContainer.offset().left;
|
|
639
647
|
let pos = (offsetX / this.$seekBarContainer.width()) * 100;
|
|
640
648
|
pos = Math.min(100, Math.max(pos, 0));
|
|
641
|
-
this.
|
|
649
|
+
this.core.activeContainer && this.core.activeContainer.seekPercentage(pos);
|
|
642
650
|
this.setSeekPercentage(pos);
|
|
643
651
|
return false;
|
|
644
652
|
}
|
|
645
|
-
setKeepVisible() {
|
|
646
|
-
this.keepVisible = true;
|
|
647
|
-
}
|
|
648
|
-
resetKeepVisible() {
|
|
649
|
-
this.keepVisible = false;
|
|
650
|
-
}
|
|
651
653
|
setUserKeepVisible() {
|
|
652
654
|
this.userKeepVisible = true;
|
|
653
655
|
}
|
|
@@ -719,18 +721,24 @@ export class MediaControl extends UICorePlugin {
|
|
|
719
721
|
this.core.$el.addClass('nocursor');
|
|
720
722
|
}
|
|
721
723
|
}
|
|
722
|
-
|
|
724
|
+
updateSettings() {
|
|
723
725
|
const newSettings = $.extend(true, {
|
|
724
726
|
left: [],
|
|
725
727
|
default: [],
|
|
726
728
|
right: [],
|
|
727
|
-
}, this.core.activeContainer
|
|
729
|
+
}, this.core.activeContainer.settings);
|
|
730
|
+
// TODO make order controlled via CSS
|
|
728
731
|
newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
|
|
732
|
+
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
733
|
+
this.core.activePlayback.dvrEnabled) {
|
|
734
|
+
newSettings.left.push('dvr');
|
|
735
|
+
}
|
|
736
|
+
// actual order of the items appear rendered is controlled by CSS
|
|
729
737
|
newSettings.right = [
|
|
730
738
|
'fullscreen',
|
|
731
739
|
'pip',
|
|
732
|
-
'
|
|
733
|
-
'
|
|
740
|
+
'gear',
|
|
741
|
+
'cc',
|
|
734
742
|
'multicamera',
|
|
735
743
|
'playbackrate',
|
|
736
744
|
'vr',
|
|
@@ -739,24 +747,25 @@ export class MediaControl extends UICorePlugin {
|
|
|
739
747
|
if ((!this.fullScreenOnVideoTagSupported &&
|
|
740
748
|
!Fullscreen.fullscreenEnabled()) ||
|
|
741
749
|
this.options.fullscreenDisable) {
|
|
742
|
-
// remove fullscreen from settings if it is
|
|
750
|
+
// remove fullscreen from settings if it is not available
|
|
743
751
|
removeArrayItem(newSettings.default, 'fullscreen');
|
|
744
752
|
removeArrayItem(newSettings.left, 'fullscreen');
|
|
745
753
|
removeArrayItem(newSettings.right, 'fullscreen');
|
|
746
754
|
}
|
|
747
755
|
removeArrayItem(newSettings.default, 'hd-indicator');
|
|
748
756
|
removeArrayItem(newSettings.left, 'hd-indicator');
|
|
757
|
+
// TODO get from container's settings
|
|
749
758
|
if (this.core.activePlayback.name === 'html5_video') {
|
|
750
759
|
newSettings.seekEnabled = this.isSeekEnabledForHtml5Playback();
|
|
751
760
|
}
|
|
752
|
-
const settingsChanged =
|
|
761
|
+
const settingsChanged = serializeSettings(this.settings) !== serializeSettings(newSettings);
|
|
753
762
|
if (settingsChanged) {
|
|
754
763
|
this.settings = newSettings;
|
|
755
764
|
this.render();
|
|
756
765
|
}
|
|
757
766
|
}
|
|
758
|
-
|
|
759
|
-
|
|
767
|
+
onHdUpdate(isHD) {
|
|
768
|
+
// TODO render?
|
|
760
769
|
}
|
|
761
770
|
createCachedElements() {
|
|
762
771
|
const $layer = this.$el.find('.media-control-layer');
|
|
@@ -778,7 +787,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
778
787
|
this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
|
|
779
788
|
this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
|
|
780
789
|
this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
|
|
781
|
-
this.$clipText = this.$el.find('.media-clip-text[data-clipstext]');
|
|
790
|
+
this.$clipText = this.$el.find('.media-clip-text[data-clipstext]'); // TODO
|
|
782
791
|
this.$clipTextContainer = this.$el.find('.media-clip-container[data-clipstext]');
|
|
783
792
|
this.resetIndicators();
|
|
784
793
|
this.initializeIcons();
|
|
@@ -804,49 +813,45 @@ export class MediaControl extends UICorePlugin {
|
|
|
804
813
|
*/
|
|
805
814
|
getElement(name) {
|
|
806
815
|
switch (name) {
|
|
807
|
-
case '
|
|
816
|
+
case 'audiotracks':
|
|
808
817
|
return null;
|
|
809
818
|
case 'clipText':
|
|
810
819
|
return this.$clipText;
|
|
811
|
-
case 'gear':
|
|
812
|
-
return null;
|
|
813
|
-
case 'pip':
|
|
814
|
-
return null;
|
|
815
820
|
case 'playbackRate':
|
|
816
821
|
return this.$playbackRate;
|
|
817
822
|
case 'seekBarContainer':
|
|
818
823
|
return this.$seekBarContainer;
|
|
819
|
-
case 'subtitlesSelector':
|
|
820
|
-
return null;
|
|
821
824
|
}
|
|
822
825
|
}
|
|
823
826
|
putElement(name, element) {
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
827
|
+
const panel = this.getElementLocation(name);
|
|
828
|
+
trace(`${T} putElement`, { name, panel: !!panel });
|
|
829
|
+
if (panel) {
|
|
830
|
+
const current = panel.find(`[data-${name}]`);
|
|
831
|
+
element.setAttribute(`data-${name}`, '');
|
|
832
|
+
// TODO test
|
|
833
|
+
if (current.length) {
|
|
834
|
+
if (current[0] === element) {
|
|
835
|
+
return;
|
|
836
|
+
}
|
|
837
|
+
current.replaceWith(element);
|
|
838
|
+
}
|
|
839
|
+
else {
|
|
840
|
+
panel.append(element);
|
|
841
|
+
}
|
|
837
842
|
}
|
|
838
843
|
}
|
|
839
844
|
/**
|
|
840
|
-
*
|
|
841
|
-
* @
|
|
845
|
+
* Toggle the visibility of a media control element
|
|
846
|
+
* @param name - The name of the media control element
|
|
847
|
+
* @param show - Whether to show or hide the element
|
|
842
848
|
*/
|
|
849
|
+
toggleElement(name, show) {
|
|
850
|
+
this.$el.find(`[data-${name}]`).toggle(show);
|
|
851
|
+
}
|
|
843
852
|
getRightPanel() {
|
|
844
853
|
return this.$el.find('.media-control-right-panel');
|
|
845
854
|
}
|
|
846
|
-
/**
|
|
847
|
-
* Get the left panel area to append custom elements to
|
|
848
|
-
* @returns ZeptoSelector of the left panel element
|
|
849
|
-
*/
|
|
850
855
|
getLeftPanel() {
|
|
851
856
|
return this.$el.find('.media-control-left-panel');
|
|
852
857
|
}
|
|
@@ -1045,7 +1050,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
1045
1050
|
this.hideVolumeBar(0);
|
|
1046
1051
|
}, 0);
|
|
1047
1052
|
this.parseColors();
|
|
1048
|
-
this.highDefinitionUpdate(this.isHD);
|
|
1049
1053
|
this.core.$el.append(this.el);
|
|
1050
1054
|
this.rendered = true;
|
|
1051
1055
|
this.updateVolumeUI();
|
|
@@ -1071,12 +1075,12 @@ export class MediaControl extends UICorePlugin {
|
|
|
1071
1075
|
}
|
|
1072
1076
|
// TODO manage by the ads plugin
|
|
1073
1077
|
onStartAd() {
|
|
1074
|
-
this.advertisementPlaying = true
|
|
1078
|
+
// this.advertisementPlaying = true
|
|
1075
1079
|
this.disable();
|
|
1076
1080
|
}
|
|
1077
1081
|
// TODO manage by the ads plugin
|
|
1078
1082
|
onFinishAd() {
|
|
1079
|
-
this.advertisementPlaying = false
|
|
1083
|
+
// this.advertisementPlaying = false
|
|
1080
1084
|
this.enable();
|
|
1081
1085
|
}
|
|
1082
1086
|
// TODO remove
|
|
@@ -1120,7 +1124,36 @@ export class MediaControl extends UICorePlugin {
|
|
|
1120
1124
|
}
|
|
1121
1125
|
return isFinite(this.core.activePlayback.getDuration());
|
|
1122
1126
|
}
|
|
1127
|
+
getElementLocation(name) {
|
|
1128
|
+
if (this.settings.right?.includes(name)) {
|
|
1129
|
+
return this.getRightPanel();
|
|
1130
|
+
}
|
|
1131
|
+
if (this.settings.left?.includes(name)) {
|
|
1132
|
+
return this.getLeftPanel();
|
|
1133
|
+
}
|
|
1134
|
+
if (this.settings.default?.includes(name)) {
|
|
1135
|
+
return this.getCenterPanel();
|
|
1136
|
+
}
|
|
1137
|
+
return null;
|
|
1138
|
+
}
|
|
1139
|
+
onDvrStateChanged(dvrInUse) {
|
|
1140
|
+
if (dvrInUse) {
|
|
1141
|
+
this.$el.addClass('dvr');
|
|
1142
|
+
}
|
|
1143
|
+
else {
|
|
1144
|
+
this.$el.removeClass('dvr');
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1123
1147
|
}
|
|
1124
1148
|
MediaControl.extend = function (properties) {
|
|
1125
1149
|
return extend(MediaControl, properties);
|
|
1126
1150
|
};
|
|
1151
|
+
function serializeSettings(s) {
|
|
1152
|
+
return s.left
|
|
1153
|
+
.slice()
|
|
1154
|
+
.sort()
|
|
1155
|
+
.concat(s.right.slice().sort())
|
|
1156
|
+
.concat(s.default.slice().sort())
|
|
1157
|
+
.concat([s.seekEnabled])
|
|
1158
|
+
.join(',');
|
|
1159
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PictureInPicture.d.ts","sourceRoot":"","sources":["../../../src/plugins/picture-in-picture/PictureInPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAO9D,OAAO,gDAAgD,CAAC;AAMxD;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,IAAa,UAAU;;MAItB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,cAAc;IAStB;;OAEG;IACM,MAAM;
|
|
1
|
+
{"version":3,"file":"PictureInPicture.d.ts","sourceRoot":"","sources":["../../../src/plugins/picture-in-picture/PictureInPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAO9D,OAAO,gDAAgD,CAAC;AAMxD;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,cAAc,CAAwB;IAErD;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,IAAa,UAAU;;MAItB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,cAAc;IAStB;;OAEG;IACM,MAAM;IAef,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,oBAAoB;CAI7B"}
|
|
@@ -35,6 +35,7 @@ export class PictureInPicture extends UICorePlugin {
|
|
|
35
35
|
static get version() {
|
|
36
36
|
return VERSION;
|
|
37
37
|
}
|
|
38
|
+
static buttonTemplate = template(buttonHtml);
|
|
38
39
|
/**
|
|
39
40
|
* @internal
|
|
40
41
|
*/
|
|
@@ -59,8 +60,8 @@ export class PictureInPicture extends UICorePlugin {
|
|
|
59
60
|
}
|
|
60
61
|
isPiPSupported() {
|
|
61
62
|
trace(`${T} isPiPSupported`, {
|
|
62
|
-
pictureInPictureEnabled: document.pictureInPictureEnabled,
|
|
63
|
-
requestPictureInPicture: HTMLVideoElement.prototype.requestPictureInPicture,
|
|
63
|
+
pictureInPictureEnabled: !!document.pictureInPictureEnabled,
|
|
64
|
+
requestPictureInPicture: !!HTMLVideoElement.prototype.requestPictureInPicture,
|
|
64
65
|
});
|
|
65
66
|
return document.pictureInPictureEnabled && !!HTMLVideoElement.prototype.requestPictureInPicture;
|
|
66
67
|
}
|
|
@@ -71,8 +72,7 @@ export class PictureInPicture extends UICorePlugin {
|
|
|
71
72
|
if (!this.isPiPSupported()) {
|
|
72
73
|
return this;
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
-
this.$el.html(t({ pipIcon }));
|
|
75
|
+
this.$el.html(PictureInPicture.buttonTemplate({ pipIcon }));
|
|
76
76
|
const mediaControl = this.core.getPlugin('media_control');
|
|
77
77
|
if (mediaControl) {
|
|
78
78
|
mediaControl.putElement('pip', this.el);
|