@gcorevideo/player 2.25.6 → 2.25.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/audio-tracks/template.ejs +5 -4
- package/assets/bottom-gear/gear-sub-menu.scss +4 -9
- package/assets/bottom-gear/gear.scss +1 -2
- package/assets/media-control/container.scss +0 -13
- package/assets/media-control/media-control.scss +110 -8
- package/assets/media-control/width270.scss +3 -9
- package/assets/media-control/width370.scss +6 -40
- package/assets/multi-camera/style.scss +0 -5
- package/assets/picture-in-picture/style.scss +1 -2
- package/assets/subtitles/combobox.ejs +27 -6
- package/assets/subtitles/string.ejs +1 -1
- package/assets/subtitles/style.scss +16 -69
- package/dist/core.js +1 -1
- package/dist/index.css +1019 -1117
- package/dist/index.embed.js +180 -123
- package/dist/index.js +161 -107
- package/lib/plugins/audio-selector/AudioTracks.d.ts +4 -3
- package/lib/plugins/audio-selector/AudioTracks.d.ts.map +1 -1
- package/lib/plugins/audio-selector/AudioTracks.js +41 -23
- package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -1
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +3 -4
- package/lib/plugins/media-control/MediaControl.d.ts +4 -0
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +8 -1
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +7 -4
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +64 -34
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +2 -0
- package/package.json +1 -1
- package/src/plugins/audio-selector/AudioTracks.ts +53 -29
- package/src/plugins/audio-selector/__tests__/AudioTracks.test.ts +60 -45
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioSelector.test.ts.snap +24 -24
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioTracks.test.ts.snap +21 -18
- package/src/plugins/bottom-gear/BottomGear.ts +3 -4
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
- package/src/plugins/media-control/MediaControl.ts +11 -1
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +6 -6
- package/src/plugins/subtitles/ClosedCaptions.ts +66 -35
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +220 -35
- package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +8 -19
- package/src/testUtils.ts +2 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/assets/audio-tracks/style.scss +0 -111
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,
|
|
@@ -43134,9 +43134,7 @@ function insertStyle(css) {
|
|
|
43134
43134
|
|
|
43135
43135
|
insertStyle("@import \"https://fonts.googleapis.com/css?family=Roboto\";\n:root {\n --theme-background-color: rgb(0 0 0 / 70%);\n --theme-text-color: rgb(255 255 255 / 100%);\n --theme-foreground-color: rgb(201 201 201 / 100%);\n --theme-hover-color: rgb(255 255 255 / 100%);\n}\n\n.gcore-skin-bg-color {\n background-color: var(--theme-background-color) !important;\n}\n\n.gcore-skin-text-color {\n color: var(--theme-text-color) !important;\n}\n\n.gcore-skin-text-color svg {\n fill: var(--theme-text-color) !important;\n}\n\n.gcore-skin-text-color svg path {\n fill: var(--theme-text-color) !important;\n}\n\n.gcore-skin-border-textarea-color {\n border-color: var(--theme-text-color) !important;\n}\n\n.gcore-skin-button-color {\n color: var(--theme-foreground-color) !important;\n}\n.gcore-skin-button-color svg {\n fill: var(--theme-foreground-color) !important;\n}\n.gcore-skin-button-color svg path {\n fill: var(--theme-foreground-color) !important;\n}\n.gcore-skin-button-color svg path.icon-hover {\n fill: var(--theme-foreground-color) !important;\n}\n.gcore-skin-button-color[data-fullscreen] svg {\n stroke: var(--theme-foreground-color) !important;\n}\n.gcore-skin-button-color[data-fullscreen] svg path {\n stroke: var(--theme-foreground-color) !important;\n}\n\n.gcore-skin-main-color {\n background-color: var(--theme-foreground-color);\n}\n\n.gcore-skin-border-color {\n border-color: var(--theme-foreground-color) !important;\n}\n\n.gcore-skin-button-color:hover {\n color: var(--theme-hover-color) !important;\n}\n\n.gcore-skin-button-color:hover svg {\n fill: var(--theme-hover-color) !important;\n}\n\n.gcore-skin-button-color:hover svg path {\n fill: var(--theme-hover-color) !important;\n}\n\n.gcore-skin-border-color:hover {\n border-color: var(--theme-hover-color) !important;\n}\n\n.gcore-skin-button-with-bg-color:hover svg path.icon-hover {\n fill: var(--theme-hover-color) !important;\n}\n\n.gcore-skin-active {\n color: var(--theme-hover-color) !important;\n}\n\n.gcore-skin-active svg {\n fill: var(--theme-hover-color) !important;\n}\n\n.gcore-skin-active svg path {\n fill: var(--theme-hover-color) !important;\n}\n\n* {\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n user-select: none;\n}\n\n.player-poster {\n background-size: contain !important;\n}\n\n.spinner-three-bounce > .gcore-skin-main-color {\n box-shadow: 4px 4px 9px 1px rgba(36, 61, 81, 0.51);\n}\n\n.gplayer-lite-btn {\n cursor: pointer;\n border: none;\n margin: 0;\n padding: 0;\n width: auto;\n overflow: visible;\n background: transparent;\n /* inherit font & color from ancestor */\n color: inherit;\n font: inherit;\n /* Normalize `line-height`. Cannot be changed from `normal` in Firefox 4+. */\n line-height: normal;\n /* Corrects font smoothing for webkit */\n -webkit-font-smoothing: inherit;\n -moz-osx-font-smoothing: inherit;\n /* Corrects inability to style clickable `input` types in iOS */\n appearance: none;\n /* Remove excess padding and border in Firefox 4+ */\n}\n.gplayer-lite-btn::-moz-focus-inner {\n border: 0;\n padding: 0;\n}");
|
|
43136
43136
|
|
|
43137
|
-
const pluginHtml$4 = "<button
|
|
43138
|
-
|
|
43139
|
-
insertStyle("*,\n:focus,\n:visited {\n outline: none !important;\n}\n\n.media-control-audiotracks {\n position: relative;\n}\n.media-control-audiotracks button {\n background-color: transparent;\n color: #fff;\n -webkit-font-smoothing: antialiased;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n padding: 0;\n}\n.media-control-audiotracks button .audio-text {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 100px;\n background-color: transparent;\n -webkit-font-smoothing: antialiased;\n border: none;\n cursor: pointer;\n}\n.media-control-audiotracks button:hover {\n color: white;\n}\n.media-control-audiotracks button.changing {\n animation: pulse 0.5s infinite alternate;\n}\n.media-control-audiotracks button span.audio-arrow {\n width: 9px;\n height: 6px;\n margin-left: 5px;\n}\n.media-control-audiotracks .menu {\n max-width: 114px;\n list-style-type: none;\n position: absolute;\n background-color: rgba(74, 74, 74, 0.6);\n border: none;\n min-width: 60px;\n border-radius: 4px;\n bottom: 40px;\n right: -2px;\n}\n.media-control-audiotracks .menu.hidden {\n display: none;\n}\n.media-control-audiotracks li {\n font-size: var(--font-size-media-controls-dropdown);\n text-align: right;\n height: 30px;\n}\n.media-control-audiotracks li[data-title] {\n background-color: #c3c2c2;\n padding: 5px;\n}\n.media-control-audiotracks li a {\n display: block;\n text-decoration: none;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n height: 30px;\n padding: 5px 10px;\n color: #fffffe;\n}\n.media-control-audiotracks li a:hover {\n text-decoration: none;\n background-color: rgba(0, 0, 0, 0.4);\n color: white;\n}\n.media-control-audiotracks li.current a {\n color: #f00;\n}\n.media-control-audiotracks li:first-child a {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.media-control-audiotracks li:last-child a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}");
|
|
43137
|
+
const pluginHtml$4 = "<button class='gcore-skin-button-color media-control-dd' id=\"gplayer-audiotracks-button\" aria-haspopup=\"menu\" aria-expanded=\"false\">\n <span class=\"media-control-dd__text\" id=\"gplayer-audiotracks-button-text\"><%= title %></span>\n <span class=\"media-control-dd__arrow\"><%= icon %></span>\n</button>\n<ul class=\"gcore-skin-bg-color menu media-control-dd__popup\" id=\"gplayer-audiotracks-menu\" role=\"menu\">\n <% for (const track of tracks) { %>\n <li>\n <a href=\"#\" class=\"gcore-skin-text-color\" data-item=\"<%= track.id %>\" role=\"menuitemradio\" aria-checked=\"<%= track.id === current %>\">\n <%= track.label %>\n </a>\n </li>\n <% }; %>\n</ul>\n";
|
|
43140
43138
|
|
|
43141
43139
|
const audioArrow = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"9px\" height=\"6px\" viewBox=\"0 0 9 6\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Generator: Sketch 49 (51002) - http://www.bohemiancoding.com/sketch -->\n <title>quality-arrow</title>\n <desc>Created with Sketch.</desc>\n <defs></defs>\n <g id=\"quality-arrow\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path\n d=\"M5.07079194,5.78553848 C4.91457318,5.94277844 4.70551573,6.00941824 4.50028717,5.99893557 C4.2950586,6.00941824 4.08676693,5.94277844 3.92978239,5.78553848 L0.221118462,1.2997069 C-0.0737061539,1.00469478 -0.0737061539,0.526236029 0.221118462,0.231972666 C0.515177299,-0.0630394586 1.23500883,0.00734414472 1.64852907,0.00734414472 L7.77475484,0.00734414472 C8.21201421,0.00734414472 8.48539703,-0.0630394586 8.77945587,0.231972666 C9.07351471,0.526236029 9.07351471,1.00469478 8.77945587,1.2997069 L5.07079194,5.78553848 Z\"\n fill=\"#FFFFFE\"></path>\n </g>\n</svg>\n";
|
|
43142
43140
|
|
|
@@ -43398,7 +43396,7 @@ const FullscreenIOS = {
|
|
|
43398
43396
|
},
|
|
43399
43397
|
};
|
|
43400
43398
|
|
|
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.w270 .media-control-quality,\n.media-control-skin-1.w270 .media-control-audiotracks {\n display: none;\n}\n.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.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.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.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.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.w370 .media-control-cc {\n width: 28px;\n}\n.media-control-skin-1.w370 .media-control-cc svg {\n height: 17px;\n}\n.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.w370 .share_plugin[data-share] .share-container .share-container-header {\n border: none;\n}\n.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.w370 .media-control-quality,\n.media-control-skin-1.w370 .media-control-audiotracks {\n display: block;\n}\n.media-control-skin-1.w370 .media-control-audiotracks[data-audiotracks] {\n margin-top: 3px;\n margin-right: 10px;\n}\n.media-control-skin-1.w370 .media-control-audiotracks[data-audiotracks] ul {\n bottom: 30px;\n width: 50px;\n}\n.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.w370 .media-control-audiotracks[data-audiotracks] ul li a {\n height: 23px;\n padding: 2px 5px;\n}\n.media-control-skin-1.w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] .quality-text,\n.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.w370 .media-control-audiotracks[data-audiotracks] button[data-audiotracks-button] span.quality-arrow,\n.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.w370 .media-control-multicamera .multicamera {\n margin-top: 0;\n margin-right: 10px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button svg {\n height: 17px;\n margin: 0;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] {\n padding-left: 10px;\n padding-right: 12px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator {\n line-height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator[data-position], .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.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.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.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.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.w370 .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n height: 33px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] button.media-control-button svg {\n height: 17px;\n}\n.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.w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n max-width: 50px;\n}\n.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.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.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.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n display: none;\n}\n.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.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-button,\n.media-control-skin-1.w370 .media-control-layer[data-controls] .gplayer-mc-panel-item {\n height: 32px;\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 --gplayer-mc-text-color: #fff;\n --gplayer-mc-popup-border-color: rgba(255, 255, 255, 0.1);\n}\n\n.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.dragging {\n pointer-events: auto;\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1.dragging * {\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1 .media-control-icon {\n line-height: 0;\n letter-spacing: 0;\n speak: none;\n color: var(--gplayer-mc-text-color);\n vertical-align: middle;\n text-align: left;\n transition: all 0.1s ease;\n}\n.media-control-skin-1 .media-control-icon:hover {\n color: white;\n}\n.media-control-skin-1.media-control-hide .media-control-background[data-background] {\n opacity: 0;\n}\n.media-control-skin-1.media-control-hide .media-control-layer[data-controls] {\n bottom: -50px;\n}\n.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 .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 .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 .media-control-button,\n.media-control-skin-1 .media-control-indicator,\n.media-control-skin-1 .gplayer-mc-panel-item {\n order: 50;\n}\n.media-control-skin-1 [data-playpause],\n.media-control-skin-1 [data-playstop] {\n order: 1;\n}\n.media-control-skin-1 [data-volume] {\n order: 2;\n}\n.media-control-skin-1 [data-position] {\n order: 3;\n}\n.media-control-skin-1 [data-duration] {\n order: 3;\n}\n.media-control-skin-1 .media-control-center-panel {\n height: 100%;\n text-align: center;\n line-height: var(--bottom-panel);\n}\n.media-control-skin-1 .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 .media-control-right-panel {\n gap: 0.5rem;\n overflow: hidden;\n }\n}\n.media-control-skin-1 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 button.media-control-button svg {\n height: 20px;\n}\n.media-control-skin-1 button.media-control-button svg path {\n fill: white;\n}\n.media-control-skin-1 button.media-control-button:focus {\n outline: none;\n}\n.media-control-skin-1 button.media-control-button[data-play] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-pause] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-stop] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 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 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 .media-control-indicator[data-position], .media-control-skin-1 .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 .media-control-indicator[data-position] {\n margin: 1px 0 0 7px;\n}\n.media-control-skin-1 .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 .media-control-indicator[data-duration]::before {\n content: \"|\";\n margin-right: 7px;\n}\n.media-control-skin-1 .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 .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 .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 .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 .bar-container[data-seekbar].seek-disabled {\n cursor: default;\n display: none;\n}\n.media-control-skin-1 .bar-container[data-seekbar].seek-disabled + .bar-scrubber[data-seekbar] {\n cursor: default;\n display: none;\n}\n.media-control-skin-1 .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 .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 .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 .drawer-container[data-volume] .drawer-icon-container[data-volume] {\n bottom: 0;\n}\n.media-control-skin-1 .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 .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 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg path {\n fill: white;\n}\n.media-control-skin-1 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .seek-time .seek-time__pos {\n padding-left: 8px;\n padding-right: 8px;\n}\n\n@keyframes pulse {\n 0% {\n color: #fff;\n }\n 50% {\n color: #ff0101;\n }\n 100% {\n color: #B80000;\n }\n}");
|
|
43399
|
+
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 .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.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 margin: 0;\n top: -40px;\n padding: 0;\n margin-left: -32px;\n margin-top: -3px;\n width: 80px;\n}\n.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.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.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.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.media-control-skin-1.w270 .media-control-dd__popup {\n max-width: 114px;\n}\n\n.media-control-skin-1.w370 .media-control-cc {\n width: 28px;\n}\n.media-control-skin-1.w370 .media-control-cc svg {\n height: 17px;\n}\n.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.w370 .share_plugin[data-share] .share-container .share-container-header {\n border: none;\n}\n.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.w370 .media-control-quality {\n display: block;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera {\n margin-top: 0;\n margin-right: 10px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button svg {\n height: 17px;\n margin: 0;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] {\n padding-left: 10px;\n padding-right: 12px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator {\n line-height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator[data-position], .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.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.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.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.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.w370 .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n height: 33px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] button.media-control-button svg {\n height: 17px;\n}\n.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.w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n max-width: 50px;\n}\n.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.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.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.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n display: none;\n}\n.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.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-button,\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-item {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-dd__popup {\n max-width: 150px;\n}\n\n:root {\n --font-size-media-controls: 14px;\n --font-size-media-controls-dropdown: 16px;\n --gplayer-mc-font-size-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 --gplayer-mc-text-color: #fff;\n --gplayer-mc-text-dim-color: #fffffe;\n --gplayer-mc-popup-border-color: rgb(255 255 255 / 10%);\n --gplayer-mc-popup-bg: rgb(74 74 74 / 60%);\n}\n\n.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.dragging {\n pointer-events: auto;\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1.dragging * {\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1 .media-control-icon {\n line-height: 0;\n letter-spacing: 0;\n speak: none;\n color: var(--gplayer-mc-text-color);\n vertical-align: middle;\n text-align: left;\n transition: all 0.1s ease;\n}\n.media-control-skin-1 .media-control-icon:hover {\n color: white;\n}\n.media-control-skin-1.media-control-hide .media-control-background[data-background] {\n opacity: 0;\n}\n.media-control-skin-1.media-control-hide .media-control-layer[data-controls] {\n bottom: -50px;\n}\n.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 .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 .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 .media-control-button,\n.media-control-skin-1 .media-control-indicator,\n.media-control-skin-1 .media-control-item {\n order: 50;\n}\n.media-control-skin-1 .media-control-item {\n display: flex;\n align-items: center;\n}\n.media-control-skin-1 [data-playpause],\n.media-control-skin-1 [data-playstop] {\n order: 1;\n}\n.media-control-skin-1 [data-volume] {\n order: 2;\n}\n.media-control-skin-1 [data-position] {\n order: 3;\n}\n.media-control-skin-1 [data-duration] {\n order: 3;\n}\n.media-control-skin-1 .media-control-center-panel {\n height: 100%;\n text-align: center;\n line-height: var(--bottom-panel);\n}\n.media-control-skin-1 .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 .media-control-right-panel {\n gap: 0.5rem;\n }\n}\n.media-control-skin-1 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 button.media-control-button svg {\n height: 20px;\n}\n.media-control-skin-1 button.media-control-button svg path {\n fill: white;\n}\n.media-control-skin-1 button.media-control-button:focus {\n outline: none;\n}\n.media-control-skin-1 button.media-control-button[data-play] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-pause] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-stop] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 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 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 .media-control-indicator[data-position], .media-control-skin-1 .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 .media-control-indicator[data-position] {\n margin: 1px 0 0 7px;\n}\n.media-control-skin-1 .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 .media-control-indicator[data-duration]::before {\n content: \"|\";\n margin-right: 7px;\n}\n.media-control-skin-1 .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 .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 .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 .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 .bar-container[data-seekbar].seek-disabled {\n cursor: default;\n display: none;\n}\n.media-control-skin-1 .bar-container[data-seekbar].seek-disabled + .bar-scrubber[data-seekbar] {\n cursor: default;\n display: none;\n}\n.media-control-skin-1 .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 .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 .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 .drawer-container[data-volume] .drawer-icon-container[data-volume] {\n bottom: 0;\n}\n.media-control-skin-1 .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 .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 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg path {\n fill: white;\n}\n.media-control-skin-1 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:hover {\n transform: scaleY(1.5);\n}\n.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 .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 .seek-time .seek-time__pos {\n padding-left: 8px;\n padding-right: 8px;\n}\n.media-control-skin-1 .media-control-dd {\n display: flex;\n height: 32px;\n line-height: 32px;\n align-items: baseline;\n gap: 4px;\n vertical-align: baseline;\n padding: 0;\n background-color: transparent;\n color: var(--gplayer-mc-text-color);\n -webkit-font-smoothing: antialiased;\n border: none;\n cursor: pointer;\n}\n.media-control-skin-1 .media-control-dd__text {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 100px;\n}\n.media-control-skin-1 .media-control-dd.changing {\n animation: pulse 0.5s infinite alternate;\n}\n.media-control-skin-1 .media-control-dd svg {\n fill: var(--gplayer-mc-text-color);\n}\n.media-control-skin-1 .media-control-dd__arrow {\n width: 9px;\n height: 6px;\n}\n.media-control-skin-1 .media-control-dd__wrap {\n position: relative;\n}\n.media-control-skin-1 .media-control-dd__popup {\n max-width: 200px;\n list-style-type: none;\n position: absolute;\n box-shadow: 0 0 1px 1px var(--gplayer-mc-popup-border-color);\n border: none;\n min-width: 60px;\n border-radius: 4px;\n bottom: 40px;\n right: -2px;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 5px 0;\n}\n.media-control-skin-1 .media-control-dd__popup li {\n font-size: var(--gplayer-mc-font-size-dropdown);\n text-align: right;\n height: 30px;\n}\n.media-control-skin-1 .media-control-dd__popup li a {\n display: block;\n text-decoration: none;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n padding: 5px 10px;\n line-height: 20px;\n color: #fffffe;\n}\n.media-control-skin-1 .media-control-dd__popup li a:hover {\n text-decoration: none;\n background-color: rgba(0, 0, 0, 0.4);\n color: var(--gplayer-mc-text-color);\n}\n.media-control-skin-1 .media-control-dd__popup li.current a {\n color: #f00;\n}\n.media-control-skin-1 .media-control-dd__popup li:first-child a {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.media-control-skin-1 .media-control-dd__popup li:last-child a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n\n@keyframes pulse {\n 0% {\n color: #fff;\n }\n 50% {\n color: #ff0101;\n }\n 100% {\n color: #B80000;\n }\n}");
|
|
43402
43400
|
|
|
43403
43401
|
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
43402
|
|
|
@@ -43431,6 +43429,7 @@ const STANDARD_MEDIA_CONTROL_ELEMENTS = [
|
|
|
43431
43429
|
'seekbar',
|
|
43432
43430
|
'volume',
|
|
43433
43431
|
];
|
|
43432
|
+
const MENU_VMARGIN = 12;
|
|
43434
43433
|
// TODO export
|
|
43435
43434
|
const DEFAULT_SETTINGS = {
|
|
43436
43435
|
default: ['seekbar'],
|
|
@@ -43754,6 +43753,12 @@ class MediaControl extends UICorePlugin {
|
|
|
43754
43753
|
getAvailableHeight() {
|
|
43755
43754
|
return (this.core.$el.height() - this.$el.find('.media-control-layer').height());
|
|
43756
43755
|
}
|
|
43756
|
+
/**
|
|
43757
|
+
* @returns Vertical space available to render a popup menu
|
|
43758
|
+
*/
|
|
43759
|
+
getAvailablePopupHeight() {
|
|
43760
|
+
return this.getAvailableHeight() - MENU_VMARGIN * 2;
|
|
43761
|
+
}
|
|
43757
43762
|
/**
|
|
43758
43763
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
43759
43764
|
*/
|
|
@@ -44285,7 +44290,7 @@ class MediaControl extends UICorePlugin {
|
|
|
44285
44290
|
const panel = this.getElementLocation(name);
|
|
44286
44291
|
if (panel) {
|
|
44287
44292
|
element.attr(`data-${name}`, '');
|
|
44288
|
-
element.addClass('
|
|
44293
|
+
element.addClass('media-control-item');
|
|
44289
44294
|
mountTo(panel, element);
|
|
44290
44295
|
}
|
|
44291
44296
|
}
|
|
@@ -44666,6 +44671,7 @@ function mergeElements(a, b) {
|
|
|
44666
44671
|
}
|
|
44667
44672
|
|
|
44668
44673
|
const VERSION$6 = '2.22.4';
|
|
44674
|
+
// const T = 'plugins.audiotracks'
|
|
44669
44675
|
/**
|
|
44670
44676
|
* `PLUGIN` that makes possible to switch audio tracks via the media control UI.
|
|
44671
44677
|
* @beta
|
|
@@ -44678,6 +44684,7 @@ const VERSION$6 = '2.22.4';
|
|
|
44678
44684
|
*/
|
|
44679
44685
|
class AudioTracks extends UICorePlugin {
|
|
44680
44686
|
currentTrack = null;
|
|
44687
|
+
open = false;
|
|
44681
44688
|
tracks = [];
|
|
44682
44689
|
/**
|
|
44683
44690
|
* @internal
|
|
@@ -44703,7 +44710,7 @@ class AudioTracks extends UICorePlugin {
|
|
|
44703
44710
|
*/
|
|
44704
44711
|
get attributes() {
|
|
44705
44712
|
return {
|
|
44706
|
-
class: 'media-control-audiotracks',
|
|
44713
|
+
class: 'media-control-audiotracks media-control-dd__wrap',
|
|
44707
44714
|
};
|
|
44708
44715
|
}
|
|
44709
44716
|
/**
|
|
@@ -44711,8 +44718,8 @@ class AudioTracks extends UICorePlugin {
|
|
|
44711
44718
|
*/
|
|
44712
44719
|
get events() {
|
|
44713
44720
|
return {
|
|
44714
|
-
'click [data-
|
|
44715
|
-
'click #audiotracks-button': 'toggleMenu',
|
|
44721
|
+
'click #gplayer-audiotracks-menu [data-item]': 'onTrackSelect',
|
|
44722
|
+
'click #gplayer-audiotracks-button': 'toggleMenu',
|
|
44716
44723
|
};
|
|
44717
44724
|
}
|
|
44718
44725
|
/**
|
|
@@ -44726,8 +44733,9 @@ class AudioTracks extends UICorePlugin {
|
|
|
44726
44733
|
const mediaControl = this.core.getPlugin('media_control');
|
|
44727
44734
|
assert(mediaControl, 'media_control plugin is required');
|
|
44728
44735
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, () => {
|
|
44729
|
-
|
|
44736
|
+
this.mount();
|
|
44730
44737
|
});
|
|
44738
|
+
// TODO when tracks change, re-render and re-attach
|
|
44731
44739
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, this.hideMenu);
|
|
44732
44740
|
this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
|
|
44733
44741
|
if (from !== this.name) {
|
|
@@ -44742,6 +44750,7 @@ class AudioTracks extends UICorePlugin {
|
|
|
44742
44750
|
tracks.find((track) => track.kind === 'main') ?? null; // TODO test
|
|
44743
44751
|
this.tracks = tracks;
|
|
44744
44752
|
this.render();
|
|
44753
|
+
this.mount();
|
|
44745
44754
|
});
|
|
44746
44755
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_AUDIO_CHANGED, (track) => {
|
|
44747
44756
|
this.currentTrack = track;
|
|
@@ -44749,6 +44758,10 @@ class AudioTracks extends UICorePlugin {
|
|
|
44749
44758
|
this.buttonElement().removeClass('changing');
|
|
44750
44759
|
this.updateText();
|
|
44751
44760
|
});
|
|
44761
|
+
// TODO test
|
|
44762
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_CLICK, () => {
|
|
44763
|
+
this.hideMenu();
|
|
44764
|
+
});
|
|
44752
44765
|
}
|
|
44753
44766
|
shouldRender() {
|
|
44754
44767
|
// Render is called from the parent class constructor so tracks aren't available
|
|
@@ -44759,21 +44772,19 @@ class AudioTracks extends UICorePlugin {
|
|
|
44759
44772
|
* @internal
|
|
44760
44773
|
*/
|
|
44761
44774
|
render() {
|
|
44762
|
-
if (!this.shouldRender()) {
|
|
44763
|
-
return this;
|
|
44764
|
-
}
|
|
44765
44775
|
this.$el.html(AudioTracks.template({
|
|
44766
|
-
tracks: this.tracks,
|
|
44776
|
+
tracks: this.tracks ?? [],
|
|
44767
44777
|
title: this.getTitle(),
|
|
44768
44778
|
icon: audioArrow,
|
|
44769
44779
|
current: this.currentTrack?.id,
|
|
44770
44780
|
}));
|
|
44781
|
+
this.$el.find('#gplayer-audiotracks-menu').hide();
|
|
44771
44782
|
this.updateText();
|
|
44772
44783
|
this.highlightCurrentTrack();
|
|
44773
44784
|
return this;
|
|
44774
44785
|
}
|
|
44775
44786
|
onTrackSelect(event) {
|
|
44776
|
-
const id = event.currentTarget?.dataset?.
|
|
44787
|
+
const id = event.currentTarget?.dataset?.item;
|
|
44777
44788
|
if (id) {
|
|
44778
44789
|
this.selectAudioTrack(id);
|
|
44779
44790
|
}
|
|
@@ -44787,24 +44798,34 @@ class AudioTracks extends UICorePlugin {
|
|
|
44787
44798
|
this.updateText();
|
|
44788
44799
|
}
|
|
44789
44800
|
hideMenu() {
|
|
44790
|
-
this
|
|
44791
|
-
this.$el.find('#audiotracks-
|
|
44801
|
+
this.open = false;
|
|
44802
|
+
this.$el.find('#gplayer-audiotracks-menu').hide();
|
|
44803
|
+
this.$el.find('#gplayer-audiotracks-button').attr('aria-expanded', 'false');
|
|
44792
44804
|
}
|
|
44793
44805
|
toggleMenu() {
|
|
44794
|
-
this.
|
|
44795
|
-
this
|
|
44796
|
-
|
|
44797
|
-
|
|
44806
|
+
this.open = !this.open;
|
|
44807
|
+
this.core
|
|
44808
|
+
.getPlugin('media_control')
|
|
44809
|
+
.trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
|
|
44810
|
+
if (this.open) {
|
|
44811
|
+
this.$el.find('#gplayer-audiotracks-menu').show();
|
|
44812
|
+
}
|
|
44813
|
+
else {
|
|
44814
|
+
this.$el.find('#gplayer-audiotracks-menu').hide();
|
|
44815
|
+
}
|
|
44816
|
+
this.$el
|
|
44817
|
+
.find('#gplayer-audiotracks-button')
|
|
44818
|
+
.attr('aria-expanded', this.open);
|
|
44798
44819
|
}
|
|
44799
44820
|
buttonElement() {
|
|
44800
|
-
return this.$('button');
|
|
44821
|
+
return this.$('#gplayer-audiotracks-button');
|
|
44801
44822
|
}
|
|
44802
44823
|
buttonElementText() {
|
|
44803
|
-
return this.$('button
|
|
44824
|
+
return this.$el.find('#gplayer-audiotracks-button-text');
|
|
44804
44825
|
}
|
|
44805
44826
|
trackElement(id) {
|
|
44806
|
-
return this.$('#audiotracks-
|
|
44807
|
-
(id !== undefined ? `[data-
|
|
44827
|
+
return this.$('#gplayer-audiotracks-menu a' +
|
|
44828
|
+
(id !== undefined ? `[data-item="${id}"]` : '')).parent();
|
|
44808
44829
|
}
|
|
44809
44830
|
getTitle() {
|
|
44810
44831
|
if (!this.currentTrack) {
|
|
@@ -44835,13 +44856,18 @@ class AudioTracks extends UICorePlugin {
|
|
|
44835
44856
|
.attr('aria-checked', 'true');
|
|
44836
44857
|
}
|
|
44837
44858
|
}
|
|
44859
|
+
mount() {
|
|
44860
|
+
if (this.shouldRender()) {
|
|
44861
|
+
this.core.getPlugin('media_control')?.slot('audiotracks', this.$el);
|
|
44862
|
+
}
|
|
44863
|
+
}
|
|
44838
44864
|
}
|
|
44839
44865
|
|
|
44840
44866
|
const templateHtml$2 = "<div class=\"big-mute-icon-wrapper\" data-big-mute id=\"gplayer-big-mute-button\">\n <div class=\"big-mute-icon gcore-skin-border-color\" data-big-mute-icon id=\"gplayer-big-mute-icon\"></div>\n</div>\n";
|
|
44841
44867
|
|
|
44842
44868
|
insertStyle(".big-mute-icon-wrapper[data-big-mute] {\n position: absolute;\n z-index: 9998;\n background-color: transparent;\n display: flex;\n justify-content: center;\n width: 100%;\n height: calc(100% - 50px);\n margin: 0 auto;\n opacity: 0.75;\n transition: opacity 0.1s ease;\n pointer-events: auto;\n}\n.big-mute-icon-wrapper[data-big-mute].hide {\n display: none;\n}\n.big-mute-icon-wrapper[data-big-mute]:hover {\n cursor: pointer;\n}\n\n.big-mute-icon[data-big-mute-icon] {\n display: flex;\n align-items: center;\n justify-content: center;\n align-self: center;\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 background: rgba(240, 243, 247, 0.9411764706);\n z-index: 10000;\n}\n.big-mute-icon[data-big-mute-icon] svg {\n margin-left: 5px;\n width: 80px;\n height: 80px;\n}\n.big-mute-icon[data-big-mute-icon] svg path {\n fill: #1f1e1e !important;\n}\n.big-mute-icon[data-big-mute-icon]:hover {\n background: rgba(240, 243, 247, 0.8784313725);\n}\n.big-mute-icon[data-big-mute-icon]:hover svg path {\n fill: #151515 !important;\n}");
|
|
44843
44869
|
|
|
44844
|
-
const T$
|
|
44870
|
+
const T$9 = 'plugins.big_mute_button';
|
|
44845
44871
|
// TODO rewrite as a container plugin
|
|
44846
44872
|
/**
|
|
44847
44873
|
* `PLUGIN` that displays a big mute button over the video when it's being played muted.
|
|
@@ -44904,7 +44930,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
44904
44930
|
if (autoPlay) {
|
|
44905
44931
|
this.autoPlay = true;
|
|
44906
44932
|
}
|
|
44907
|
-
trace(`${T$
|
|
44933
|
+
trace(`${T$9} onPlay`, {
|
|
44908
44934
|
autoPlay: this.autoPlay});
|
|
44909
44935
|
if (this.autoPlay && !wasMuted && volume === 0) {
|
|
44910
44936
|
this.mount();
|
|
@@ -44978,16 +45004,15 @@ class BigMuteButton extends UICorePlugin {
|
|
|
44978
45004
|
|
|
44979
45005
|
const pluginHtml$3 = "<button class=\"media-control-button gplayer-lite-btn gcore-skin-button-color gear-icon\"\n id=\"gear-button\"\n aria-expanded=\"false\"\n aria-controls=\"gear-options\">\n <%= icon %>\n</button>\n<div class=\"gear-wrapper gcore-skin-bg-color\" id=\"gear-options-wrapper\">\n <ul class=\"gear-options-list\" id=\"gear-options\" role=\"menu\"></ul>\n</div>\n";
|
|
44980
45006
|
|
|
44981
|
-
insertStyle(".media-control-skin-1 .
|
|
45007
|
+
insertStyle(".media-control-skin-1 .media-control-item.media-control-gear {\n order: 99;\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-wrapper {\n position: absolute;\n right: 16px;\n bottom: 52px;\n width: 250px;\n min-height: 48px;\n z-index: 9999;\n border-radius: 4px;\n box-shadow: 0 0 1px 1px var(--gplayer-mc-popup-border-color);\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-options-list {\n padding: 8px 0;\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-option {\n margin: 0;\n text-align: left;\n line-height: 22px;\n padding: 5px 14px;\n width: 250px;\n font-size: 12px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-option_icon {\n flex: 24px 0 0;\n height: 24px;\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-option_icon.hidden {\n visibility: hidden;\n display: inline-block;\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-option_label {\n flex: 0 1 100%;\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-option_arrow-right-icon {\n flex: 0 0 14px;\n height: 24px;\n}\n.media-control-skin-1 .media-control-item.media-control-gear .gear-option_value {\n flex: 1 0 auto;\n}");
|
|
44982
45008
|
|
|
44983
|
-
insertStyle("*, :focus, :visited {\n outline: none !important;\n}\n\n.gear-wrapper .go-back {\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n width: 100%;\n text-align: left;\n padding: 12px;\n}\n.gear-wrapper .go-back .arrow-left-icon {\n float: left;\n padding-top: 2px;\n padding-right: 2px;\n}\n.gear-wrapper .go-back .arrow-left-icon svg {\n height: 16px;\n}\n.gear-wrapper ul.gear-sub-menu {\n width: 100%;\n list-style-type: none;\n min-width: 60px;\n border-top: 2px solid rgb(36, 36, 36);\n overflow-y: auto;\n}\n.gear-wrapper ul.gear-sub-menu li {\n font-size: 12px;\n text-align: left;\n}\n.gear-wrapper ul.gear-sub-menu li
|
|
45009
|
+
insertStyle("*, :focus, :visited {\n outline: none !important;\n}\n\n.gear-wrapper .go-back {\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n width: 100%;\n text-align: left;\n padding: 12px;\n}\n.gear-wrapper .go-back .arrow-left-icon {\n float: left;\n padding-top: 2px;\n padding-right: 2px;\n}\n.gear-wrapper .go-back .arrow-left-icon svg {\n height: 16px;\n}\n.gear-wrapper ul.gear-sub-menu {\n width: 100%;\n list-style-type: none;\n min-width: 60px;\n border-top: 2px solid rgb(36, 36, 36);\n overflow-y: auto;\n}\n.gear-wrapper ul.gear-sub-menu li {\n font-size: 12px;\n text-align: left;\n}\n.gear-wrapper ul.gear-sub-menu li a {\n display: block;\n text-decoration: none;\n height: 30px;\n padding: 5px 10px;\n line-height: 22px;\n color: var(--gplayer-mc-text-dim-color);\n}\n.gear-wrapper ul.gear-sub-menu li a:hover {\n color: var(--gplayer-mc-text-color);\n background-color: rgba(0, 0, 0, 0.4);\n}\n.gear-wrapper ul.gear-sub-menu li a:hover a {\n color: var(--gplayer-mc-text-color);\n text-decoration: none;\n}\n.gear-wrapper ul.gear-sub-menu li a .check-icon {\n width: 30px;\n height: 20px;\n float: left;\n display: block;\n}\n.gear-wrapper ul.gear-sub-menu li a .check-icon svg {\n display: none;\n}\n.gear-wrapper ul.gear-sub-menu li.current a .check-icon svg {\n display: inline;\n}");
|
|
44984
45010
|
|
|
44985
45011
|
const gearIcon = "<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_660_1503)\">\n <path\n d=\"M19.14 12.94C19.18 12.64 19.2 12.33 19.2 12C19.2 11.68 19.18 11.36 19.13 11.06L21.16 9.47999C21.34 9.33999 21.39 9.06999 21.28 8.86999L19.36 5.54999C19.24 5.32999 18.99 5.25999 18.77 5.32999L16.38 6.28999C15.88 5.90999 15.35 5.58999 14.76 5.34999L14.4 2.80999C14.36 2.56999 14.16 2.39999 13.92 2.39999H10.08C9.83999 2.39999 9.64999 2.56999 9.60999 2.80999L9.24999 5.34999C8.65999 5.58999 8.11999 5.91999 7.62999 6.28999L5.23999 5.32999C5.01999 5.24999 4.76999 5.32999 4.64999 5.54999L2.73999 8.86999C2.61999 9.07999 2.65999 9.33999 2.85999 9.47999L4.88999 11.06C4.83999 11.36 4.79999 11.69 4.79999 12C4.79999 12.31 4.81999 12.64 4.86999 12.94L2.83999 14.52C2.65999 14.66 2.60999 14.93 2.71999 15.13L4.63999 18.45C4.75999 18.67 5.00999 18.74 5.22999 18.67L7.61999 17.71C8.11999 18.09 8.64999 18.41 9.23999 18.65L9.59999 21.19C9.64999 21.43 9.83999 21.6 10.08 21.6H13.92C14.16 21.6 14.36 21.43 14.39 21.19L14.75 18.65C15.34 18.41 15.88 18.09 16.37 17.71L18.76 18.67C18.98 18.75 19.23 18.67 19.35 18.45L21.27 15.13C21.39 14.91 21.34 14.66 21.15 14.52L19.14 12.94ZM12 15.6C10.02 15.6 8.39999 13.98 8.39999 12C8.39999 10.02 10.02 8.39999 12 8.39999C13.98 8.39999 15.6 10.02 15.6 12C15.6 13.98 13.98 15.6 12 15.6Z\"\n fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_660_1503\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
44986
45012
|
|
|
44987
45013
|
const gearHdIcon = "<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_1567)\">\n <path\n d=\"M19.14 12.94C19.18 12.64 19.2 12.33 19.2 12C19.2 11.68 19.18 11.36 19.13 11.06L21.16 9.47999C21.34 9.33999 21.39 9.06999 21.28 8.86999L19.36 5.54999C19.24 5.32999 18.99 5.25999 18.77 5.32999L16.38 6.28999C15.88 5.90999 15.35 5.58999 14.76 5.34999L14.4 2.80999C14.36 2.56999 14.16 2.39999 13.92 2.39999H10.08C9.83999 2.39999 9.64999 2.56999 9.60999 2.80999L9.24999 5.34999C8.65999 5.58999 8.11999 5.91999 7.62999 6.28999L5.23999 5.32999C5.01999 5.24999 4.76999 5.32999 4.64999 5.54999L2.73999 8.86999C2.61999 9.07999 2.65999 9.33999 2.85999 9.47999L4.88999 11.06C4.83999 11.36 4.79999 11.69 4.79999 12C4.79999 12.31 4.81999 12.64 4.86999 12.94L2.83999 14.52C2.65999 14.66 2.60999 14.93 2.71999 15.13L4.63999 18.45C4.75999 18.67 5.00999 18.74 5.22999 18.67L7.61999 17.71C8.11999 18.09 8.64999 18.41 9.23999 18.65L9.59999 21.19C9.64999 21.43 9.83999 21.6 10.08 21.6H13.92C14.16 21.6 14.36 21.43 14.39 21.19L14.75 18.65C15.34 18.41 15.88 18.09 16.37 17.71L18.76 18.67C18.98 18.75 19.23 18.67 19.35 18.45L21.27 15.13C21.39 14.91 21.34 14.66 21.15 14.52L19.14 12.94ZM12 15.6C10.02 15.6 8.39999 13.98 8.39999 12C8.39999 10.02 10.02 8.39999 12 8.39999C13.98 8.39999 15.6 10.02 15.6 12C15.6 13.98 13.98 15.6 12 15.6Z\"\n fill=\"#C9C9C9\"/>\n <rect x=\"13\" width=\"11\" height=\"7\" rx=\"1\" fill=\"#F6413B\"/>\n <path\n d=\"M14.6962 6V1.63636H15.3546V3.53267H17.53V1.63636H18.1905V6H17.53V4.0973H15.3546V6H14.6962ZM20.562 6H19.1493V1.63636H20.6067C21.0343 1.63636 21.4015 1.72372 21.7083 1.89844C22.0151 2.07173 22.2502 2.32102 22.4135 2.64631C22.5783 2.97017 22.6607 3.35866 22.6607 3.81179C22.6607 4.26634 22.5776 4.65696 22.4114 4.98366C22.2466 5.31037 22.008 5.56179 21.6955 5.73793C21.383 5.91264 21.0051 6 20.562 6ZM19.8077 5.42472H20.5257C20.8581 5.42472 21.1344 5.36222 21.3546 5.23722C21.5748 5.1108 21.7395 4.92827 21.8489 4.68963C21.9583 4.44957 22.013 4.15696 22.013 3.81179C22.013 3.46946 21.9583 3.17898 21.8489 2.94034C21.7409 2.7017 21.5797 2.5206 21.3652 2.39702C21.1507 2.27344 20.8844 2.21165 20.5662 2.21165H19.8077V5.42472Z\"\n fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_28_1567\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
44988
45014
|
|
|
44989
45015
|
const VERSION$5 = '2.19.12';
|
|
44990
|
-
const MENU_VMARGIN = 12;
|
|
44991
45016
|
const MENU_BACKLINK_HEIGHT = 44;
|
|
44992
45017
|
/**
|
|
44993
45018
|
* Events triggered by the plugin
|
|
@@ -45150,7 +45175,7 @@ class BottomGear extends UICorePlugin {
|
|
|
45150
45175
|
.appendTo(this.$el.find('#gear-options-wrapper'));
|
|
45151
45176
|
$item.on('click', (e) => {
|
|
45152
45177
|
e.stopPropagation();
|
|
45153
|
-
this.
|
|
45178
|
+
this.clampPopup($subMenu);
|
|
45154
45179
|
$subMenu.show();
|
|
45155
45180
|
this.$el.find('#gear-options').hide();
|
|
45156
45181
|
});
|
|
@@ -45246,9 +45271,8 @@ class BottomGear extends UICorePlugin {
|
|
|
45246
45271
|
const mediaControl = this.core.getPlugin('media_control');
|
|
45247
45272
|
mediaControl.slot('gear', this.$el);
|
|
45248
45273
|
}
|
|
45249
|
-
|
|
45250
|
-
const availableHeight = this.core.getPlugin('media_control').
|
|
45251
|
-
MENU_VMARGIN * 2;
|
|
45274
|
+
clampPopup($subMenu) {
|
|
45275
|
+
const availableHeight = this.core.getPlugin('media_control').getAvailablePopupHeight();
|
|
45252
45276
|
$subMenu.css('max-height', `${availableHeight}px`);
|
|
45253
45277
|
$subMenu
|
|
45254
45278
|
.find('.gear-sub-menu')
|
|
@@ -48475,7 +48499,7 @@ const templateHtml = "<div class=\"player-error-screen__content\" data-error-scr
|
|
|
48475
48499
|
|
|
48476
48500
|
insertStyle("div.player-error-screen, [data-player] div.player-error-screen {\n color: #CCCACA;\n position: absolute;\n top: 0;\n height: 100%;\n width: 100%;\n background-color: rgba(0, 0, 0, 0.7);\n z-index: 2000;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\ndiv.player-error-screen__content[data-error-screen], [data-player] div.player-error-screen__content[data-error-screen] {\n font-size: 14px;\n color: #CCCACA;\n margin-top: 45px;\n}\ndiv.player-error-screen__title[data-error-screen], [data-player] div.player-error-screen__title[data-error-screen] {\n font-weight: bold;\n line-height: 30px;\n font-size: 18px;\n}\ndiv.player-error-screen__message[data-error-screen], [data-player] div.player-error-screen__message[data-error-screen] {\n width: 90%;\n margin: 0 auto;\n}\ndiv.player-error-screen__code[data-error-screen], [data-player] div.player-error-screen__code[data-error-screen] {\n font-size: 13px;\n margin-top: 15px;\n}\ndiv.player-error-screen__reload, [data-player] div.player-error-screen__reload {\n cursor: pointer;\n width: 30px;\n margin: 15px auto 0;\n}");
|
|
48477
48501
|
|
|
48478
|
-
const T$
|
|
48502
|
+
const T$8 = 'plugins.error_screen';
|
|
48479
48503
|
/**
|
|
48480
48504
|
* `PLUGIN` that displays fatal errors nicely in the overlay on top of the player.
|
|
48481
48505
|
* @public
|
|
@@ -48551,7 +48575,7 @@ class ErrorScreen extends UICorePlugin {
|
|
|
48551
48575
|
}, 0);
|
|
48552
48576
|
}
|
|
48553
48577
|
onActiveContainerChanged() {
|
|
48554
|
-
trace(`${T$
|
|
48578
|
+
trace(`${T$8} onActiveContainerChanged`, {
|
|
48555
48579
|
reloading: this.core.options.reloading,
|
|
48556
48580
|
});
|
|
48557
48581
|
this.err = null;
|
|
@@ -48601,16 +48625,16 @@ class ErrorScreen extends UICorePlugin {
|
|
|
48601
48625
|
|
|
48602
48626
|
insertStyle(".player-logo[data-logo] {\n position: absolute;\n z-index: 2;\n width: 100%;\n height: 100%;\n}\n\n.clappr-logo {\n position: absolute;\n}");
|
|
48603
48627
|
|
|
48604
|
-
insertStyle("*,\n:focus,\n:visited {\n outline: none !important;\n}\n\n.multicamera[data-multicamera] {\n float: right;\n margin-top: 4px;\n position: relative;\n margin-right: 20px;\n width: 20px;\n}\n.multicamera[data-multicamera] button {\n background-color: transparent;\n color: #fff;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n.multicamera[data-multicamera] button svg {\n height: 20px;\n position: relative;\n margin-top: 6px;\n}\n.multicamera[data-multicamera] button:hover {\n color: #c9c9c9;\n}\n.multicamera[data-multicamera] button.changing {\n animation: pulse 0.5s infinite alternate;\n}\n.multicamera[data-multicamera] button span.quality-arrow {\n width: 9px;\n height: 6px;\n margin-top: 11px;\n margin-left: 5px;\n}\n.multicamera[data-multicamera] > ul {\n padding: 6px 0;\n right: -24px;\n width: 245px;\n list-style-type: none;\n position: absolute;\n bottom: 48px;\n border-radius: 4px;\n display: none;\n background-color: rgba(74, 74, 74, 0.9);\n}\n.multicamera[data-multicamera] > ul::after {\n content: \"\";\n position: absolute;\n top: 100%;\n left: 85%;\n margin-left: -10px;\n width: 0;\n height: 0;\n border-top: 10px solid rgba(74, 74, 74, 0.9);\n border-right: 10px solid transparent;\n border-left: 10px solid transparent;\n}\n.multicamera[data-multicamera] li {\n font-size: 10px;\n cursor: pointer;\n}\n.multicamera[data-multicamera] li .multicamera-item {\n display: flex;\n padding: 10px 0;\n justify-content: center;\n position: relative;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] {\n pointer-events: none;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] .multicamera-screenshot {\n opacity: 0.5;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] .multicamera-text {\n opacity: 0.5;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false]:hover {\n background-color: rgba(0, 0, 0, 0);\n}\n.multicamera[data-multicamera] li .multicamera-item:hover, .multicamera[data-multicamera] li .multicamera-item.multicamera-active {\n background-color: rgba(0, 0, 0, 0.3);\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-screenshot {\n width: 80px;\n height: 60px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-screenshot img {\n width: 80px;\n height: 60px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text {\n width: 120px;\n text-align: left;\n margin-left: 15px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-title,\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-description {\n width: 120px;\n height: 20px;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n font-style: normal;\n font-stretch: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #fff;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-description {\n opacity: 0.6;\n}\n.multicamera[data-multicamera] li
|
|
48628
|
+
insertStyle("*,\n:focus,\n:visited {\n outline: none !important;\n}\n\n.multicamera[data-multicamera] {\n float: right;\n margin-top: 4px;\n position: relative;\n margin-right: 20px;\n width: 20px;\n}\n.multicamera[data-multicamera] button {\n background-color: transparent;\n color: #fff;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n.multicamera[data-multicamera] button svg {\n height: 20px;\n position: relative;\n margin-top: 6px;\n}\n.multicamera[data-multicamera] button:hover {\n color: #c9c9c9;\n}\n.multicamera[data-multicamera] button.changing {\n animation: pulse 0.5s infinite alternate;\n}\n.multicamera[data-multicamera] button span.quality-arrow {\n width: 9px;\n height: 6px;\n margin-top: 11px;\n margin-left: 5px;\n}\n.multicamera[data-multicamera] > ul {\n padding: 6px 0;\n right: -24px;\n width: 245px;\n list-style-type: none;\n position: absolute;\n bottom: 48px;\n border-radius: 4px;\n display: none;\n background-color: rgba(74, 74, 74, 0.9);\n}\n.multicamera[data-multicamera] > ul::after {\n content: \"\";\n position: absolute;\n top: 100%;\n left: 85%;\n margin-left: -10px;\n width: 0;\n height: 0;\n border-top: 10px solid rgba(74, 74, 74, 0.9);\n border-right: 10px solid transparent;\n border-left: 10px solid transparent;\n}\n.multicamera[data-multicamera] li {\n font-size: 10px;\n cursor: pointer;\n}\n.multicamera[data-multicamera] li .multicamera-item {\n display: flex;\n padding: 10px 0;\n justify-content: center;\n position: relative;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] {\n pointer-events: none;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] .multicamera-screenshot {\n opacity: 0.5;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] .multicamera-text {\n opacity: 0.5;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false]:hover {\n background-color: rgba(0, 0, 0, 0);\n}\n.multicamera[data-multicamera] li .multicamera-item:hover, .multicamera[data-multicamera] li .multicamera-item.multicamera-active {\n background-color: rgba(0, 0, 0, 0.3);\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-screenshot {\n width: 80px;\n height: 60px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-screenshot img {\n width: 80px;\n height: 60px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text {\n width: 120px;\n text-align: left;\n margin-left: 15px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-title,\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-description {\n width: 120px;\n height: 20px;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n font-style: normal;\n font-stretch: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #fff;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-description {\n opacity: 0.6;\n}\n.multicamera[data-multicamera] li a {\n color: #444;\n padding: 2px 10px;\n display: block;\n text-decoration: none;\n}\n.multicamera[data-multicamera] li a:hover {\n background-color: #555;\n color: white;\n}\n.multicamera[data-multicamera] li a:hover a {\n color: white;\n text-decoration: none;\n}\n.multicamera[data-multicamera] li.current a {\n color: #f00;\n}");
|
|
48605
48629
|
|
|
48606
48630
|
const pipIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M21.05 3.00001C21.302 3.00001 21.5435 3.10003 21.7217 3.27833C21.9 3.45646 22 3.69802 22 3.95003V10.6H20.1V4.90003H4.90001V18.2H10.6V20.1H3.95001C3.69802 20.1 3.45647 20 3.27832 19.8217C3.10002 19.6436 3 19.402 3 19.15V3.95001C3 3.69802 3.10002 3.45647 3.27832 3.27832C3.45644 3.10002 3.69801 3 3.95001 3L21.05 3.00001ZM21.05 12.5C21.302 12.5 21.5435 12.6 21.7217 12.7783C21.9 12.9565 22 13.198 22 13.45V19.15C22 19.402 21.9 19.6436 21.7217 19.8217C21.5436 20 21.302 20.1 21.05 20.1H13.45C13.198 20.1 12.9564 20 12.7783 19.8217C12.6 19.6436 12.5 19.402 12.5 19.15V13.45C12.5 13.198 12.6 12.9565 12.7783 12.7783C12.9564 12.6 13.198 12.5 13.45 12.5H21.05ZM7.47178 6.12823L9.60928 8.26572L11.5501 6.32492V11.5499H6.32509L8.26589 9.60911L6.12839 7.47161L7.47178 6.12823Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
48607
48631
|
|
|
48608
48632
|
const buttonHtml$2 = "<button class=\"gplayer-lite-btn gcore-skin-button-color\">\n <%= pipIcon %>\n</button>\n";
|
|
48609
48633
|
|
|
48610
|
-
insertStyle(".media-control-skin-1 .
|
|
48634
|
+
insertStyle(".media-control-skin-1 .media-control-item.media-control-pip {\n order: 95;\n}\n.media-control-skin-1 .media-control-item.media-control-pip button {\n height: 20px;\n}\n.media-control-skin-1 .media-control-item.media-control-pip button svg {\n height: 20px;\n}");
|
|
48611
48635
|
|
|
48612
48636
|
const VERSION$3 = '0.0.1';
|
|
48613
|
-
const T$
|
|
48637
|
+
const T$7 = `plugins.pip`;
|
|
48614
48638
|
/**
|
|
48615
48639
|
* `PLUGIN` that enables picture in picture mode.
|
|
48616
48640
|
* @beta
|
|
@@ -48693,7 +48717,7 @@ class PictureInPicture extends UICorePlugin {
|
|
|
48693
48717
|
}
|
|
48694
48718
|
}
|
|
48695
48719
|
requestPictureInPicture() {
|
|
48696
|
-
trace(`${T$
|
|
48720
|
+
trace(`${T$7} requestPictureInPicture`, {
|
|
48697
48721
|
videoElement: !!this.videoElement,
|
|
48698
48722
|
});
|
|
48699
48723
|
this.videoElement.requestPictureInPicture();
|
|
@@ -48725,7 +48749,7 @@ const DEFAULT_PLAYBACK_RATES = [
|
|
|
48725
48749
|
{ value: 2.0, label: '2x' },
|
|
48726
48750
|
];
|
|
48727
48751
|
const DEFAULT_PLAYBACK_RATE = 1;
|
|
48728
|
-
const T$
|
|
48752
|
+
const T$6 = 'plugins.playback_rate';
|
|
48729
48753
|
/**
|
|
48730
48754
|
* `PLUGIN` that allows changing the playback speed of the video.
|
|
48731
48755
|
* @beta
|
|
@@ -48832,7 +48856,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
48832
48856
|
this.mount();
|
|
48833
48857
|
}
|
|
48834
48858
|
mount() {
|
|
48835
|
-
trace(`${T$
|
|
48859
|
+
trace(`${T$6} mount`, {
|
|
48836
48860
|
shouldMount: this.shouldMount(),
|
|
48837
48861
|
});
|
|
48838
48862
|
if (!this.shouldMount()) {
|
|
@@ -48849,7 +48873,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
48849
48873
|
})));
|
|
48850
48874
|
}
|
|
48851
48875
|
onMetaDataLoaded() {
|
|
48852
|
-
trace(`${T$
|
|
48876
|
+
trace(`${T$6} onMetaDataLoaded`, {
|
|
48853
48877
|
playbackType: this.core.activePlayback.getPlaybackType(),
|
|
48854
48878
|
dvrEnabled: this.core.activePlayback.dvrEnabled,
|
|
48855
48879
|
});
|
|
@@ -48871,13 +48895,13 @@ class PlaybackRate extends UICorePlugin {
|
|
|
48871
48895
|
this.core.activePlayback?.setPlaybackRate(this.selectedRate);
|
|
48872
48896
|
}
|
|
48873
48897
|
else {
|
|
48874
|
-
trace(`${T$
|
|
48898
|
+
trace(`${T$6} onPlaybackRateChange not steering to the selected rate, it is seemingly a catchup algorithm working`, {
|
|
48875
48899
|
selectedRate: this.selectedRate,
|
|
48876
48900
|
});
|
|
48877
48901
|
}
|
|
48878
48902
|
}
|
|
48879
48903
|
shouldMount() {
|
|
48880
|
-
trace(`${T$
|
|
48904
|
+
trace(`${T$6} shouldMount`, {
|
|
48881
48905
|
playbackType: this.core.activePlayback?.getPlaybackType(),
|
|
48882
48906
|
dvrEnabled: this.core.activePlayback?.dvrEnabled,
|
|
48883
48907
|
});
|
|
@@ -48894,7 +48918,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
48894
48918
|
* @internal
|
|
48895
48919
|
*/
|
|
48896
48920
|
render() {
|
|
48897
|
-
trace(`${T$
|
|
48921
|
+
trace(`${T$6} render`, {
|
|
48898
48922
|
shouldMount: this.shouldMount(),
|
|
48899
48923
|
});
|
|
48900
48924
|
this.$el.html(PlaybackRate.listTemplate({
|
|
@@ -48940,13 +48964,13 @@ class PlaybackRate extends UICorePlugin {
|
|
|
48940
48964
|
}
|
|
48941
48965
|
}
|
|
48942
48966
|
syncRate() {
|
|
48943
|
-
trace(`${T$
|
|
48967
|
+
trace(`${T$6} syncRate`, {
|
|
48944
48968
|
selectedRate: this.selectedRate,
|
|
48945
48969
|
});
|
|
48946
48970
|
this.core.activePlayback?.setPlaybackRate(this.selectedRate);
|
|
48947
48971
|
}
|
|
48948
48972
|
resetPlaybackRate() {
|
|
48949
|
-
trace(`${T$
|
|
48973
|
+
trace(`${T$6} resetPlaybackRate`, {
|
|
48950
48974
|
selectedRate: this.selectedRate,
|
|
48951
48975
|
});
|
|
48952
48976
|
this.core.activePlayback?.setPlaybackRate(DEFAULT_PLAYBACK_RATE);
|
|
@@ -48981,7 +49005,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
48981
49005
|
?.label || `x${rate}`);
|
|
48982
49006
|
}
|
|
48983
49007
|
highlightCurrentRate() {
|
|
48984
|
-
trace(`${T$
|
|
49008
|
+
trace(`${T$6} highlightCurrentRate`, {
|
|
48985
49009
|
selectedRate: this.selectedRate,
|
|
48986
49010
|
});
|
|
48987
49011
|
this.allRateElements().removeClass('current');
|
|
@@ -48992,7 +49016,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
48992
49016
|
.addClass('gcore-skin-active');
|
|
48993
49017
|
}
|
|
48994
49018
|
updateGearOptionLabel() {
|
|
48995
|
-
trace(`${T$
|
|
49019
|
+
trace(`${T$6} updateGearOptionLabel`, {
|
|
48996
49020
|
selectedRate: this.selectedRate,
|
|
48997
49021
|
});
|
|
48998
49022
|
this.mount();
|
|
@@ -49006,7 +49030,7 @@ const posterHTML = "<div class=\"play-wrapper\" id=\"gplayer-poster\">\n <div
|
|
|
49006
49030
|
//Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
49007
49031
|
// Use of this source code is governed by a BSD-style
|
|
49008
49032
|
// license that can be found in the LICENSE file.
|
|
49009
|
-
const T$
|
|
49033
|
+
const T$5 = 'plugins.poster';
|
|
49010
49034
|
/**
|
|
49011
49035
|
* `PLUGIN` that displays a poster image in the background and a big play button on top when playback is stopped
|
|
49012
49036
|
* @beta
|
|
@@ -49110,7 +49134,7 @@ class Poster extends UIContainerPlugin {
|
|
|
49110
49134
|
super.disable();
|
|
49111
49135
|
}
|
|
49112
49136
|
onError(error) {
|
|
49113
|
-
trace(`${T$
|
|
49137
|
+
trace(`${T$5} onError`, {
|
|
49114
49138
|
enabled: this.enabled,
|
|
49115
49139
|
});
|
|
49116
49140
|
if (this.hasFatalError) {
|
|
@@ -49243,7 +49267,7 @@ const hdIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"non
|
|
|
49243
49267
|
|
|
49244
49268
|
insertStyle(".quality-levels li.disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n.quality-levels li.current {\n background-color: #000;\n}");
|
|
49245
49269
|
|
|
49246
|
-
const T$
|
|
49270
|
+
const T$4 = 'plugins.quality_levels';
|
|
49247
49271
|
const VERSION$2 = 'v2.22.5';
|
|
49248
49272
|
/**
|
|
49249
49273
|
* `PLUGIN` that provides a UI to select the desired quality level of the playback.
|
|
@@ -49486,7 +49510,7 @@ class QualityLevels extends UICorePlugin {
|
|
|
49486
49510
|
this.highlightCurrentLevel();
|
|
49487
49511
|
}
|
|
49488
49512
|
highlightCurrentLevel() {
|
|
49489
|
-
trace(`${T$
|
|
49513
|
+
trace(`${T$4} highlightCurrentLevel`, {
|
|
49490
49514
|
selectedLevelId: this.selectedLevelId,
|
|
49491
49515
|
});
|
|
49492
49516
|
this.allLevelElements()
|
|
@@ -49514,7 +49538,7 @@ insertStyle(".seek-time {\n position: absolute;\n white-space: nowrap;\n heig
|
|
|
49514
49538
|
// Use of this source code is governed by a BSD-style
|
|
49515
49539
|
// license that can be found at https://github.com/clappr/clappr-plugins/blob/master/LICENSE
|
|
49516
49540
|
const { formatTime } = Utils;
|
|
49517
|
-
const T$
|
|
49541
|
+
const T$3 = 'plugins.seek_time';
|
|
49518
49542
|
/**
|
|
49519
49543
|
* `PLUGIN` that adds a seek time indicator when the mouse pointer is over the seek bar.
|
|
49520
49544
|
* @beta
|
|
@@ -49573,7 +49597,7 @@ class SeekTime extends UICorePlugin {
|
|
|
49573
49597
|
showTime(event) {
|
|
49574
49598
|
this.hoveringOverSeekBar = true;
|
|
49575
49599
|
this.calculateHoverPosition(event);
|
|
49576
|
-
trace(`${T$
|
|
49600
|
+
trace(`${T$3} showTime`, {
|
|
49577
49601
|
hoverPosition: this.hoverPosition,
|
|
49578
49602
|
});
|
|
49579
49603
|
this.update();
|
|
@@ -49660,7 +49684,7 @@ const pluginHtml$1 = "<div class=\"skip-container\" id=\"mc-skip-container\">\n
|
|
|
49660
49684
|
|
|
49661
49685
|
insertStyle(".container-with-poster-clickable .mc-skip-time {\n height: 0;\n}\n\n.mc-skip-time {\n position: absolute;\n width: 100%;\n height: calc(100% - 50px);\n z-index: 9998;\n background-color: transparent;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n}\n.mc-skip-time .skip-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: space-between;\n}\n.mc-skip-time .skip-container .skip-item {\n flex: 1 0 0px;\n height: 100%;\n}");
|
|
49662
49686
|
|
|
49663
|
-
const T$
|
|
49687
|
+
const T$2 = 'plugins.skip_time';
|
|
49664
49688
|
/**
|
|
49665
49689
|
* `PLUGIN` that allows skipping time by tapping on the left or right side of the video.
|
|
49666
49690
|
* @beta
|
|
@@ -49710,7 +49734,7 @@ class SkipTime extends UICorePlugin {
|
|
|
49710
49734
|
this.position = 'left';
|
|
49711
49735
|
}
|
|
49712
49736
|
handleRewindClicks() {
|
|
49713
|
-
trace(`${T$
|
|
49737
|
+
trace(`${T$2} handleRewindClicks`, {
|
|
49714
49738
|
position: this.position,
|
|
49715
49739
|
});
|
|
49716
49740
|
if (this.core.getPlaybackType() === Playback.LIVE &&
|
|
@@ -49721,7 +49745,7 @@ class SkipTime extends UICorePlugin {
|
|
|
49721
49745
|
this.handleSkip();
|
|
49722
49746
|
}
|
|
49723
49747
|
handleSkip() {
|
|
49724
|
-
trace(`${T$
|
|
49748
|
+
trace(`${T$2} handleSkip`, {
|
|
49725
49749
|
position: this.position,
|
|
49726
49750
|
});
|
|
49727
49751
|
if (Browser.isMobile) {
|
|
@@ -49776,7 +49800,7 @@ insertStyle(".spinner-three-bounce[data-spinner] {\n position: absolute;\n wid
|
|
|
49776
49800
|
// Use of this source code is governed by a BSD-style
|
|
49777
49801
|
// license that can be found in the LICENSE file.
|
|
49778
49802
|
// https://github.com/clappr/clappr-plugins/blob/ffaa9d27005fa5a8a7c243ffc47eb5655b84b371/LICENSE
|
|
49779
|
-
const T$
|
|
49803
|
+
const T$1 = 'plugins.spinner';
|
|
49780
49804
|
/**
|
|
49781
49805
|
* Custom events emitted by the plugin
|
|
49782
49806
|
* @public
|
|
@@ -49849,14 +49873,14 @@ class SpinnerThreeBounce extends UIContainerPlugin {
|
|
|
49849
49873
|
this._hide();
|
|
49850
49874
|
}
|
|
49851
49875
|
onStop() {
|
|
49852
|
-
trace(`${T$
|
|
49876
|
+
trace(`${T$1} onStop`, {
|
|
49853
49877
|
hasFatalError: this.hasFatalError,
|
|
49854
49878
|
});
|
|
49855
49879
|
this._hide();
|
|
49856
49880
|
}
|
|
49857
49881
|
onError(e) {
|
|
49858
49882
|
this.hasFatalError = e.code === PlaybackErrorCode.MediaSourceUnavailable;
|
|
49859
|
-
trace(`${T$
|
|
49883
|
+
trace(`${T$1} onError`, {
|
|
49860
49884
|
hasFatalError: this.hasFatalError,
|
|
49861
49885
|
error: e.code,
|
|
49862
49886
|
});
|
|
@@ -49889,7 +49913,7 @@ class SpinnerThreeBounce extends UIContainerPlugin {
|
|
|
49889
49913
|
}
|
|
49890
49914
|
}
|
|
49891
49915
|
_hide() {
|
|
49892
|
-
trace(`${T$
|
|
49916
|
+
trace(`${T$1} _hide`, {
|
|
49893
49917
|
userShown: this.userShown,
|
|
49894
49918
|
});
|
|
49895
49919
|
if (this.userShown) {
|
|
@@ -49906,7 +49930,7 @@ class SpinnerThreeBounce extends UIContainerPlugin {
|
|
|
49906
49930
|
* @internal
|
|
49907
49931
|
*/
|
|
49908
49932
|
render() {
|
|
49909
|
-
trace(`${T$
|
|
49933
|
+
trace(`${T$1} render`, {
|
|
49910
49934
|
buffering: this.container.buffering,
|
|
49911
49935
|
});
|
|
49912
49936
|
this.$el.html(this.template());
|
|
@@ -49924,7 +49948,7 @@ class SpinnerThreeBounce extends UIContainerPlugin {
|
|
|
49924
49948
|
}
|
|
49925
49949
|
}
|
|
49926
49950
|
|
|
49927
|
-
const T
|
|
49951
|
+
const T = 'plugins.source_controller';
|
|
49928
49952
|
const INITIAL_RETRY_DELAY = 1000;
|
|
49929
49953
|
const MAX_RETRY_DELAY = 5000;
|
|
49930
49954
|
const RETRY_DELAY_BLUR = 500;
|
|
@@ -50070,7 +50094,7 @@ class SourceController extends CorePlugin {
|
|
|
50070
50094
|
this.core.getPlugin('error_screen')?.disable(); // TODO test
|
|
50071
50095
|
}
|
|
50072
50096
|
onActiveContainerChanged() {
|
|
50073
|
-
trace(`${T
|
|
50097
|
+
trace(`${T} onActiveContainerChanged`, {
|
|
50074
50098
|
retrying: this.active,
|
|
50075
50099
|
currentSource: this.sourcesList[this.currentSourceIndex],
|
|
50076
50100
|
});
|
|
@@ -50091,7 +50115,7 @@ class SourceController extends CorePlugin {
|
|
|
50091
50115
|
}
|
|
50092
50116
|
bindContainerEventListeners() {
|
|
50093
50117
|
this.core.activePlayback.on(Events$1.PLAYBACK_ERROR, (error) => {
|
|
50094
|
-
trace(`${T
|
|
50118
|
+
trace(`${T} on PLAYBACK_ERROR`, {
|
|
50095
50119
|
error: {
|
|
50096
50120
|
code: error?.code,
|
|
50097
50121
|
description: error?.description,
|
|
@@ -50115,7 +50139,7 @@ class SourceController extends CorePlugin {
|
|
|
50115
50139
|
}
|
|
50116
50140
|
});
|
|
50117
50141
|
this.core.activePlayback.on(Events$1.PLAYBACK_PLAY, () => {
|
|
50118
|
-
trace(`${T
|
|
50142
|
+
trace(`${T} on PLAYBACK_PLAY`, {
|
|
50119
50143
|
currentSource: this.sourcesList[this.currentSourceIndex],
|
|
50120
50144
|
retrying: this.active,
|
|
50121
50145
|
});
|
|
@@ -50134,7 +50158,7 @@ class SourceController extends CorePlugin {
|
|
|
50134
50158
|
this.sourcesDelay = {};
|
|
50135
50159
|
}
|
|
50136
50160
|
retryPlayback() {
|
|
50137
|
-
trace(`${T
|
|
50161
|
+
trace(`${T} retryPlayback enter`, {
|
|
50138
50162
|
currentSourceIndex: this.currentSourceIndex,
|
|
50139
50163
|
currentSource: this.sourcesList[this.currentSourceIndex],
|
|
50140
50164
|
});
|
|
@@ -50147,7 +50171,7 @@ class SourceController extends CorePlugin {
|
|
|
50147
50171
|
this.switching = false;
|
|
50148
50172
|
this.core.load(nextSource.source, nextSource.mimeType);
|
|
50149
50173
|
setTimeout(() => {
|
|
50150
|
-
trace(`${T
|
|
50174
|
+
trace(`${T} retryPlayback playing`, {
|
|
50151
50175
|
autoPlay: this.autoPlay,
|
|
50152
50176
|
});
|
|
50153
50177
|
this.core.activeContainer.play({
|
|
@@ -50175,19 +50199,18 @@ class SourceController extends CorePlugin {
|
|
|
50175
50199
|
}
|
|
50176
50200
|
}
|
|
50177
50201
|
|
|
50178
|
-
insertStyle(".media-control-skin-1 .media-control-cc button.media-control-button {\n display: flex;\n justify-content: center;\n padding: 0;\n align-items: center;\n vertical-align: top;\n}\n.media-control-skin-1 .media-control-cc button.media-control-button:hover {\n color: white;\n}\n.media-control-skin-1 .media-control-cc ul
|
|
50202
|
+
insertStyle(".media-control-skin-1 .media-control-cc button.media-control-button {\n display: flex;\n justify-content: center;\n padding: 0;\n align-items: center;\n vertical-align: top;\n}\n.media-control-skin-1 .media-control-cc button.media-control-button:hover {\n color: white;\n}\n.media-control-skin-1 .media-control-cc ul li {\n text-align: center;\n}\n.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 .media-control-cc ul li a:hover {\n background-color: rgba(0, 0, 0, 0.4);\n}\n.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 .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 .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 .media-control-cc {\n position: relative;\n order: 85;\n}\n\n.container .gplayer-cc-line {\n position: absolute;\n bottom: calc(var(--bottom-panel) + 5px);\n width: 100%;\n}\n.container .gplayer-cc-line p {\n width: auto;\n background-color: rgba(0, 0, 0, 0.4);\n color: white;\n display: inline-block;\n}");
|
|
50179
50203
|
|
|
50180
50204
|
const subtitlesOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16.238 16.1C13.979 16.1 12.578 14.538 12.578 11.997C12.578 9.462 13.973 7.9 16.238 7.9C18.087 7.9 19.5029 9.127 19.6219 10.824H18.032C17.876 9.927 17.168 9.338 16.238 9.338C15.011 9.338 14.249 10.354 14.249 11.997C14.249 13.641 15.011 14.662 16.243 14.662C17.178 14.662 17.881 14.111 18.038 13.251H19.627C19.492 14.938 18.119 16.1 16.238 16.1ZM8.03198 16.1C5.77298 16.1 4.37299 14.538 4.37299 11.997C4.37299 9.462 5.76798 7.9 8.03198 7.9C9.88098 7.9 11.298 9.127 11.416 10.824H9.82697C9.67097 9.927 8.96198 9.338 8.03198 9.338C6.80598 9.338 6.04297 10.354 6.04297 11.997C6.04297 13.641 6.80596 14.662 8.03796 14.662C8.97296 14.662 9.67601 14.111 9.83301 13.251H11.422C11.287 14.938 9.91398 16.1 8.03198 16.1ZM22.5 3H1.5C0.672 3 0 3.671 0 4.5V19.5C0 20.329 0.672 21 1.5 21H22.5C23.329 21 24 20.329 24 19.5V4.5C24 3.671 23.329 3 22.5 3Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
50181
50205
|
|
|
50182
50206
|
const subtitlesOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16.238 16.1C13.979 16.1 12.578 14.538 12.578 11.997C12.578 9.462 13.973 7.9 16.238 7.9C18.087 7.9 19.5029 9.127 19.6219 10.824H18.032C17.876 9.927 17.168 9.338 16.238 9.338C15.011 9.338 14.249 10.354 14.249 11.997C14.249 13.641 15.011 14.662 16.243 14.662C17.178 14.662 17.881 14.111 18.038 13.251H19.627C19.492 14.938 18.119 16.1 16.238 16.1ZM8.03198 16.1C5.77298 16.1 4.37299 14.538 4.37299 11.997C4.37299 9.462 5.76798 7.9 8.03198 7.9C9.88098 7.9 11.298 9.127 11.416 10.824H9.82697C9.67097 9.927 8.96198 9.338 8.03198 9.338C6.80598 9.338 6.04297 10.354 6.04297 11.997C6.04297 13.641 6.80596 14.662 8.03796 14.662C8.97296 14.662 9.67601 14.111 9.83301 13.251H11.422C11.287 14.938 9.91398 16.1 8.03198 16.1ZM22.5 3H1.5C0.672 3 0 3.671 0 4.5V19.5C0 20.329 0.672 21 1.5 21H22.5C23.329 21 24 20.329 24 19.5V4.5C24 3.671 23.329 3 22.5 3Z\"\n fill=\"#C9C9C9\"/>\n <rect y=\"22\" width=\"24\" height=\"2\" rx=\"1\" fill=\"#F6413B\"/>\n</svg>\n";
|
|
50183
50207
|
|
|
50184
|
-
const comboboxHTML = "<button
|
|
50208
|
+
const comboboxHTML = "<button\n class='media-control-button media-control-icon gcore-skin-button-color media-control-dd'\n id=\"gplayer-cc-button\"\n aria-haspopup=\"menu\"\n aria-expanded=\"false\"\n aria-controls=\"gplayer-cc-menu\"\n>\n</button>\n\n<ul class='gcore-skin-bg-color media-control-dd__popup' id=\"gplayer-cc-menu\" role=\"menu\">\n <% for (const t of tracks) { %>\n <li>\n <a\n href=\"#\"\n class=\"gcore-skin-text-color\"\n data-item=\"<%= t.id %>\"\n role=\"menuitemradio\"\n aria-checked=\"<%= t.id === current %>\"\n >\n <%= t.name %>\n </a>\n </li>\n <% } %>\n <li class=\"current\">\n <a\n href=\"#\"\n class='gcore-skin-text-color gcore-skin-active'\n data-item=\"-1\"\n role=\"menuitemradio\"\n aria-checked=\"<%= current === -1 %>\"\n >\n <%= i18n.t('off') %>\n </a>\n </li>\n</ul>";
|
|
50185
50209
|
|
|
50186
|
-
const stringHTML = "<div class=\"cc-line\" id=\"cc-line\">\n <p></p>\n</div>\n";
|
|
50210
|
+
const stringHTML = "<div class=\"gplayer-cc-line\" id=\"gplayer-cc-line\">\n <p></p>\n</div>\n";
|
|
50187
50211
|
|
|
50188
50212
|
const VERSION = '2.19.14';
|
|
50189
50213
|
const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
|
|
50190
|
-
const T = 'plugins.cc';
|
|
50191
50214
|
/**
|
|
50192
50215
|
* `PLUGIN` that provides a UI to select the subtitles when available.
|
|
50193
50216
|
* @beta
|
|
@@ -50218,6 +50241,7 @@ const T = 'plugins.cc';
|
|
|
50218
50241
|
class ClosedCaptions extends UICorePlugin {
|
|
50219
50242
|
isPreselectedApplied = false;
|
|
50220
50243
|
active = false;
|
|
50244
|
+
open = false;
|
|
50221
50245
|
track = null;
|
|
50222
50246
|
tracks = [];
|
|
50223
50247
|
$line = null;
|
|
@@ -50239,14 +50263,14 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50239
50263
|
static get version() {
|
|
50240
50264
|
return VERSION;
|
|
50241
50265
|
}
|
|
50242
|
-
static
|
|
50243
|
-
static
|
|
50266
|
+
static templateControl = tmpl(comboboxHTML);
|
|
50267
|
+
static templateLine = tmpl(stringHTML);
|
|
50244
50268
|
/**
|
|
50245
50269
|
* @internal
|
|
50246
50270
|
*/
|
|
50247
50271
|
get attributes() {
|
|
50248
50272
|
return {
|
|
50249
|
-
class: 'media-control-cc',
|
|
50273
|
+
class: 'media-control-cc media-control-dd__wrap',
|
|
50250
50274
|
};
|
|
50251
50275
|
}
|
|
50252
50276
|
/**
|
|
@@ -50254,8 +50278,8 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50254
50278
|
*/
|
|
50255
50279
|
get events() {
|
|
50256
50280
|
return {
|
|
50257
|
-
'click #cc-
|
|
50258
|
-
'click #cc-button': 'toggleMenu',
|
|
50281
|
+
'click #gplayer-cc-menu [data-item]': 'onItemSelect',
|
|
50282
|
+
'click #gplayer-cc-button': 'toggleMenu',
|
|
50259
50283
|
};
|
|
50260
50284
|
}
|
|
50261
50285
|
get preselectedLanguage() {
|
|
@@ -50274,7 +50298,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50274
50298
|
onCoreReady() {
|
|
50275
50299
|
const mediaControl = this.core.getPlugin('media_control');
|
|
50276
50300
|
assert(mediaControl, 'media_control plugin is required');
|
|
50277
|
-
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.
|
|
50301
|
+
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.mount);
|
|
50278
50302
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, () => {
|
|
50279
50303
|
this.hideMenu();
|
|
50280
50304
|
});
|
|
@@ -50289,6 +50313,10 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50289
50313
|
this.listenTo(this.core.activeContainer, 'container:advertisement:start', this.onStartAd);
|
|
50290
50314
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);
|
|
50291
50315
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_SUBTITLE_CHANGED, this.onSubtitleChanged);
|
|
50316
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_CLICK, () => {
|
|
50317
|
+
// TODO test
|
|
50318
|
+
this.hideMenu();
|
|
50319
|
+
});
|
|
50292
50320
|
// fix for iOS
|
|
50293
50321
|
const video = this.core.activePlayback.el;
|
|
50294
50322
|
assert(video, 'video element is required');
|
|
@@ -50305,6 +50333,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50305
50333
|
}
|
|
50306
50334
|
onSubtitleAvailable() {
|
|
50307
50335
|
this.applyTracks();
|
|
50336
|
+
this.mount();
|
|
50308
50337
|
}
|
|
50309
50338
|
onSubtitleChanged({ id }) {
|
|
50310
50339
|
if (id === -1) {
|
|
@@ -50365,6 +50394,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50365
50394
|
}
|
|
50366
50395
|
try {
|
|
50367
50396
|
this.resizeFont();
|
|
50397
|
+
this.clampPopup();
|
|
50368
50398
|
}
|
|
50369
50399
|
catch (error) {
|
|
50370
50400
|
}
|
|
@@ -50374,7 +50404,10 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50374
50404
|
*/
|
|
50375
50405
|
hide() {
|
|
50376
50406
|
this.active = false;
|
|
50407
|
+
this.open = false;
|
|
50377
50408
|
this.renderIcon();
|
|
50409
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
50410
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
50378
50411
|
this.$line.hide();
|
|
50379
50412
|
if (this.tracks) {
|
|
50380
50413
|
for (const t of this.tracks) {
|
|
@@ -50417,17 +50450,18 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50417
50450
|
if (!this.core.activeContainer) {
|
|
50418
50451
|
return this;
|
|
50419
50452
|
}
|
|
50420
|
-
|
|
50421
|
-
|
|
50422
|
-
|
|
50423
|
-
|
|
50424
|
-
|
|
50425
|
-
this.$el.find('#cc-
|
|
50426
|
-
this.
|
|
50427
|
-
this.$line
|
|
50453
|
+
this.$el.html(ClosedCaptions.templateControl({
|
|
50454
|
+
tracks: this.tracks ?? [],
|
|
50455
|
+
i18n: this.core.i18n,
|
|
50456
|
+
current: this.track?.id ?? -1,
|
|
50457
|
+
}));
|
|
50458
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
50459
|
+
this.open = false;
|
|
50460
|
+
this.core.activeContainer.$el.find('#gplayer-cc-line').remove();
|
|
50461
|
+
this.$line = $(ClosedCaptions.templateLine());
|
|
50428
50462
|
this.resizeFont();
|
|
50463
|
+
this.clampPopup();
|
|
50429
50464
|
this.core.activeContainer.$el.append(this.$line);
|
|
50430
|
-
mediaControl.slot('cc', this.$el);
|
|
50431
50465
|
this.updateSelection();
|
|
50432
50466
|
this.renderIcon();
|
|
50433
50467
|
return this;
|
|
@@ -50441,8 +50475,10 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50441
50475
|
this.updateSelection();
|
|
50442
50476
|
}
|
|
50443
50477
|
onItemSelect(event) {
|
|
50444
|
-
|
|
50445
|
-
|
|
50478
|
+
// event.target does not exist for some reason in tests
|
|
50479
|
+
const id = (event.target ?? event.currentTarget).dataset?.item ??
|
|
50480
|
+
'-1';
|
|
50481
|
+
localStorage.setItem(LOCAL_STORAGE_CC_ID, id); // TODO store language instead
|
|
50446
50482
|
this.selectItem(this.findById(Number(id)));
|
|
50447
50483
|
this.hideMenu();
|
|
50448
50484
|
return false;
|
|
@@ -50459,25 +50495,33 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50459
50495
|
}
|
|
50460
50496
|
}
|
|
50461
50497
|
hideMenu() {
|
|
50462
|
-
this
|
|
50498
|
+
this.open = false;
|
|
50499
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
50500
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
50463
50501
|
}
|
|
50464
50502
|
toggleMenu() {
|
|
50465
|
-
trace(`${T} toggleMenu`, { display: this.$el.find('#cc-select').css('display') });
|
|
50466
50503
|
this.core
|
|
50467
50504
|
.getPlugin('media_control')
|
|
50468
50505
|
.trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
|
|
50469
|
-
this
|
|
50470
|
-
|
|
50506
|
+
this.open = !this.open;
|
|
50507
|
+
if (this.open) {
|
|
50508
|
+
this.$el.find('#gplayer-cc-menu').show();
|
|
50509
|
+
}
|
|
50510
|
+
else {
|
|
50511
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
50512
|
+
}
|
|
50513
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', this.open);
|
|
50471
50514
|
}
|
|
50472
50515
|
itemElement(id) {
|
|
50473
|
-
|
|
50516
|
+
// TODO fix semantically
|
|
50517
|
+
return this.$el.find(`#gplayer-cc-menu [data-item="${id}"]`).parent();
|
|
50474
50518
|
}
|
|
50475
50519
|
allItemElements() {
|
|
50476
|
-
return this.$('#cc-
|
|
50520
|
+
return this.$el.find('#gplayer-cc-menu li'); // TODO fix semantically
|
|
50477
50521
|
}
|
|
50478
50522
|
selectSubtitles() {
|
|
50479
50523
|
const trackId = this.track ? this.track.id : -1;
|
|
50480
|
-
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
50524
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId; // TODO test
|
|
50481
50525
|
}
|
|
50482
50526
|
getSubtitleText(track) {
|
|
50483
50527
|
const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
|
|
@@ -50487,6 +50531,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50487
50531
|
for (const cue of cues) {
|
|
50488
50532
|
if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
|
|
50489
50533
|
lines.push(cue.getCueAsHTML().textContent);
|
|
50534
|
+
// TODO break?
|
|
50490
50535
|
}
|
|
50491
50536
|
}
|
|
50492
50537
|
}
|
|
@@ -50512,19 +50557,31 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
50512
50557
|
this.allItemElements()
|
|
50513
50558
|
.removeClass('current')
|
|
50514
50559
|
.find('a')
|
|
50515
|
-
.removeClass('gcore-skin-active')
|
|
50516
|
-
|
|
50517
|
-
track: this.track?.id,
|
|
50518
|
-
});
|
|
50560
|
+
.removeClass('gcore-skin-active')
|
|
50561
|
+
.attr('aria-checked', 'false');
|
|
50519
50562
|
const currentLevelElement = this.itemElement(this.track ? this.track.id : -1);
|
|
50520
50563
|
currentLevelElement
|
|
50521
50564
|
.addClass('current')
|
|
50522
50565
|
.find('a')
|
|
50523
|
-
.addClass('gcore-skin-active')
|
|
50566
|
+
.addClass('gcore-skin-active')
|
|
50567
|
+
.attr('aria-checked', 'true');
|
|
50524
50568
|
}
|
|
50525
50569
|
renderIcon() {
|
|
50570
|
+
// render both icons at once
|
|
50526
50571
|
const icon = this.active ? subtitlesOnIcon : subtitlesOffIcon;
|
|
50527
|
-
this.$el.find('
|
|
50572
|
+
this.$el.find('#gplayer-cc-button').html(icon);
|
|
50573
|
+
}
|
|
50574
|
+
clampPopup() {
|
|
50575
|
+
const availableHeight = this.core
|
|
50576
|
+
.getPlugin('media_control')
|
|
50577
|
+
.getAvailablePopupHeight();
|
|
50578
|
+
this.$el.find('#gplayer-cc-menu').css('max-height', `${availableHeight}px`);
|
|
50579
|
+
}
|
|
50580
|
+
mount() {
|
|
50581
|
+
if (this.shouldRender()) {
|
|
50582
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
50583
|
+
mediaControl.slot('cc', this.$el);
|
|
50584
|
+
}
|
|
50528
50585
|
}
|
|
50529
50586
|
}
|
|
50530
50587
|
|