@gcorevideo/player 2.21.4 → 2.22.0
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/dvr-controls/dvr_controls.scss +7 -25
- package/assets/dvr-controls/index.ejs +2 -2
- package/assets/media-control/media-control.ejs +1 -1
- package/assets/media-control/media-control.scss +8 -3
- package/assets/media-control/width370.scss +1 -1
- package/assets/style/theme.scss +1 -1
- package/dist/core.js +1 -1
- package/dist/index.css +1441 -1446
- package/dist/index.js +82 -79
- package/dist/plugins/index.css +1189 -1194
- package/dist/plugins/index.js +81 -76
- 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 +10 -14
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +66 -38
- package/lib/testUtils.d.ts +4 -1
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +10 -11
- package/package.json +1 -1
- package/src/plugins/dvr-controls/DvrControls.ts +16 -44
- package/src/plugins/dvr-controls/__tests__/DvrControls.test.ts +23 -25
- package/src/plugins/dvr-controls/__tests__/__snapshots__/DvrControls.test.ts.snap +8 -32
- package/src/plugins/media-control/MediaControl.ts +91 -51
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +89 -0
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +128 -0
- package/src/testUtils.ts +10 -11
- package/tsconfig.tsbuildinfo +1 -1
package/dist/plugins/index.js
CHANGED
|
@@ -10355,7 +10355,7 @@ function getPageX(event) {
|
|
|
10355
10355
|
return 0;
|
|
10356
10356
|
}
|
|
10357
10357
|
|
|
10358
|
-
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\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 (
|
|
10358
|
+
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\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";
|
|
10359
10359
|
|
|
10360
10360
|
const playIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_28_1564)\">\n <path d=\"M6 3V20L19.3571 11.5L6 3Z\" fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_28_1564\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
10361
10361
|
|
|
@@ -10374,6 +10374,12 @@ const fullscreenOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
|
|
|
10374
10374
|
// Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
10375
10375
|
// Use of this source code is governed by a BSD-style
|
|
10376
10376
|
// license that can be found in the {@link https://github.com/clappr/clappr-plugins/blob/master/LICENSE | LICENSE}.
|
|
10377
|
+
const DEFAULT_SETTINGS = {
|
|
10378
|
+
left: [],
|
|
10379
|
+
right: [],
|
|
10380
|
+
default: [],
|
|
10381
|
+
seekEnabled: true,
|
|
10382
|
+
};
|
|
10377
10383
|
/**
|
|
10378
10384
|
* Custom events emitted by the plugins to communicate with one another
|
|
10379
10385
|
* @beta
|
|
@@ -10388,7 +10394,8 @@ var MediaControlEvents;
|
|
|
10388
10394
|
const LEFT_ORDER = [
|
|
10389
10395
|
'playpause',
|
|
10390
10396
|
'playstop',
|
|
10391
|
-
'live',
|
|
10397
|
+
// 'live',
|
|
10398
|
+
'dvr',
|
|
10392
10399
|
'volume',
|
|
10393
10400
|
'position',
|
|
10394
10401
|
'duration',
|
|
@@ -10422,14 +10429,13 @@ class MediaControl extends UICorePlugin {
|
|
|
10422
10429
|
hideId = null;
|
|
10423
10430
|
hideVolumeId = null;
|
|
10424
10431
|
intendedVolume = 100;
|
|
10425
|
-
isHD = false;
|
|
10426
10432
|
keepVisible = false;
|
|
10427
10433
|
kibo;
|
|
10428
10434
|
lastMouseX = 0;
|
|
10429
10435
|
lastMouseY = 0;
|
|
10430
10436
|
persistConfig;
|
|
10431
10437
|
rendered = false;
|
|
10432
|
-
settings =
|
|
10438
|
+
settings = DEFAULT_SETTINGS;
|
|
10433
10439
|
userDisabled = false;
|
|
10434
10440
|
userKeepVisible = false;
|
|
10435
10441
|
verticalVolume = false;
|
|
@@ -10573,8 +10579,6 @@ class MediaControl extends UICorePlugin {
|
|
|
10573
10579
|
* @internal
|
|
10574
10580
|
*/
|
|
10575
10581
|
bindEvents() {
|
|
10576
|
-
// @ts-ignore
|
|
10577
|
-
this.stopListening();
|
|
10578
10582
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
10579
10583
|
this.listenTo(this.core, Events.CORE_MOUSE_MOVE, this.show);
|
|
10580
10584
|
this.listenTo(this.core, Events.CORE_MOUSE_LEAVE, () => this.hide(this.options.hideMediaControlDelay));
|
|
@@ -10611,8 +10615,8 @@ class MediaControl extends UICorePlugin {
|
|
|
10611
10615
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
10612
10616
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_PROGRESS, this.updateProgressBar);
|
|
10613
10617
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_SETTINGSUPDATE, this.updateSettings);
|
|
10614
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.
|
|
10615
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.
|
|
10618
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrStateChanged);
|
|
10619
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.onHdUpdate);
|
|
10616
10620
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_MEDIACONTROL_DISABLE, this.disable);
|
|
10617
10621
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_MEDIACONTROL_ENABLE, this.enable);
|
|
10618
10622
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_ENDED, this.ended);
|
|
@@ -10658,7 +10662,13 @@ class MediaControl extends UICorePlugin {
|
|
|
10658
10662
|
// see https://github.com/clappr/clappr/issues/1127
|
|
10659
10663
|
if (!Fullscreen.fullscreenEnabled() && video.webkitSupportsFullscreen) {
|
|
10660
10664
|
this.fullScreenOnVideoTagSupported = true;
|
|
10661
|
-
|
|
10665
|
+
}
|
|
10666
|
+
this.updateSettings();
|
|
10667
|
+
if (this.core.activeContainer.getPlaybackType() === Playback.LIVE) {
|
|
10668
|
+
this.$el.addClass('live');
|
|
10669
|
+
}
|
|
10670
|
+
else {
|
|
10671
|
+
this.$el.removeClass('live');
|
|
10662
10672
|
}
|
|
10663
10673
|
}
|
|
10664
10674
|
updateVolumeUI() {
|
|
@@ -10667,8 +10677,6 @@ class MediaControl extends UICorePlugin {
|
|
|
10667
10677
|
return;
|
|
10668
10678
|
}
|
|
10669
10679
|
assert.ok(this.$volumeBarContainer, 'volume bar container must be present');
|
|
10670
|
-
// update volume bar scrubber/fill on bar mode
|
|
10671
|
-
// this.$volumeBarContainer.find('.bar-fill-2').css({});
|
|
10672
10680
|
const containerWidth = this.$volumeBarContainer.width();
|
|
10673
10681
|
assert.ok(this.$volumeBarBackground, 'volume bar background must be present');
|
|
10674
10682
|
const barWidth = this.$volumeBarBackground.width();
|
|
@@ -10856,17 +10864,18 @@ class MediaControl extends UICorePlugin {
|
|
|
10856
10864
|
// if the container is not ready etc
|
|
10857
10865
|
this.intendedVolume = value;
|
|
10858
10866
|
this.persistConfig && !isInitialVolume && Config.persist('volume', value);
|
|
10867
|
+
// TODO
|
|
10859
10868
|
const setWhenContainerReady = () => {
|
|
10860
|
-
if (this.
|
|
10861
|
-
this.
|
|
10869
|
+
if (this.core.activeContainer && this.core.activeContainer.isReady) {
|
|
10870
|
+
this.core.activeContainer.setVolume(value);
|
|
10862
10871
|
}
|
|
10863
10872
|
else {
|
|
10864
|
-
this.listenToOnce(this.
|
|
10865
|
-
this.
|
|
10873
|
+
this.listenToOnce(this.core.activeContainer, Events.CONTAINER_READY, () => {
|
|
10874
|
+
this.core.activeContainer.setVolume(value);
|
|
10866
10875
|
});
|
|
10867
10876
|
}
|
|
10868
10877
|
};
|
|
10869
|
-
if (!this.
|
|
10878
|
+
if (!this.core.activeContainer) {
|
|
10870
10879
|
this.listenToOnce(this, Events.MEDIACONTROL_CONTAINERCHANGED, () => setWhenContainerReady());
|
|
10871
10880
|
}
|
|
10872
10881
|
else {
|
|
@@ -10876,7 +10885,7 @@ class MediaControl extends UICorePlugin {
|
|
|
10876
10885
|
toggleFullscreen() {
|
|
10877
10886
|
if (!Browser.isMobile) {
|
|
10878
10887
|
this.trigger(Events.MEDIACONTROL_FULLSCREEN, this.name);
|
|
10879
|
-
this.
|
|
10888
|
+
this.core.activeContainer.fullscreen();
|
|
10880
10889
|
this.core.toggleFullscreen();
|
|
10881
10890
|
this.resetUserKeepVisible();
|
|
10882
10891
|
}
|
|
@@ -10888,6 +10897,7 @@ class MediaControl extends UICorePlugin {
|
|
|
10888
10897
|
this.changeTogglePlay();
|
|
10889
10898
|
this.bindContainerEvents();
|
|
10890
10899
|
this.updateSettings();
|
|
10900
|
+
// TODO remove
|
|
10891
10901
|
this.core.activeContainer.trigger(Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
10892
10902
|
// TODO test
|
|
10893
10903
|
if (this.core.activeContainer.mediaControlDisabled) {
|
|
@@ -10912,7 +10922,9 @@ class MediaControl extends UICorePlugin {
|
|
|
10912
10922
|
seekTimePlugin?.$el.find('span').addClass('gcore-skin-text-color');
|
|
10913
10923
|
}
|
|
10914
10924
|
showVolumeBar() {
|
|
10915
|
-
|
|
10925
|
+
if (this.hideVolumeId) {
|
|
10926
|
+
clearTimeout(this.hideVolumeId);
|
|
10927
|
+
}
|
|
10916
10928
|
this.$volumeBarContainer?.removeClass('volume-bar-hide');
|
|
10917
10929
|
}
|
|
10918
10930
|
hideVolumeBar(timeout = 400) {
|
|
@@ -10958,9 +10970,9 @@ class MediaControl extends UICorePlugin {
|
|
|
10958
10970
|
}
|
|
10959
10971
|
// default to 100%
|
|
10960
10972
|
this.currentSeekBarPercentage = 100;
|
|
10961
|
-
if (this.
|
|
10962
|
-
(this.
|
|
10963
|
-
this.
|
|
10973
|
+
if (this.core.activeContainer &&
|
|
10974
|
+
(this.core.activeContainer.getPlaybackType() !== Playback.LIVE ||
|
|
10975
|
+
this.core.activeContainer.isDvrInUse())) {
|
|
10964
10976
|
this.currentSeekBarPercentage =
|
|
10965
10977
|
(this.currentPositionValue / this.currentDurationValue) * 100;
|
|
10966
10978
|
}
|
|
@@ -10987,16 +10999,10 @@ class MediaControl extends UICorePlugin {
|
|
|
10987
10999
|
const offsetX = MediaControl.getPageX(event) - this.$seekBarContainer.offset().left;
|
|
10988
11000
|
let pos = (offsetX / this.$seekBarContainer.width()) * 100;
|
|
10989
11001
|
pos = Math.min(100, Math.max(pos, 0));
|
|
10990
|
-
this.
|
|
11002
|
+
this.core.activeContainer && this.core.activeContainer.seekPercentage(pos);
|
|
10991
11003
|
this.setSeekPercentage(pos);
|
|
10992
11004
|
return false;
|
|
10993
11005
|
}
|
|
10994
|
-
setKeepVisible() {
|
|
10995
|
-
this.keepVisible = true;
|
|
10996
|
-
}
|
|
10997
|
-
resetKeepVisible() {
|
|
10998
|
-
this.keepVisible = false;
|
|
10999
|
-
}
|
|
11000
11006
|
setUserKeepVisible() {
|
|
11001
11007
|
this.userKeepVisible = true;
|
|
11002
11008
|
}
|
|
@@ -11074,7 +11080,12 @@ class MediaControl extends UICorePlugin {
|
|
|
11074
11080
|
default: [],
|
|
11075
11081
|
right: [],
|
|
11076
11082
|
}, this.core.activeContainer.settings);
|
|
11083
|
+
// TODO make order controlled via CSS
|
|
11077
11084
|
newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
|
|
11085
|
+
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
11086
|
+
this.core.activePlayback.dvrEnabled) {
|
|
11087
|
+
newSettings.left.push('dvr');
|
|
11088
|
+
}
|
|
11078
11089
|
// actual order of the items appear rendered is controlled by CSS
|
|
11079
11090
|
newSettings.right = [
|
|
11080
11091
|
'fullscreen',
|
|
@@ -11096,17 +11107,18 @@ class MediaControl extends UICorePlugin {
|
|
|
11096
11107
|
}
|
|
11097
11108
|
removeArrayItem(newSettings.default, 'hd-indicator');
|
|
11098
11109
|
removeArrayItem(newSettings.left, 'hd-indicator');
|
|
11110
|
+
// TODO get from container's settings
|
|
11099
11111
|
if (this.core.activePlayback.name === 'html5_video') {
|
|
11100
11112
|
newSettings.seekEnabled = this.isSeekEnabledForHtml5Playback();
|
|
11101
11113
|
}
|
|
11102
|
-
const settingsChanged =
|
|
11114
|
+
const settingsChanged = serializeSettings(this.settings) !== serializeSettings(newSettings);
|
|
11103
11115
|
if (settingsChanged) {
|
|
11104
11116
|
this.settings = newSettings;
|
|
11105
11117
|
this.render();
|
|
11106
11118
|
}
|
|
11107
11119
|
}
|
|
11108
|
-
|
|
11109
|
-
|
|
11120
|
+
onHdUpdate(isHD) {
|
|
11121
|
+
// TODO render?
|
|
11110
11122
|
}
|
|
11111
11123
|
createCachedElements() {
|
|
11112
11124
|
const $layer = this.$el.find('.media-control-layer');
|
|
@@ -11168,7 +11180,7 @@ class MediaControl extends UICorePlugin {
|
|
|
11168
11180
|
const panel = this.getElementLocation(name);
|
|
11169
11181
|
if (panel) {
|
|
11170
11182
|
const current = panel.find(`[data-${name}]`);
|
|
11171
|
-
element.setAttribute(`data-${name}`,
|
|
11183
|
+
element.setAttribute(`data-${name}`, '');
|
|
11172
11184
|
// TODO test
|
|
11173
11185
|
if (current.length) {
|
|
11174
11186
|
if (current[0] === element) {
|
|
@@ -11182,16 +11194,16 @@ class MediaControl extends UICorePlugin {
|
|
|
11182
11194
|
}
|
|
11183
11195
|
}
|
|
11184
11196
|
/**
|
|
11185
|
-
*
|
|
11186
|
-
* @
|
|
11197
|
+
* Toggle the visibility of a media control element
|
|
11198
|
+
* @param name - The name of the media control element
|
|
11199
|
+
* @param show - Whether to show or hide the element
|
|
11187
11200
|
*/
|
|
11201
|
+
toggleElement(name, show) {
|
|
11202
|
+
this.$el.find(`[data-${name}]`).toggle(show);
|
|
11203
|
+
}
|
|
11188
11204
|
getRightPanel() {
|
|
11189
11205
|
return this.$el.find('.media-control-right-panel');
|
|
11190
11206
|
}
|
|
11191
|
-
/**
|
|
11192
|
-
* Get the left panel area to append custom elements to
|
|
11193
|
-
* @returns ZeptoSelector of the left panel element
|
|
11194
|
-
*/
|
|
11195
11207
|
getLeftPanel() {
|
|
11196
11208
|
return this.$el.find('.media-control-left-panel');
|
|
11197
11209
|
}
|
|
@@ -11390,7 +11402,6 @@ class MediaControl extends UICorePlugin {
|
|
|
11390
11402
|
this.hideVolumeBar(0);
|
|
11391
11403
|
}, 0);
|
|
11392
11404
|
this.parseColors();
|
|
11393
|
-
this.highDefinitionUpdate(this.isHD);
|
|
11394
11405
|
this.core.$el.append(this.el);
|
|
11395
11406
|
this.rendered = true;
|
|
11396
11407
|
this.updateVolumeUI();
|
|
@@ -11477,10 +11488,27 @@ class MediaControl extends UICorePlugin {
|
|
|
11477
11488
|
}
|
|
11478
11489
|
return null;
|
|
11479
11490
|
}
|
|
11491
|
+
onDvrStateChanged(dvrInUse) {
|
|
11492
|
+
if (dvrInUse) {
|
|
11493
|
+
this.$el.addClass('dvr');
|
|
11494
|
+
}
|
|
11495
|
+
else {
|
|
11496
|
+
this.$el.removeClass('dvr');
|
|
11497
|
+
}
|
|
11498
|
+
}
|
|
11480
11499
|
}
|
|
11481
11500
|
MediaControl.extend = function (properties) {
|
|
11482
11501
|
return extend(MediaControl, properties);
|
|
11483
11502
|
};
|
|
11503
|
+
function serializeSettings(s) {
|
|
11504
|
+
return s.left
|
|
11505
|
+
.slice()
|
|
11506
|
+
.sort()
|
|
11507
|
+
.concat(s.right.slice().sort())
|
|
11508
|
+
.concat(s.default.slice().sort())
|
|
11509
|
+
.concat([s.seekEnabled])
|
|
11510
|
+
.join(',');
|
|
11511
|
+
}
|
|
11484
11512
|
|
|
11485
11513
|
const VERSION$5 = '2.19.12';
|
|
11486
11514
|
// TODO disabled if no items added
|
|
@@ -14576,7 +14604,7 @@ class ClipsPlugin extends UICorePlugin {
|
|
|
14576
14604
|
|
|
14577
14605
|
const templateHtml$1 = "<ul class=\"context-menu-list\">\n <% if(options) { %>\n <% for (var i = 0; i < options.length; i++) { %>\n <li class=\"context-menu-list-item <%= options[i].class %>\"\n data-<%= options[i].name %>><%= options[i].label %></li>\n <% } %>\n <% } %>\n</ul>\n";
|
|
14578
14606
|
|
|
14579
|
-
var version$1 = "2.
|
|
14607
|
+
var version$1 = "2.22.0";
|
|
14580
14608
|
|
|
14581
14609
|
var packages = {
|
|
14582
14610
|
"node_modules/@clappr/core": {
|
|
@@ -14709,7 +14737,7 @@ class ContextMenu extends UIContainerPlugin {
|
|
|
14709
14737
|
};
|
|
14710
14738
|
}
|
|
14711
14739
|
|
|
14712
|
-
const dvrHTML = "<div class=\"live-info\"><%= live %></div>\n<button type=\"button\" class=\"live-button\" aria-label=\"<%=
|
|
14740
|
+
const dvrHTML = "<div class=\"live-info\" id=\"media-control-live\"><%= i18n.t('live') %></div>\n<button type=\"button\" class=\"live-button\" aria-label=\"<%= i18n.t('back_to_live') %>\" id=\"media-control-back-to-live\"><%= i18n.t('back_to_live') %></button>\n";
|
|
14713
14741
|
|
|
14714
14742
|
const T$b = 'plugins.dvr_controls';
|
|
14715
14743
|
/**
|
|
@@ -14754,7 +14782,6 @@ class DvrControls extends UICorePlugin {
|
|
|
14754
14782
|
get attributes() {
|
|
14755
14783
|
return {
|
|
14756
14784
|
class: 'dvr-controls',
|
|
14757
|
-
'data-dvr-controls': '',
|
|
14758
14785
|
};
|
|
14759
14786
|
}
|
|
14760
14787
|
/**
|
|
@@ -14762,37 +14789,17 @@ class DvrControls extends UICorePlugin {
|
|
|
14762
14789
|
*/
|
|
14763
14790
|
bindEvents() {
|
|
14764
14791
|
this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
|
|
14765
|
-
this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.render);
|
|
14766
14792
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.bindContainerEvents);
|
|
14767
14793
|
}
|
|
14768
14794
|
onCoreReady() {
|
|
14769
14795
|
const mediaControl = this.core.getPlugin('media_control');
|
|
14770
14796
|
assert(mediaControl, 'media_control plugin is required');
|
|
14771
|
-
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.
|
|
14772
|
-
|
|
14797
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
|
|
14798
|
+
// MediaControl has been rendered
|
|
14799
|
+
this.render();
|
|
14773
14800
|
}
|
|
14774
14801
|
bindContainerEvents() {
|
|
14775
14802
|
this.listenToOnce(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.render);
|
|
14776
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrChanged);
|
|
14777
|
-
}
|
|
14778
|
-
onDvrChanged(dvrInUse) {
|
|
14779
|
-
if (this.core.getPlaybackType() !== Playback.LIVE) {
|
|
14780
|
-
return;
|
|
14781
|
-
}
|
|
14782
|
-
this.render();
|
|
14783
|
-
const mediaControl = this.core.getPlugin('media_control');
|
|
14784
|
-
mediaControl.$el.addClass('live');
|
|
14785
|
-
if (dvrInUse) {
|
|
14786
|
-
mediaControl.$el
|
|
14787
|
-
.addClass('dvr')
|
|
14788
|
-
.find(
|
|
14789
|
-
// TODO add API, test
|
|
14790
|
-
'.media-control-indicator[data-position], .media-control-indicator[data-duration]')
|
|
14791
|
-
.hide();
|
|
14792
|
-
}
|
|
14793
|
-
else {
|
|
14794
|
-
mediaControl.$el.removeClass('dvr');
|
|
14795
|
-
}
|
|
14796
14803
|
}
|
|
14797
14804
|
click() {
|
|
14798
14805
|
const container = this.core.activeContainer;
|
|
@@ -14801,13 +14808,8 @@ class DvrControls extends UICorePlugin {
|
|
|
14801
14808
|
}
|
|
14802
14809
|
container.seek(container.getDuration());
|
|
14803
14810
|
}
|
|
14804
|
-
settingsUpdate() {
|
|
14805
|
-
this.core.getPlugin('media_control').$el.removeClass('live');
|
|
14806
|
-
this.render();
|
|
14807
|
-
}
|
|
14808
14811
|
shouldRender() {
|
|
14809
|
-
|
|
14810
|
-
return useDvrControls && this.core.getPlaybackType() === Playback.LIVE;
|
|
14812
|
+
return this.core.getPlaybackType() === Playback.LIVE;
|
|
14811
14813
|
}
|
|
14812
14814
|
/**
|
|
14813
14815
|
* @internal
|
|
@@ -14817,16 +14819,19 @@ class DvrControls extends UICorePlugin {
|
|
|
14817
14819
|
dvrEnabled: this.core.activePlayback?.dvrEnabled,
|
|
14818
14820
|
playbackType: this.core.getPlaybackType(),
|
|
14819
14821
|
});
|
|
14822
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
14823
|
+
if (!mediaControl) {
|
|
14824
|
+
return this;
|
|
14825
|
+
}
|
|
14820
14826
|
if (!this.shouldRender()) {
|
|
14821
14827
|
return this;
|
|
14822
14828
|
}
|
|
14829
|
+
mediaControl.toggleElement('duration', false);
|
|
14830
|
+
mediaControl.toggleElement('position', false);
|
|
14823
14831
|
this.$el.html(DvrControls.template({
|
|
14824
|
-
|
|
14825
|
-
backToLive: this.core.i18n.t('back_to_live'),
|
|
14832
|
+
i18n: this.core.i18n,
|
|
14826
14833
|
}));
|
|
14827
|
-
|
|
14828
|
-
mediaControl.$el.addClass('live');
|
|
14829
|
-
mediaControl.getLeftPanel().append(this.$el);
|
|
14834
|
+
mediaControl.putElement('dvr', this.el);
|
|
14830
14835
|
return this;
|
|
14831
14836
|
}
|
|
14832
14837
|
}
|
|
@@ -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 = 'audiotracks' | 'clipText' | 'gear' | 'pip' | 'playbackRate' | '
|
|
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
|
|
@@ -37,7 +37,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
37
37
|
private hideId;
|
|
38
38
|
private hideVolumeId;
|
|
39
39
|
private intendedVolume;
|
|
40
|
-
private isHD;
|
|
41
40
|
private keepVisible;
|
|
42
41
|
private kibo;
|
|
43
42
|
private lastMouseX;
|
|
@@ -198,8 +197,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
198
197
|
private renderSeekBar;
|
|
199
198
|
private drawDurationAndPosition;
|
|
200
199
|
private seek;
|
|
201
|
-
private setKeepVisible;
|
|
202
|
-
private resetKeepVisible;
|
|
203
200
|
private setUserKeepVisible;
|
|
204
201
|
private resetUserKeepVisible;
|
|
205
202
|
private isVisible;
|
|
@@ -207,7 +204,7 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
207
204
|
private hide;
|
|
208
205
|
private updateCursorStyle;
|
|
209
206
|
private updateSettings;
|
|
210
|
-
private
|
|
207
|
+
private onHdUpdate;
|
|
211
208
|
private createCachedElements;
|
|
212
209
|
/**
|
|
213
210
|
* Get a media control element DOM node
|
|
@@ -231,16 +228,14 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
231
228
|
getElement(name: MediaControlElement): ZeptoResult | null;
|
|
232
229
|
putElement(name: MediaControlElement, element: HTMLElement): void;
|
|
233
230
|
/**
|
|
234
|
-
*
|
|
235
|
-
* @
|
|
236
|
-
|
|
237
|
-
getRightPanel(): any;
|
|
238
|
-
/**
|
|
239
|
-
* Get the left panel area to append custom elements to
|
|
240
|
-
* @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
|
|
241
234
|
*/
|
|
242
|
-
|
|
243
|
-
|
|
235
|
+
toggleElement(name: MediaControlElement, show: boolean): void;
|
|
236
|
+
private getRightPanel;
|
|
237
|
+
private getLeftPanel;
|
|
238
|
+
private getCenterPanel;
|
|
244
239
|
private resetIndicators;
|
|
245
240
|
private initializeIcons;
|
|
246
241
|
private setSeekPercentage;
|
|
@@ -275,5 +270,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
275
270
|
disabledControlButton(): void;
|
|
276
271
|
private isSeekEnabledForHtml5Playback;
|
|
277
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,aAAa,GACb,UAAU,GACV,MAAM,GACN,KAAK,GACL,cAAc,GACd,
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|