@gcorevideo/player 2.21.3 → 2.21.4
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-selector/style.scss +1 -1
- package/assets/audio-selector/track-selector.ejs +3 -3
- package/assets/bottom-gear/bottomgear.ejs +2 -2
- package/assets/media-control/container.scss +1 -1
- package/assets/media-control/media-control.ejs +1 -6
- package/assets/media-control/media-control.scss +6 -4
- package/assets/media-control/width270.scss +1 -1
- package/assets/media-control/width370.scss +4 -4
- package/assets/playback-rate/button.ejs +2 -2
- package/assets/playback-rate/list.ejs +4 -4
- package/assets/subtitles/combobox.ejs +5 -5
- package/assets/subtitles/string.ejs +1 -1
- package/assets/subtitles/style.scss +2 -2
- package/dist/core.js +2 -1
- package/dist/index.css +972 -967
- package/dist/index.js +126 -106
- package/dist/player.d.ts +141 -119
- package/dist/plugins/index.css +801 -796
- package/dist/plugins/index.js +119 -104
- package/docs/api/player.bottomgear.getelement.md +2 -2
- package/docs/api/player.bottomgear.md +1 -1
- package/docs/api/{player.subtitles.hide.md → player.closedcaptions.hide.md} +2 -2
- package/docs/api/{player.subtitles.md → player.closedcaptions.md} +11 -11
- package/docs/api/{player.subtitles.show.md → player.closedcaptions.show.md} +2 -2
- package/docs/api/player.closedcaptionspluginsettings.md +13 -0
- package/docs/api/player.gearitemelement.md +6 -4
- package/docs/api/player.gearoptionsitem.md +16 -0
- package/docs/api/player.md +48 -12
- package/docs/api/player.mediacontrol.putelement.md +2 -2
- package/docs/api/player.mediacontrolelement.md +1 -1
- package/docs/api/player.playbackrate.md +1 -1
- package/docs/api/player.subtitlespluginsettings.md +18 -0
- package/docs/api/player.texttrackitem.id.md +11 -0
- package/docs/api/player.texttrackitem.md +87 -0
- package/docs/api/player.texttrackitem.name.md +11 -0
- package/docs/api/player.texttrackitem.track.md +11 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.plugins.d.ts +2 -1
- package/lib/index.plugins.d.ts.map +1 -1
- package/lib/index.plugins.js +2 -1
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +1 -0
- package/lib/plugins/audio-selector/AudioSelector.d.ts +2 -3
- package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
- package/lib/plugins/audio-selector/AudioSelector.js +6 -7
- package/lib/plugins/bottom-gear/BottomGear.d.ts +6 -2
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +2 -1
- package/lib/plugins/media-control/MediaControl.d.ts +5 -5
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +46 -39
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +1 -0
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
- package/lib/plugins/picture-in-picture/PictureInPicture.js +4 -4
- package/lib/plugins/playback-rate/PlaybackRate.d.ts +0 -1
- package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +23 -14
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +118 -0
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -0
- package/lib/plugins/subtitles/ClosedCaptions.js +348 -0
- package/lib/plugins/subtitles/Subtitles.d.ts +12 -9
- package/lib/plugins/subtitles/Subtitles.d.ts.map +1 -1
- package/lib/plugins/subtitles/Subtitles.js +31 -32
- package/lib/testUtils.d.ts +22 -18
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +22 -36
- package/package.json +1 -1
- package/src/index.plugins.ts +2 -1
- package/src/index.ts +1 -1
- package/src/playback/dash-playback/DashPlayback.ts +1 -0
- package/src/plugins/audio-selector/AudioSelector.ts +9 -8
- package/src/plugins/bottom-gear/BottomGear.ts +11 -4
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
- package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +2 -2
- package/src/plugins/media-control/MediaControl.ts +53 -46
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +43 -0
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +175 -0
- package/src/plugins/picture-in-picture/PictureInPicture.ts +5 -5
- package/src/plugins/playback-rate/PlaybackRate.ts +142 -100
- package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +65 -0
- package/src/plugins/playback-rate/__tests__/__snapshots__/PlaybackRate.test.ts.snap +11 -0
- package/src/plugins/subtitles/{Subtitles.ts → ClosedCaptions.ts} +42 -34
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +58 -0
- package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +25 -0
- package/src/testUtils.ts +22 -36
- package/temp/player.api.json +269 -89
- package/tsconfig.tsbuildinfo +1 -1
- package/src/plugins/index.ts +0 -39
package/dist/index.js
CHANGED
|
@@ -12936,6 +12936,7 @@ class DashPlayback extends BasePlayback {
|
|
|
12936
12936
|
this.trigger(Events$1.PLAYBACK_DVR, status);
|
|
12937
12937
|
this.trigger(Events$1.PLAYBACK_STATS_ADD, { dvr: status });
|
|
12938
12938
|
}
|
|
12939
|
+
// TODO move to the base class
|
|
12939
12940
|
_updateSettings() {
|
|
12940
12941
|
if (this._playbackType === Playback.VOD) {
|
|
12941
12942
|
// @ts-expect-error
|
|
@@ -43299,7 +43300,7 @@ class Player {
|
|
|
43299
43300
|
}
|
|
43300
43301
|
}
|
|
43301
43302
|
|
|
43302
|
-
var version$1 = "2.21.
|
|
43303
|
+
var version$1 = "2.21.4";
|
|
43303
43304
|
|
|
43304
43305
|
var packages = {
|
|
43305
43306
|
"node_modules/@clappr/core": {
|
|
@@ -43323,7 +43324,7 @@ function version() {
|
|
|
43323
43324
|
};
|
|
43324
43325
|
}
|
|
43325
43326
|
|
|
43326
|
-
const pluginHtml$7 = "<button data-
|
|
43327
|
+
const pluginHtml$7 = "<button data-audiotracks-button class='gcore-skin-button-color' id=\"audiotracks-button\">\n <span class='audio-text'><%= title %></span> <span class=\"audio-arrow\"></span>\n</button>\n<ul class='gcore-skin-bg-color' id=\"audiotracks-select\">\n <% for (const track of tracks) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-audiotracks-select=\"<%= track.id %>\">\n <%= track.label %>\n </a>\n </li>\n <% }; %>\n</ul>\n";
|
|
43327
43328
|
|
|
43328
43329
|
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";
|
|
43329
43330
|
|
|
@@ -43366,8 +43367,7 @@ class AudioSelector extends UICorePlugin {
|
|
|
43366
43367
|
*/
|
|
43367
43368
|
get attributes() {
|
|
43368
43369
|
return {
|
|
43369
|
-
class: 'media-control-
|
|
43370
|
-
'data-track-selector': '',
|
|
43370
|
+
class: 'media-control-audiotracks',
|
|
43371
43371
|
};
|
|
43372
43372
|
}
|
|
43373
43373
|
/**
|
|
@@ -43375,8 +43375,8 @@ class AudioSelector extends UICorePlugin {
|
|
|
43375
43375
|
*/
|
|
43376
43376
|
get events() {
|
|
43377
43377
|
return {
|
|
43378
|
-
'click [data-
|
|
43379
|
-
'click [data-
|
|
43378
|
+
'click [data-audiotracks-select]': 'onTrackSelect',
|
|
43379
|
+
'click [data-audiotracks-button]': 'onShowLevelSelectMenu',
|
|
43380
43380
|
};
|
|
43381
43381
|
}
|
|
43382
43382
|
/**
|
|
@@ -43439,7 +43439,7 @@ class AudioSelector extends UICorePlugin {
|
|
|
43439
43439
|
const mediaControl = this.core.getPlugin('media_control');
|
|
43440
43440
|
this.$el.html(AudioSelector.template({ tracks: this.tracks, title: this.getTitle() }));
|
|
43441
43441
|
this.$('.audio-arrow').append(audioArrow);
|
|
43442
|
-
mediaControl.putElement('
|
|
43442
|
+
mediaControl.putElement('audiotracks', this.el);
|
|
43443
43443
|
this.updateText();
|
|
43444
43444
|
this.highlightCurrentTrack();
|
|
43445
43445
|
return this;
|
|
@@ -43452,7 +43452,7 @@ class AudioSelector extends UICorePlugin {
|
|
|
43452
43452
|
return this.tracks.find((track) => track.id === id);
|
|
43453
43453
|
}
|
|
43454
43454
|
onTrackSelect(event) {
|
|
43455
|
-
const id = event.target?.dataset?.
|
|
43455
|
+
const id = event.target?.dataset?.audiotracksSelect;
|
|
43456
43456
|
if (id) {
|
|
43457
43457
|
this.selectAudioTrack(id);
|
|
43458
43458
|
}
|
|
@@ -43482,7 +43482,7 @@ class AudioSelector extends UICorePlugin {
|
|
|
43482
43482
|
}
|
|
43483
43483
|
trackElement(id) {
|
|
43484
43484
|
return this.$('ul a' +
|
|
43485
|
-
(id !== undefined ? '[data-
|
|
43485
|
+
(id !== undefined ? '[data-audiotracks-select="' + id + '"]' : '')).parent();
|
|
43486
43486
|
}
|
|
43487
43487
|
getTitle() {
|
|
43488
43488
|
return this.currentTrack?.label || '';
|
|
@@ -43658,7 +43658,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43658
43658
|
}
|
|
43659
43659
|
}
|
|
43660
43660
|
|
|
43661
|
-
const pluginHtml$5 = "<button type=\"button\" class=\"button-gear media-control-button gplayer-lite-btn gcore-skin-button-color gear-icon\" data-gear-button=\"-1\">\n <%= icon %>\n</button>\n<div class=\"gear-wrapper gcore-skin-bg-color\">\n <ul class=\"gear-options-list\">\n <% for (const item of items) { %>\n <li data-<%= item %>></li>\n <% } %>\n </ul>\n</div>";
|
|
43661
|
+
const pluginHtml$5 = "<button type=\"button\" class=\"button-gear media-control-button gplayer-lite-btn gcore-skin-button-color gear-icon\" data-gear-button=\"-1\" id=\"gear-button\">\n <%= icon %>\n</button>\n<div class=\"gear-wrapper gcore-skin-bg-color\">\n <ul class=\"gear-options-list\" id=\"gear-options\">\n <% for (const item of items) { %>\n <li data-<%= item %>></li>\n <% } %>\n </ul>\n</div>";
|
|
43662
43662
|
|
|
43663
43663
|
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";
|
|
43664
43664
|
|
|
@@ -43921,7 +43921,7 @@ function getPageX(event) {
|
|
|
43921
43921
|
return 0;
|
|
43922
43922
|
}
|
|
43923
43923
|
|
|
43924
|
-
const mediaControlHTML = "<div class=\"media-control-background\" data-background></div>\n\n<div class=\"media-control-layer gcore-skin-bg-color\" data-controls>\n <% var renderBar = function(name) { %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1\" data-<%= name %>></div>\n <div class=\"bar-fill-2 gcore-skin-main-color\" data-<%= name %>></div>\n <div class=\"bar-hover\" data-<%= name %>></div>\n </div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderSegmentedBar = function(name, segments) {\n segments = segments || 10; %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1 gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n </div>\n <% }; %>\n <% var renderDrawer = function(name, renderContent) { %>\n <div class=\"drawer-container\" data-<%= name %>>\n <div class=\"drawer-icon-container\" data-<%= name %>>\n <div class=\"drawer-icon media-control-icon gcore-skin-button-color\" data-<%= name %>></div>\n <span class=\"drawer-text\" data-<%= name %>></span>\n </div>\n <% renderContent(name); %>\n </div>\n <% }; %>\n <% var renderIndicator = function(name) { %>\n <div class=\"media-control-indicator gcore-skin-text-color\" data-<%= name %>></div>\n <% }; %>\n <% var renderQuality = function(name) { %>\n <div class=\"media-control-quality\" data-<%= name %>></div>\n <% }; %>\n <% var renderNerd = function(name) { %>\n <div class=\"media-control-nerd\" data-<%= name %>></div>\n <% }; %>\n <% var renderMultiCamera = function(name) { %>\n <div class=\"media-control-multicamera\" data-<%= name %>></div>\n <% }; %>\n <% var renderClipsText = function(name) { %>\n\n <div class=\"media-clip-container gcore-skin-text-color\" data-<%= name %>>\n <div class=\"media-clip-point gcore-skin-text-color\" data-<%= name %>>•</div>\n <div class=\"media-clip-text gcore-skin-text-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var
|
|
43924
|
+
const mediaControlHTML = "<div class=\"media-control-background\" data-background></div>\n\n<div class=\"media-control-layer gcore-skin-bg-color\" data-controls>\n <% var renderBar = function(name) { %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1\" data-<%= name %>></div>\n <div class=\"bar-fill-2 gcore-skin-main-color\" data-<%= name %>></div>\n <div class=\"bar-hover\" data-<%= name %>></div>\n </div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderSegmentedBar = function(name, segments) {\n segments = segments || 10; %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1 gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n </div>\n <% }; %>\n <% var renderDrawer = function(name, renderContent) { %>\n <div class=\"drawer-container\" data-<%= name %>>\n <div class=\"drawer-icon-container\" data-<%= name %>>\n <div class=\"drawer-icon media-control-icon gcore-skin-button-color\" data-<%= name %>></div>\n <span class=\"drawer-text\" data-<%= name %>></span>\n </div>\n <% renderContent(name); %>\n </div>\n <% }; %>\n <% var renderIndicator = function(name) { %>\n <div class=\"media-control-indicator gcore-skin-text-color\" data-<%= name %>></div>\n <% }; %>\n <% var renderQuality = function(name) { %>\n <div class=\"media-control-quality\" data-<%= name %>></div>\n <% }; %>\n <% var renderNerd = function(name) { %>\n <div class=\"media-control-nerd\" data-<%= name %>></div>\n <% }; %>\n <% var renderMultiCamera = function(name) { %>\n <div class=\"media-control-multicamera\" data-<%= name %>></div>\n <% }; %>\n <% var renderClipsText = function(name) { %>\n\n <div class=\"media-clip-container gcore-skin-text-color\" data-<%= name %>>\n <div class=\"media-clip-point gcore-skin-text-color\" data-<%= name %>>•</div>\n <div class=\"media-clip-text gcore-skin-text-color\" data-<%= name %>></div>\n </div>\n <% }; %>\n <% var renderVR = function(name) { %>\n <div class=\"media-control-vr\" data-<%= name %>></div>\n <% }; %>\n <% var renderButton = function(name) { %>\n <button type=\"button\" class=\"media-control-button media-control-icon gcore-skin-button-color\" data-<%= name %>\n aria-label=\"<%= name %>\"></button>\n <% }; %>\n\n <% var templates = {\n bar: renderBar,\n segmentedBar: renderSegmentedBar,\n };\n var render = function (settingsList) {\n settingsList.forEach(function (setting) {\n\n if (setting === \"seekbar\") {\n renderBar(setting);\n } else if (setting === \"volume\") {\n renderDrawer(setting, settings.volumeBarTemplate ? templates[settings.volumeBarTemplate] : function (name) {\n return renderSegmentedBar(name);\n });\n } else if (setting === \"duration\" || setting === \"position\") {\n renderIndicator(setting);\n } else if (setting === \"quality\") {\n renderQuality(setting)\n } else if (setting === \"nerd\") {\n renderNerd(setting)\n } else if (setting === \"multicamera\") {\n renderMultiCamera(setting)\n } else if (setting === \"vr\") {\n renderVR(setting)\n } else if (setting === \"clipsText\") {\n renderClipsText(setting)\n } else if (setting === \"fullscreen\") {\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";
|
|
43925
43925
|
|
|
43926
43926
|
const playIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_28_1564)\">\n <path d=\"M6 3V20L19.3571 11.5L6 3Z\" fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_28_1564\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
43927
43927
|
|
|
@@ -43974,7 +43974,7 @@ function orderByOrderPattern(arr, order) {
|
|
|
43974
43974
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
43975
43975
|
*/
|
|
43976
43976
|
class MediaControl extends UICorePlugin {
|
|
43977
|
-
advertisementPlaying = false
|
|
43977
|
+
// private advertisementPlaying = false
|
|
43978
43978
|
buttonsColor = null;
|
|
43979
43979
|
currentDurationValue = 0;
|
|
43980
43980
|
currentPositionValue = 0;
|
|
@@ -43996,7 +43996,7 @@ class MediaControl extends UICorePlugin {
|
|
|
43996
43996
|
lastMouseY = 0;
|
|
43997
43997
|
persistConfig;
|
|
43998
43998
|
rendered = false;
|
|
43999
|
-
settings = {};
|
|
43999
|
+
settings = {}; // TODO & seekEnabled: boolean, ...
|
|
44000
44000
|
userDisabled = false;
|
|
44001
44001
|
userKeepVisible = false;
|
|
44002
44002
|
verticalVolume = false;
|
|
@@ -44177,18 +44177,16 @@ class MediaControl extends UICorePlugin {
|
|
|
44177
44177
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_DBLCLICK, this.toggleFullscreen);
|
|
44178
44178
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
44179
44179
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PROGRESS, this.updateProgressBar);
|
|
44180
|
-
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_SETTINGSUPDATE, this.
|
|
44181
|
-
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.
|
|
44180
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_SETTINGSUPDATE, this.updateSettings);
|
|
44181
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.updateSettings);
|
|
44182
44182
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
|
|
44183
44183
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_MEDIACONTROL_DISABLE, this.disable);
|
|
44184
44184
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_MEDIACONTROL_ENABLE, this.enable);
|
|
44185
44185
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_ENDED, this.ended);
|
|
44186
44186
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_VOLUME, this.onVolumeChanged);
|
|
44187
44187
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_OPTIONS_CHANGE, this.setInitialVolume);
|
|
44188
|
-
if
|
|
44189
|
-
|
|
44190
|
-
this.listenToOnce(this.core.activeContainer, Events$1.CONTAINER_LOADEDMETADATA, this.onLoadedMetadataOnVideoTag);
|
|
44191
|
-
}
|
|
44188
|
+
// wait until the metadata has loaded and then check if fullscreen on video tag is supported
|
|
44189
|
+
this.listenToOnce(this.core.activeContainer, Events$1.CONTAINER_LOADEDMETADATA, this.onLoadedMetadata);
|
|
44192
44190
|
}
|
|
44193
44191
|
/**
|
|
44194
44192
|
* Hides the media control UI
|
|
@@ -44223,13 +44221,13 @@ class MediaControl extends UICorePlugin {
|
|
|
44223
44221
|
onVolumeChanged() {
|
|
44224
44222
|
this.updateVolumeUI();
|
|
44225
44223
|
}
|
|
44226
|
-
|
|
44224
|
+
onLoadedMetadata() {
|
|
44227
44225
|
const video = this.core.activePlayback?.el;
|
|
44228
44226
|
// video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
|
|
44229
44227
|
// see https://github.com/clappr/clappr/issues/1127
|
|
44230
44228
|
if (!Fullscreen.fullscreenEnabled() && video.webkitSupportsFullscreen) {
|
|
44231
44229
|
this.fullScreenOnVideoTagSupported = true;
|
|
44232
|
-
this.
|
|
44230
|
+
this.updateSettings();
|
|
44233
44231
|
}
|
|
44234
44232
|
}
|
|
44235
44233
|
updateVolumeUI() {
|
|
@@ -44459,7 +44457,7 @@ class MediaControl extends UICorePlugin {
|
|
|
44459
44457
|
this.setInitialVolume();
|
|
44460
44458
|
this.changeTogglePlay();
|
|
44461
44459
|
this.bindContainerEvents();
|
|
44462
|
-
this.
|
|
44460
|
+
this.updateSettings();
|
|
44463
44461
|
this.core.activeContainer.trigger(Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
44464
44462
|
// TODO test
|
|
44465
44463
|
if (this.core.activeContainer.mediaControlDisabled) {
|
|
@@ -44640,18 +44638,19 @@ class MediaControl extends UICorePlugin {
|
|
|
44640
44638
|
this.core.$el.addClass('nocursor');
|
|
44641
44639
|
}
|
|
44642
44640
|
}
|
|
44643
|
-
|
|
44641
|
+
updateSettings() {
|
|
44644
44642
|
const newSettings = $.extend(true, {
|
|
44645
44643
|
left: [],
|
|
44646
44644
|
default: [],
|
|
44647
44645
|
right: [],
|
|
44648
|
-
}, this.core.activeContainer
|
|
44646
|
+
}, this.core.activeContainer.settings);
|
|
44649
44647
|
newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
|
|
44648
|
+
// actual order of the items appear rendered is controlled by CSS
|
|
44650
44649
|
newSettings.right = [
|
|
44651
44650
|
'fullscreen',
|
|
44652
44651
|
'pip',
|
|
44653
|
-
'
|
|
44654
|
-
'
|
|
44652
|
+
'gear',
|
|
44653
|
+
'cc',
|
|
44655
44654
|
'multicamera',
|
|
44656
44655
|
'playbackrate',
|
|
44657
44656
|
'vr',
|
|
@@ -44660,7 +44659,7 @@ class MediaControl extends UICorePlugin {
|
|
|
44660
44659
|
if ((!this.fullScreenOnVideoTagSupported &&
|
|
44661
44660
|
!Fullscreen.fullscreenEnabled()) ||
|
|
44662
44661
|
this.options.fullscreenDisable) {
|
|
44663
|
-
// remove fullscreen from settings if it is
|
|
44662
|
+
// remove fullscreen from settings if it is not available
|
|
44664
44663
|
removeArrayItem(newSettings.default, 'fullscreen');
|
|
44665
44664
|
removeArrayItem(newSettings.left, 'fullscreen');
|
|
44666
44665
|
removeArrayItem(newSettings.right, 'fullscreen');
|
|
@@ -44699,7 +44698,7 @@ class MediaControl extends UICorePlugin {
|
|
|
44699
44698
|
this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
|
|
44700
44699
|
this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
|
|
44701
44700
|
this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
|
|
44702
|
-
this.$clipText = this.$el.find('.media-clip-text[data-clipstext]');
|
|
44701
|
+
this.$clipText = this.$el.find('.media-clip-text[data-clipstext]'); // TODO
|
|
44703
44702
|
this.$clipTextContainer = this.$el.find('.media-clip-container[data-clipstext]');
|
|
44704
44703
|
this.resetIndicators();
|
|
44705
44704
|
this.initializeIcons();
|
|
@@ -44725,36 +44724,32 @@ class MediaControl extends UICorePlugin {
|
|
|
44725
44724
|
*/
|
|
44726
44725
|
getElement(name) {
|
|
44727
44726
|
switch (name) {
|
|
44728
|
-
case '
|
|
44727
|
+
case 'audiotracks':
|
|
44729
44728
|
return null;
|
|
44730
44729
|
case 'clipText':
|
|
44731
44730
|
return this.$clipText;
|
|
44732
|
-
case 'gear':
|
|
44733
|
-
return null;
|
|
44734
|
-
case 'pip':
|
|
44735
|
-
return null;
|
|
44736
44731
|
case 'playbackRate':
|
|
44737
44732
|
return this.$playbackRate;
|
|
44738
44733
|
case 'seekBarContainer':
|
|
44739
44734
|
return this.$seekBarContainer;
|
|
44740
|
-
case 'subtitlesSelector':
|
|
44741
|
-
return null;
|
|
44742
44735
|
}
|
|
44743
44736
|
}
|
|
44744
44737
|
putElement(name, element) {
|
|
44745
|
-
|
|
44746
|
-
|
|
44747
|
-
|
|
44748
|
-
|
|
44749
|
-
|
|
44750
|
-
|
|
44751
|
-
|
|
44752
|
-
|
|
44753
|
-
|
|
44754
|
-
|
|
44755
|
-
|
|
44756
|
-
|
|
44757
|
-
|
|
44738
|
+
const panel = this.getElementLocation(name);
|
|
44739
|
+
trace(`${T$e} putElement`, { name, panel: !!panel });
|
|
44740
|
+
if (panel) {
|
|
44741
|
+
const current = panel.find(`[data-${name}]`);
|
|
44742
|
+
element.setAttribute(`data-${name}`, "");
|
|
44743
|
+
// TODO test
|
|
44744
|
+
if (current.length) {
|
|
44745
|
+
if (current[0] === element) {
|
|
44746
|
+
return;
|
|
44747
|
+
}
|
|
44748
|
+
current.replaceWith(element);
|
|
44749
|
+
}
|
|
44750
|
+
else {
|
|
44751
|
+
panel.append(element);
|
|
44752
|
+
}
|
|
44758
44753
|
}
|
|
44759
44754
|
}
|
|
44760
44755
|
/**
|
|
@@ -44992,12 +44987,12 @@ class MediaControl extends UICorePlugin {
|
|
|
44992
44987
|
}
|
|
44993
44988
|
// TODO manage by the ads plugin
|
|
44994
44989
|
onStartAd() {
|
|
44995
|
-
this.advertisementPlaying = true
|
|
44990
|
+
// this.advertisementPlaying = true
|
|
44996
44991
|
this.disable();
|
|
44997
44992
|
}
|
|
44998
44993
|
// TODO manage by the ads plugin
|
|
44999
44994
|
onFinishAd() {
|
|
45000
|
-
this.advertisementPlaying = false
|
|
44995
|
+
// this.advertisementPlaying = false
|
|
45001
44996
|
this.enable();
|
|
45002
44997
|
}
|
|
45003
44998
|
// TODO remove
|
|
@@ -45041,6 +45036,18 @@ class MediaControl extends UICorePlugin {
|
|
|
45041
45036
|
}
|
|
45042
45037
|
return isFinite(this.core.activePlayback.getDuration());
|
|
45043
45038
|
}
|
|
45039
|
+
getElementLocation(name) {
|
|
45040
|
+
if (this.settings.right?.includes(name)) {
|
|
45041
|
+
return this.getRightPanel();
|
|
45042
|
+
}
|
|
45043
|
+
if (this.settings.left?.includes(name)) {
|
|
45044
|
+
return this.getLeftPanel();
|
|
45045
|
+
}
|
|
45046
|
+
if (this.settings.default?.includes(name)) {
|
|
45047
|
+
return this.getCenterPanel();
|
|
45048
|
+
}
|
|
45049
|
+
return null;
|
|
45050
|
+
}
|
|
45044
45051
|
}
|
|
45045
45052
|
MediaControl.extend = function (properties) {
|
|
45046
45053
|
return extend(MediaControl, properties);
|
|
@@ -45110,6 +45117,7 @@ class BottomGear extends UICorePlugin {
|
|
|
45110
45117
|
getElement(name) {
|
|
45111
45118
|
return this.$el.find(`.gear-options-list [data-${name}]`);
|
|
45112
45119
|
}
|
|
45120
|
+
// TODO implement putElement/addElement method
|
|
45113
45121
|
/**
|
|
45114
45122
|
* Replaces the content of the gear menu
|
|
45115
45123
|
* @param content - Zepto result of the element
|
|
@@ -45143,7 +45151,7 @@ class BottomGear extends UICorePlugin {
|
|
|
45143
45151
|
];
|
|
45144
45152
|
const icon = this.isHd ? gearHdIcon : gearIcon;
|
|
45145
45153
|
this.$el.html(BottomGear.template({ icon, items }));
|
|
45146
|
-
mediaControl.putElement('gear', this
|
|
45154
|
+
mediaControl.putElement('gear', this.el);
|
|
45147
45155
|
mediaControl.trigger(MediaControlEvents.MEDIACONTROL_GEAR_RENDERED);
|
|
45148
45156
|
return this;
|
|
45149
45157
|
}
|
|
@@ -49643,6 +49651,7 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49643
49651
|
static get version() {
|
|
49644
49652
|
return VERSION$2;
|
|
49645
49653
|
}
|
|
49654
|
+
static buttonTemplate = tmpl(buttonHtml$1);
|
|
49646
49655
|
/**
|
|
49647
49656
|
* @internal
|
|
49648
49657
|
*/
|
|
@@ -49667,8 +49676,8 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49667
49676
|
}
|
|
49668
49677
|
isPiPSupported() {
|
|
49669
49678
|
trace(`${T$7} isPiPSupported`, {
|
|
49670
|
-
pictureInPictureEnabled: document.pictureInPictureEnabled,
|
|
49671
|
-
requestPictureInPicture: HTMLVideoElement.prototype.requestPictureInPicture,
|
|
49679
|
+
pictureInPictureEnabled: !!document.pictureInPictureEnabled,
|
|
49680
|
+
requestPictureInPicture: !!HTMLVideoElement.prototype.requestPictureInPicture,
|
|
49672
49681
|
});
|
|
49673
49682
|
return document.pictureInPictureEnabled && !!HTMLVideoElement.prototype.requestPictureInPicture;
|
|
49674
49683
|
}
|
|
@@ -49679,8 +49688,7 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49679
49688
|
if (!this.isPiPSupported()) {
|
|
49680
49689
|
return this;
|
|
49681
49690
|
}
|
|
49682
|
-
|
|
49683
|
-
this.$el.html(t({ pipIcon }));
|
|
49691
|
+
this.$el.html(PictureInPicture.buttonTemplate({ pipIcon }));
|
|
49684
49692
|
const mediaControl = this.core.getPlugin('media_control');
|
|
49685
49693
|
if (mediaControl) {
|
|
49686
49694
|
mediaControl.putElement('pip', this.el);
|
|
@@ -49708,9 +49716,9 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49708
49716
|
}
|
|
49709
49717
|
}
|
|
49710
49718
|
|
|
49711
|
-
const buttonHtml = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option'>\n <span class=\"gear-option_speed-icon\"><%= speedIcon %></span>\n <span
|
|
49719
|
+
const buttonHtml = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option' id=\"playback-rate-button\">\n <span class=\"gear-option_speed-icon\"><%= speedIcon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('playback_rate') %></span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n <span class='gear-option_value'><%= title %></span>\n</button>\n";
|
|
49712
49720
|
|
|
49713
|
-
const listHtml = "<button class=\"gplayer-lite-btn go-back gcore-skin-text-color\">\n <span class=\"arrow-left-icon\"><%= arrowLeftIcon %></span>\n
|
|
49721
|
+
const listHtml = "<button class=\"gplayer-lite-btn go-back gcore-skin-text-color\">\n <span class=\"arrow-left-icon\"><%= arrowLeftIcon %></span>\n <%= i18n.t('playback_rate') %>\n</button>\n<ul class=\"gear-sub-menu\">\n <% for (const item of playbackRates) { %>\n <li>\n <a href=\"#\" class='gear-sub-menu_btn gcore-skin-text-color' data-rate=\"<%= item.value %>\">\n <span class=\"check-icon\"><%= checkIcon %></span>\n <%= item.label %>\n </a>\n </li>\n <% } %>\n</ul>\n";
|
|
49714
49722
|
|
|
49715
49723
|
const speedIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.9854 23.9999C11.4272 23.9999 10.9571 23.5293 10.9571 22.9704C10.9571 22.4115 11.4272 21.9409 11.9854 21.9409C17.4492 21.9409 21.9143 17.4704 21.9143 11.9999C21.9143 6.52948 17.4492 2.05899 11.9854 2.05899C11.4272 2.05899 10.9571 1.58836 10.9571 1.02949C10.9571 0.470625 11.4272 0 11.9854 0C18.5949 0 24 5.38224 24 12.0291C24 18.6766 18.5949 24 11.9854 24V23.9999ZM10.2227 17.853L17.4785 13.4413C18.0072 13.1178 18.301 12.5885 18.301 11.9707C18.301 11.353 17.9779 10.8237 17.4785 10.5002L10.2227 6.08852C9.69405 5.76499 9.01826 5.76499 8.4896 6.05919C7.96094 6.35338 7.60828 6.94157 7.60828 7.5591V16.3824C7.60828 17.0002 7.93142 17.5883 8.4896 17.8824C8.75393 18.0294 9.04779 18.1177 9.34139 18.1177C9.63523 18.1177 9.95838 18.0294 10.2227 17.853V17.853ZM15.9216 11.9707L9.66457 15.7647V8.17661L15.9216 11.9707ZM8.22516 22.3529C8.4602 21.8236 8.25447 21.2058 7.7258 20.9705C7.19714 20.7353 6.69755 20.4413 6.2277 20.0882C5.75764 19.7646 5.11137 19.8822 4.78824 20.3235C4.46509 20.7941 4.58251 21.4412 5.02327 21.7647C5.58146 22.1764 6.19819 22.5293 6.81519 22.8235C6.96211 22.8824 7.10903 22.9117 7.25574 22.9117C7.66699 22.941 8.04893 22.7057 8.22513 22.3528L8.22516 22.3529ZM3.58381 19.0882C4.05387 18.7647 4.17127 18.1177 3.84814 17.647C3.52502 17.1764 3.23115 16.6765 2.99635 16.1471C2.76132 15.6178 2.14456 15.4118 1.6157 15.6472C1.08704 15.8825 0.881306 16.5 1.11634 17.0295C1.41018 17.6472 1.7626 18.2648 2.14459 18.8236C2.35032 19.1178 2.67325 19.2646 2.99638 19.2646C3.20191 19.2942 3.40763 19.2353 3.58384 19.0882L3.58381 19.0882ZM1.14563 13.9707C1.70382 13.9118 2.14435 13.4118 2.08576 12.853C2.05645 12.5588 2.05645 12.2648 2.05645 11.9706C2.05645 11.6764 2.05645 11.4117 2.08576 11.1178C2.14456 10.5589 1.70381 10.059 1.14563 10.0001C0.587439 9.94122 0.0881057 10.3825 0.0293019 10.9414C1.96979e-07 11.2942 0 11.6178 0 11.9709C0 12.3237 0.0293018 12.6768 0.0588091 13.0297C0.117618 13.5589 0.558169 13.9709 1.08706 13.9709C1.08686 13.9707 1.11636 13.9707 1.14567 13.9707L1.14563 13.9707ZM2.96687 7.79432C3.2019 7.26502 3.49553 6.76482 3.81866 6.2944C4.1418 5.82377 4.02439 5.17672 3.55432 4.8532C3.08427 4.52967 2.438 4.64722 2.11486 5.11786C1.73292 5.67672 1.38047 6.2942 1.08661 6.91193C0.851579 7.44123 1.08661 8.05897 1.58597 8.29426C1.73289 8.35314 1.87981 8.38247 2.02652 8.38247C2.40888 8.41181 2.7906 8.1767 2.96686 7.7943L2.96687 7.79432ZM6.22757 3.85328C6.69762 3.52974 7.19696 3.23554 7.69635 2.97089C8.22501 2.73558 8.43074 2.11807 8.19571 1.58857C7.96068 1.05927 7.34392 0.85329 6.81505 1.08861C6.19806 1.3828 5.58128 1.73565 5.02314 2.14741C4.55308 2.47094 4.43568 3.11797 4.78811 3.5886C4.99384 3.8828 5.31676 4.02969 5.6399 4.02969C5.84583 4.05902 6.05135 4.00014 6.22757 3.85325V3.85328Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
49716
49724
|
|
|
@@ -49721,7 +49729,7 @@ const DEFAULT_PLAYBACK_RATES = [
|
|
|
49721
49729
|
{ value: '1.25', label: '1.25x' },
|
|
49722
49730
|
{ value: '1.5', label: '1.5x' },
|
|
49723
49731
|
{ value: '1.75', label: '1.75x' },
|
|
49724
|
-
{ value: '2.0', label: '2x' }
|
|
49732
|
+
{ value: '2.0', label: '2x' },
|
|
49725
49733
|
];
|
|
49726
49734
|
const DEFAULT_PLAYBACK_RATE = '1.0';
|
|
49727
49735
|
const T$6 = 'plugins.playback_rate';
|
|
@@ -49761,16 +49769,17 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49761
49769
|
static listTemplate = tmpl(listHtml);
|
|
49762
49770
|
constructor(core) {
|
|
49763
49771
|
super(core);
|
|
49764
|
-
this.playbackRates =
|
|
49765
|
-
|
|
49772
|
+
this.playbackRates =
|
|
49773
|
+
core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
|
|
49774
|
+
this.selectedRate =
|
|
49775
|
+
core.options.playbackRate?.defaultValue || DEFAULT_PLAYBACK_RATE;
|
|
49766
49776
|
}
|
|
49767
49777
|
/**
|
|
49768
49778
|
* @internal
|
|
49769
49779
|
*/
|
|
49770
49780
|
get attributes() {
|
|
49771
49781
|
return {
|
|
49772
|
-
|
|
49773
|
-
'data-playback-rate-select': ''
|
|
49782
|
+
class: 'media-control-playbackrate',
|
|
49774
49783
|
};
|
|
49775
49784
|
}
|
|
49776
49785
|
/**
|
|
@@ -49791,6 +49800,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49791
49800
|
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChange);
|
|
49792
49801
|
}
|
|
49793
49802
|
onCoreReady() {
|
|
49803
|
+
trace(`${T$6} onCoreReady`);
|
|
49794
49804
|
const mediaControl = this.core.getPlugin('media_control');
|
|
49795
49805
|
assert(mediaControl, 'media_control plugin is required');
|
|
49796
49806
|
const gear = this.core.getPlugin('bottom_gear');
|
|
@@ -49798,6 +49808,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49798
49808
|
this.listenTo(mediaControl, MediaControlEvents.MEDIACONTROL_GEAR_RENDERED, this.onGearRendered);
|
|
49799
49809
|
}
|
|
49800
49810
|
onActiveContainerChange() {
|
|
49811
|
+
trace(`${T$6} onActiveContainerChange`);
|
|
49801
49812
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_STOP, this.onStop);
|
|
49802
49813
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_PLAY, this.onPlay);
|
|
49803
49814
|
this.listenTo(this.core.activePlayback, PlaybackEvents.PLAYBACK_RATE_CHANGED, this.onPlaybackRateChange);
|
|
@@ -49821,7 +49832,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49821
49832
|
allRateElements() {
|
|
49822
49833
|
return this.$('ul.gear-sub-menu li');
|
|
49823
49834
|
}
|
|
49824
|
-
rateElement(rate =
|
|
49835
|
+
rateElement(rate = '1') {
|
|
49825
49836
|
return this.$(`ul.gear-sub-menu a[data-rate="${rate}"]`).parent();
|
|
49826
49837
|
}
|
|
49827
49838
|
onPlaybackRateChange(playbackRate) {
|
|
@@ -49836,10 +49847,11 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49836
49847
|
}
|
|
49837
49848
|
}
|
|
49838
49849
|
shouldRender() {
|
|
49839
|
-
if (!this.core.
|
|
49850
|
+
if (!this.core.activePlayback) {
|
|
49840
49851
|
return false;
|
|
49841
49852
|
}
|
|
49842
|
-
if (this.core.getPlaybackType() === Playback.LIVE &&
|
|
49853
|
+
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
49854
|
+
!this.core.activePlayback.dvrEnabled) {
|
|
49843
49855
|
return false;
|
|
49844
49856
|
}
|
|
49845
49857
|
return 'setPlaybackRate' in this.core.activePlayback;
|
|
@@ -49862,9 +49874,12 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49862
49874
|
title: this.getTitle(),
|
|
49863
49875
|
speedIcon,
|
|
49864
49876
|
arrowRightIcon,
|
|
49877
|
+
i18n: this.core.i18n,
|
|
49865
49878
|
});
|
|
49866
49879
|
this.$el.html(button);
|
|
49867
|
-
this.core.getPlugin('bottom_gear')
|
|
49880
|
+
this.core.getPlugin('bottom_gear')
|
|
49881
|
+
?.getElement('rate')
|
|
49882
|
+
?.html(this.el);
|
|
49868
49883
|
this.rendered = true;
|
|
49869
49884
|
return this;
|
|
49870
49885
|
}
|
|
@@ -49879,7 +49894,8 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49879
49894
|
}
|
|
49880
49895
|
}
|
|
49881
49896
|
onPlay() {
|
|
49882
|
-
if (this.core.getPlaybackType() === Playback.LIVE &&
|
|
49897
|
+
if (this.core.getPlaybackType() === Playback.LIVE &&
|
|
49898
|
+
!this.core.activePlayback.dvrEnabled) {
|
|
49883
49899
|
this.resetPlaybackRate();
|
|
49884
49900
|
}
|
|
49885
49901
|
else {
|
|
@@ -49889,8 +49905,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49889
49905
|
resetPlaybackRate() {
|
|
49890
49906
|
this.setSelectedRate(DEFAULT_PLAYBACK_RATE);
|
|
49891
49907
|
}
|
|
49892
|
-
onStop() {
|
|
49893
|
-
}
|
|
49908
|
+
onStop() { }
|
|
49894
49909
|
onRateSelect(event) {
|
|
49895
49910
|
event.stopPropagation();
|
|
49896
49911
|
const rate = event.currentTarget.dataset.rate;
|
|
@@ -49905,6 +49920,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49905
49920
|
playbackRates: this.playbackRates,
|
|
49906
49921
|
arrowLeftIcon,
|
|
49907
49922
|
checkIcon,
|
|
49923
|
+
i18n: this.core.i18n,
|
|
49908
49924
|
}));
|
|
49909
49925
|
this.core.getPlugin('bottom_gear')?.setContent(this.el);
|
|
49910
49926
|
this.highlightCurrentRate();
|
|
@@ -49920,7 +49936,8 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49920
49936
|
this.selectedRate = rate;
|
|
49921
49937
|
}
|
|
49922
49938
|
getTitle() {
|
|
49923
|
-
return this.playbackRates.find((r) => r.value === this.selectedRate)?.label ||
|
|
49939
|
+
return (this.playbackRates.find((r) => r.value === this.selectedRate)?.label ||
|
|
49940
|
+
this.selectedRate);
|
|
49924
49941
|
}
|
|
49925
49942
|
highlightCurrentRate() {
|
|
49926
49943
|
this.allRateElements().removeClass('current');
|
|
@@ -50950,48 +50967,51 @@ const subtitlesOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
|
|
|
50950
50967
|
|
|
50951
50968
|
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";
|
|
50952
50969
|
|
|
50953
|
-
const comboboxHTML = "<button data-
|
|
50970
|
+
const comboboxHTML = "<button data-cc-button class='media-control-button media-control-icon gcore-skin-button-color' id=\"cc-button\">\n <span class='cc-text'></span>\n</button>\n\n<ul class='gcore-skin-bg-color' id=\"cc-select\">\n <% for (const t of tracks) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-cc-select=\"<%= t.id %>\">\n <%= t.name %>\n </a>\n </li>\n <% } %>\n <li><a href=\"#\" class='gcore-skin-text-color' data-cc-select=\"-1\">Off</a></li>\n</ul>\n";
|
|
50954
50971
|
|
|
50955
|
-
const stringHTML = "<div class=\"
|
|
50972
|
+
const stringHTML = "<div class=\"cc-line\" id=\"cc-line\">\n <p></p>\n</div>\n";
|
|
50956
50973
|
|
|
50957
50974
|
const VERSION = '2.19.14';
|
|
50958
|
-
const
|
|
50959
|
-
const T$2 = 'plugins.
|
|
50975
|
+
const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
|
|
50976
|
+
const T$2 = 'plugins.cc';
|
|
50960
50977
|
/**
|
|
50961
50978
|
* `PLUGIN` that provides a UI to select the subtitles when available.
|
|
50962
50979
|
* @beta
|
|
50963
50980
|
*
|
|
50964
50981
|
* @remarks
|
|
50982
|
+
* The plugin is activated when closed captions tracks are provided with the media source.
|
|
50983
|
+
* It shows a familiar "CC" button with a dropdown menu to select the subtitles language.
|
|
50984
|
+
*
|
|
50965
50985
|
* Depends on:
|
|
50966
50986
|
*
|
|
50967
50987
|
* - {@link MediaControl}
|
|
50968
50988
|
*
|
|
50969
|
-
* Configuration options - {@link
|
|
50989
|
+
* Configuration options - {@link ClosedCaptionsPluginSettings}
|
|
50970
50990
|
* @example
|
|
50971
50991
|
* ```ts
|
|
50972
|
-
* import {
|
|
50992
|
+
* import { ClosedCaptions } from '@gcorevideo/player'
|
|
50973
50993
|
*
|
|
50974
|
-
* Player.registerPlugin(
|
|
50994
|
+
* Player.registerPlugin(ClosedCaptions)
|
|
50975
50995
|
*
|
|
50976
50996
|
* new Player({
|
|
50977
50997
|
* ...
|
|
50978
|
-
*
|
|
50998
|
+
* cc: {
|
|
50979
50999
|
* language: 'en',
|
|
50980
51000
|
* },
|
|
50981
51001
|
* })
|
|
50982
51002
|
* ```
|
|
50983
51003
|
*/
|
|
50984
|
-
class
|
|
51004
|
+
class ClosedCaptions extends UICorePlugin {
|
|
50985
51005
|
isPreselectedApplied = false;
|
|
50986
51006
|
isShowing = false;
|
|
50987
51007
|
track = null;
|
|
50988
51008
|
tracks = [];
|
|
50989
|
-
$
|
|
51009
|
+
$line = null;
|
|
50990
51010
|
/**
|
|
50991
51011
|
* @internal
|
|
50992
51012
|
*/
|
|
50993
51013
|
get name() {
|
|
50994
|
-
return '
|
|
51014
|
+
return 'cc';
|
|
50995
51015
|
}
|
|
50996
51016
|
/**
|
|
50997
51017
|
* @internal
|
|
@@ -51012,8 +51032,7 @@ class Subtitles extends UICorePlugin {
|
|
|
51012
51032
|
*/
|
|
51013
51033
|
get attributes() {
|
|
51014
51034
|
return {
|
|
51015
|
-
class: 'media-control-
|
|
51016
|
-
'data-subtitles': '',
|
|
51035
|
+
class: 'media-control-cc',
|
|
51017
51036
|
};
|
|
51018
51037
|
}
|
|
51019
51038
|
/**
|
|
@@ -51021,12 +51040,12 @@ class Subtitles extends UICorePlugin {
|
|
|
51021
51040
|
*/
|
|
51022
51041
|
get events() {
|
|
51023
51042
|
return {
|
|
51024
|
-
'click [data-
|
|
51025
|
-
'click [data-
|
|
51043
|
+
'click [data-cc-select]': 'onItemSelect',
|
|
51044
|
+
'click [data-cc-button]': 'toggleMenu',
|
|
51026
51045
|
};
|
|
51027
51046
|
}
|
|
51028
51047
|
get preselectedLanguage() {
|
|
51029
|
-
return this.core.options.subtitles?.language ?? '';
|
|
51048
|
+
return this.core.options.cc?.language ?? this.core.options.subtitles?.language ?? '';
|
|
51030
51049
|
}
|
|
51031
51050
|
/**
|
|
51032
51051
|
* @internal
|
|
@@ -51141,7 +51160,7 @@ class Subtitles extends UICorePlugin {
|
|
|
51141
51160
|
hide() {
|
|
51142
51161
|
this.isShowing = false;
|
|
51143
51162
|
this.renderIcon();
|
|
51144
|
-
this.$
|
|
51163
|
+
this.$line.hide();
|
|
51145
51164
|
if (this.tracks) {
|
|
51146
51165
|
for (const t of this.tracks) {
|
|
51147
51166
|
t.track.mode = 'hidden';
|
|
@@ -51159,22 +51178,22 @@ class Subtitles extends UICorePlugin {
|
|
|
51159
51178
|
this.track &&
|
|
51160
51179
|
this.track.track.mode &&
|
|
51161
51180
|
Browser.isiOS) {
|
|
51162
|
-
this.$
|
|
51181
|
+
this.$line.hide();
|
|
51163
51182
|
this.track.track.mode = 'showing';
|
|
51164
51183
|
}
|
|
51165
51184
|
else {
|
|
51166
|
-
this.$
|
|
51185
|
+
this.$line.show();
|
|
51167
51186
|
}
|
|
51168
51187
|
}
|
|
51169
51188
|
shouldRender() {
|
|
51170
|
-
return this.tracks
|
|
51189
|
+
return this.tracks?.length > 0;
|
|
51171
51190
|
}
|
|
51172
51191
|
resizeFont() {
|
|
51173
|
-
if (!this.$
|
|
51192
|
+
if (!this.$line) {
|
|
51174
51193
|
return;
|
|
51175
51194
|
}
|
|
51176
51195
|
const skinWidth = this.core.activeContainer.$el.width();
|
|
51177
|
-
this.$
|
|
51196
|
+
this.$line.find('p').css('font-size', skinWidth * 0.03);
|
|
51178
51197
|
}
|
|
51179
51198
|
/**
|
|
51180
51199
|
* @internal
|
|
@@ -51187,12 +51206,12 @@ class Subtitles extends UICorePlugin {
|
|
|
51187
51206
|
return this;
|
|
51188
51207
|
}
|
|
51189
51208
|
const mediaControl = this.core.getPlugin('media_control');
|
|
51190
|
-
this.$el.html(
|
|
51191
|
-
this.core.activeContainer.$el.find('
|
|
51192
|
-
this.$
|
|
51209
|
+
this.$el.html(ClosedCaptions.template({ tracks: this.tracks }));
|
|
51210
|
+
this.core.activeContainer.$el.find('#cc-line').remove();
|
|
51211
|
+
this.$line = $(ClosedCaptions.templateString());
|
|
51193
51212
|
this.resizeFont();
|
|
51194
|
-
this.core.activeContainer.$el.append(this.$
|
|
51195
|
-
mediaControl.putElement('
|
|
51213
|
+
this.core.activeContainer.$el.append(this.$line);
|
|
51214
|
+
mediaControl.putElement('cc', this.el);
|
|
51196
51215
|
this.updateSelection();
|
|
51197
51216
|
this.renderIcon();
|
|
51198
51217
|
return this;
|
|
@@ -51207,9 +51226,9 @@ class Subtitles extends UICorePlugin {
|
|
|
51207
51226
|
this.updateSelection();
|
|
51208
51227
|
}
|
|
51209
51228
|
onItemSelect(event) {
|
|
51210
|
-
const id = event.target.dataset.
|
|
51229
|
+
const id = event.target.dataset.ccSelect ?? '-1';
|
|
51211
51230
|
trace(`${T$2} onItemSelect`, { id });
|
|
51212
|
-
localStorage.setItem(
|
|
51231
|
+
localStorage.setItem(LOCAL_STORAGE_CC_ID, id);
|
|
51213
51232
|
this.selectItem(this.findById(Number(id)));
|
|
51214
51233
|
return false;
|
|
51215
51234
|
}
|
|
@@ -51225,16 +51244,17 @@ class Subtitles extends UICorePlugin {
|
|
|
51225
51244
|
}
|
|
51226
51245
|
}
|
|
51227
51246
|
hideMenu() {
|
|
51228
|
-
this.$('[data-
|
|
51247
|
+
this.$('[data-cc] ul').hide();
|
|
51229
51248
|
}
|
|
51230
51249
|
toggleMenu() {
|
|
51231
|
-
|
|
51250
|
+
trace(`${T$2} toggleMenu`);
|
|
51251
|
+
this.$('[data-cc] ul').toggle();
|
|
51232
51252
|
}
|
|
51233
51253
|
itemElement(id) {
|
|
51234
|
-
return this.$(`ul li a[data-
|
|
51254
|
+
return this.$(`ul li a[data-cc-select="${id}"]`).parent();
|
|
51235
51255
|
}
|
|
51236
51256
|
allItemElements() {
|
|
51237
|
-
return this.$('[data-
|
|
51257
|
+
return this.$('[data-cc] li');
|
|
51238
51258
|
}
|
|
51239
51259
|
selectSubtitles() {
|
|
51240
51260
|
const trackId = this.track ? this.track.id : -1;
|
|
@@ -51254,7 +51274,7 @@ class Subtitles extends UICorePlugin {
|
|
|
51254
51274
|
return lines.join('\n');
|
|
51255
51275
|
}
|
|
51256
51276
|
setSubtitleText(text) {
|
|
51257
|
-
this.$
|
|
51277
|
+
this.$line.find('p').html(text);
|
|
51258
51278
|
}
|
|
51259
51279
|
clearSubtitleText() {
|
|
51260
51280
|
this.setSubtitleText('');
|
|
@@ -51285,7 +51305,7 @@ class Subtitles extends UICorePlugin {
|
|
|
51285
51305
|
}
|
|
51286
51306
|
renderIcon() {
|
|
51287
51307
|
const icon = this.isShowing ? subtitlesOnIcon : subtitlesOffIcon;
|
|
51288
|
-
this.$el.find('span.
|
|
51308
|
+
this.$el.find('span.cc-text').html(icon);
|
|
51289
51309
|
}
|
|
51290
51310
|
}
|
|
51291
51311
|
|
|
@@ -52129,4 +52149,4 @@ class VolumeFade extends UICorePlugin {
|
|
|
52129
52149
|
}
|
|
52130
52150
|
}
|
|
52131
52151
|
|
|
52132
|
-
export { AudioSelector, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ContextMenu, DvrControls, ErrorScreen, Favicon, GoogleAnalytics, LevelSelector, LogTracer, Logger, Logo, MediaControl, MediaControlEvents, MultiCamera, PictureInPicture, PlaybackErrorCode, PlaybackRate, Player, PlayerEvent, Poster, SeekTime, SentryTracer, Share, SkipTime, SourceController, SpinnerEvents, SpinnerThreeBounce, Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents, reportError, setTracer, trace, version };
|
|
52152
|
+
export { AudioSelector, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GoogleAnalytics, LevelSelector, LogTracer, Logger, Logo, MediaControl, MediaControlEvents, MultiCamera, PictureInPicture, PlaybackErrorCode, PlaybackRate, Player, PlayerEvent, Poster, SeekTime, SentryTracer, Share, SkipTime, SourceController, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents, reportError, setTracer, trace, version };
|