@gcorevideo/player 2.22.5 → 2.22.8
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 +7 -2
- package/dist/index.css +881 -881
- package/dist/index.js +132 -91
- package/dist/plugins/index.css +418 -418
- 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 +6 -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 +6 -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
|
@@ -13036,6 +13036,11 @@ class DashPlayback extends BasePlayback {
|
|
|
13036
13036
|
trace(`${T$k} dvrEnable no dash player instance`);
|
|
13037
13037
|
return false;
|
|
13038
13038
|
}
|
|
13039
|
+
trace(`${T$k} get.dvrEnabled`, {
|
|
13040
|
+
dvrWindowSize: this._dash?.getDVRWindowSize(),
|
|
13041
|
+
minDvrSize: this._minDvrSize,
|
|
13042
|
+
playbackType: this.getPlaybackType(),
|
|
13043
|
+
});
|
|
13039
13044
|
return (this._dash?.getDVRWindowSize() >= this._minDvrSize &&
|
|
13040
13045
|
this.getPlaybackType() === Playback.LIVE);
|
|
13041
13046
|
}
|
|
@@ -13091,8 +13096,8 @@ class DashPlayback extends BasePlayback {
|
|
|
13091
13096
|
return super.destroy();
|
|
13092
13097
|
}
|
|
13093
13098
|
_updatePlaybackType() {
|
|
13094
|
-
assert.ok(this._dash, 'An instance of dashjs MediaPlayer is required to update the playback type');
|
|
13095
13099
|
const prevPlaybackType = this._playbackType;
|
|
13100
|
+
// @ts-ignore
|
|
13096
13101
|
this._playbackType = this._dash.isDynamic() ? Playback.LIVE : Playback.VOD;
|
|
13097
13102
|
if (prevPlaybackType !== this._playbackType) {
|
|
13098
13103
|
this._updateSettings();
|
|
@@ -43299,7 +43304,7 @@ class Player {
|
|
|
43299
43304
|
}
|
|
43300
43305
|
}
|
|
43301
43306
|
|
|
43302
|
-
var version$1 = "2.22.
|
|
43307
|
+
var version$1 = "2.22.8";
|
|
43303
43308
|
|
|
43304
43309
|
var packages = {
|
|
43305
43310
|
"node_modules/@clappr/core": {
|
|
@@ -43843,7 +43848,6 @@ class BottomGear extends UICorePlugin {
|
|
|
43843
43848
|
.find('#gear-sub-menu-wrapper')
|
|
43844
43849
|
.hide();
|
|
43845
43850
|
// TODO make non-clickable when there are no items
|
|
43846
|
-
mediaControl.putElement('gear', this.$el);
|
|
43847
43851
|
setTimeout(() => {
|
|
43848
43852
|
this.trigger(GearEvents.RENDERED);
|
|
43849
43853
|
}, 0);
|
|
@@ -43873,7 +43877,8 @@ class BottomGear extends UICorePlugin {
|
|
|
43873
43877
|
}
|
|
43874
43878
|
onMediaControlRendered() {
|
|
43875
43879
|
trace(`${T$f} onMediaControlRendered`);
|
|
43876
|
-
this.
|
|
43880
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
43881
|
+
mediaControl.putElement('gear', this.$el);
|
|
43877
43882
|
}
|
|
43878
43883
|
}
|
|
43879
43884
|
|
|
@@ -46738,32 +46743,6 @@ function strtimeToMiliseconds(str) {
|
|
|
46738
46743
|
}
|
|
46739
46744
|
return (h + m + s);
|
|
46740
46745
|
}
|
|
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
46746
|
function getPageX(event) {
|
|
46768
46747
|
if (event.pageX) {
|
|
46769
46748
|
return event.pageX;
|
|
@@ -47901,7 +47880,36 @@ function keyName(keyCode) {
|
|
|
47901
47880
|
return KEY_NAMES_BY_CODE[keyCode] || '';
|
|
47902
47881
|
}
|
|
47903
47882
|
|
|
47904
|
-
const
|
|
47883
|
+
const fullscreenEnabled = Utils.Fullscreen.fullscreenEnabled;
|
|
47884
|
+
function isFullscreen(el) {
|
|
47885
|
+
const video = el.nodeName === 'video'
|
|
47886
|
+
? el
|
|
47887
|
+
: el.querySelector('video');
|
|
47888
|
+
if (!video) {
|
|
47889
|
+
return false;
|
|
47890
|
+
}
|
|
47891
|
+
if (Browser.isiOS) {
|
|
47892
|
+
return FullscreenIOS.isFullscreen(video);
|
|
47893
|
+
}
|
|
47894
|
+
return !!document.fullscreenElement;
|
|
47895
|
+
}
|
|
47896
|
+
const FullscreenIOS = {
|
|
47897
|
+
isFullscreen: function (el) {
|
|
47898
|
+
try {
|
|
47899
|
+
// @ts-ignore
|
|
47900
|
+
if (el.webkitDisplayingFullscreen !== undefined) {
|
|
47901
|
+
// @ts-ignore
|
|
47902
|
+
return !!el.webkitDisplayingFullscreen;
|
|
47903
|
+
}
|
|
47904
|
+
}
|
|
47905
|
+
catch (e) {
|
|
47906
|
+
reportError(e);
|
|
47907
|
+
}
|
|
47908
|
+
return false;
|
|
47909
|
+
},
|
|
47910
|
+
};
|
|
47911
|
+
|
|
47912
|
+
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
47913
|
|
|
47906
47914
|
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
47915
|
|
|
@@ -47915,19 +47923,22 @@ const fullscreenOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
|
|
|
47915
47923
|
// Use of this source code is governed by a BSD-style
|
|
47916
47924
|
// license that can be found in the {@link https://github.com/clappr/clappr-plugins/blob/master/LICENSE | LICENSE}.
|
|
47917
47925
|
const DEFAULT_SETTINGS = {
|
|
47918
|
-
left: [],
|
|
47919
47926
|
right: [
|
|
47927
|
+
'audiotracks',
|
|
47928
|
+
'cc',
|
|
47929
|
+
// 'dvr',
|
|
47930
|
+
// 'duration',
|
|
47920
47931
|
'fullscreen',
|
|
47921
|
-
'pip',
|
|
47922
47932
|
'gear',
|
|
47923
|
-
'cc',
|
|
47924
47933
|
'multicamera',
|
|
47925
|
-
|
|
47934
|
+
'pip',
|
|
47926
47935
|
'vr',
|
|
47927
|
-
|
|
47928
|
-
|
|
47936
|
+
]};
|
|
47937
|
+
const INITIAL_SETTINGS = {
|
|
47938
|
+
left: [],
|
|
47939
|
+
right: [],
|
|
47929
47940
|
default: [],
|
|
47930
|
-
seekEnabled:
|
|
47941
|
+
seekEnabled: false,
|
|
47931
47942
|
};
|
|
47932
47943
|
const T$a = 'plugins.media_control';
|
|
47933
47944
|
const LEFT_ORDER = [
|
|
@@ -47950,11 +47961,17 @@ function orderByOrderPattern(arr, order) {
|
|
|
47950
47961
|
* @beta
|
|
47951
47962
|
* @remarks
|
|
47952
47963
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
47964
|
+
*
|
|
47965
|
+
* Configuration options:
|
|
47966
|
+
*
|
|
47967
|
+
* - `mediaControl`: {@link MediaControlSettings} - specifies the allowed media control elements in each area
|
|
47968
|
+
*
|
|
47969
|
+
* - `persistConfig`: boolean - `common` option, makes the plugin persist the media control settings
|
|
47970
|
+
*
|
|
47971
|
+
* - `chromeless`: boolean
|
|
47953
47972
|
*/
|
|
47954
47973
|
class MediaControl extends UICorePlugin {
|
|
47955
47974
|
// private advertisementPlaying = false
|
|
47956
|
-
customAreaElements = {};
|
|
47957
|
-
customAreaHandler;
|
|
47958
47975
|
buttonsColor = null;
|
|
47959
47976
|
currentDurationValue = 0;
|
|
47960
47977
|
currentPositionValue = 0;
|
|
@@ -47965,7 +47982,7 @@ class MediaControl extends UICorePlugin {
|
|
|
47965
47982
|
displayedSeekBarPercentage = null;
|
|
47966
47983
|
draggingSeekBar = false;
|
|
47967
47984
|
draggingVolumeBar = false;
|
|
47968
|
-
fullScreenOnVideoTagSupported =
|
|
47985
|
+
fullScreenOnVideoTagSupported = false;
|
|
47969
47986
|
hideId = null;
|
|
47970
47987
|
hideVolumeId = null;
|
|
47971
47988
|
intendedVolume = 100;
|
|
@@ -47973,9 +47990,10 @@ class MediaControl extends UICorePlugin {
|
|
|
47973
47990
|
kibo;
|
|
47974
47991
|
lastMouseX = 0;
|
|
47975
47992
|
lastMouseY = 0;
|
|
47993
|
+
needsUpdate = false;
|
|
47976
47994
|
persistConfig;
|
|
47977
47995
|
rendered = false;
|
|
47978
|
-
settings =
|
|
47996
|
+
settings = INITIAL_SETTINGS;
|
|
47979
47997
|
userDisabled = false;
|
|
47980
47998
|
userKeepVisible = false;
|
|
47981
47999
|
verticalVolume = false;
|
|
@@ -47986,7 +48004,6 @@ class MediaControl extends UICorePlugin {
|
|
|
47986
48004
|
$multiCameraSelector = null;
|
|
47987
48005
|
$playPauseToggle = null;
|
|
47988
48006
|
$playStopToggle = null;
|
|
47989
|
-
$playbackRate = null;
|
|
47990
48007
|
$position = null;
|
|
47991
48008
|
$seekBarContainer = null;
|
|
47992
48009
|
$seekBarHover = null;
|
|
@@ -48200,7 +48217,8 @@ class MediaControl extends UICorePlugin {
|
|
|
48200
48217
|
const video = this.core.activePlayback?.el;
|
|
48201
48218
|
// video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
|
|
48202
48219
|
// see https://github.com/clappr/clappr/issues/1127
|
|
48203
|
-
if (!
|
|
48220
|
+
if (!fullscreenEnabled() && video.webkitSupportsFullscreen) {
|
|
48221
|
+
// TODO sort out, use single utility function
|
|
48204
48222
|
this.fullScreenOnVideoTagSupported = true;
|
|
48205
48223
|
}
|
|
48206
48224
|
this.updateSettings();
|
|
@@ -48432,22 +48450,21 @@ class MediaControl extends UICorePlugin {
|
|
|
48432
48450
|
}
|
|
48433
48451
|
}
|
|
48434
48452
|
onActiveContainerChanged() {
|
|
48435
|
-
this.fullScreenOnVideoTagSupported =
|
|
48453
|
+
this.fullScreenOnVideoTagSupported = false;
|
|
48436
48454
|
// set the new container to match the volume of the last one
|
|
48437
48455
|
this.setInitialVolume();
|
|
48438
48456
|
this.changeTogglePlay();
|
|
48439
48457
|
this.bindContainerEvents();
|
|
48458
|
+
// TODO remove?
|
|
48440
48459
|
this.updateSettings();
|
|
48441
|
-
// TODO
|
|
48442
|
-
this.core.activeContainer.trigger(Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
48443
|
-
// TODO test
|
|
48460
|
+
// TODO test, figure out if this is needed
|
|
48444
48461
|
if (this.core.activeContainer.mediaControlDisabled) {
|
|
48445
48462
|
this.disable();
|
|
48446
48463
|
}
|
|
48447
48464
|
else {
|
|
48448
48465
|
this.enable();
|
|
48449
48466
|
}
|
|
48450
|
-
this.trigger(Events$1.MEDIACONTROL_CONTAINERCHANGED); // TODO
|
|
48467
|
+
this.trigger(Events$1.MEDIACONTROL_CONTAINERCHANGED); // TODO figure out
|
|
48451
48468
|
if (this.core.activeContainer.$el) {
|
|
48452
48469
|
this.core.activeContainer.$el.addClass('container-skin-1');
|
|
48453
48470
|
}
|
|
@@ -48618,11 +48635,13 @@ class MediaControl extends UICorePlugin {
|
|
|
48618
48635
|
}
|
|
48619
48636
|
}
|
|
48620
48637
|
updateSettings() {
|
|
48638
|
+
trace(`${T$a} updateSettings`, { settings: this.settings });
|
|
48621
48639
|
const newSettings = $.extend(true, {
|
|
48622
48640
|
left: [],
|
|
48623
48641
|
default: [],
|
|
48624
48642
|
right: [],
|
|
48625
48643
|
}, this.core.activeContainer.settings);
|
|
48644
|
+
trace(`${T$a} updateSettings`, { newSettings });
|
|
48626
48645
|
// TODO make order controlled via CSS
|
|
48627
48646
|
newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
|
|
48628
48647
|
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
@@ -48630,10 +48649,15 @@ class MediaControl extends UICorePlugin {
|
|
|
48630
48649
|
newSettings.left.push('dvr');
|
|
48631
48650
|
}
|
|
48632
48651
|
// actual order of the items appear rendered is controlled by CSS
|
|
48633
|
-
newSettings.right = DEFAULT_SETTINGS.right;
|
|
48652
|
+
newSettings.right = DEFAULT_SETTINGS.right; // TODO get from the options
|
|
48634
48653
|
if ((!this.fullScreenOnVideoTagSupported &&
|
|
48635
|
-
!
|
|
48654
|
+
!fullscreenEnabled()) ||
|
|
48636
48655
|
this.options.fullscreenDisable) {
|
|
48656
|
+
trace(`${T$a} updateSettings removing fullscreen`, {
|
|
48657
|
+
supported: this.fullScreenOnVideoTagSupported,
|
|
48658
|
+
enabled: Fullscreen.fullscreenEnabled(),
|
|
48659
|
+
optionsDisable: this.options.fullscreenDisable,
|
|
48660
|
+
});
|
|
48637
48661
|
// remove fullscreen from settings if it is not available
|
|
48638
48662
|
removeArrayItem(newSettings.default, 'fullscreen');
|
|
48639
48663
|
removeArrayItem(newSettings.left, 'fullscreen');
|
|
@@ -48648,6 +48672,7 @@ class MediaControl extends UICorePlugin {
|
|
|
48648
48672
|
const settingsChanged = serializeSettings(this.settings) !== serializeSettings(newSettings);
|
|
48649
48673
|
if (settingsChanged) {
|
|
48650
48674
|
this.settings = newSettings;
|
|
48675
|
+
this.needsUpdate = true;
|
|
48651
48676
|
this.render();
|
|
48652
48677
|
}
|
|
48653
48678
|
}
|
|
@@ -48672,7 +48697,6 @@ class MediaControl extends UICorePlugin {
|
|
|
48672
48697
|
this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');
|
|
48673
48698
|
this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');
|
|
48674
48699
|
this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
|
|
48675
|
-
this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
|
|
48676
48700
|
this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
|
|
48677
48701
|
this.$clipText = this.$el.find('.media-clip-text[data-clipstext]'); // TODO
|
|
48678
48702
|
this.$clipTextContainer = this.$el.find('.media-clip-container[data-clipstext]');
|
|
@@ -48704,8 +48728,6 @@ class MediaControl extends UICorePlugin {
|
|
|
48704
48728
|
return null;
|
|
48705
48729
|
case 'clipText':
|
|
48706
48730
|
return this.$clipText;
|
|
48707
|
-
case 'playbackRate':
|
|
48708
|
-
return this.$playbackRate;
|
|
48709
48731
|
case 'seekBarContainer':
|
|
48710
48732
|
return this.$seekBarContainer;
|
|
48711
48733
|
}
|
|
@@ -48729,13 +48751,6 @@ class MediaControl extends UICorePlugin {
|
|
|
48729
48751
|
return;
|
|
48730
48752
|
}
|
|
48731
48753
|
}
|
|
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
48754
|
/**
|
|
48740
48755
|
* Toggle the visibility of a media control element
|
|
48741
48756
|
* @param name - The name of the media control element
|
|
@@ -48833,8 +48848,8 @@ class MediaControl extends UICorePlugin {
|
|
|
48833
48848
|
keys.forEach((i) => {
|
|
48834
48849
|
this.bindKeyAndShow(i, () => {
|
|
48835
48850
|
this.settings.seekEnabled &&
|
|
48836
|
-
this.
|
|
48837
|
-
this.
|
|
48851
|
+
this.core.activeContainer &&
|
|
48852
|
+
this.core.activeContainer.seekPercentage(Number(i) * 10);
|
|
48838
48853
|
return false;
|
|
48839
48854
|
});
|
|
48840
48855
|
});
|
|
@@ -48900,10 +48915,12 @@ class MediaControl extends UICorePlugin {
|
|
|
48900
48915
|
* @internal
|
|
48901
48916
|
*/
|
|
48902
48917
|
render() {
|
|
48903
|
-
trace(`${T$a} render
|
|
48918
|
+
trace(`${T$a} render`, { needsUpdate: this.needsUpdate });
|
|
48919
|
+
if (!this.needsUpdate) {
|
|
48920
|
+
return this;
|
|
48921
|
+
}
|
|
48904
48922
|
const timeout = this.options.hideMediaControlDelay || 2000;
|
|
48905
|
-
|
|
48906
|
-
this.$el.html(html);
|
|
48923
|
+
this.$el.html(MediaControl.template({ settings: this.settings }));
|
|
48907
48924
|
// const style = Styler.getStyleFor(mediaControlStyle, { baseUrl: this.options.baseUrl });
|
|
48908
48925
|
// this.$el.append(style[0]);
|
|
48909
48926
|
this.createCachedElements();
|
|
@@ -48949,7 +48966,8 @@ class MediaControl extends UICorePlugin {
|
|
|
48949
48966
|
this.core.$el.append(this.el);
|
|
48950
48967
|
this.rendered = true;
|
|
48951
48968
|
this.updateVolumeUI();
|
|
48952
|
-
|
|
48969
|
+
this.needsUpdate = false;
|
|
48970
|
+
// TODO setTimeout?
|
|
48953
48971
|
this.trigger(Events$1.MEDIACONTROL_RENDERED);
|
|
48954
48972
|
return this;
|
|
48955
48973
|
}
|
|
@@ -49015,6 +49033,7 @@ class MediaControl extends UICorePlugin {
|
|
|
49015
49033
|
element.el.css({ 'pointer-events': 'none' });
|
|
49016
49034
|
});
|
|
49017
49035
|
}
|
|
49036
|
+
// TODO drop
|
|
49018
49037
|
isSeekEnabledForHtml5Playback() {
|
|
49019
49038
|
if (this.core.getPlaybackType() === Playback.LIVE) {
|
|
49020
49039
|
return this.options.dvrEnabled;
|
|
@@ -49572,12 +49591,11 @@ const T$7 = 'plugins.playback_rate';
|
|
|
49572
49591
|
* { value: 1, label: '1x' },
|
|
49573
49592
|
* ],
|
|
49574
49593
|
* defaultValue: 1,
|
|
49575
|
-
* }
|
|
49594
|
+
* },
|
|
49576
49595
|
* })
|
|
49577
49596
|
* ```
|
|
49578
49597
|
*/
|
|
49579
49598
|
class PlaybackRate extends UICorePlugin {
|
|
49580
|
-
playbackRates = DEFAULT_PLAYBACK_RATES;
|
|
49581
49599
|
// Saved when an ad starts to restore after it finishes
|
|
49582
49600
|
// private prevSelectedRate: string | undefined
|
|
49583
49601
|
selectedRate = DEFAULT_PLAYBACK_RATE;
|
|
@@ -49597,10 +49615,12 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49597
49615
|
static listTemplate = tmpl(listHtml$1);
|
|
49598
49616
|
constructor(core) {
|
|
49599
49617
|
super(core);
|
|
49600
|
-
this.
|
|
49601
|
-
core.options.playbackRate
|
|
49602
|
-
|
|
49603
|
-
|
|
49618
|
+
if (this.core.options.playbackRate?.defaultValue) {
|
|
49619
|
+
this.setSelectedRate(this.core.options.playbackRate.defaultValue);
|
|
49620
|
+
}
|
|
49621
|
+
}
|
|
49622
|
+
get playbackRates() {
|
|
49623
|
+
return this.core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
|
|
49604
49624
|
}
|
|
49605
49625
|
/**
|
|
49606
49626
|
* @internal
|
|
@@ -49648,10 +49668,15 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49648
49668
|
}
|
|
49649
49669
|
onGearRendered() {
|
|
49650
49670
|
trace(`${T$7} onGearRendered`);
|
|
49651
|
-
this.
|
|
49671
|
+
this.mount();
|
|
49652
49672
|
}
|
|
49653
|
-
|
|
49654
|
-
trace(`${T$7}
|
|
49673
|
+
mount() {
|
|
49674
|
+
trace(`${T$7} mount`, {
|
|
49675
|
+
shouldMount: this.shouldMount(),
|
|
49676
|
+
});
|
|
49677
|
+
if (!this.shouldMount()) {
|
|
49678
|
+
return;
|
|
49679
|
+
}
|
|
49655
49680
|
this.core
|
|
49656
49681
|
.getPlugin('bottom_gear')
|
|
49657
49682
|
?.addItem('rate', this.$el)
|
|
@@ -49684,7 +49709,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49684
49709
|
});
|
|
49685
49710
|
}
|
|
49686
49711
|
}
|
|
49687
|
-
|
|
49712
|
+
shouldMount() {
|
|
49688
49713
|
if (!this.core.activePlayback) {
|
|
49689
49714
|
return false;
|
|
49690
49715
|
}
|
|
@@ -49699,11 +49724,8 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49699
49724
|
*/
|
|
49700
49725
|
render() {
|
|
49701
49726
|
trace(`${T$7} render`, {
|
|
49702
|
-
|
|
49727
|
+
shouldMount: this.shouldMount(),
|
|
49703
49728
|
});
|
|
49704
|
-
if (!this.shouldRender()) {
|
|
49705
|
-
return this;
|
|
49706
|
-
}
|
|
49707
49729
|
this.$el.html(PlaybackRate.listTemplate({
|
|
49708
49730
|
arrowLeftIcon,
|
|
49709
49731
|
checkIcon,
|
|
@@ -49711,7 +49733,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49711
49733
|
i18n: this.core.i18n,
|
|
49712
49734
|
playbackRates: this.playbackRates,
|
|
49713
49735
|
}));
|
|
49714
|
-
this.
|
|
49736
|
+
this.mount();
|
|
49715
49737
|
return this;
|
|
49716
49738
|
}
|
|
49717
49739
|
// private onStartAd() {
|
|
@@ -49734,11 +49756,21 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49734
49756
|
this.resetPlaybackRate();
|
|
49735
49757
|
}
|
|
49736
49758
|
else {
|
|
49737
|
-
this.
|
|
49759
|
+
this.syncRate();
|
|
49738
49760
|
}
|
|
49739
49761
|
}
|
|
49762
|
+
syncRate() {
|
|
49763
|
+
trace(`${T$7} syncRate`, {
|
|
49764
|
+
selectedRate: this.selectedRate,
|
|
49765
|
+
});
|
|
49766
|
+
this.core.activePlayback?.setPlaybackRate(this.selectedRate);
|
|
49767
|
+
}
|
|
49740
49768
|
resetPlaybackRate() {
|
|
49741
|
-
|
|
49769
|
+
trace(`${T$7} resetPlaybackRate`, {
|
|
49770
|
+
selectedRate: this.selectedRate,
|
|
49771
|
+
});
|
|
49772
|
+
this.core.activePlayback?.setPlaybackRate(DEFAULT_PLAYBACK_RATE);
|
|
49773
|
+
this.selectedRate = DEFAULT_PLAYBACK_RATE;
|
|
49742
49774
|
}
|
|
49743
49775
|
onStop() { }
|
|
49744
49776
|
onSelect(event) {
|
|
@@ -49746,8 +49778,6 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49746
49778
|
const rate = parseFloat(event.currentTarget.dataset.rate || '');
|
|
49747
49779
|
if (rate) {
|
|
49748
49780
|
this.setSelectedRate(rate);
|
|
49749
|
-
this.highlightCurrentRate();
|
|
49750
|
-
this.updateGearOptionLabel();
|
|
49751
49781
|
}
|
|
49752
49782
|
return false;
|
|
49753
49783
|
}
|
|
@@ -49757,14 +49787,23 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49757
49787
|
}, 0);
|
|
49758
49788
|
}
|
|
49759
49789
|
setSelectedRate(rate) {
|
|
49760
|
-
this.
|
|
49790
|
+
if (rate === this.selectedRate) {
|
|
49791
|
+
return;
|
|
49792
|
+
}
|
|
49761
49793
|
this.selectedRate = rate;
|
|
49794
|
+
this.syncRate();
|
|
49795
|
+
this.highlightCurrentRate();
|
|
49796
|
+
this.updateGearOptionLabel();
|
|
49762
49797
|
}
|
|
49763
49798
|
getTitle() {
|
|
49764
|
-
|
|
49765
|
-
|
|
49799
|
+
const rate = this.selectedRate;
|
|
49800
|
+
return (this.playbackRates.find((r) => r.value === rate)?.label ||
|
|
49801
|
+
`x${rate}`);
|
|
49766
49802
|
}
|
|
49767
49803
|
highlightCurrentRate() {
|
|
49804
|
+
trace(`${T$7} highlightCurrentRate`, {
|
|
49805
|
+
selectedRate: this.selectedRate,
|
|
49806
|
+
});
|
|
49768
49807
|
this.allRateElements().removeClass('current');
|
|
49769
49808
|
this.allRateElements().find('a').removeClass('gcore-skin-active');
|
|
49770
49809
|
this.rateElement(this.selectedRate)
|
|
@@ -49773,8 +49812,10 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49773
49812
|
.addClass('gcore-skin-active');
|
|
49774
49813
|
}
|
|
49775
49814
|
updateGearOptionLabel() {
|
|
49776
|
-
trace(`${T$7} updateGearOptionLabel
|
|
49777
|
-
|
|
49815
|
+
trace(`${T$7} updateGearOptionLabel`, {
|
|
49816
|
+
selectedRate: this.selectedRate,
|
|
49817
|
+
});
|
|
49818
|
+
this.mount();
|
|
49778
49819
|
}
|
|
49779
49820
|
}
|
|
49780
49821
|
|