@gcorevideo/player 2.22.4 → 2.22.7
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/level-selector/button.ejs +1 -1
- package/assets/level-selector/list.ejs +10 -4
- package/assets/level-selector/style.scss +8 -3
- package/assets/media-control/media-control.ejs +1 -2
- package/dist/core.js +2 -2
- package/dist/index.css +916 -912
- package/dist/index.js +452 -413
- package/dist/plugins/index.css +668 -664
- package/dist/plugins/index.js +514 -474
- 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 -1
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +2 -2
- package/lib/plugins/level-selector/LevelSelector.d.ts +6 -5
- package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
- package/lib/plugins/level-selector/LevelSelector.js +11 -8
- package/lib/plugins/level-selector/QualityLevels.d.ts +112 -0
- package/lib/plugins/level-selector/QualityLevels.d.ts.map +1 -0
- package/lib/plugins/level-selector/QualityLevels.js +280 -0
- package/lib/plugins/media-control/MediaControl.d.ts +37 -6
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +54 -36
- package/lib/plugins/playback-rate/PlaybackRate.d.ts +5 -4
- package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +46 -24
- package/lib/plugins/subtitles/ClosedCaptions.js +1 -1
- package/lib/plugins/utils/fullscreen.d.ts +4 -0
- package/lib/plugins/utils/fullscreen.d.ts.map +1 -0
- package/lib/plugins/utils/fullscreen.js +30 -0
- package/lib/plugins/utils.d.ts +0 -1
- package/lib/plugins/utils.d.ts.map +1 -1
- package/lib/plugins/utils.js +0 -28
- package/lib/plugins/vast-ads/VastAds.d.ts +1 -0
- package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -1
- package/lib/plugins/vast-ads/VastAds.js +6 -3
- package/lib/utils/fullscreen.d.ts +3 -0
- package/lib/utils/fullscreen.d.ts.map +1 -0
- package/lib/utils/fullscreen.js +2 -0
- package/package.json +1 -1
- package/src/index.plugins.ts +2 -1
- package/src/playback/dash-playback/DashPlayback.ts +1 -4
- package/src/plugins/bottom-gear/BottomGear.ts +2 -2
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +15 -3
- package/src/plugins/level-selector/{LevelSelector.ts → QualityLevels.ts} +19 -13
- package/src/plugins/level-selector/__tests__/{LevelSelector.test.ts → QualityLevels.test.ts} +20 -6
- package/src/plugins/level-selector/__tests__/__snapshots__/{LevelSelector.test.ts.snap → QualityLevels.test.ts.snap} +58 -25
- package/src/plugins/media-control/MediaControl.ts +111 -62
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +118 -8
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +149 -5
- package/src/plugins/playback-rate/PlaybackRate.ts +48 -26
- package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +125 -55
- package/src/plugins/playback-rate/__tests__/__snapshots__/PlaybackRate.test.ts.snap +1 -1
- package/src/plugins/subtitles/ClosedCaptions.ts +1 -1
- package/src/plugins/utils/fullscreen.ts +34 -0
- package/src/plugins/utils.ts +0 -31
- package/src/plugins/vast-ads/VastAds.ts +8 -4
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -2,19 +2,51 @@ import { UICorePlugin, Core } from '@clappr/core';
|
|
|
2
2
|
import { ZeptoResult } from '../../types.js';
|
|
3
3
|
import '../../../assets/media-control/media-control.scss';
|
|
4
4
|
/**
|
|
5
|
-
* Media control elements
|
|
5
|
+
* Media control elements that appear in the left area.
|
|
6
6
|
* @beta
|
|
7
7
|
*/
|
|
8
|
-
export type
|
|
8
|
+
export type MediaControlLeftElement = 'clipText' | 'duration' | 'dvr' | 'playpause' | 'playstop' | 'position' | 'volume';
|
|
9
|
+
/**
|
|
10
|
+
* Media control elements that appear in main layer, spanning the entire width of the player.
|
|
11
|
+
* @beta
|
|
12
|
+
*/
|
|
13
|
+
export type MediaControlLayerElement = 'seekbar' | 'seekBarContainer';
|
|
14
|
+
/**
|
|
15
|
+
* Media control elements that appear in the right area.
|
|
16
|
+
* @beta
|
|
17
|
+
*/
|
|
18
|
+
export type MediaControlRightElement = 'audiotracks' | 'cc' | 'fullscreen' | 'hd-indicator' | 'gear' | 'multicamera' | 'pip' | 'vr';
|
|
19
|
+
/**
|
|
20
|
+
* Built-in media control elements.
|
|
21
|
+
* @beta
|
|
22
|
+
*/
|
|
23
|
+
export type MediaControlElement = MediaControlLeftElement | MediaControlLayerElement | MediaControlRightElement;
|
|
24
|
+
/**
|
|
25
|
+
* Specifies the allowed media control elements in each area.
|
|
26
|
+
* Can be used to restrict rendered media control elements.
|
|
27
|
+
* @beta
|
|
28
|
+
*/
|
|
29
|
+
export type MediaControlSettings = {
|
|
30
|
+
left: MediaControlLeftElement[];
|
|
31
|
+
right: MediaControlRightElement[];
|
|
32
|
+
default: MediaControlLayerElement[];
|
|
33
|
+
seekEnabled: boolean;
|
|
34
|
+
};
|
|
9
35
|
/**
|
|
10
36
|
* `PLUGIN` that provides basic playback controls UI and a foundation for developing custom UI.
|
|
11
37
|
* @beta
|
|
12
38
|
* @remarks
|
|
13
39
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
40
|
+
*
|
|
41
|
+
* Configuration options:
|
|
42
|
+
*
|
|
43
|
+
* - `mediaControl`: {@link MediaControlSettings} - specifies the allowed media control elements in each area
|
|
44
|
+
*
|
|
45
|
+
* - `persistConfig`: boolean - `common` option, makes the plugin persist the media control settings
|
|
46
|
+
*
|
|
47
|
+
* - `chromeless`: boolean
|
|
14
48
|
*/
|
|
15
49
|
export declare class MediaControl extends UICorePlugin {
|
|
16
|
-
private customAreaElements;
|
|
17
|
-
private customAreaHandler?;
|
|
18
50
|
private buttonsColor;
|
|
19
51
|
private currentDurationValue;
|
|
20
52
|
private currentPositionValue;
|
|
@@ -33,6 +65,7 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
33
65
|
private kibo;
|
|
34
66
|
private lastMouseX;
|
|
35
67
|
private lastMouseY;
|
|
68
|
+
private needsUpdate;
|
|
36
69
|
private persistConfig;
|
|
37
70
|
private rendered;
|
|
38
71
|
private settings;
|
|
@@ -46,7 +79,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
46
79
|
private $multiCameraSelector;
|
|
47
80
|
private $playPauseToggle;
|
|
48
81
|
private $playStopToggle;
|
|
49
|
-
private $playbackRate;
|
|
50
82
|
private $position;
|
|
51
83
|
private $seekBarContainer;
|
|
52
84
|
private $seekBarHover;
|
|
@@ -217,7 +249,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
217
249
|
*/
|
|
218
250
|
getElement(name: MediaControlElement): ZeptoResult | null;
|
|
219
251
|
putElement(name: MediaControlElement, element: ZeptoResult): void;
|
|
220
|
-
handleCustomArea(handler: (name: string, content: HTMLElement) => void): void;
|
|
221
252
|
/**
|
|
222
253
|
* Toggle the visibility of a media control element
|
|
223
254
|
* @param name - The name of the media control element
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@ import { reportError, trace } from '@gcorevideo/utils';
|
|
|
9
9
|
// TODO replace Kibo with mousetrap
|
|
10
10
|
import { Kibo } from '../kibo/index.js';
|
|
11
11
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
12
|
-
import { getPageX
|
|
12
|
+
import { getPageX } from '../utils.js';
|
|
13
|
+
import { fullscreenEnabled, isFullscreen } from '../utils/fullscreen.js';
|
|
13
14
|
import '../../../assets/media-control/media-control.scss';
|
|
14
15
|
import mediaControlHTML from '../../../assets/media-control/media-control.ejs';
|
|
15
16
|
import playIcon from '../../../assets/icons/new/play.svg';
|
|
@@ -20,20 +21,29 @@ import volumeOffIcon from '../../../assets/icons/new/volume-off.svg';
|
|
|
20
21
|
import fullscreenOffIcon from '../../../assets/icons/new/fullscreen-off.svg';
|
|
21
22
|
import fullscreenOnIcon from '../../../assets/icons/new/fullscreen-on.svg';
|
|
22
23
|
const DEFAULT_SETTINGS = {
|
|
23
|
-
|
|
24
|
+
default: [],
|
|
25
|
+
left: [
|
|
26
|
+
'dvr'
|
|
27
|
+
],
|
|
24
28
|
right: [
|
|
29
|
+
'audiotracks',
|
|
30
|
+
'cc',
|
|
31
|
+
// 'dvr',
|
|
32
|
+
// 'duration',
|
|
25
33
|
'fullscreen',
|
|
26
|
-
'pip',
|
|
27
34
|
'gear',
|
|
28
|
-
'cc',
|
|
29
35
|
'multicamera',
|
|
30
|
-
|
|
36
|
+
'pip',
|
|
31
37
|
'vr',
|
|
32
|
-
'audiotracks',
|
|
33
38
|
],
|
|
34
|
-
default: [],
|
|
35
39
|
seekEnabled: true,
|
|
36
40
|
};
|
|
41
|
+
const INITIAL_SETTINGS = {
|
|
42
|
+
left: [],
|
|
43
|
+
right: [],
|
|
44
|
+
default: [],
|
|
45
|
+
seekEnabled: false,
|
|
46
|
+
};
|
|
37
47
|
const T = 'plugins.media_control';
|
|
38
48
|
const LEFT_ORDER = [
|
|
39
49
|
'playpause',
|
|
@@ -55,11 +65,17 @@ function orderByOrderPattern(arr, order) {
|
|
|
55
65
|
* @beta
|
|
56
66
|
* @remarks
|
|
57
67
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
68
|
+
*
|
|
69
|
+
* Configuration options:
|
|
70
|
+
*
|
|
71
|
+
* - `mediaControl`: {@link MediaControlSettings} - specifies the allowed media control elements in each area
|
|
72
|
+
*
|
|
73
|
+
* - `persistConfig`: boolean - `common` option, makes the plugin persist the media control settings
|
|
74
|
+
*
|
|
75
|
+
* - `chromeless`: boolean
|
|
58
76
|
*/
|
|
59
77
|
export class MediaControl extends UICorePlugin {
|
|
60
78
|
// private advertisementPlaying = false
|
|
61
|
-
customAreaElements = {};
|
|
62
|
-
customAreaHandler;
|
|
63
79
|
buttonsColor = null;
|
|
64
80
|
currentDurationValue = 0;
|
|
65
81
|
currentPositionValue = 0;
|
|
@@ -70,7 +86,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
70
86
|
displayedSeekBarPercentage = null;
|
|
71
87
|
draggingSeekBar = false;
|
|
72
88
|
draggingVolumeBar = false;
|
|
73
|
-
fullScreenOnVideoTagSupported =
|
|
89
|
+
fullScreenOnVideoTagSupported = false;
|
|
74
90
|
hideId = null;
|
|
75
91
|
hideVolumeId = null;
|
|
76
92
|
intendedVolume = 100;
|
|
@@ -78,9 +94,10 @@ export class MediaControl extends UICorePlugin {
|
|
|
78
94
|
kibo;
|
|
79
95
|
lastMouseX = 0;
|
|
80
96
|
lastMouseY = 0;
|
|
97
|
+
needsUpdate = false;
|
|
81
98
|
persistConfig;
|
|
82
99
|
rendered = false;
|
|
83
|
-
settings =
|
|
100
|
+
settings = INITIAL_SETTINGS;
|
|
84
101
|
userDisabled = false;
|
|
85
102
|
userKeepVisible = false;
|
|
86
103
|
verticalVolume = false;
|
|
@@ -91,7 +108,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
91
108
|
$multiCameraSelector = null;
|
|
92
109
|
$playPauseToggle = null;
|
|
93
110
|
$playStopToggle = null;
|
|
94
|
-
$playbackRate = null;
|
|
95
111
|
$position = null;
|
|
96
112
|
$seekBarContainer = null;
|
|
97
113
|
$seekBarHover = null;
|
|
@@ -305,7 +321,8 @@ export class MediaControl extends UICorePlugin {
|
|
|
305
321
|
const video = this.core.activePlayback?.el;
|
|
306
322
|
// video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
|
|
307
323
|
// see https://github.com/clappr/clappr/issues/1127
|
|
308
|
-
if (!
|
|
324
|
+
if (!fullscreenEnabled() && video.webkitSupportsFullscreen) {
|
|
325
|
+
// TODO sort out, use single utility function
|
|
309
326
|
this.fullScreenOnVideoTagSupported = true;
|
|
310
327
|
}
|
|
311
328
|
this.updateSettings();
|
|
@@ -537,22 +554,21 @@ export class MediaControl extends UICorePlugin {
|
|
|
537
554
|
}
|
|
538
555
|
}
|
|
539
556
|
onActiveContainerChanged() {
|
|
540
|
-
this.fullScreenOnVideoTagSupported =
|
|
557
|
+
this.fullScreenOnVideoTagSupported = false;
|
|
541
558
|
// set the new container to match the volume of the last one
|
|
542
559
|
this.setInitialVolume();
|
|
543
560
|
this.changeTogglePlay();
|
|
544
561
|
this.bindContainerEvents();
|
|
562
|
+
// TODO remove?
|
|
545
563
|
this.updateSettings();
|
|
546
|
-
// TODO
|
|
547
|
-
this.core.activeContainer.trigger(Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
548
|
-
// TODO test
|
|
564
|
+
// TODO test, figure out if this is needed
|
|
549
565
|
if (this.core.activeContainer.mediaControlDisabled) {
|
|
550
566
|
this.disable();
|
|
551
567
|
}
|
|
552
568
|
else {
|
|
553
569
|
this.enable();
|
|
554
570
|
}
|
|
555
|
-
this.trigger(Events.MEDIACONTROL_CONTAINERCHANGED); // TODO
|
|
571
|
+
this.trigger(Events.MEDIACONTROL_CONTAINERCHANGED); // TODO figure out
|
|
556
572
|
if (this.core.activeContainer.$el) {
|
|
557
573
|
this.core.activeContainer.$el.addClass('container-skin-1');
|
|
558
574
|
}
|
|
@@ -723,11 +739,13 @@ export class MediaControl extends UICorePlugin {
|
|
|
723
739
|
}
|
|
724
740
|
}
|
|
725
741
|
updateSettings() {
|
|
742
|
+
trace(`${T} updateSettings`, { settings: this.settings });
|
|
726
743
|
const newSettings = $.extend(true, {
|
|
727
744
|
left: [],
|
|
728
745
|
default: [],
|
|
729
746
|
right: [],
|
|
730
747
|
}, this.core.activeContainer.settings);
|
|
748
|
+
trace(`${T} updateSettings`, { newSettings });
|
|
731
749
|
// TODO make order controlled via CSS
|
|
732
750
|
newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
|
|
733
751
|
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
@@ -735,10 +753,15 @@ export class MediaControl extends UICorePlugin {
|
|
|
735
753
|
newSettings.left.push('dvr');
|
|
736
754
|
}
|
|
737
755
|
// actual order of the items appear rendered is controlled by CSS
|
|
738
|
-
newSettings.right = DEFAULT_SETTINGS.right;
|
|
756
|
+
newSettings.right = DEFAULT_SETTINGS.right; // TODO get from the options
|
|
739
757
|
if ((!this.fullScreenOnVideoTagSupported &&
|
|
740
|
-
!
|
|
758
|
+
!fullscreenEnabled()) ||
|
|
741
759
|
this.options.fullscreenDisable) {
|
|
760
|
+
trace(`${T} updateSettings removing fullscreen`, {
|
|
761
|
+
supported: this.fullScreenOnVideoTagSupported,
|
|
762
|
+
enabled: Fullscreen.fullscreenEnabled(),
|
|
763
|
+
optionsDisable: this.options.fullscreenDisable,
|
|
764
|
+
});
|
|
742
765
|
// remove fullscreen from settings if it is not available
|
|
743
766
|
removeArrayItem(newSettings.default, 'fullscreen');
|
|
744
767
|
removeArrayItem(newSettings.left, 'fullscreen');
|
|
@@ -753,6 +776,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
753
776
|
const settingsChanged = serializeSettings(this.settings) !== serializeSettings(newSettings);
|
|
754
777
|
if (settingsChanged) {
|
|
755
778
|
this.settings = newSettings;
|
|
779
|
+
this.needsUpdate = true;
|
|
756
780
|
this.render();
|
|
757
781
|
}
|
|
758
782
|
}
|
|
@@ -777,7 +801,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
777
801
|
this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');
|
|
778
802
|
this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');
|
|
779
803
|
this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
|
|
780
|
-
this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
|
|
781
804
|
this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
|
|
782
805
|
this.$clipText = this.$el.find('.media-clip-text[data-clipstext]'); // TODO
|
|
783
806
|
this.$clipTextContainer = this.$el.find('.media-clip-container[data-clipstext]');
|
|
@@ -809,8 +832,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
809
832
|
return null;
|
|
810
833
|
case 'clipText':
|
|
811
834
|
return this.$clipText;
|
|
812
|
-
case 'playbackRate':
|
|
813
|
-
return this.$playbackRate;
|
|
814
835
|
case 'seekBarContainer':
|
|
815
836
|
return this.$seekBarContainer;
|
|
816
837
|
}
|
|
@@ -834,13 +855,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
834
855
|
return;
|
|
835
856
|
}
|
|
836
857
|
}
|
|
837
|
-
handleCustomArea(handler) {
|
|
838
|
-
this.customAreaHandler = handler;
|
|
839
|
-
Object.entries(this.customAreaElements).forEach(([name, element]) => {
|
|
840
|
-
handler(name, element);
|
|
841
|
-
});
|
|
842
|
-
this.customAreaElements = {};
|
|
843
|
-
}
|
|
844
858
|
/**
|
|
845
859
|
* Toggle the visibility of a media control element
|
|
846
860
|
* @param name - The name of the media control element
|
|
@@ -938,8 +952,8 @@ export class MediaControl extends UICorePlugin {
|
|
|
938
952
|
keys.forEach((i) => {
|
|
939
953
|
this.bindKeyAndShow(i, () => {
|
|
940
954
|
this.settings.seekEnabled &&
|
|
941
|
-
this.
|
|
942
|
-
this.
|
|
955
|
+
this.core.activeContainer &&
|
|
956
|
+
this.core.activeContainer.seekPercentage(Number(i) * 10);
|
|
943
957
|
return false;
|
|
944
958
|
});
|
|
945
959
|
});
|
|
@@ -1005,10 +1019,12 @@ export class MediaControl extends UICorePlugin {
|
|
|
1005
1019
|
* @internal
|
|
1006
1020
|
*/
|
|
1007
1021
|
render() {
|
|
1008
|
-
trace(`${T} render
|
|
1022
|
+
trace(`${T} render`, { needsUpdate: this.needsUpdate });
|
|
1023
|
+
if (!this.needsUpdate) {
|
|
1024
|
+
return this;
|
|
1025
|
+
}
|
|
1009
1026
|
const timeout = this.options.hideMediaControlDelay || 2000;
|
|
1010
|
-
|
|
1011
|
-
this.$el.html(html);
|
|
1027
|
+
this.$el.html(MediaControl.template({ settings: this.settings }));
|
|
1012
1028
|
// const style = Styler.getStyleFor(mediaControlStyle, { baseUrl: this.options.baseUrl });
|
|
1013
1029
|
// this.$el.append(style[0]);
|
|
1014
1030
|
this.createCachedElements();
|
|
@@ -1054,7 +1070,8 @@ export class MediaControl extends UICorePlugin {
|
|
|
1054
1070
|
this.core.$el.append(this.el);
|
|
1055
1071
|
this.rendered = true;
|
|
1056
1072
|
this.updateVolumeUI();
|
|
1057
|
-
|
|
1073
|
+
this.needsUpdate = false;
|
|
1074
|
+
// TODO setTimeout?
|
|
1058
1075
|
this.trigger(Events.MEDIACONTROL_RENDERED);
|
|
1059
1076
|
return this;
|
|
1060
1077
|
}
|
|
@@ -1120,6 +1137,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1120
1137
|
element.el.css({ 'pointer-events': 'none' });
|
|
1121
1138
|
});
|
|
1122
1139
|
}
|
|
1140
|
+
// TODO drop
|
|
1123
1141
|
isSeekEnabledForHtml5Playback() {
|
|
1124
1142
|
if (this.core.getPlaybackType() === Playback.LIVE) {
|
|
1125
1143
|
return this.options.dvrEnabled;
|
|
@@ -40,12 +40,11 @@ export type PlaybackRateSettings = {
|
|
|
40
40
|
* { value: 1, label: '1x' },
|
|
41
41
|
* ],
|
|
42
42
|
* defaultValue: 1,
|
|
43
|
-
* }
|
|
43
|
+
* },
|
|
44
44
|
* })
|
|
45
45
|
* ```
|
|
46
46
|
*/
|
|
47
47
|
export declare class PlaybackRate extends UICorePlugin {
|
|
48
|
-
private playbackRates;
|
|
49
48
|
private selectedRate;
|
|
50
49
|
/**
|
|
51
50
|
* @internal
|
|
@@ -60,6 +59,7 @@ export declare class PlaybackRate extends UICorePlugin {
|
|
|
60
59
|
private static readonly buttonTemplate;
|
|
61
60
|
private static readonly listTemplate;
|
|
62
61
|
constructor(core: Core);
|
|
62
|
+
private get playbackRates();
|
|
63
63
|
/**
|
|
64
64
|
* @internal
|
|
65
65
|
*/
|
|
@@ -81,17 +81,18 @@ export declare class PlaybackRate extends UICorePlugin {
|
|
|
81
81
|
private onActiveContainerChange;
|
|
82
82
|
private onMediaControlRendered;
|
|
83
83
|
private onGearRendered;
|
|
84
|
-
private
|
|
84
|
+
private mount;
|
|
85
85
|
private onMetaDataLoaded;
|
|
86
86
|
private allRateElements;
|
|
87
87
|
private rateElement;
|
|
88
88
|
private onPlaybackRateChange;
|
|
89
|
-
private
|
|
89
|
+
private shouldMount;
|
|
90
90
|
/**
|
|
91
91
|
* @internal
|
|
92
92
|
*/
|
|
93
93
|
render(): this;
|
|
94
94
|
private onPlay;
|
|
95
|
+
private syncRate;
|
|
95
96
|
private resetPlaybackRate;
|
|
96
97
|
private onStop;
|
|
97
98
|
private onSelect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaybackRate.d.ts","sourceRoot":"","sources":["../../../src/plugins/playback-rate/PlaybackRate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAsB,IAAI,EAAK,MAAM,cAAc,CAAA;AAiBhF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,YAAa,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"PlaybackRate.d.ts","sourceRoot":"","sources":["../../../src/plugins/playback-rate/PlaybackRate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAsB,IAAI,EAAK,MAAM,cAAc,CAAA;AAiBhF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAI5C,OAAO,CAAC,YAAY,CAAwB;IAE5C;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAE7C,IAAI,EAAE,IAAI;IAOtB,OAAO,KAAK,aAAa,GAExB;IAED;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,WAAW;IAenB;;OAEG;IACM,MAAM;IAoCf,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,qBAAqB;CAM9B"}
|
|
@@ -48,12 +48,11 @@ const T = 'plugins.playback_rate';
|
|
|
48
48
|
* { value: 1, label: '1x' },
|
|
49
49
|
* ],
|
|
50
50
|
* defaultValue: 1,
|
|
51
|
-
* }
|
|
51
|
+
* },
|
|
52
52
|
* })
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
55
55
|
export class PlaybackRate extends UICorePlugin {
|
|
56
|
-
playbackRates = DEFAULT_PLAYBACK_RATES;
|
|
57
56
|
// Saved when an ad starts to restore after it finishes
|
|
58
57
|
// private prevSelectedRate: string | undefined
|
|
59
58
|
selectedRate = DEFAULT_PLAYBACK_RATE;
|
|
@@ -73,10 +72,12 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
73
72
|
static listTemplate = template(listHtml);
|
|
74
73
|
constructor(core) {
|
|
75
74
|
super(core);
|
|
76
|
-
this.
|
|
77
|
-
core.options.playbackRate
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
if (this.core.options.playbackRate?.defaultValue) {
|
|
76
|
+
this.setSelectedRate(this.core.options.playbackRate.defaultValue);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
get playbackRates() {
|
|
80
|
+
return this.core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
|
|
80
81
|
}
|
|
81
82
|
/**
|
|
82
83
|
* @internal
|
|
@@ -124,10 +125,15 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
124
125
|
}
|
|
125
126
|
onGearRendered() {
|
|
126
127
|
trace(`${T} onGearRendered`);
|
|
127
|
-
this.
|
|
128
|
+
this.mount();
|
|
128
129
|
}
|
|
129
|
-
|
|
130
|
-
trace(`${T}
|
|
130
|
+
mount() {
|
|
131
|
+
trace(`${T} mount`, {
|
|
132
|
+
shouldMount: this.shouldMount(),
|
|
133
|
+
});
|
|
134
|
+
if (!this.shouldMount()) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
131
137
|
this.core
|
|
132
138
|
.getPlugin('bottom_gear')
|
|
133
139
|
?.addItem('rate', this.$el)
|
|
@@ -160,7 +166,7 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
160
166
|
});
|
|
161
167
|
}
|
|
162
168
|
}
|
|
163
|
-
|
|
169
|
+
shouldMount() {
|
|
164
170
|
if (!this.core.activePlayback) {
|
|
165
171
|
return false;
|
|
166
172
|
}
|
|
@@ -175,11 +181,8 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
175
181
|
*/
|
|
176
182
|
render() {
|
|
177
183
|
trace(`${T} render`, {
|
|
178
|
-
|
|
184
|
+
shouldMount: this.shouldMount(),
|
|
179
185
|
});
|
|
180
|
-
if (!this.shouldRender()) {
|
|
181
|
-
return this;
|
|
182
|
-
}
|
|
183
186
|
this.$el.html(PlaybackRate.listTemplate({
|
|
184
187
|
arrowLeftIcon,
|
|
185
188
|
checkIcon,
|
|
@@ -187,7 +190,7 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
187
190
|
i18n: this.core.i18n,
|
|
188
191
|
playbackRates: this.playbackRates,
|
|
189
192
|
}));
|
|
190
|
-
this.
|
|
193
|
+
this.mount();
|
|
191
194
|
return this;
|
|
192
195
|
}
|
|
193
196
|
// private onStartAd() {
|
|
@@ -210,11 +213,21 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
210
213
|
this.resetPlaybackRate();
|
|
211
214
|
}
|
|
212
215
|
else {
|
|
213
|
-
this.
|
|
216
|
+
this.syncRate();
|
|
214
217
|
}
|
|
215
218
|
}
|
|
219
|
+
syncRate() {
|
|
220
|
+
trace(`${T} syncRate`, {
|
|
221
|
+
selectedRate: this.selectedRate,
|
|
222
|
+
});
|
|
223
|
+
this.core.activePlayback?.setPlaybackRate(this.selectedRate);
|
|
224
|
+
}
|
|
216
225
|
resetPlaybackRate() {
|
|
217
|
-
|
|
226
|
+
trace(`${T} resetPlaybackRate`, {
|
|
227
|
+
selectedRate: this.selectedRate,
|
|
228
|
+
});
|
|
229
|
+
this.core.activePlayback?.setPlaybackRate(DEFAULT_PLAYBACK_RATE);
|
|
230
|
+
this.selectedRate = DEFAULT_PLAYBACK_RATE;
|
|
218
231
|
}
|
|
219
232
|
onStop() { }
|
|
220
233
|
onSelect(event) {
|
|
@@ -222,8 +235,6 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
222
235
|
const rate = parseFloat(event.currentTarget.dataset.rate || '');
|
|
223
236
|
if (rate) {
|
|
224
237
|
this.setSelectedRate(rate);
|
|
225
|
-
this.highlightCurrentRate();
|
|
226
|
-
this.updateGearOptionLabel();
|
|
227
238
|
}
|
|
228
239
|
return false;
|
|
229
240
|
}
|
|
@@ -233,14 +244,23 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
233
244
|
}, 0);
|
|
234
245
|
}
|
|
235
246
|
setSelectedRate(rate) {
|
|
236
|
-
this.
|
|
247
|
+
if (rate === this.selectedRate) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
237
250
|
this.selectedRate = rate;
|
|
251
|
+
this.syncRate();
|
|
252
|
+
this.highlightCurrentRate();
|
|
253
|
+
this.updateGearOptionLabel();
|
|
238
254
|
}
|
|
239
255
|
getTitle() {
|
|
240
|
-
|
|
241
|
-
|
|
256
|
+
const rate = this.selectedRate;
|
|
257
|
+
return (this.playbackRates.find((r) => r.value === rate)?.label ||
|
|
258
|
+
`x${rate}`);
|
|
242
259
|
}
|
|
243
260
|
highlightCurrentRate() {
|
|
261
|
+
trace(`${T} highlightCurrentRate`, {
|
|
262
|
+
selectedRate: this.selectedRate,
|
|
263
|
+
});
|
|
244
264
|
this.allRateElements().removeClass('current');
|
|
245
265
|
this.allRateElements().find('a').removeClass('gcore-skin-active');
|
|
246
266
|
this.rateElement(this.selectedRate)
|
|
@@ -249,7 +269,9 @@ export class PlaybackRate extends UICorePlugin {
|
|
|
249
269
|
.addClass('gcore-skin-active');
|
|
250
270
|
}
|
|
251
271
|
updateGearOptionLabel() {
|
|
252
|
-
trace(`${T} updateGearOptionLabel
|
|
253
|
-
|
|
272
|
+
trace(`${T} updateGearOptionLabel`, {
|
|
273
|
+
selectedRate: this.selectedRate,
|
|
274
|
+
});
|
|
275
|
+
this.mount();
|
|
254
276
|
}
|
|
255
277
|
}
|
|
@@ -7,7 +7,7 @@ import subtitlesOffIcon from '../../../assets/icons/new/subtitles-off.svg';
|
|
|
7
7
|
import subtitlesOnIcon from '../../../assets/icons/new/subtitles-on.svg';
|
|
8
8
|
import comboboxHTML from '../../../assets/subtitles/combobox.ejs';
|
|
9
9
|
import stringHTML from '../../../assets/subtitles/string.ejs';
|
|
10
|
-
import { isFullscreen } from '../utils.js';
|
|
10
|
+
import { isFullscreen } from '../utils/fullscreen.js';
|
|
11
11
|
const VERSION = '2.19.14';
|
|
12
12
|
const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
|
|
13
13
|
const T = 'plugins.cc';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../../src/plugins/utils/fullscreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,MAAM,cAAc,CAAC;AAG9C,eAAO,MAAM,iBAAiB,2CAAqC,CAAA;AAEnE,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAYrD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Browser, Utils } from '@clappr/core';
|
|
2
|
+
import { reportError } from '@gcorevideo/utils';
|
|
3
|
+
export const fullscreenEnabled = Utils.Fullscreen.fullscreenEnabled;
|
|
4
|
+
export function isFullscreen(el) {
|
|
5
|
+
const video = el.nodeName === 'video'
|
|
6
|
+
? el
|
|
7
|
+
: el.querySelector('video');
|
|
8
|
+
if (!video) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (Browser.isiOS) {
|
|
12
|
+
return FullscreenIOS.isFullscreen(video);
|
|
13
|
+
}
|
|
14
|
+
return !!document.fullscreenElement;
|
|
15
|
+
}
|
|
16
|
+
const FullscreenIOS = {
|
|
17
|
+
isFullscreen: function (el) {
|
|
18
|
+
try {
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
if (el.webkitDisplayingFullscreen !== undefined) {
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
return !!el.webkitDisplayingFullscreen;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
reportError(e);
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
},
|
|
30
|
+
};
|
package/lib/plugins/utils.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare function getLocation(href: string): HTMLAnchorElement;
|
|
2
2
|
export declare function strtimeToMiliseconds(str: string): number;
|
|
3
|
-
export declare function isFullscreen(el: HTMLElement): boolean;
|
|
4
3
|
export declare function getPageX(event: MouseEvent | TouchEvent): number;
|
|
5
4
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,qBAMvC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBxD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAU/D"}
|
package/lib/plugins/utils.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { Browser } from '@clappr/core';
|
|
2
|
-
import { reportError } from '@gcorevideo/utils';
|
|
3
1
|
export function getLocation(href) {
|
|
4
2
|
const l = document.createElement('a');
|
|
5
3
|
l.href = href;
|
|
@@ -31,32 +29,6 @@ export function strtimeToMiliseconds(str) {
|
|
|
31
29
|
}
|
|
32
30
|
return (h + m + s);
|
|
33
31
|
}
|
|
34
|
-
// TODO refactor
|
|
35
|
-
export function isFullscreen(el) {
|
|
36
|
-
const video = el.nodeName === "video" ? el : el.querySelector('video');
|
|
37
|
-
if (!video) {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
if (Browser.isiOS) {
|
|
41
|
-
return FullscreenIOS.isFullscreen(video);
|
|
42
|
-
}
|
|
43
|
-
return !!(document.fullscreenElement);
|
|
44
|
-
}
|
|
45
|
-
const FullscreenIOS = {
|
|
46
|
-
isFullscreen: function (el) {
|
|
47
|
-
try {
|
|
48
|
-
// @ts-ignore
|
|
49
|
-
if (el.webkitDisplayingFullscreen !== undefined) {
|
|
50
|
-
// @ts-ignore
|
|
51
|
-
return !!(el.webkitDisplayingFullscreen);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
reportError(e);
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
32
|
export function getPageX(event) {
|
|
61
33
|
if (event.pageX) {
|
|
62
34
|
return event.pageX;
|