@gcorevideo/player 2.24.14 → 2.25.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/clips/clips.ejs +1 -1
- package/assets/clips/clips.scss +7 -5
- package/assets/media-control/width370.scss +3 -5
- package/dist/core.js +1 -1
- package/dist/index.css +870 -871
- package/dist/index.embed.js +171 -100
- package/dist/index.js +150 -78
- package/dist/player.d.ts +106 -42
- package/docs/api/player.md +18 -20
- package/docs/api/player.mediacontrol.defaultsettings.md +32 -0
- package/docs/api/player.mediacontrol.extendsettings.md +77 -0
- package/docs/api/player.mediacontrol.md +31 -11
- package/docs/api/player.mediacontrol.mount.md +8 -8
- package/docs/api/player.mediacontrol.slot.md +97 -0
- package/docs/api/player.mediacontrolelement.md +6 -3
- package/docs/api/player.mediacontrolpluginsettings.md +13 -0
- package/docs/api/player.mediacontrolsettings.md +5 -5
- package/docs/api/{player.mediacontrol.enablecontrolbutton.md → player.mediacontrolslotmountpoint.md} +4 -8
- package/docs/api/{player.mediacontrol.disabledcontrolbutton.md → player.standardmediacontrolelement.md} +4 -8
- package/lib/plugins/clips/Clips.d.ts +1 -0
- package/lib/plugins/clips/Clips.d.ts.map +1 -1
- package/lib/plugins/clips/Clips.js +16 -2
- package/lib/plugins/dvr-controls/DvrControls.js +1 -1
- package/lib/plugins/media-control/MediaControl.d.ts +87 -34
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +121 -76
- package/package.json +1 -1
- package/src/plugins/clips/Clips.ts +17 -2
- package/src/plugins/clips/__tests__/Clips.test.ts +1 -1
- package/src/plugins/clips/__tests__/__snapshots__/Clips.test.ts.snap +1 -1
- package/src/plugins/dvr-controls/DvrControls.ts +1 -1
- package/src/plugins/dvr-controls/__tests__/DvrControls.test.ts +1 -1
- package/src/plugins/media-control/MediaControl.ts +170 -141
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +24 -17
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +125 -93
- package/temp/player.api.json +186 -108
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.mediacontrollayerelement.md +0 -16
- package/docs/api/player.mediacontrolleftelement.md +0 -16
- package/docs/api/player.mediacontrolrightelement.md +0 -16
package/dist/index.embed.js
CHANGED
|
@@ -12524,7 +12524,7 @@ var PlaybackEvents;
|
|
|
12524
12524
|
// https://github.com/clappr/clappr/blob/8752995ea439321ac7ca3cd35e8c64de7a3c3d17/LICENSE
|
|
12525
12525
|
const AUTO$1 = -1;
|
|
12526
12526
|
const { now: now$2 } = Utils;
|
|
12527
|
-
const T$
|
|
12527
|
+
const T$d = 'playback.dash';
|
|
12528
12528
|
class DashPlayback extends BasePlayback {
|
|
12529
12529
|
_levels = null;
|
|
12530
12530
|
_currentLevel = null;
|
|
@@ -12873,7 +12873,7 @@ class DashPlayback extends BasePlayback {
|
|
|
12873
12873
|
if (!this._dash) {
|
|
12874
12874
|
return false;
|
|
12875
12875
|
}
|
|
12876
|
-
trace(`${T$
|
|
12876
|
+
trace(`${T$d} get.dvrEnabled`, {
|
|
12877
12877
|
dvrWindowSize: this._dash?.getDVRWindowSize(),
|
|
12878
12878
|
minDvrSize: this._minDvrSize,
|
|
12879
12879
|
playbackType: this.getPlaybackType(),
|
|
@@ -12895,7 +12895,7 @@ class DashPlayback extends BasePlayback {
|
|
|
12895
12895
|
this.trigger(Events$1.PLAYBACK_PROGRESS, progress, {});
|
|
12896
12896
|
}
|
|
12897
12897
|
play() {
|
|
12898
|
-
trace(`${T$
|
|
12898
|
+
trace(`${T$d} play`, { dash: !!this._dash });
|
|
12899
12899
|
!this._dash && this._setup();
|
|
12900
12900
|
super.play();
|
|
12901
12901
|
this._startTimeUpdateTimer();
|
|
@@ -41688,7 +41688,7 @@ const AUTO = -1;
|
|
|
41688
41688
|
const DEFAULT_RECOVER_ATTEMPTS = 16;
|
|
41689
41689
|
Events$1.register('PLAYBACK_FRAGMENT_CHANGED');
|
|
41690
41690
|
Events$1.register('PLAYBACK_FRAGMENT_PARSING_METADATA');
|
|
41691
|
-
const T$
|
|
41691
|
+
const T$c = 'playback.hls';
|
|
41692
41692
|
class HlsPlayback extends BasePlayback {
|
|
41693
41693
|
_ccIsSetup = false;
|
|
41694
41694
|
_ccTracksUpdated = false;
|
|
@@ -42012,7 +42012,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42012
42012
|
}
|
|
42013
42013
|
else {
|
|
42014
42014
|
Log.error('hlsjs: failed to recover', { evt, data });
|
|
42015
|
-
trace(`${T$
|
|
42015
|
+
trace(`${T$c} _recover failed to recover`, {
|
|
42016
42016
|
type: data.type,
|
|
42017
42017
|
details: data.details,
|
|
42018
42018
|
});
|
|
@@ -42098,7 +42098,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42098
42098
|
this.trigger(Events$1.PLAYBACK_SETTINGSUPDATE);
|
|
42099
42099
|
}
|
|
42100
42100
|
_onHLSJSError(evt, data) {
|
|
42101
|
-
trace(`${T$
|
|
42101
|
+
trace(`${T$c} _onHLSJSError`, {
|
|
42102
42102
|
fatal: data.fatal,
|
|
42103
42103
|
type: data.type,
|
|
42104
42104
|
details: data.details,
|
|
@@ -42146,7 +42146,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42146
42146
|
evt,
|
|
42147
42147
|
data,
|
|
42148
42148
|
});
|
|
42149
|
-
trace(`${T$
|
|
42149
|
+
trace(`${T$c} _onHLSJSError trying to recover from network error`, {
|
|
42150
42150
|
details: data.details,
|
|
42151
42151
|
});
|
|
42152
42152
|
error.level = PlayerError.Levels.WARN;
|
|
@@ -42159,7 +42159,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42159
42159
|
evt,
|
|
42160
42160
|
data,
|
|
42161
42161
|
});
|
|
42162
|
-
trace(`${T$
|
|
42162
|
+
trace(`${T$c} _onHLSJSError trying to recover from media error`, {
|
|
42163
42163
|
details: data.details,
|
|
42164
42164
|
});
|
|
42165
42165
|
error.level = PlayerError.Levels.WARN;
|
|
@@ -42189,7 +42189,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42189
42189
|
return;
|
|
42190
42190
|
}
|
|
42191
42191
|
Log.warn('hlsjs: non-fatal error occurred', { evt, data });
|
|
42192
|
-
trace(`${T$
|
|
42192
|
+
trace(`${T$c} _onHLSJSError non-fatal error occurred`, {
|
|
42193
42193
|
type: data.type,
|
|
42194
42194
|
details: data.details,
|
|
42195
42195
|
});
|
|
@@ -42546,7 +42546,7 @@ function toClapprTrack(t) {
|
|
|
42546
42546
|
};
|
|
42547
42547
|
}
|
|
42548
42548
|
|
|
42549
|
-
const T$
|
|
42549
|
+
const T$b = 'playback.html5_video';
|
|
42550
42550
|
const STALL_TIMEOUT = 15000;
|
|
42551
42551
|
class HTML5Video extends BasePlayback {
|
|
42552
42552
|
stallTimerId = null;
|
|
@@ -42554,7 +42554,7 @@ class HTML5Video extends BasePlayback {
|
|
|
42554
42554
|
* @internal
|
|
42555
42555
|
*/
|
|
42556
42556
|
createError(errorData, options) {
|
|
42557
|
-
trace(`${T$
|
|
42557
|
+
trace(`${T$b} createError`, {
|
|
42558
42558
|
errorData: { ...errorData },
|
|
42559
42559
|
});
|
|
42560
42560
|
const i18n = this.i18n ||
|
|
@@ -42580,12 +42580,12 @@ class HTML5Video extends BasePlayback {
|
|
|
42580
42580
|
super._onEnded();
|
|
42581
42581
|
}
|
|
42582
42582
|
_handleBufferingEvents() {
|
|
42583
|
-
trace(`${T$
|
|
42583
|
+
trace(`${T$b} _handleBufferingEvents`, {
|
|
42584
42584
|
networkState: this.el.networkState,
|
|
42585
42585
|
});
|
|
42586
42586
|
if (!this.stallTimerId) {
|
|
42587
42587
|
this.stallTimerId = setTimeout(() => {
|
|
42588
|
-
trace(`${T$
|
|
42588
|
+
trace(`${T$b} _handleBufferingEvents stall timeout`, {
|
|
42589
42589
|
buffering: this.buffering,
|
|
42590
42590
|
ended: this.ended,
|
|
42591
42591
|
});
|
|
@@ -42671,7 +42671,7 @@ function registerPlaybacks() {
|
|
|
42671
42671
|
Loader.registerPlayback(DashPlayback);
|
|
42672
42672
|
}
|
|
42673
42673
|
|
|
42674
|
-
const T$
|
|
42674
|
+
const T$a = 'gplayer';
|
|
42675
42675
|
const DEFAULT_OPTIONS = {
|
|
42676
42676
|
autoPlay: false,
|
|
42677
42677
|
debug: 'none',
|
|
@@ -42759,7 +42759,7 @@ class Player {
|
|
|
42759
42759
|
* ```
|
|
42760
42760
|
*/
|
|
42761
42761
|
attachTo(playerElement) {
|
|
42762
|
-
trace(`${T$
|
|
42762
|
+
trace(`${T$a} attachTo`, {
|
|
42763
42763
|
player: !!this.player,
|
|
42764
42764
|
});
|
|
42765
42765
|
assert.ok(!this.player, 'Player already initialized');
|
|
@@ -42769,7 +42769,7 @@ class Player {
|
|
|
42769
42769
|
}
|
|
42770
42770
|
const coreOpts = this.buildCoreOptions(playerElement);
|
|
42771
42771
|
const { core, container } = Player.getRegisteredPlugins();
|
|
42772
|
-
trace(`${T$
|
|
42772
|
+
trace(`${T$a} init`, {
|
|
42773
42773
|
registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.prototype.name),
|
|
42774
42774
|
});
|
|
42775
42775
|
coreOpts.plugins = {
|
|
@@ -42783,7 +42783,7 @@ class Player {
|
|
|
42783
42783
|
* Destroys the player, releasing all resources and unmounting its UI from the DOM.
|
|
42784
42784
|
*/
|
|
42785
42785
|
destroy() {
|
|
42786
|
-
trace(`${T$
|
|
42786
|
+
trace(`${T$a} destroy`, {
|
|
42787
42787
|
player: !!this.player,
|
|
42788
42788
|
});
|
|
42789
42789
|
if (this.player) {
|
|
@@ -42970,7 +42970,7 @@ class Player {
|
|
|
42970
42970
|
this.config = $.extend(true, this.config, config);
|
|
42971
42971
|
}
|
|
42972
42972
|
initPlayer(coreOptions) {
|
|
42973
|
-
trace(`${T$
|
|
42973
|
+
trace(`${T$a} initPlayer`, {
|
|
42974
42974
|
autoPlay: coreOptions.autoPlay,
|
|
42975
42975
|
sources: coreOptions.sources,
|
|
42976
42976
|
player: !!this.player,
|
|
@@ -43010,7 +43010,7 @@ class Player {
|
|
|
43010
43010
|
// TODO test
|
|
43011
43011
|
events = {
|
|
43012
43012
|
onReady: () => {
|
|
43013
|
-
trace(`${T$
|
|
43013
|
+
trace(`${T$a} onReady`, {
|
|
43014
43014
|
ready: this.ready,
|
|
43015
43015
|
});
|
|
43016
43016
|
if (this.ready) {
|
|
@@ -43100,7 +43100,7 @@ class Player {
|
|
|
43100
43100
|
assert.ok(this.player, 'Player is not initialized');
|
|
43101
43101
|
const core = this.player.core;
|
|
43102
43102
|
core.on(Events$1.CORE_SCREEN_ORIENTATION_CHANGED, ({ orientation }) => {
|
|
43103
|
-
trace(`${T$
|
|
43103
|
+
trace(`${T$a} on CORE_SCREEN_ORIENTATION_CHANGED`, {
|
|
43104
43104
|
rootNode: {
|
|
43105
43105
|
width: this.rootNode?.clientWidth,
|
|
43106
43106
|
height: this.rootNode?.clientHeight,
|
|
@@ -43398,7 +43398,7 @@ const FullscreenIOS = {
|
|
|
43398
43398
|
},
|
|
43399
43399
|
};
|
|
43400
43400
|
|
|
43401
|
-
insertStyle("[data-player] {\n --bottom-panel: 40px;\n}\n\n.container .media-control-notransition {\n transition: none !important;\n}\n.container .player-poster .play-wrapper {\n opacity: 1;\n}\n.container.crop-video [data-html5-video] {\n object-fit: cover;\n}\n.container .cc-line {\n position: absolute;\n bottom: calc(var(--bottom-panel) + 5px);\n width: 100%;\n}\n.container .cc-line p {\n width: auto;\n background-color: rgba(0, 0, 0, 0.4);\n color: white;\n display: inline-block;\n}\n.container .player-poster .circle-poster {\n top: 50%;\n margin-top: -60px;\n left: 50%;\n margin-left: -60px;\n position: absolute;\n width: 120px;\n height: 120px;\n border: 2px solid white;\n border-radius: 50%;\n filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\";\n filter: alpha(opacity=60);\n opacity: 1;\n box-shadow: 0 0 1px 0 white;\n}\n.container .player-poster .circle-poster svg {\n margin-left: 5px;\n width: 80px;\n}\n.container .spinner-three-bounce[data-spinner] > div {\n background-color: #ff5700;\n}\n\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-quality,\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-audiotracks {\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n transform: rotate(270deg);\n float: none;\n display: block;\n position: absolute;\n /* bottom: 12px; */\n margin: 0;\n top: -40px;\n padding: 0;\n /* right: 20px; */\n margin-left: -32px;\n margin-top: -3px;\n width: 80px;\n /* padding-left: 12px; */\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background-mask {\n position: absolute;\n width: 100%;\n height: 100%;\n left: -5px;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background {\n margin-left: 11px;\n top: 7px;\n width: 80px;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber {\n margin-left: 11px;\n top: 1px;\n}\n\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-cc {\n width: 28px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-cc svg {\n height: 17px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .share_plugin[data-share] .share-container {\n top: calc(50% - 150px);\n left: calc(50% - 125px);\n width: 250px;\n height: calc(100% - 32px);\n max-height: 300px;\n transform: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .share_plugin[data-share] .share-container .share-container-header {\n border: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .share_plugin[data-share] .share-container .share-container-header .share-container-header--title {\n visibility: hidden;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-quality,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks {\n display: block;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector],\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] {\n margin-top: 3px;\n margin-right: 10px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] ul,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] ul {\n bottom: 30px;\n width: 50px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] ul li,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] ul li {\n height: 23px;\n font-size: 14px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] ul li a,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] ul li a {\n height: 23px;\n padding: 2px 5px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] .audio-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] .audio-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] .audio-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] .audio-text {\n font-size: 13px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] span.audio-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] span.audio-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] span.audio-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] span.audio-arrow {\n width: 7px;\n height: 5px;\n margin-left: 4px;\n margin-top: 11px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-multicamera .multicamera {\n margin-top: 0;\n margin-right: 10px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-multicamera .multicamera button {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-multicamera .multicamera button svg {\n height: 17px;\n margin: 0;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] {\n padding-left: 10px;\n padding-right: 12px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-indicator {\n line-height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-indicator[data-position], .media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n font-size: 11px;\n line-height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-button {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-button::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-info {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-info::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] button.media-control-button {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n height: 33px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] button.media-control-button svg {\n height: 17px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-clip-container .media-clip-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-clips .media-clip-text {\n line-height: 33px;\n font-size: 11px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-clip-container .media-clip-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-clips .media-clip-text {\n max-width: 50px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] {\n height: 32px;\n margin-right: 8px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 17px;\n margin-top: 5px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n width: 0;\n height: 12px;\n top: 9px;\n padding: 0;\n}\n\n:root {\n --font-size-media-controls: 14px;\n --font-size-media-controls-dropdown: 16px;\n --player-vod-color: #005aff;\n --player-dvr-color: #fff;\n --player-live-color: #ff0101;\n --player-seekbar-current-color: #ff5700;\n --player-seekbar-buffer-color: #fff;\n}\n\n.media-control-skin-1[data-media-control-skin-1] {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 9999;\n pointer-events: none;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n font-size: var(--font-size-media-controls);\n}\n.media-control-skin-1[data-media-control-skin-1].dragging {\n pointer-events: auto;\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1[data-media-control-skin-1].dragging * {\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-icon {\n line-height: 0;\n letter-spacing: 0;\n speak: none;\n color: #fff;\n vertical-align: middle;\n text-align: left;\n transition: all 0.1s ease;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-icon:hover {\n color: white;\n}\n.media-control-skin-1[data-media-control-skin-1].media-control-hide .media-control-background[data-background] {\n opacity: 0;\n}\n.media-control-skin-1[data-media-control-skin-1].media-control-hide .media-control-layer[data-controls] {\n bottom: -50px;\n}\n.media-control-skin-1[data-media-control-skin-1].media-control-hide .media-control-layer[data-controls] .bar-scrubber[data-seekbar] {\n opacity: 0;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] {\n position: absolute;\n bottom: 0;\n width: 100%;\n padding: 0 12px 0 8px;\n height: var(--bottom-panel);\n vertical-align: middle;\n pointer-events: auto;\n transition: bottom 0.4s ease-out;\n display: flex;\n justify-content: space-between;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-left-panel {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n justify-content: flex-start;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-center-panel {\n height: 100%;\n text-align: center;\n line-height: var(--bottom-panel);\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-right-panel {\n display: flex;\n align-items: center;\n gap: 1rem;\n justify-content: flex-end;\n}\n@media (max-width: 420px) {\n .media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-right-panel {\n gap: 0.5rem;\n overflow: hidden;\n }\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button {\n background-color: transparent;\n border: 0;\n padding: 0;\n cursor: pointer;\n display: inline-block;\n height: 20px;\n width: 24px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button svg {\n height: 20px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button svg path {\n fill: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button:focus {\n outline: none;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-play] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-pause] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-stop] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n order: 100;\n background-color: transparent;\n border: 0;\n height: 40px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-hd-indicator] {\n background-color: transparent;\n border: 0;\n cursor: default;\n display: none !important;\n float: right;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-position], .media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n display: flex;\n color: white;\n cursor: default;\n line-height: var(--bottom-panel);\n position: relative;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-position] {\n margin: 1px 0 0 7px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n color: rgb(255, 255, 255);\n opacity: 0.5;\n margin-top: 1px;\n margin-right: 6px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-duration]::before {\n content: \"|\";\n margin-right: 7px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] {\n position: absolute;\n top: -11px;\n left: 0;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n height: 20px;\n cursor: pointer;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] {\n width: 100%;\n height: 3px;\n position: relative;\n top: 8px;\n background-color: #666;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-1[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-buffer-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-current-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar].seek-disabled {\n cursor: default;\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar].seek-disabled + .bar-scrubber[data-seekbar] {\n cursor: default;\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-scrubber[data-seekbar] {\n position: absolute;\n transform: translateX(-50%);\n top: -11.5px;\n left: 0;\n width: 20px;\n height: 20px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-scrubber[data-seekbar] .bar-scrubber-icon[data-seekbar] {\n position: absolute;\n left: 4.5px;\n top: 4.5px;\n width: 11px;\n height: 11px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] {\n display: flex;\n justify-content: flex-start;\n height: var(--bottom-panel);\n cursor: pointer;\n box-sizing: border-box;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] {\n bottom: 0;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n background-color: transparent;\n border: 0;\n box-sizing: content-box;\n height: var(--bottom-panel);\n width: 20px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 20px;\n position: relative;\n top: 3px;\n margin-top: 7px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg path {\n fill: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume].muted svg {\n margin-left: 2px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n position: relative;\n margin-left: 10px;\n top: 8px;\n width: 80px;\n height: 23px;\n padding: 3px 0;\n transition: width 0.2s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] {\n height: 3px;\n border-radius: 100px;\n position: relative;\n top: 7px;\n background-color: #666;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-1[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n border-radius: 100px;\n background-color: white;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-2[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-vod-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] {\n position: absolute;\n transform: translateX(-50%);\n top: 3px;\n margin-left: 3px;\n width: 16px;\n height: 16px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] .bar-scrubber-icon[data-volume] {\n position: absolute;\n left: 3px;\n top: 5px;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume] {\n float: left;\n width: 4px;\n padding-left: 2px;\n height: 12px;\n opacity: 0.5;\n box-shadow: inset 2px 0 0 white;\n transition: transform 0.2s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume].fill {\n box-shadow: inset 2px 0 0 #fff;\n opacity: 1;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:nth-of-type(1) {\n padding-left: 0;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:hover {\n transform: scaleY(1.5);\n}\n\n/* TODO distribute between plugins' styles */\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc button[data-cc-button] {\n display: flex;\n justify-content: center;\n padding: 0;\n align-items: center;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc button[data-cc-button]:hover {\n color: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul {\n background-color: rgba(74, 74, 74, 0.6);\n border: none;\n width: auto;\n border-radius: 4px;\n bottom: 52px;\n margin-left: -28px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li {\n font-size: 16px;\n text-align: center;\n white-space: nowrap;\n height: 30px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li a {\n height: 30px;\n padding: 5px 10px;\n color: #fffffe;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li a:hover {\n background-color: rgba(0, 0, 0, 0.4);\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li.current a {\n background-color: rgba(0, 0, 0, 0.4);\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li:first-child a {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li:last-child a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1] .seek-time {\n height: 26px;\n line-height: 26px;\n bottom: 52px;\n border-radius: 3px;\n background-color: rgba(74, 74, 74, 0.7);\n}\n.media-control-skin-1[data-media-control-skin-1] .seek-time span {\n letter-spacing: 0.8px;\n font-size: 14px;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n}\n.media-control-skin-1[data-media-control-skin-1] .seek-time .seek-time__pos {\n padding-left: 8px;\n padding-right: 8px;\n}");
|
|
43401
|
+
insertStyle("[data-player] {\n --bottom-panel: 40px;\n}\n\n.container .media-control-notransition {\n transition: none !important;\n}\n.container .player-poster .play-wrapper {\n opacity: 1;\n}\n.container.crop-video [data-html5-video] {\n object-fit: cover;\n}\n.container .cc-line {\n position: absolute;\n bottom: calc(var(--bottom-panel) + 5px);\n width: 100%;\n}\n.container .cc-line p {\n width: auto;\n background-color: rgba(0, 0, 0, 0.4);\n color: white;\n display: inline-block;\n}\n.container .player-poster .circle-poster {\n top: 50%;\n margin-top: -60px;\n left: 50%;\n margin-left: -60px;\n position: absolute;\n width: 120px;\n height: 120px;\n border: 2px solid white;\n border-radius: 50%;\n filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\";\n filter: alpha(opacity=60);\n opacity: 1;\n box-shadow: 0 0 1px 0 white;\n}\n.container .player-poster .circle-poster svg {\n margin-left: 5px;\n width: 80px;\n}\n.container .spinner-three-bounce[data-spinner] > div {\n background-color: #ff5700;\n}\n\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-quality,\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-audiotracks {\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n transform: rotate(270deg);\n float: none;\n display: block;\n position: absolute;\n /* bottom: 12px; */\n margin: 0;\n top: -40px;\n padding: 0;\n /* right: 20px; */\n margin-left: -32px;\n margin-top: -3px;\n width: 80px;\n /* padding-left: 12px; */\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background-mask {\n position: absolute;\n width: 100%;\n height: 100%;\n left: -5px;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background {\n margin-left: 11px;\n top: 7px;\n width: 80px;\n}\n.media-control-skin-1[data-media-control-skin-1].w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber {\n margin-left: 11px;\n top: 1px;\n}\n\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-cc {\n width: 28px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-cc svg {\n height: 17px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .share_plugin[data-share] .share-container {\n top: calc(50% - 150px);\n left: calc(50% - 125px);\n width: 250px;\n height: calc(100% - 32px);\n max-height: 300px;\n transform: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .share_plugin[data-share] .share-container .share-container-header {\n border: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .share_plugin[data-share] .share-container .share-container-header .share-container-header--title {\n visibility: hidden;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-quality,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks {\n display: block;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector],\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] {\n margin-top: 3px;\n margin-right: 10px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] ul,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] ul {\n bottom: 30px;\n width: 50px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] ul li,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] ul li {\n height: 23px;\n font-size: 14px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] ul li a,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] ul li a {\n height: 23px;\n padding: 2px 5px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] .audio-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] .audio-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] .audio-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] .quality-text,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] .audio-text {\n font-size: 13px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-level-selector-button] span.audio-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .level-selector[data-level-selector] button[data-audiotracks-button] span.audio-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-level-selector-button] span.audio-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] span.quality-arrow,\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] span.audio-arrow {\n width: 7px;\n height: 5px;\n margin-left: 4px;\n margin-top: 11px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-multicamera .multicamera {\n margin-top: 0;\n margin-right: 10px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-multicamera .multicamera button {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-multicamera .multicamera button svg {\n height: 17px;\n margin: 0;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] {\n padding-left: 10px;\n padding-right: 12px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-indicator {\n line-height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-indicator[data-position], .media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n font-size: 11px;\n line-height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-button {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-button::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-info {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .dvr-controls .live-info::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] button.media-control-button {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n height: 33px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] button.media-control-button svg {\n height: 17px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n line-height: 33px;\n font-size: 11px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n max-width: 50px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] {\n height: 32px;\n margin-right: 8px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n height: 32px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 17px;\n margin-top: 5px;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1].w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n width: 0;\n height: 12px;\n top: 9px;\n padding: 0;\n}\n\n:root {\n --font-size-media-controls: 14px;\n --font-size-media-controls-dropdown: 16px;\n --player-vod-color: #005aff;\n --player-dvr-color: #fff;\n --player-live-color: #ff0101;\n --player-seekbar-current-color: #ff5700;\n --player-seekbar-buffer-color: #fff;\n}\n\n.media-control-skin-1[data-media-control-skin-1] {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 9999;\n pointer-events: none;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n font-size: var(--font-size-media-controls);\n}\n.media-control-skin-1[data-media-control-skin-1].dragging {\n pointer-events: auto;\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1[data-media-control-skin-1].dragging * {\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-icon {\n line-height: 0;\n letter-spacing: 0;\n speak: none;\n color: #fff;\n vertical-align: middle;\n text-align: left;\n transition: all 0.1s ease;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-icon:hover {\n color: white;\n}\n.media-control-skin-1[data-media-control-skin-1].media-control-hide .media-control-background[data-background] {\n opacity: 0;\n}\n.media-control-skin-1[data-media-control-skin-1].media-control-hide .media-control-layer[data-controls] {\n bottom: -50px;\n}\n.media-control-skin-1[data-media-control-skin-1].media-control-hide .media-control-layer[data-controls] .bar-scrubber[data-seekbar] {\n opacity: 0;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] {\n position: absolute;\n bottom: 0;\n width: 100%;\n padding: 0 12px 0 8px;\n height: var(--bottom-panel);\n vertical-align: middle;\n pointer-events: auto;\n transition: bottom 0.4s ease-out;\n display: flex;\n justify-content: space-between;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-left-panel {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n justify-content: flex-start;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-center-panel {\n height: 100%;\n text-align: center;\n line-height: var(--bottom-panel);\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-right-panel {\n display: flex;\n align-items: center;\n gap: 1rem;\n justify-content: flex-end;\n}\n@media (max-width: 420px) {\n .media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-right-panel {\n gap: 0.5rem;\n overflow: hidden;\n }\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button {\n background-color: transparent;\n border: 0;\n padding: 0;\n cursor: pointer;\n display: inline-block;\n height: 20px;\n width: 24px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button svg {\n height: 20px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button svg path {\n fill: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button:focus {\n outline: none;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-play] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-pause] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-stop] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n order: 100;\n background-color: transparent;\n border: 0;\n height: 40px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] button.media-control-button[data-hd-indicator] {\n background-color: transparent;\n border: 0;\n cursor: default;\n display: none !important;\n float: right;\n height: 100%;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-position], .media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n display: flex;\n color: white;\n cursor: default;\n line-height: var(--bottom-panel);\n position: relative;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-position] {\n margin: 1px 0 0 7px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n color: rgb(255, 255, 255);\n opacity: 0.5;\n margin-top: 1px;\n margin-right: 6px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .media-control-indicator[data-duration]::before {\n content: \"|\";\n margin-right: 7px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] {\n position: absolute;\n top: -11px;\n left: 0;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n height: 20px;\n cursor: pointer;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] {\n width: 100%;\n height: 3px;\n position: relative;\n top: 8px;\n background-color: #666;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-1[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-buffer-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-current-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar].seek-disabled {\n cursor: default;\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-container[data-seekbar].seek-disabled + .bar-scrubber[data-seekbar] {\n cursor: default;\n display: none;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-scrubber[data-seekbar] {\n position: absolute;\n transform: translateX(-50%);\n top: -11.5px;\n left: 0;\n width: 20px;\n height: 20px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .bar-scrubber[data-seekbar] .bar-scrubber-icon[data-seekbar] {\n position: absolute;\n left: 4.5px;\n top: 4.5px;\n width: 11px;\n height: 11px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] {\n display: flex;\n justify-content: flex-start;\n height: var(--bottom-panel);\n cursor: pointer;\n box-sizing: border-box;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] {\n bottom: 0;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n background-color: transparent;\n border: 0;\n box-sizing: content-box;\n height: var(--bottom-panel);\n width: 20px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 20px;\n position: relative;\n top: 3px;\n margin-top: 7px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg path {\n fill: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume].muted svg {\n margin-left: 2px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n position: relative;\n margin-left: 10px;\n top: 8px;\n width: 80px;\n height: 23px;\n padding: 3px 0;\n transition: width 0.2s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] {\n height: 3px;\n border-radius: 100px;\n position: relative;\n top: 7px;\n background-color: #666;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-1[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n border-radius: 100px;\n background-color: white;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-2[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-vod-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] {\n position: absolute;\n transform: translateX(-50%);\n top: 3px;\n margin-left: 3px;\n width: 16px;\n height: 16px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] .bar-scrubber-icon[data-volume] {\n position: absolute;\n left: 3px;\n top: 5px;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume] {\n float: left;\n width: 4px;\n padding-left: 2px;\n height: 12px;\n opacity: 0.5;\n box-shadow: inset 2px 0 0 white;\n transition: transform 0.2s ease-out;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume].fill {\n box-shadow: inset 2px 0 0 #fff;\n opacity: 1;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:nth-of-type(1) {\n padding-left: 0;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:hover {\n transform: scaleY(1.5);\n}\n\n/* TODO distribute between plugins' styles */\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc button[data-cc-button] {\n display: flex;\n justify-content: center;\n padding: 0;\n align-items: center;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc button[data-cc-button]:hover {\n color: white;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul {\n background-color: rgba(74, 74, 74, 0.6);\n border: none;\n width: auto;\n border-radius: 4px;\n bottom: 52px;\n margin-left: -28px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li {\n font-size: 16px;\n text-align: center;\n white-space: nowrap;\n height: 30px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li a {\n height: 30px;\n padding: 5px 10px;\n color: #fffffe;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li a:hover {\n background-color: rgba(0, 0, 0, 0.4);\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li.current a {\n background-color: rgba(0, 0, 0, 0.4);\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li:first-child a {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1] .media-control-cc ul li:last-child a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.media-control-skin-1[data-media-control-skin-1] .seek-time {\n height: 26px;\n line-height: 26px;\n bottom: 52px;\n border-radius: 3px;\n background-color: rgba(74, 74, 74, 0.7);\n}\n.media-control-skin-1[data-media-control-skin-1] .seek-time span {\n letter-spacing: 0.8px;\n font-size: 14px;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n}\n.media-control-skin-1[data-media-control-skin-1] .seek-time .seek-time__pos {\n padding-left: 8px;\n padding-right: 8px;\n}");
|
|
43402
43402
|
|
|
43403
43403
|
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 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\" || setting === \"clips\") {\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 ([\"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";
|
|
43404
43404
|
|
|
@@ -43421,31 +43421,33 @@ const fullscreenOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
|
|
|
43421
43421
|
// Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
43422
43422
|
// Use of this source code is governed by a BSD-style
|
|
43423
43423
|
// license that can be found in the {@link https://github.com/clappr/clappr-plugins/blob/master/LICENSE | LICENSE}.
|
|
43424
|
+
const STANDARD_MEDIA_CONTROL_ELEMENTS = [
|
|
43425
|
+
'duration',
|
|
43426
|
+
'fullscreen',
|
|
43427
|
+
'hd-indicator',
|
|
43428
|
+
'playpause',
|
|
43429
|
+
'playstop',
|
|
43430
|
+
'position',
|
|
43431
|
+
'seekbar',
|
|
43432
|
+
'volume',
|
|
43433
|
+
];
|
|
43434
|
+
// TODO export
|
|
43424
43435
|
const DEFAULT_SETTINGS = {
|
|
43436
|
+
default: ['seekbar'],
|
|
43437
|
+
left: ['playpause', 'playstop', 'position', 'duration', 'volume'],
|
|
43425
43438
|
right: [
|
|
43426
|
-
'
|
|
43427
|
-
'
|
|
43439
|
+
'*',
|
|
43440
|
+
// 'hd-indicator',
|
|
43428
43441
|
'fullscreen',
|
|
43429
|
-
|
|
43430
|
-
|
|
43431
|
-
|
|
43432
|
-
'vr',
|
|
43433
|
-
]};
|
|
43442
|
+
],
|
|
43443
|
+
seekEnabled: true,
|
|
43444
|
+
};
|
|
43434
43445
|
const INITIAL_SETTINGS = {
|
|
43435
43446
|
left: [],
|
|
43436
43447
|
right: [],
|
|
43437
43448
|
default: [],
|
|
43438
43449
|
seekEnabled: false,
|
|
43439
43450
|
};
|
|
43440
|
-
const T$a = 'plugins.media_control';
|
|
43441
|
-
const LEFT_ORDER = [
|
|
43442
|
-
'playpause',
|
|
43443
|
-
'playstop',
|
|
43444
|
-
'volume',
|
|
43445
|
-
'position',
|
|
43446
|
-
'duration',
|
|
43447
|
-
'dvr',
|
|
43448
|
-
];
|
|
43449
43451
|
/**
|
|
43450
43452
|
* Extended events for the {@link MediaControl} plugin
|
|
43451
43453
|
* @beta
|
|
@@ -43456,25 +43458,21 @@ var ExtendedEvents;
|
|
|
43456
43458
|
ExtendedEvents["MEDIACONTROL_MENU_COLLAPSE"] = "mediacontrol:menu:collapse";
|
|
43457
43459
|
})(ExtendedEvents || (ExtendedEvents = {}));
|
|
43458
43460
|
const { Config, Fullscreen, formatTime: formatTime$1, extend, removeArrayItem } = Utils;
|
|
43459
|
-
function orderByOrderPattern(arr, order) {
|
|
43460
|
-
const arrWithoutDuplicates = [...new Set(arr)];
|
|
43461
|
-
const ordered = order.filter((item) => arrWithoutDuplicates.includes(item));
|
|
43462
|
-
const rest = arrWithoutDuplicates.filter((item) => !order.includes(item));
|
|
43463
|
-
return [...ordered, ...rest];
|
|
43464
|
-
}
|
|
43465
43461
|
/**
|
|
43466
|
-
* `PLUGIN` that provides
|
|
43462
|
+
* `PLUGIN` that provides framework for building media control UI.
|
|
43467
43463
|
* @beta
|
|
43468
43464
|
* @remarks
|
|
43469
43465
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
43470
43466
|
*
|
|
43471
|
-
* Configuration options
|
|
43467
|
+
* Configuration options (root level)
|
|
43468
|
+
*
|
|
43469
|
+
* - `hideMediaControlDelay`: number - specifies the delay in milliseconds before the media control UI is hidden after the last user interaction
|
|
43472
43470
|
*
|
|
43473
|
-
* - `mediaControl`: {@link MediaControlSettings} - specifies the
|
|
43471
|
+
* - `mediaControl`: {@link MediaControlSettings} - specifies the media control dashboard layout
|
|
43474
43472
|
*
|
|
43475
43473
|
* - `persistConfig`: boolean - `common` option, makes the plugin persist the media control settings
|
|
43476
43474
|
*
|
|
43477
|
-
* - `chromeless`: boolean
|
|
43475
|
+
* - `chromeless`: boolean - `common` option, hides the media control UI
|
|
43478
43476
|
*/
|
|
43479
43477
|
class MediaControl extends UICorePlugin {
|
|
43480
43478
|
// private advertisementPlaying = false
|
|
@@ -43482,7 +43480,7 @@ class MediaControl extends UICorePlugin {
|
|
|
43482
43480
|
currentDurationValue = 0;
|
|
43483
43481
|
currentPositionValue = 0;
|
|
43484
43482
|
currentSeekBarPercentage = 0;
|
|
43485
|
-
disabledClickableList = []
|
|
43483
|
+
// private disabledClickableList: DisabledClickable[] = []
|
|
43486
43484
|
displayedDuration = null;
|
|
43487
43485
|
displayedPosition = null;
|
|
43488
43486
|
displayedSeekBarPercentage = null;
|
|
@@ -43507,7 +43505,6 @@ class MediaControl extends UICorePlugin {
|
|
|
43507
43505
|
verticalVolume = false;
|
|
43508
43506
|
$duration = null;
|
|
43509
43507
|
$fullscreenToggle = null;
|
|
43510
|
-
$multiCameraSelector = null;
|
|
43511
43508
|
$playPauseToggle = null;
|
|
43512
43509
|
$playStopToggle = null;
|
|
43513
43510
|
$position = null;
|
|
@@ -43535,6 +43532,46 @@ class MediaControl extends UICorePlugin {
|
|
|
43535
43532
|
get supportedVersion() {
|
|
43536
43533
|
return { min: CLAPPR_VERSION$1 };
|
|
43537
43534
|
}
|
|
43535
|
+
/**
|
|
43536
|
+
* @returns Default media control layout settings
|
|
43537
|
+
* @remark
|
|
43538
|
+
* The method can be used to change the default dashboard layout, for example, removing the standard UI elements
|
|
43539
|
+
* @example
|
|
43540
|
+
* ```ts
|
|
43541
|
+
* const settings = MediaControl.defaultSettings()
|
|
43542
|
+
* settings.left = settings.filter(item => item !== 'playpause' && item !== 'playstop')
|
|
43543
|
+
* ...
|
|
43544
|
+
* new Player({
|
|
43545
|
+
* mediaControl: settings,
|
|
43546
|
+
* })
|
|
43547
|
+
* ```
|
|
43548
|
+
*/
|
|
43549
|
+
static defaultSettings() {
|
|
43550
|
+
return $.extend(true, {}, DEFAULT_SETTINGS);
|
|
43551
|
+
}
|
|
43552
|
+
/**
|
|
43553
|
+
* Extend the default media control layout settings
|
|
43554
|
+
* @param settings - Additional settings
|
|
43555
|
+
* @returns The extended settings
|
|
43556
|
+
* @remarks
|
|
43557
|
+
* This method allows adding custom elements to the media control dashboard.
|
|
43558
|
+
* The default settings are not modified.
|
|
43559
|
+
* @example
|
|
43560
|
+
* ```ts
|
|
43561
|
+
* new Player({
|
|
43562
|
+
* mediaControl: MediaControl.extendSettings({
|
|
43563
|
+
* left: ['*'], // add all custom elements to the left panel
|
|
43564
|
+
* }),
|
|
43565
|
+
* })
|
|
43566
|
+
* ```
|
|
43567
|
+
*/
|
|
43568
|
+
static extendSettings(settings) {
|
|
43569
|
+
return {
|
|
43570
|
+
left: mergeElements(DEFAULT_SETTINGS.left, settings.left ?? []),
|
|
43571
|
+
right: mergeElements(DEFAULT_SETTINGS.right, settings.right ?? []),
|
|
43572
|
+
default: mergeElements(DEFAULT_SETTINGS.default, settings.default ?? []),
|
|
43573
|
+
};
|
|
43574
|
+
}
|
|
43538
43575
|
get disabled() {
|
|
43539
43576
|
const playbackIsNOOP = this.core.activeContainer &&
|
|
43540
43577
|
this.core.activeContainer.getPlaybackType() === Playback.NO_OP;
|
|
@@ -43796,9 +43833,7 @@ class MediaControl extends UICorePlugin {
|
|
|
43796
43833
|
this.applyButtonStyle(this.$volumeIcon);
|
|
43797
43834
|
}
|
|
43798
43835
|
changeTogglePlay() {
|
|
43799
|
-
// assert.ok(this.$playPauseToggle, 'play/pause toggle must be present');
|
|
43800
43836
|
this.$playPauseToggle?.html('');
|
|
43801
|
-
// assert.ok(this.$playStopToggle, 'play/stop toggle must be present');
|
|
43802
43837
|
this.$playStopToggle?.html('');
|
|
43803
43838
|
if (this.container && this.container.isPlaying()) {
|
|
43804
43839
|
this.$playPauseToggle?.append(pauseIcon);
|
|
@@ -44163,36 +44198,32 @@ class MediaControl extends UICorePlugin {
|
|
|
44163
44198
|
}
|
|
44164
44199
|
}
|
|
44165
44200
|
updateSettings() {
|
|
44166
|
-
|
|
44201
|
+
// TODO use this.options.mediaControl to additionally filter the settings
|
|
44202
|
+
const container = $.extend(true, {
|
|
44167
44203
|
left: [],
|
|
44168
44204
|
default: [],
|
|
44169
44205
|
right: [],
|
|
44170
44206
|
}, this.core.activeContainer.settings);
|
|
44171
|
-
|
|
44172
|
-
|
|
44173
|
-
newSettings.left = orderByOrderPattern([...newSettings.left, 'volume', 'clips'], LEFT_ORDER);
|
|
44174
|
-
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
44175
|
-
this.core.activePlayback.dvrEnabled) {
|
|
44176
|
-
newSettings.left.push('dvr');
|
|
44177
|
-
}
|
|
44178
|
-
// actual order of the items appear rendered is controlled by CSS
|
|
44179
|
-
newSettings.right = DEFAULT_SETTINGS.right; // TODO get from the options
|
|
44207
|
+
container.left.push('volume');
|
|
44208
|
+
const setup = this.options.mediaControl ?? DEFAULT_SETTINGS;
|
|
44180
44209
|
if ((!this.fullScreenOnVideoTagSupported && !fullscreenEnabled()) ||
|
|
44181
44210
|
this.options.fullscreenDisable) {
|
|
44182
44211
|
// remove fullscreen from settings if it is not available
|
|
44183
|
-
removeArrayItem(
|
|
44184
|
-
removeArrayItem(
|
|
44185
|
-
removeArrayItem(
|
|
44212
|
+
removeArrayItem(container.default, 'fullscreen');
|
|
44213
|
+
removeArrayItem(container.left, 'fullscreen');
|
|
44214
|
+
removeArrayItem(container.right, 'fullscreen');
|
|
44186
44215
|
}
|
|
44187
|
-
removeArrayItem(newSettings.default, 'hd-indicator');
|
|
44188
|
-
removeArrayItem(newSettings.left, 'hd-indicator');
|
|
44189
44216
|
// TODO get from container's settings
|
|
44190
44217
|
if (this.core.activePlayback.name === 'html5_video') {
|
|
44191
|
-
|
|
44218
|
+
container.seekEnabled = this.isSeekEnabledForHtml5Playback();
|
|
44219
|
+
// TODO remove seekbar if seek is disabled?
|
|
44192
44220
|
}
|
|
44193
|
-
|
|
44221
|
+
container.left = evalSettings(container.left, setup.left);
|
|
44222
|
+
container.right = evalSettings(container.right, setup.right);
|
|
44223
|
+
container.default = evalSettings(container.default, setup.default);
|
|
44224
|
+
const settingsChanged = !isEqualSettings(this.settings, container);
|
|
44194
44225
|
if (settingsChanged) {
|
|
44195
|
-
this.settings =
|
|
44226
|
+
this.settings = container;
|
|
44196
44227
|
this.hasUpdate = true;
|
|
44197
44228
|
this.render();
|
|
44198
44229
|
}
|
|
@@ -44218,15 +44249,37 @@ class MediaControl extends UICorePlugin {
|
|
|
44218
44249
|
this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');
|
|
44219
44250
|
this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');
|
|
44220
44251
|
this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
|
|
44221
|
-
this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
|
|
44222
44252
|
this.resetIndicators();
|
|
44223
44253
|
this.initializeIcons();
|
|
44224
44254
|
}
|
|
44225
44255
|
/**
|
|
44226
|
-
*
|
|
44256
|
+
* Mount a media control to its configured location
|
|
44227
44257
|
* @param name - The name of the media control element
|
|
44228
44258
|
* @param element - The DOM node/fragment to mount
|
|
44229
|
-
* @
|
|
44259
|
+
* @remarks
|
|
44260
|
+
* Media controls layout is configured via {@link MediaControlSettings}.
|
|
44261
|
+
* A plugin implementing custom elements on the media control dashboard,
|
|
44262
|
+
* should use this method to mount the element to the correct location.
|
|
44263
|
+
* The actual location is defined by the occurence of the element token in the `left`, `right` or `default` section
|
|
44264
|
+
* of the {@link MediaControlSettings}.
|
|
44265
|
+
* @example
|
|
44266
|
+
* ```ts
|
|
44267
|
+
* class MyPlugin extends UICorePlugin {
|
|
44268
|
+
* override render() {
|
|
44269
|
+
* // mount the element where it is configured in the layout
|
|
44270
|
+
* this.core.getPlugin('media_control').slot('my-element', this.$el)
|
|
44271
|
+
* }
|
|
44272
|
+
* }
|
|
44273
|
+
* ...
|
|
44274
|
+
* Player.registerPlugin(MyPlugin)
|
|
44275
|
+
* ...
|
|
44276
|
+
* // Configuration of the media control layout
|
|
44277
|
+
* new Player({
|
|
44278
|
+
* mediaControl: {
|
|
44279
|
+
* left: ['my-element'], // the element will be mounted to the left panel
|
|
44280
|
+
* },
|
|
44281
|
+
* })
|
|
44282
|
+
* ```
|
|
44230
44283
|
*/
|
|
44231
44284
|
slot(name, element) {
|
|
44232
44285
|
const panel = this.getElementLocation(name);
|
|
@@ -44446,7 +44499,6 @@ class MediaControl extends UICorePlugin {
|
|
|
44446
44499
|
return this;
|
|
44447
44500
|
}
|
|
44448
44501
|
const timeout = this.options.hideMediaControlDelay || 2000;
|
|
44449
|
-
trace(`${T$a} render`, { settings: this.settings });
|
|
44450
44502
|
this.$el.html(MediaControl.template({ settings: this.settings }));
|
|
44451
44503
|
// const style = Styler.getStyleFor(mediaControlStyle, { baseUrl: this.options.baseUrl });
|
|
44452
44504
|
// this.$el.append(style[0]);
|
|
@@ -44543,22 +44595,6 @@ class MediaControl extends UICorePlugin {
|
|
|
44543
44595
|
}
|
|
44544
44596
|
return 0;
|
|
44545
44597
|
}
|
|
44546
|
-
/**
|
|
44547
|
-
* Enable the user interaction disabled earlier
|
|
44548
|
-
*/
|
|
44549
|
-
enableControlButton() {
|
|
44550
|
-
this.disabledClickableList.forEach((element) => {
|
|
44551
|
-
element.el.css({ 'pointer-events': element.pointerEventValue });
|
|
44552
|
-
});
|
|
44553
|
-
}
|
|
44554
|
-
/**
|
|
44555
|
-
* Disable the user interaction for the control buttons
|
|
44556
|
-
*/
|
|
44557
|
-
disabledControlButton() {
|
|
44558
|
-
this.disabledClickableList.forEach((element) => {
|
|
44559
|
-
element.el.css({ 'pointer-events': 'none' });
|
|
44560
|
-
});
|
|
44561
|
-
}
|
|
44562
44598
|
// TODO drop
|
|
44563
44599
|
isSeekEnabledForHtml5Playback() {
|
|
44564
44600
|
if (this.core.getPlaybackType() === Playback.LIVE) {
|
|
@@ -44567,13 +44603,14 @@ class MediaControl extends UICorePlugin {
|
|
|
44567
44603
|
return isFinite(this.core.activePlayback.getDuration());
|
|
44568
44604
|
}
|
|
44569
44605
|
getElementLocation(name) {
|
|
44570
|
-
if (this.settings.
|
|
44571
|
-
return this.getRightPanel();
|
|
44572
|
-
}
|
|
44573
|
-
if (this.settings.left?.includes(name)) {
|
|
44606
|
+
if (this.settings.left.includes(name) || this.settings.left.includes('*')) {
|
|
44574
44607
|
return this.getLeftPanel();
|
|
44575
44608
|
}
|
|
44576
|
-
if (this.settings.
|
|
44609
|
+
if (this.settings.right.includes(name) ||
|
|
44610
|
+
this.settings.right.includes('*')) {
|
|
44611
|
+
return this.getRightPanel();
|
|
44612
|
+
}
|
|
44613
|
+
if (this.settings.default.includes(name)) {
|
|
44577
44614
|
return this.getCenterPanel();
|
|
44578
44615
|
}
|
|
44579
44616
|
return null;
|
|
@@ -44591,7 +44628,8 @@ MediaControl.extend = function (properties) {
|
|
|
44591
44628
|
return extend(MediaControl, properties);
|
|
44592
44629
|
};
|
|
44593
44630
|
function serializeSettings(s) {
|
|
44594
|
-
return s.left
|
|
44631
|
+
return s.left
|
|
44632
|
+
.slice()
|
|
44595
44633
|
.sort()
|
|
44596
44634
|
.concat(s.right.slice().sort())
|
|
44597
44635
|
.concat(s.default.slice().sort())
|
|
@@ -44606,6 +44644,25 @@ function mountTo(parent, element) {
|
|
|
44606
44644
|
parent.append(element);
|
|
44607
44645
|
}
|
|
44608
44646
|
}
|
|
44647
|
+
function isStandardMediaControl(name) {
|
|
44648
|
+
return STANDARD_MEDIA_CONTROL_ELEMENTS.includes(name);
|
|
44649
|
+
}
|
|
44650
|
+
function evalSettings(container, setup) {
|
|
44651
|
+
return setup.filter((item) => {
|
|
44652
|
+
if (isStandardMediaControl(item)) {
|
|
44653
|
+
return container.includes(item);
|
|
44654
|
+
}
|
|
44655
|
+
return true;
|
|
44656
|
+
});
|
|
44657
|
+
}
|
|
44658
|
+
function mergeElements(a, b) {
|
|
44659
|
+
return b.reduce((acc, item) => {
|
|
44660
|
+
if (!acc.includes(item)) {
|
|
44661
|
+
acc.push(item);
|
|
44662
|
+
}
|
|
44663
|
+
return acc;
|
|
44664
|
+
}, a);
|
|
44665
|
+
}
|
|
44609
44666
|
|
|
44610
44667
|
const VERSION$6 = '2.22.4';
|
|
44611
44668
|
/**
|
|
@@ -47973,7 +48030,7 @@ class ClickToPause extends ContainerPlugin {
|
|
|
47973
48030
|
}
|
|
47974
48031
|
}
|
|
47975
48032
|
|
|
47976
|
-
insertStyle("@charset \"UTF-8\";\n.
|
|
48033
|
+
insertStyle("@charset \"UTF-8\";\n.gplayer-mc-clips {\n display: flex;\n gap: 6px;\n}\n.gplayer-mc-clips .gplayer-mc-clips-text {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n display: inline-block;\n text-overflow: ellipsis;\n color: white;\n cursor: default;\n line-height: var(--bottom-panel);\n position: relative;\n max-width: 150px;\n}\n.gplayer-mc-clips .gplayer-mc-clips-text::before {\n content: \"•\";\n padding-right: 6px;\n}\n.gplayer-mc-clips .gplayer-mc-clips-text.compact {\n max-width: 100px;\n}");
|
|
47977
48034
|
|
|
47978
48035
|
function parseClips(text) {
|
|
47979
48036
|
const clipsArr = text
|
|
@@ -48011,10 +48068,11 @@ function buildSvg(clips, duration, barWidth) {
|
|
|
48011
48068
|
return svg;
|
|
48012
48069
|
}
|
|
48013
48070
|
|
|
48014
|
-
const clipsHTML = "<div class=\"
|
|
48071
|
+
const clipsHTML = "<div class=\"gplayer-mc-clips-text\" id=\"gplayer-mc-clips-text\"></div>";
|
|
48015
48072
|
|
|
48016
48073
|
const VERSION$4 = '2.22.16';
|
|
48017
48074
|
const CLAPPR_VERSION = '0.11.4';
|
|
48075
|
+
const COMPACT_WIDTH = 495;
|
|
48018
48076
|
/**
|
|
48019
48077
|
* `PLUGIN` that allows marking up the timeline of the video
|
|
48020
48078
|
* @beta
|
|
@@ -48044,7 +48102,7 @@ class Clips extends UICorePlugin {
|
|
|
48044
48102
|
*/
|
|
48045
48103
|
get attributes() {
|
|
48046
48104
|
return {
|
|
48047
|
-
class: 'media-control-clips',
|
|
48105
|
+
class: 'media-control-clips gplayer-mc-clips',
|
|
48048
48106
|
};
|
|
48049
48107
|
}
|
|
48050
48108
|
get version() {
|
|
@@ -48108,6 +48166,7 @@ class Clips extends UICorePlugin {
|
|
|
48108
48166
|
}
|
|
48109
48167
|
onContainerChanged() {
|
|
48110
48168
|
// TODO figure out the conditions of changing the container (without destroying the previous one)
|
|
48169
|
+
// probably it is the case with the MultiCamera plugin
|
|
48111
48170
|
if (this.oldContainer) {
|
|
48112
48171
|
this.stopListening(this.oldContainer, Events$1.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
48113
48172
|
}
|
|
@@ -48117,12 +48176,24 @@ class Clips extends UICorePlugin {
|
|
|
48117
48176
|
this.svgMask = null;
|
|
48118
48177
|
}
|
|
48119
48178
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
48179
|
+
this.toggleCompact();
|
|
48120
48180
|
}
|
|
48121
48181
|
playerResize() {
|
|
48122
48182
|
const duration = this.core.activeContainer.getDuration();
|
|
48183
|
+
// TODO check
|
|
48123
48184
|
if (duration) {
|
|
48124
48185
|
this.makeSvg(duration);
|
|
48125
48186
|
}
|
|
48187
|
+
this.toggleCompact();
|
|
48188
|
+
}
|
|
48189
|
+
toggleCompact() {
|
|
48190
|
+
const elText = this.$el.find('#gplayer-mc-clips-text');
|
|
48191
|
+
if (this.core.activeContainer.el.clientWidth <= COMPACT_WIDTH) {
|
|
48192
|
+
elText.addClass('compact');
|
|
48193
|
+
}
|
|
48194
|
+
else {
|
|
48195
|
+
elText.removeClass('compact');
|
|
48196
|
+
}
|
|
48126
48197
|
}
|
|
48127
48198
|
onTimeUpdate(event) {
|
|
48128
48199
|
if (!this.svgMask) {
|
|
@@ -48160,7 +48231,7 @@ class Clips extends UICorePlugin {
|
|
|
48160
48231
|
}
|
|
48161
48232
|
setClipText(text) {
|
|
48162
48233
|
if (text) {
|
|
48163
|
-
this.$el.show().find('#clips-text').text(text);
|
|
48234
|
+
this.$el.show().find('#gplayer-mc-clips-text').text(text);
|
|
48164
48235
|
}
|
|
48165
48236
|
else {
|
|
48166
48237
|
this.$el.hide();
|
|
@@ -48381,7 +48452,7 @@ class DvrControls extends UICorePlugin {
|
|
|
48381
48452
|
// TODO -> to MediaControl (auto hide)
|
|
48382
48453
|
mediaControl.toggleElement('duration', false);
|
|
48383
48454
|
mediaControl.toggleElement('position', false);
|
|
48384
|
-
mediaControl.
|
|
48455
|
+
mediaControl.slot('dvr', this.$el); // TODO use independent mount point
|
|
48385
48456
|
}
|
|
48386
48457
|
onDvrStateChanged(dvrInUse) {
|
|
48387
48458
|
this.toggleState(dvrInUse);
|