@gcorevideo/player 2.22.5 → 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/media-control/media-control.ejs +1 -2
- package/dist/core.js +2 -2
- package/dist/index.css +1432 -1432
- package/dist/index.js +127 -91
- package/dist/plugins/index.css +1495 -1495
- package/dist/plugins/index.js +123 -86
- 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/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/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/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/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/tsconfig.tsbuildinfo +1 -1
package/dist/index.js
CHANGED
|
@@ -13091,8 +13091,8 @@ class DashPlayback extends BasePlayback {
|
|
|
13091
13091
|
return super.destroy();
|
|
13092
13092
|
}
|
|
13093
13093
|
_updatePlaybackType() {
|
|
13094
|
-
assert.ok(this._dash, 'An instance of dashjs MediaPlayer is required to update the playback type');
|
|
13095
13094
|
const prevPlaybackType = this._playbackType;
|
|
13095
|
+
// @ts-ignore
|
|
13096
13096
|
this._playbackType = this._dash.isDynamic() ? Playback.LIVE : Playback.VOD;
|
|
13097
13097
|
if (prevPlaybackType !== this._playbackType) {
|
|
13098
13098
|
this._updateSettings();
|
|
@@ -43299,7 +43299,7 @@ class Player {
|
|
|
43299
43299
|
}
|
|
43300
43300
|
}
|
|
43301
43301
|
|
|
43302
|
-
var version$1 = "2.22.
|
|
43302
|
+
var version$1 = "2.22.7";
|
|
43303
43303
|
|
|
43304
43304
|
var packages = {
|
|
43305
43305
|
"node_modules/@clappr/core": {
|
|
@@ -43843,7 +43843,6 @@ class BottomGear extends UICorePlugin {
|
|
|
43843
43843
|
.find('#gear-sub-menu-wrapper')
|
|
43844
43844
|
.hide();
|
|
43845
43845
|
// TODO make non-clickable when there are no items
|
|
43846
|
-
mediaControl.putElement('gear', this.$el);
|
|
43847
43846
|
setTimeout(() => {
|
|
43848
43847
|
this.trigger(GearEvents.RENDERED);
|
|
43849
43848
|
}, 0);
|
|
@@ -43873,7 +43872,8 @@ class BottomGear extends UICorePlugin {
|
|
|
43873
43872
|
}
|
|
43874
43873
|
onMediaControlRendered() {
|
|
43875
43874
|
trace(`${T$f} onMediaControlRendered`);
|
|
43876
|
-
this.
|
|
43875
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
43876
|
+
mediaControl.putElement('gear', this.$el);
|
|
43877
43877
|
}
|
|
43878
43878
|
}
|
|
43879
43879
|
|
|
@@ -46738,32 +46738,6 @@ function strtimeToMiliseconds(str) {
|
|
|
46738
46738
|
}
|
|
46739
46739
|
return (h + m + s);
|
|
46740
46740
|
}
|
|
46741
|
-
// TODO refactor
|
|
46742
|
-
function isFullscreen(el) {
|
|
46743
|
-
const video = el.nodeName === "video" ? el : el.querySelector('video');
|
|
46744
|
-
if (!video) {
|
|
46745
|
-
return false;
|
|
46746
|
-
}
|
|
46747
|
-
if (Browser.isiOS) {
|
|
46748
|
-
return FullscreenIOS.isFullscreen(video);
|
|
46749
|
-
}
|
|
46750
|
-
return !!(document.fullscreenElement);
|
|
46751
|
-
}
|
|
46752
|
-
const FullscreenIOS = {
|
|
46753
|
-
isFullscreen: function (el) {
|
|
46754
|
-
try {
|
|
46755
|
-
// @ts-ignore
|
|
46756
|
-
if (el.webkitDisplayingFullscreen !== undefined) {
|
|
46757
|
-
// @ts-ignore
|
|
46758
|
-
return !!(el.webkitDisplayingFullscreen);
|
|
46759
|
-
}
|
|
46760
|
-
}
|
|
46761
|
-
catch (e) {
|
|
46762
|
-
reportError(e);
|
|
46763
|
-
}
|
|
46764
|
-
return false;
|
|
46765
|
-
}
|
|
46766
|
-
};
|
|
46767
46741
|
function getPageX(event) {
|
|
46768
46742
|
if (event.pageX) {
|
|
46769
46743
|
return event.pageX;
|
|
@@ -47901,7 +47875,36 @@ function keyName(keyCode) {
|
|
|
47901
47875
|
return KEY_NAMES_BY_CODE[keyCode] || '';
|
|
47902
47876
|
}
|
|
47903
47877
|
|
|
47904
|
-
const
|
|
47878
|
+
const fullscreenEnabled = Utils.Fullscreen.fullscreenEnabled;
|
|
47879
|
+
function isFullscreen(el) {
|
|
47880
|
+
const video = el.nodeName === 'video'
|
|
47881
|
+
? el
|
|
47882
|
+
: el.querySelector('video');
|
|
47883
|
+
if (!video) {
|
|
47884
|
+
return false;
|
|
47885
|
+
}
|
|
47886
|
+
if (Browser.isiOS) {
|
|
47887
|
+
return FullscreenIOS.isFullscreen(video);
|
|
47888
|
+
}
|
|
47889
|
+
return !!document.fullscreenElement;
|
|
47890
|
+
}
|
|
47891
|
+
const FullscreenIOS = {
|
|
47892
|
+
isFullscreen: function (el) {
|
|
47893
|
+
try {
|
|
47894
|
+
// @ts-ignore
|
|
47895
|
+
if (el.webkitDisplayingFullscreen !== undefined) {
|
|
47896
|
+
// @ts-ignore
|
|
47897
|
+
return !!el.webkitDisplayingFullscreen;
|
|
47898
|
+
}
|
|
47899
|
+
}
|
|
47900
|
+
catch (e) {
|
|
47901
|
+
reportError(e);
|
|
47902
|
+
}
|
|
47903
|
+
return false;
|
|
47904
|
+
},
|
|
47905
|
+
};
|
|
47906
|
+
|
|
47907
|
+
const mediaControlHTML = "<div class=\"media-control-background\" data-background></div>\n\n<div class=\"media-control-layer gcore-skin-bg-color\" data-controls>\n <% var renderBar = function(name) { %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1\" data-<%= name %>></div>\n <div class=\"bar-fill-2 gcore-skin-main-color\" data-<%= name %>></div>\n <div class=\"bar-hover\" data-<%= name %>></div>\n </div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderSegmentedBar = function(name, segments) {\n segments = segments || 10; %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1 gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n </div>\n <% }; %>\n <% var renderDrawer = function(name, renderContent) { %>\n <div class=\"drawer-container\" data-<%= name %>>\n <div class=\"drawer-icon-container\" data-<%= name %>>\n <div class=\"drawer-icon media-control-icon gcore-skin-button-color\" data-<%= name %>></div>\n <span class=\"drawer-text\" data-<%= name %>></span>\n </div>\n <% renderContent(name); %>\n </div>\n <% }; %>\n <% var renderIndicator = function(name) { %>\n <div class=\"media-control-indicator gcore-skin-text-color\" data-<%= name %>></div>\n <% }; %>\n <% var renderQuality = function(name) { %>\n <div class=\"media-control-quality\" data-<%= name %>></div>\n <% }; %>\n <% var renderNerd = function(name) { %>\n <div class=\"media-control-nerd\" data-<%= name %>></div>\n <% }; %>\n <% var renderMultiCamera = function(name) { %>\n <div class=\"media-control-multicamera\" data-<%= name %>></div>\n <% }; %>\n <% var renderClipsText = function(name) { %>\n <div class=\"media-clip-container gcore-skin-text-color\" data-<%= name %>>\n <div class=\"media-clip-point gcore-skin-text-color\" data-<%= name %>>•</div>\n <div class=\"media-clip-text gcore-skin-text-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderVR = function(name) { %>\n <div class=\"media-control-vr\" data-<%= name %>></div>\n <% }; %>\n <% var renderButton = function(name) { %>\n <button type=\"button\" class=\"media-control-button media-control-icon gcore-skin-button-color\" data-<%= name %>\n aria-label=\"<%= name %>\"></button>\n <% }; %>\n\n <% var templates = {\n bar: renderBar,\n segmentedBar: renderSegmentedBar,\n };\n var render = function (settingsList) {\n settingsList.forEach(function (setting) {\n\n if (setting === \"seekbar\") {\n renderBar(setting);\n } else if (setting === \"volume\") {\n renderDrawer(setting, settings.volumeBarTemplate ? templates[settings.volumeBarTemplate] : function (name) {\n return renderSegmentedBar(name);\n });\n } else if (setting === \"duration\" || setting === \"position\") {\n renderIndicator(setting);\n } else if (setting === \"quality\") {\n renderQuality(setting)\n } else if (setting === \"nerd\") {\n renderNerd(setting)\n } else if (setting === \"multicamera\") {\n renderMultiCamera(setting)\n } else if (setting === \"vr\") {\n renderVR(setting)\n } else if (setting === \"clipsText\") {\n renderClipsText(setting)\n } else if ([\"playpause\", \"playstop\", \"fullscreen\"].includes(setting)) {\n renderButton(setting);\n }\n });\n }; %>\n <% if (settings.left && settings.left.length) { %>\n <div class=\"media-control-left-panel\" data-media-control>\n <% render(settings.left); %>\n </div>\n <% } %>\n <% if (settings.default && settings.default.length) { %>\n <div class=\"media-control-center-panel\" data-media-control>\n <% render(settings.default); %>\n </div>\n <% } %>\n <% if (settings.right && settings.right.length) { %>\n <div class=\"media-control-right-panel\" data-media-control>\n <% render(settings.right); %>\n </div>\n <% } %>\n</div>\n";
|
|
47905
47908
|
|
|
47906
47909
|
const volumeMaxIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14.187 7.71405C13.759 8.06405 13.697 8.69307 14.046 9.12107C14.662 9.87207 15 10.8941 15 11.9961C15 13.0991 14.662 14.1201 14.046 14.8711C13.697 15.2991 13.759 15.9291 14.187 16.2781C14.373 16.4311 14.597 16.5051 14.82 16.5051C15.109 16.5051 15.396 16.3801 15.594 16.1391C16.501 15.0301 17 13.5601 17 11.9961C17 10.4331 16.501 8.96207 15.594 7.85407C15.245 7.42707 14.614 7.36405 14.187 7.71405ZM19.772 5.14408C19.443 4.70008 18.816 4.60907 18.374 4.94007C17.931 5.27007 17.839 5.89605 18.169 6.33905C19.367 7.94705 20 9.90307 20 11.9961C20 14.0891 19.367 16.0451 18.169 17.6531C17.839 18.0971 17.931 18.7231 18.374 19.0531C18.553 19.1871 18.762 19.2511 18.97 19.2511C19.275 19.2511 19.576 19.1121 19.772 18.8491C21.23 16.8921 22 14.5231 22 11.9961C22 9.47007 21.23 7.10108 19.772 5.14408ZM12 3.85108V20.1421C12 20.4881 11.793 20.7971 11.473 20.9291C11.368 20.9721 11.258 20.9921 11.149 20.9921C10.926 20.9921 10.708 20.9031 10.544 20.7371L6.317 16.4431C6.038 16.1591 5.648 15.9961 5.249 15.9961H3.5C2.673 15.9961 2 15.3231 2 14.4961V9.49607C2 8.66907 2.673 7.99607 3.5 7.99607H5.249C5.648 7.99607 6.038 7.83308 6.317 7.54908L10.544 3.25507C10.787 3.00807 11.151 2.93206 11.473 3.06406C11.793 3.19506 12 3.50408 12 3.85108Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
47907
47910
|
|
|
@@ -47915,19 +47918,22 @@ const fullscreenOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
|
|
|
47915
47918
|
// Use of this source code is governed by a BSD-style
|
|
47916
47919
|
// license that can be found in the {@link https://github.com/clappr/clappr-plugins/blob/master/LICENSE | LICENSE}.
|
|
47917
47920
|
const DEFAULT_SETTINGS = {
|
|
47918
|
-
left: [],
|
|
47919
47921
|
right: [
|
|
47922
|
+
'audiotracks',
|
|
47923
|
+
'cc',
|
|
47924
|
+
// 'dvr',
|
|
47925
|
+
// 'duration',
|
|
47920
47926
|
'fullscreen',
|
|
47921
|
-
'pip',
|
|
47922
47927
|
'gear',
|
|
47923
|
-
'cc',
|
|
47924
47928
|
'multicamera',
|
|
47925
|
-
|
|
47929
|
+
'pip',
|
|
47926
47930
|
'vr',
|
|
47927
|
-
|
|
47928
|
-
|
|
47931
|
+
]};
|
|
47932
|
+
const INITIAL_SETTINGS = {
|
|
47933
|
+
left: [],
|
|
47934
|
+
right: [],
|
|
47929
47935
|
default: [],
|
|
47930
|
-
seekEnabled:
|
|
47936
|
+
seekEnabled: false,
|
|
47931
47937
|
};
|
|
47932
47938
|
const T$a = 'plugins.media_control';
|
|
47933
47939
|
const LEFT_ORDER = [
|
|
@@ -47950,11 +47956,17 @@ function orderByOrderPattern(arr, order) {
|
|
|
47950
47956
|
* @beta
|
|
47951
47957
|
* @remarks
|
|
47952
47958
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
47959
|
+
*
|
|
47960
|
+
* Configuration options:
|
|
47961
|
+
*
|
|
47962
|
+
* - `mediaControl`: {@link MediaControlSettings} - specifies the allowed media control elements in each area
|
|
47963
|
+
*
|
|
47964
|
+
* - `persistConfig`: boolean - `common` option, makes the plugin persist the media control settings
|
|
47965
|
+
*
|
|
47966
|
+
* - `chromeless`: boolean
|
|
47953
47967
|
*/
|
|
47954
47968
|
class MediaControl extends UICorePlugin {
|
|
47955
47969
|
// private advertisementPlaying = false
|
|
47956
|
-
customAreaElements = {};
|
|
47957
|
-
customAreaHandler;
|
|
47958
47970
|
buttonsColor = null;
|
|
47959
47971
|
currentDurationValue = 0;
|
|
47960
47972
|
currentPositionValue = 0;
|
|
@@ -47965,7 +47977,7 @@ class MediaControl extends UICorePlugin {
|
|
|
47965
47977
|
displayedSeekBarPercentage = null;
|
|
47966
47978
|
draggingSeekBar = false;
|
|
47967
47979
|
draggingVolumeBar = false;
|
|
47968
|
-
fullScreenOnVideoTagSupported =
|
|
47980
|
+
fullScreenOnVideoTagSupported = false;
|
|
47969
47981
|
hideId = null;
|
|
47970
47982
|
hideVolumeId = null;
|
|
47971
47983
|
intendedVolume = 100;
|
|
@@ -47973,9 +47985,10 @@ class MediaControl extends UICorePlugin {
|
|
|
47973
47985
|
kibo;
|
|
47974
47986
|
lastMouseX = 0;
|
|
47975
47987
|
lastMouseY = 0;
|
|
47988
|
+
needsUpdate = false;
|
|
47976
47989
|
persistConfig;
|
|
47977
47990
|
rendered = false;
|
|
47978
|
-
settings =
|
|
47991
|
+
settings = INITIAL_SETTINGS;
|
|
47979
47992
|
userDisabled = false;
|
|
47980
47993
|
userKeepVisible = false;
|
|
47981
47994
|
verticalVolume = false;
|
|
@@ -47986,7 +47999,6 @@ class MediaControl extends UICorePlugin {
|
|
|
47986
47999
|
$multiCameraSelector = null;
|
|
47987
48000
|
$playPauseToggle = null;
|
|
47988
48001
|
$playStopToggle = null;
|
|
47989
|
-
$playbackRate = null;
|
|
47990
48002
|
$position = null;
|
|
47991
48003
|
$seekBarContainer = null;
|
|
47992
48004
|
$seekBarHover = null;
|
|
@@ -48200,7 +48212,8 @@ class MediaControl extends UICorePlugin {
|
|
|
48200
48212
|
const video = this.core.activePlayback?.el;
|
|
48201
48213
|
// video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
|
|
48202
48214
|
// see https://github.com/clappr/clappr/issues/1127
|
|
48203
|
-
if (!
|
|
48215
|
+
if (!fullscreenEnabled() && video.webkitSupportsFullscreen) {
|
|
48216
|
+
// TODO sort out, use single utility function
|
|
48204
48217
|
this.fullScreenOnVideoTagSupported = true;
|
|
48205
48218
|
}
|
|
48206
48219
|
this.updateSettings();
|
|
@@ -48432,22 +48445,21 @@ class MediaControl extends UICorePlugin {
|
|
|
48432
48445
|
}
|
|
48433
48446
|
}
|
|
48434
48447
|
onActiveContainerChanged() {
|
|
48435
|
-
this.fullScreenOnVideoTagSupported =
|
|
48448
|
+
this.fullScreenOnVideoTagSupported = false;
|
|
48436
48449
|
// set the new container to match the volume of the last one
|
|
48437
48450
|
this.setInitialVolume();
|
|
48438
48451
|
this.changeTogglePlay();
|
|
48439
48452
|
this.bindContainerEvents();
|
|
48453
|
+
// TODO remove?
|
|
48440
48454
|
this.updateSettings();
|
|
48441
|
-
// TODO
|
|
48442
|
-
this.core.activeContainer.trigger(Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
48443
|
-
// TODO test
|
|
48455
|
+
// TODO test, figure out if this is needed
|
|
48444
48456
|
if (this.core.activeContainer.mediaControlDisabled) {
|
|
48445
48457
|
this.disable();
|
|
48446
48458
|
}
|
|
48447
48459
|
else {
|
|
48448
48460
|
this.enable();
|
|
48449
48461
|
}
|
|
48450
|
-
this.trigger(Events$1.MEDIACONTROL_CONTAINERCHANGED); // TODO
|
|
48462
|
+
this.trigger(Events$1.MEDIACONTROL_CONTAINERCHANGED); // TODO figure out
|
|
48451
48463
|
if (this.core.activeContainer.$el) {
|
|
48452
48464
|
this.core.activeContainer.$el.addClass('container-skin-1');
|
|
48453
48465
|
}
|
|
@@ -48618,11 +48630,13 @@ class MediaControl extends UICorePlugin {
|
|
|
48618
48630
|
}
|
|
48619
48631
|
}
|
|
48620
48632
|
updateSettings() {
|
|
48633
|
+
trace(`${T$a} updateSettings`, { settings: this.settings });
|
|
48621
48634
|
const newSettings = $.extend(true, {
|
|
48622
48635
|
left: [],
|
|
48623
48636
|
default: [],
|
|
48624
48637
|
right: [],
|
|
48625
48638
|
}, this.core.activeContainer.settings);
|
|
48639
|
+
trace(`${T$a} updateSettings`, { newSettings });
|
|
48626
48640
|
// TODO make order controlled via CSS
|
|
48627
48641
|
newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
|
|
48628
48642
|
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
@@ -48630,10 +48644,15 @@ class MediaControl extends UICorePlugin {
|
|
|
48630
48644
|
newSettings.left.push('dvr');
|
|
48631
48645
|
}
|
|
48632
48646
|
// actual order of the items appear rendered is controlled by CSS
|
|
48633
|
-
newSettings.right = DEFAULT_SETTINGS.right;
|
|
48647
|
+
newSettings.right = DEFAULT_SETTINGS.right; // TODO get from the options
|
|
48634
48648
|
if ((!this.fullScreenOnVideoTagSupported &&
|
|
48635
|
-
!
|
|
48649
|
+
!fullscreenEnabled()) ||
|
|
48636
48650
|
this.options.fullscreenDisable) {
|
|
48651
|
+
trace(`${T$a} updateSettings removing fullscreen`, {
|
|
48652
|
+
supported: this.fullScreenOnVideoTagSupported,
|
|
48653
|
+
enabled: Fullscreen.fullscreenEnabled(),
|
|
48654
|
+
optionsDisable: this.options.fullscreenDisable,
|
|
48655
|
+
});
|
|
48637
48656
|
// remove fullscreen from settings if it is not available
|
|
48638
48657
|
removeArrayItem(newSettings.default, 'fullscreen');
|
|
48639
48658
|
removeArrayItem(newSettings.left, 'fullscreen');
|
|
@@ -48648,6 +48667,7 @@ class MediaControl extends UICorePlugin {
|
|
|
48648
48667
|
const settingsChanged = serializeSettings(this.settings) !== serializeSettings(newSettings);
|
|
48649
48668
|
if (settingsChanged) {
|
|
48650
48669
|
this.settings = newSettings;
|
|
48670
|
+
this.needsUpdate = true;
|
|
48651
48671
|
this.render();
|
|
48652
48672
|
}
|
|
48653
48673
|
}
|
|
@@ -48672,7 +48692,6 @@ class MediaControl extends UICorePlugin {
|
|
|
48672
48692
|
this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');
|
|
48673
48693
|
this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');
|
|
48674
48694
|
this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
|
|
48675
|
-
this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
|
|
48676
48695
|
this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
|
|
48677
48696
|
this.$clipText = this.$el.find('.media-clip-text[data-clipstext]'); // TODO
|
|
48678
48697
|
this.$clipTextContainer = this.$el.find('.media-clip-container[data-clipstext]');
|
|
@@ -48704,8 +48723,6 @@ class MediaControl extends UICorePlugin {
|
|
|
48704
48723
|
return null;
|
|
48705
48724
|
case 'clipText':
|
|
48706
48725
|
return this.$clipText;
|
|
48707
|
-
case 'playbackRate':
|
|
48708
|
-
return this.$playbackRate;
|
|
48709
48726
|
case 'seekBarContainer':
|
|
48710
48727
|
return this.$seekBarContainer;
|
|
48711
48728
|
}
|
|
@@ -48729,13 +48746,6 @@ class MediaControl extends UICorePlugin {
|
|
|
48729
48746
|
return;
|
|
48730
48747
|
}
|
|
48731
48748
|
}
|
|
48732
|
-
handleCustomArea(handler) {
|
|
48733
|
-
this.customAreaHandler = handler;
|
|
48734
|
-
Object.entries(this.customAreaElements).forEach(([name, element]) => {
|
|
48735
|
-
handler(name, element);
|
|
48736
|
-
});
|
|
48737
|
-
this.customAreaElements = {};
|
|
48738
|
-
}
|
|
48739
48749
|
/**
|
|
48740
48750
|
* Toggle the visibility of a media control element
|
|
48741
48751
|
* @param name - The name of the media control element
|
|
@@ -48833,8 +48843,8 @@ class MediaControl extends UICorePlugin {
|
|
|
48833
48843
|
keys.forEach((i) => {
|
|
48834
48844
|
this.bindKeyAndShow(i, () => {
|
|
48835
48845
|
this.settings.seekEnabled &&
|
|
48836
|
-
this.
|
|
48837
|
-
this.
|
|
48846
|
+
this.core.activeContainer &&
|
|
48847
|
+
this.core.activeContainer.seekPercentage(Number(i) * 10);
|
|
48838
48848
|
return false;
|
|
48839
48849
|
});
|
|
48840
48850
|
});
|
|
@@ -48900,10 +48910,12 @@ class MediaControl extends UICorePlugin {
|
|
|
48900
48910
|
* @internal
|
|
48901
48911
|
*/
|
|
48902
48912
|
render() {
|
|
48903
|
-
trace(`${T$a} render
|
|
48913
|
+
trace(`${T$a} render`, { needsUpdate: this.needsUpdate });
|
|
48914
|
+
if (!this.needsUpdate) {
|
|
48915
|
+
return this;
|
|
48916
|
+
}
|
|
48904
48917
|
const timeout = this.options.hideMediaControlDelay || 2000;
|
|
48905
|
-
|
|
48906
|
-
this.$el.html(html);
|
|
48918
|
+
this.$el.html(MediaControl.template({ settings: this.settings }));
|
|
48907
48919
|
// const style = Styler.getStyleFor(mediaControlStyle, { baseUrl: this.options.baseUrl });
|
|
48908
48920
|
// this.$el.append(style[0]);
|
|
48909
48921
|
this.createCachedElements();
|
|
@@ -48949,7 +48961,8 @@ class MediaControl extends UICorePlugin {
|
|
|
48949
48961
|
this.core.$el.append(this.el);
|
|
48950
48962
|
this.rendered = true;
|
|
48951
48963
|
this.updateVolumeUI();
|
|
48952
|
-
|
|
48964
|
+
this.needsUpdate = false;
|
|
48965
|
+
// TODO setTimeout?
|
|
48953
48966
|
this.trigger(Events$1.MEDIACONTROL_RENDERED);
|
|
48954
48967
|
return this;
|
|
48955
48968
|
}
|
|
@@ -49015,6 +49028,7 @@ class MediaControl extends UICorePlugin {
|
|
|
49015
49028
|
element.el.css({ 'pointer-events': 'none' });
|
|
49016
49029
|
});
|
|
49017
49030
|
}
|
|
49031
|
+
// TODO drop
|
|
49018
49032
|
isSeekEnabledForHtml5Playback() {
|
|
49019
49033
|
if (this.core.getPlaybackType() === Playback.LIVE) {
|
|
49020
49034
|
return this.options.dvrEnabled;
|
|
@@ -49572,12 +49586,11 @@ const T$7 = 'plugins.playback_rate';
|
|
|
49572
49586
|
* { value: 1, label: '1x' },
|
|
49573
49587
|
* ],
|
|
49574
49588
|
* defaultValue: 1,
|
|
49575
|
-
* }
|
|
49589
|
+
* },
|
|
49576
49590
|
* })
|
|
49577
49591
|
* ```
|
|
49578
49592
|
*/
|
|
49579
49593
|
class PlaybackRate extends UICorePlugin {
|
|
49580
|
-
playbackRates = DEFAULT_PLAYBACK_RATES;
|
|
49581
49594
|
// Saved when an ad starts to restore after it finishes
|
|
49582
49595
|
// private prevSelectedRate: string | undefined
|
|
49583
49596
|
selectedRate = DEFAULT_PLAYBACK_RATE;
|
|
@@ -49597,10 +49610,12 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49597
49610
|
static listTemplate = tmpl(listHtml$1);
|
|
49598
49611
|
constructor(core) {
|
|
49599
49612
|
super(core);
|
|
49600
|
-
this.
|
|
49601
|
-
core.options.playbackRate
|
|
49602
|
-
|
|
49603
|
-
|
|
49613
|
+
if (this.core.options.playbackRate?.defaultValue) {
|
|
49614
|
+
this.setSelectedRate(this.core.options.playbackRate.defaultValue);
|
|
49615
|
+
}
|
|
49616
|
+
}
|
|
49617
|
+
get playbackRates() {
|
|
49618
|
+
return this.core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
|
|
49604
49619
|
}
|
|
49605
49620
|
/**
|
|
49606
49621
|
* @internal
|
|
@@ -49648,10 +49663,15 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49648
49663
|
}
|
|
49649
49664
|
onGearRendered() {
|
|
49650
49665
|
trace(`${T$7} onGearRendered`);
|
|
49651
|
-
this.
|
|
49666
|
+
this.mount();
|
|
49652
49667
|
}
|
|
49653
|
-
|
|
49654
|
-
trace(`${T$7}
|
|
49668
|
+
mount() {
|
|
49669
|
+
trace(`${T$7} mount`, {
|
|
49670
|
+
shouldMount: this.shouldMount(),
|
|
49671
|
+
});
|
|
49672
|
+
if (!this.shouldMount()) {
|
|
49673
|
+
return;
|
|
49674
|
+
}
|
|
49655
49675
|
this.core
|
|
49656
49676
|
.getPlugin('bottom_gear')
|
|
49657
49677
|
?.addItem('rate', this.$el)
|
|
@@ -49684,7 +49704,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49684
49704
|
});
|
|
49685
49705
|
}
|
|
49686
49706
|
}
|
|
49687
|
-
|
|
49707
|
+
shouldMount() {
|
|
49688
49708
|
if (!this.core.activePlayback) {
|
|
49689
49709
|
return false;
|
|
49690
49710
|
}
|
|
@@ -49699,11 +49719,8 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49699
49719
|
*/
|
|
49700
49720
|
render() {
|
|
49701
49721
|
trace(`${T$7} render`, {
|
|
49702
|
-
|
|
49722
|
+
shouldMount: this.shouldMount(),
|
|
49703
49723
|
});
|
|
49704
|
-
if (!this.shouldRender()) {
|
|
49705
|
-
return this;
|
|
49706
|
-
}
|
|
49707
49724
|
this.$el.html(PlaybackRate.listTemplate({
|
|
49708
49725
|
arrowLeftIcon,
|
|
49709
49726
|
checkIcon,
|
|
@@ -49711,7 +49728,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49711
49728
|
i18n: this.core.i18n,
|
|
49712
49729
|
playbackRates: this.playbackRates,
|
|
49713
49730
|
}));
|
|
49714
|
-
this.
|
|
49731
|
+
this.mount();
|
|
49715
49732
|
return this;
|
|
49716
49733
|
}
|
|
49717
49734
|
// private onStartAd() {
|
|
@@ -49734,11 +49751,21 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49734
49751
|
this.resetPlaybackRate();
|
|
49735
49752
|
}
|
|
49736
49753
|
else {
|
|
49737
|
-
this.
|
|
49754
|
+
this.syncRate();
|
|
49738
49755
|
}
|
|
49739
49756
|
}
|
|
49757
|
+
syncRate() {
|
|
49758
|
+
trace(`${T$7} syncRate`, {
|
|
49759
|
+
selectedRate: this.selectedRate,
|
|
49760
|
+
});
|
|
49761
|
+
this.core.activePlayback?.setPlaybackRate(this.selectedRate);
|
|
49762
|
+
}
|
|
49740
49763
|
resetPlaybackRate() {
|
|
49741
|
-
|
|
49764
|
+
trace(`${T$7} resetPlaybackRate`, {
|
|
49765
|
+
selectedRate: this.selectedRate,
|
|
49766
|
+
});
|
|
49767
|
+
this.core.activePlayback?.setPlaybackRate(DEFAULT_PLAYBACK_RATE);
|
|
49768
|
+
this.selectedRate = DEFAULT_PLAYBACK_RATE;
|
|
49742
49769
|
}
|
|
49743
49770
|
onStop() { }
|
|
49744
49771
|
onSelect(event) {
|
|
@@ -49746,8 +49773,6 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49746
49773
|
const rate = parseFloat(event.currentTarget.dataset.rate || '');
|
|
49747
49774
|
if (rate) {
|
|
49748
49775
|
this.setSelectedRate(rate);
|
|
49749
|
-
this.highlightCurrentRate();
|
|
49750
|
-
this.updateGearOptionLabel();
|
|
49751
49776
|
}
|
|
49752
49777
|
return false;
|
|
49753
49778
|
}
|
|
@@ -49757,14 +49782,23 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49757
49782
|
}, 0);
|
|
49758
49783
|
}
|
|
49759
49784
|
setSelectedRate(rate) {
|
|
49760
|
-
this.
|
|
49785
|
+
if (rate === this.selectedRate) {
|
|
49786
|
+
return;
|
|
49787
|
+
}
|
|
49761
49788
|
this.selectedRate = rate;
|
|
49789
|
+
this.syncRate();
|
|
49790
|
+
this.highlightCurrentRate();
|
|
49791
|
+
this.updateGearOptionLabel();
|
|
49762
49792
|
}
|
|
49763
49793
|
getTitle() {
|
|
49764
|
-
|
|
49765
|
-
|
|
49794
|
+
const rate = this.selectedRate;
|
|
49795
|
+
return (this.playbackRates.find((r) => r.value === rate)?.label ||
|
|
49796
|
+
`x${rate}`);
|
|
49766
49797
|
}
|
|
49767
49798
|
highlightCurrentRate() {
|
|
49799
|
+
trace(`${T$7} highlightCurrentRate`, {
|
|
49800
|
+
selectedRate: this.selectedRate,
|
|
49801
|
+
});
|
|
49768
49802
|
this.allRateElements().removeClass('current');
|
|
49769
49803
|
this.allRateElements().find('a').removeClass('gcore-skin-active');
|
|
49770
49804
|
this.rateElement(this.selectedRate)
|
|
@@ -49773,8 +49807,10 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49773
49807
|
.addClass('gcore-skin-active');
|
|
49774
49808
|
}
|
|
49775
49809
|
updateGearOptionLabel() {
|
|
49776
|
-
trace(`${T$7} updateGearOptionLabel
|
|
49777
|
-
|
|
49810
|
+
trace(`${T$7} updateGearOptionLabel`, {
|
|
49811
|
+
selectedRate: this.selectedRate,
|
|
49812
|
+
});
|
|
49813
|
+
this.mount();
|
|
49778
49814
|
}
|
|
49779
49815
|
}
|
|
49780
49816
|
|