@gcorevideo/player 2.25.7 → 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/bottom-gear/gear-sub-menu.scss +4 -9
- package/assets/media-control/container.scss +0 -13
- package/assets/media-control/media-control.scss +14 -12
- package/assets/media-control/width270.scss +3 -0
- package/assets/media-control/width370.scss +4 -0
- package/assets/multi-camera/style.scss +0 -5
- 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 +642 -696
- package/dist/index.embed.js +136 -98
- package/dist/index.js +77 -42
- 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 +7 -0
- 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/bottom-gear/BottomGear.ts +3 -4
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
- package/src/plugins/media-control/MediaControl.ts +10 -0
- 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/dist/index.js
CHANGED
|
@@ -43314,7 +43314,7 @@ class Player {
|
|
|
43314
43314
|
}
|
|
43315
43315
|
}
|
|
43316
43316
|
|
|
43317
|
-
var version$1 = "2.25.
|
|
43317
|
+
var version$1 = "2.25.8";
|
|
43318
43318
|
|
|
43319
43319
|
var packages = {
|
|
43320
43320
|
"node_modules/@clappr/core": {
|
|
@@ -43632,6 +43632,7 @@ const STANDARD_MEDIA_CONTROL_ELEMENTS = [
|
|
|
43632
43632
|
'seekbar',
|
|
43633
43633
|
'volume',
|
|
43634
43634
|
];
|
|
43635
|
+
const MENU_VMARGIN = 12;
|
|
43635
43636
|
// TODO export
|
|
43636
43637
|
const DEFAULT_SETTINGS = {
|
|
43637
43638
|
default: ['seekbar'],
|
|
@@ -43958,6 +43959,12 @@ class MediaControl extends UICorePlugin {
|
|
|
43958
43959
|
getAvailableHeight() {
|
|
43959
43960
|
return (this.core.$el.height() - this.$el.find('.media-control-layer').height());
|
|
43960
43961
|
}
|
|
43962
|
+
/**
|
|
43963
|
+
* @returns Vertical space available to render a popup menu
|
|
43964
|
+
*/
|
|
43965
|
+
getAvailablePopupHeight() {
|
|
43966
|
+
return this.getAvailableHeight() - MENU_VMARGIN * 2;
|
|
43967
|
+
}
|
|
43961
43968
|
/**
|
|
43962
43969
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
43963
43970
|
*/
|
|
@@ -45214,7 +45221,6 @@ const gearHdIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\
|
|
|
45214
45221
|
|
|
45215
45222
|
const VERSION$6 = '2.19.12';
|
|
45216
45223
|
const T$i = 'plugins.bottom_gear';
|
|
45217
|
-
const MENU_VMARGIN = 12;
|
|
45218
45224
|
const MENU_BACKLINK_HEIGHT = 44;
|
|
45219
45225
|
/**
|
|
45220
45226
|
* Events triggered by the plugin
|
|
@@ -45379,7 +45385,7 @@ class BottomGear extends UICorePlugin {
|
|
|
45379
45385
|
.appendTo(this.$el.find('#gear-options-wrapper'));
|
|
45380
45386
|
$item.on('click', (e) => {
|
|
45381
45387
|
e.stopPropagation();
|
|
45382
|
-
this.
|
|
45388
|
+
this.clampPopup($subMenu);
|
|
45383
45389
|
$subMenu.show();
|
|
45384
45390
|
this.$el.find('#gear-options').hide();
|
|
45385
45391
|
});
|
|
@@ -45476,9 +45482,8 @@ class BottomGear extends UICorePlugin {
|
|
|
45476
45482
|
const mediaControl = this.core.getPlugin('media_control');
|
|
45477
45483
|
mediaControl.slot('gear', this.$el);
|
|
45478
45484
|
}
|
|
45479
|
-
|
|
45480
|
-
const availableHeight = this.core.getPlugin('media_control').
|
|
45481
|
-
MENU_VMARGIN * 2;
|
|
45485
|
+
clampPopup($subMenu) {
|
|
45486
|
+
const availableHeight = this.core.getPlugin('media_control').getAvailablePopupHeight();
|
|
45482
45487
|
$subMenu.css('max-height', `${availableHeight}px`);
|
|
45483
45488
|
$subMenu
|
|
45484
45489
|
.find('.gear-sub-menu')
|
|
@@ -51627,9 +51632,9 @@ const subtitlesOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
|
|
|
51627
51632
|
|
|
51628
51633
|
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";
|
|
51629
51634
|
|
|
51630
|
-
const comboboxHTML = "<button
|
|
51635
|
+
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>";
|
|
51631
51636
|
|
|
51632
|
-
const stringHTML = "<div class=\"cc-line\" id=\"cc-line\">\n <p></p>\n</div>\n";
|
|
51637
|
+
const stringHTML = "<div class=\"gplayer-cc-line\" id=\"gplayer-cc-line\">\n <p></p>\n</div>\n";
|
|
51633
51638
|
|
|
51634
51639
|
const VERSION = '2.19.14';
|
|
51635
51640
|
const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
|
|
@@ -51664,6 +51669,7 @@ const T$3 = 'plugins.cc';
|
|
|
51664
51669
|
class ClosedCaptions extends UICorePlugin {
|
|
51665
51670
|
isPreselectedApplied = false;
|
|
51666
51671
|
active = false;
|
|
51672
|
+
open = false;
|
|
51667
51673
|
track = null;
|
|
51668
51674
|
tracks = [];
|
|
51669
51675
|
$line = null;
|
|
@@ -51685,14 +51691,14 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51685
51691
|
static get version() {
|
|
51686
51692
|
return VERSION;
|
|
51687
51693
|
}
|
|
51688
|
-
static
|
|
51689
|
-
static
|
|
51694
|
+
static templateControl = tmpl(comboboxHTML);
|
|
51695
|
+
static templateLine = tmpl(stringHTML);
|
|
51690
51696
|
/**
|
|
51691
51697
|
* @internal
|
|
51692
51698
|
*/
|
|
51693
51699
|
get attributes() {
|
|
51694
51700
|
return {
|
|
51695
|
-
class: 'media-control-cc',
|
|
51701
|
+
class: 'media-control-cc media-control-dd__wrap',
|
|
51696
51702
|
};
|
|
51697
51703
|
}
|
|
51698
51704
|
/**
|
|
@@ -51700,8 +51706,8 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51700
51706
|
*/
|
|
51701
51707
|
get events() {
|
|
51702
51708
|
return {
|
|
51703
|
-
'click #cc-
|
|
51704
|
-
'click #cc-button': 'toggleMenu',
|
|
51709
|
+
'click #gplayer-cc-menu [data-item]': 'onItemSelect',
|
|
51710
|
+
'click #gplayer-cc-button': 'toggleMenu',
|
|
51705
51711
|
};
|
|
51706
51712
|
}
|
|
51707
51713
|
get preselectedLanguage() {
|
|
@@ -51718,10 +51724,9 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51718
51724
|
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);
|
|
51719
51725
|
}
|
|
51720
51726
|
onCoreReady() {
|
|
51721
|
-
trace(`${T$3} onCoreReady`);
|
|
51722
51727
|
const mediaControl = this.core.getPlugin('media_control');
|
|
51723
51728
|
assert(mediaControl, 'media_control plugin is required');
|
|
51724
|
-
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.
|
|
51729
|
+
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.mount);
|
|
51725
51730
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, () => {
|
|
51726
51731
|
this.hideMenu();
|
|
51727
51732
|
});
|
|
@@ -51732,11 +51737,14 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51732
51737
|
});
|
|
51733
51738
|
}
|
|
51734
51739
|
onContainerChanged() {
|
|
51735
|
-
trace(`${T$3} onContainerChanged`);
|
|
51736
51740
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_FULLSCREEN, this.playerResize);
|
|
51737
51741
|
this.listenTo(this.core.activeContainer, 'container:advertisement:start', this.onStartAd);
|
|
51738
51742
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);
|
|
51739
51743
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_SUBTITLE_CHANGED, this.onSubtitleChanged);
|
|
51744
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_CLICK, () => {
|
|
51745
|
+
// TODO test
|
|
51746
|
+
this.hideMenu();
|
|
51747
|
+
});
|
|
51740
51748
|
// fix for iOS
|
|
51741
51749
|
const video = this.core.activePlayback.el;
|
|
51742
51750
|
assert(video, 'video element is required');
|
|
@@ -51754,6 +51762,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51754
51762
|
onSubtitleAvailable() {
|
|
51755
51763
|
trace(`${T$3} onSubtitleAvailable`);
|
|
51756
51764
|
this.applyTracks();
|
|
51765
|
+
this.mount();
|
|
51757
51766
|
}
|
|
51758
51767
|
onSubtitleChanged({ id }) {
|
|
51759
51768
|
trace(`${T$3} onSubtitleChanged`, { id });
|
|
@@ -51818,6 +51827,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51818
51827
|
}
|
|
51819
51828
|
try {
|
|
51820
51829
|
this.resizeFont();
|
|
51830
|
+
this.clampPopup();
|
|
51821
51831
|
}
|
|
51822
51832
|
catch (error) {
|
|
51823
51833
|
reportError(error);
|
|
@@ -51828,7 +51838,10 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51828
51838
|
*/
|
|
51829
51839
|
hide() {
|
|
51830
51840
|
this.active = false;
|
|
51841
|
+
this.open = false;
|
|
51831
51842
|
this.renderIcon();
|
|
51843
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
51844
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
51832
51845
|
this.$line.hide();
|
|
51833
51846
|
if (this.tracks) {
|
|
51834
51847
|
for (const t of this.tracks) {
|
|
@@ -51871,17 +51884,18 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51871
51884
|
if (!this.core.activeContainer) {
|
|
51872
51885
|
return this;
|
|
51873
51886
|
}
|
|
51874
|
-
|
|
51875
|
-
|
|
51876
|
-
|
|
51877
|
-
|
|
51878
|
-
|
|
51879
|
-
this.$el.find('#cc-
|
|
51880
|
-
this.
|
|
51881
|
-
this.$line
|
|
51887
|
+
this.$el.html(ClosedCaptions.templateControl({
|
|
51888
|
+
tracks: this.tracks ?? [],
|
|
51889
|
+
i18n: this.core.i18n,
|
|
51890
|
+
current: this.track?.id ?? -1,
|
|
51891
|
+
}));
|
|
51892
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
51893
|
+
this.open = false;
|
|
51894
|
+
this.core.activeContainer.$el.find('#gplayer-cc-line').remove();
|
|
51895
|
+
this.$line = $(ClosedCaptions.templateLine());
|
|
51882
51896
|
this.resizeFont();
|
|
51897
|
+
this.clampPopup();
|
|
51883
51898
|
this.core.activeContainer.$el.append(this.$line);
|
|
51884
|
-
mediaControl.slot('cc', this.$el);
|
|
51885
51899
|
this.updateSelection();
|
|
51886
51900
|
this.renderIcon();
|
|
51887
51901
|
return this;
|
|
@@ -51895,9 +51909,10 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51895
51909
|
this.updateSelection();
|
|
51896
51910
|
}
|
|
51897
51911
|
onItemSelect(event) {
|
|
51898
|
-
|
|
51899
|
-
|
|
51900
|
-
|
|
51912
|
+
// event.target does not exist for some reason in tests
|
|
51913
|
+
const id = (event.target ?? event.currentTarget).dataset?.item ??
|
|
51914
|
+
'-1';
|
|
51915
|
+
localStorage.setItem(LOCAL_STORAGE_CC_ID, id); // TODO store language instead
|
|
51901
51916
|
this.selectItem(this.findById(Number(id)));
|
|
51902
51917
|
this.hideMenu();
|
|
51903
51918
|
return false;
|
|
@@ -51914,26 +51929,33 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51914
51929
|
}
|
|
51915
51930
|
}
|
|
51916
51931
|
hideMenu() {
|
|
51917
|
-
|
|
51918
|
-
this.$el.find('#cc-
|
|
51932
|
+
this.open = false;
|
|
51933
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
51934
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
51919
51935
|
}
|
|
51920
51936
|
toggleMenu() {
|
|
51921
|
-
trace(`${T$3} toggleMenu`, { display: this.$el.find('#cc-select').css('display') });
|
|
51922
51937
|
this.core
|
|
51923
51938
|
.getPlugin('media_control')
|
|
51924
51939
|
.trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
|
|
51925
|
-
this
|
|
51926
|
-
|
|
51940
|
+
this.open = !this.open;
|
|
51941
|
+
if (this.open) {
|
|
51942
|
+
this.$el.find('#gplayer-cc-menu').show();
|
|
51943
|
+
}
|
|
51944
|
+
else {
|
|
51945
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
51946
|
+
}
|
|
51947
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', this.open);
|
|
51927
51948
|
}
|
|
51928
51949
|
itemElement(id) {
|
|
51929
|
-
|
|
51950
|
+
// TODO fix semantically
|
|
51951
|
+
return this.$el.find(`#gplayer-cc-menu [data-item="${id}"]`).parent();
|
|
51930
51952
|
}
|
|
51931
51953
|
allItemElements() {
|
|
51932
|
-
return this.$('#cc-
|
|
51954
|
+
return this.$el.find('#gplayer-cc-menu li'); // TODO fix semantically
|
|
51933
51955
|
}
|
|
51934
51956
|
selectSubtitles() {
|
|
51935
51957
|
const trackId = this.track ? this.track.id : -1;
|
|
51936
|
-
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
51958
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId; // TODO test
|
|
51937
51959
|
}
|
|
51938
51960
|
getSubtitleText(track) {
|
|
51939
51961
|
const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
|
|
@@ -51943,6 +51965,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51943
51965
|
for (const cue of cues) {
|
|
51944
51966
|
if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
|
|
51945
51967
|
lines.push(cue.getCueAsHTML().textContent);
|
|
51968
|
+
// TODO break?
|
|
51946
51969
|
}
|
|
51947
51970
|
}
|
|
51948
51971
|
}
|
|
@@ -51968,19 +51991,31 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51968
51991
|
this.allItemElements()
|
|
51969
51992
|
.removeClass('current')
|
|
51970
51993
|
.find('a')
|
|
51971
|
-
.removeClass('gcore-skin-active')
|
|
51972
|
-
|
|
51973
|
-
track: this.track?.id,
|
|
51974
|
-
});
|
|
51994
|
+
.removeClass('gcore-skin-active')
|
|
51995
|
+
.attr('aria-checked', 'false');
|
|
51975
51996
|
const currentLevelElement = this.itemElement(this.track ? this.track.id : -1);
|
|
51976
51997
|
currentLevelElement
|
|
51977
51998
|
.addClass('current')
|
|
51978
51999
|
.find('a')
|
|
51979
|
-
.addClass('gcore-skin-active')
|
|
52000
|
+
.addClass('gcore-skin-active')
|
|
52001
|
+
.attr('aria-checked', 'true');
|
|
51980
52002
|
}
|
|
51981
52003
|
renderIcon() {
|
|
52004
|
+
// render both icons at once
|
|
51982
52005
|
const icon = this.active ? subtitlesOnIcon : subtitlesOffIcon;
|
|
51983
|
-
this.$el.find('
|
|
52006
|
+
this.$el.find('#gplayer-cc-button').html(icon);
|
|
52007
|
+
}
|
|
52008
|
+
clampPopup() {
|
|
52009
|
+
const availableHeight = this.core
|
|
52010
|
+
.getPlugin('media_control')
|
|
52011
|
+
.getAvailablePopupHeight();
|
|
52012
|
+
this.$el.find('#gplayer-cc-menu').css('max-height', `${availableHeight}px`);
|
|
52013
|
+
}
|
|
52014
|
+
mount() {
|
|
52015
|
+
if (this.shouldRender()) {
|
|
52016
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
52017
|
+
mediaControl.slot('cc', this.$el);
|
|
52018
|
+
}
|
|
51984
52019
|
}
|
|
51985
52020
|
}
|
|
51986
52021
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAKb,MAAM,cAAc,CAAA;AAOrB,OAAO,uCAAuC,CAAA;AAC9C,OAAO,gDAAgD,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAU5C;;;GAGG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,QAAQ,aAAa;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,EAAE,CAAQ;IAElB,OAAO,CAAC,QAAQ,CAAI;IAEpB,OAAO,CAAC,SAAS,CAAO;IAExB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAInB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW;IA2B1D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAqBf;;;;OAIG;IACH,OAAO;IAIP,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAKb,MAAM,cAAc,CAAA;AAOrB,OAAO,uCAAuC,CAAA;AAC9C,OAAO,gDAAgD,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAU5C;;;GAGG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,QAAQ,aAAa;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,EAAE,CAAQ;IAElB,OAAO,CAAC,QAAQ,CAAI;IAEpB,OAAO,CAAC,SAAS,CAAO;IAExB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAInB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW;IA2B1D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAqBf;;;;OAIG;IACH,OAAO;IAIP,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,UAAU;CAQnB"}
|
|
@@ -175,7 +175,7 @@ export class BottomGear extends UICorePlugin {
|
|
|
175
175
|
.appendTo(this.$el.find('#gear-options-wrapper'));
|
|
176
176
|
$item.on('click', (e) => {
|
|
177
177
|
e.stopPropagation();
|
|
178
|
-
this.
|
|
178
|
+
this.clampPopup($subMenu);
|
|
179
179
|
$subMenu.show();
|
|
180
180
|
this.$el.find('#gear-options').hide();
|
|
181
181
|
});
|
|
@@ -272,9 +272,8 @@ export class BottomGear extends UICorePlugin {
|
|
|
272
272
|
const mediaControl = this.core.getPlugin('media_control');
|
|
273
273
|
mediaControl.slot('gear', this.$el);
|
|
274
274
|
}
|
|
275
|
-
|
|
276
|
-
const availableHeight = this.core.getPlugin('media_control').
|
|
277
|
-
MENU_VMARGIN * 2;
|
|
275
|
+
clampPopup($subMenu) {
|
|
276
|
+
const availableHeight = this.core.getPlugin('media_control').getAvailablePopupHeight();
|
|
278
277
|
$subMenu.css('max-height', `${availableHeight}px`);
|
|
279
278
|
$subMenu
|
|
280
279
|
.find('.gear-sub-menu')
|
|
@@ -233,6 +233,10 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
233
233
|
* This takes into account the container height and excludes the height of the controls bar
|
|
234
234
|
*/
|
|
235
235
|
getAvailableHeight(): number;
|
|
236
|
+
/**
|
|
237
|
+
* @returns Vertical space available to render a popup menu
|
|
238
|
+
*/
|
|
239
|
+
getAvailablePopupHeight(): number;
|
|
236
240
|
/**
|
|
237
241
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
238
242
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,YAAY,EAMZ,IAAI,EACL,MAAM,cAAc,CAAA;AASrB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAI5C,OAAO,kDAAkD,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ const STANDARD_MEDIA_CONTROL_ELEMENTS = [
|
|
|
30
30
|
'seekbar',
|
|
31
31
|
'volume',
|
|
32
32
|
];
|
|
33
|
+
const MENU_VMARGIN = 12;
|
|
33
34
|
// TODO export
|
|
34
35
|
const DEFAULT_SETTINGS = {
|
|
35
36
|
default: ['seekbar'],
|
|
@@ -356,6 +357,12 @@ export class MediaControl extends UICorePlugin {
|
|
|
356
357
|
getAvailableHeight() {
|
|
357
358
|
return (this.core.$el.height() - this.$el.find('.media-control-layer').height());
|
|
358
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* @returns Vertical space available to render a popup menu
|
|
362
|
+
*/
|
|
363
|
+
getAvailablePopupHeight() {
|
|
364
|
+
return this.getAvailableHeight() - MENU_VMARGIN * 2;
|
|
365
|
+
}
|
|
359
366
|
/**
|
|
360
367
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
361
368
|
*/
|
|
@@ -40,6 +40,7 @@ export type ClosedCaptionsPluginSettings = {
|
|
|
40
40
|
export declare class ClosedCaptions extends UICorePlugin {
|
|
41
41
|
private isPreselectedApplied;
|
|
42
42
|
private active;
|
|
43
|
+
private open;
|
|
43
44
|
private track;
|
|
44
45
|
private tracks;
|
|
45
46
|
private $line;
|
|
@@ -57,8 +58,8 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
57
58
|
* @internal
|
|
58
59
|
*/
|
|
59
60
|
static get version(): string;
|
|
60
|
-
private static readonly
|
|
61
|
-
private static readonly
|
|
61
|
+
private static readonly templateControl;
|
|
62
|
+
private static readonly templateLine;
|
|
62
63
|
/**
|
|
63
64
|
* @internal
|
|
64
65
|
*/
|
|
@@ -69,8 +70,8 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
69
70
|
* @internal
|
|
70
71
|
*/
|
|
71
72
|
get events(): {
|
|
72
|
-
'click #cc-
|
|
73
|
-
'click #cc-button': string;
|
|
73
|
+
'click #gplayer-cc-menu [data-item]': string;
|
|
74
|
+
'click #gplayer-cc-button': string;
|
|
74
75
|
};
|
|
75
76
|
private get preselectedLanguage();
|
|
76
77
|
/**
|
|
@@ -114,5 +115,7 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
114
115
|
private updateSelection;
|
|
115
116
|
private highlightCurrentSubtitles;
|
|
116
117
|
private renderIcon;
|
|
118
|
+
private clampPopup;
|
|
119
|
+
private mount;
|
|
117
120
|
}
|
|
118
121
|
//# sourceMappingURL=ClosedCaptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClosedCaptions.d.ts","sourceRoot":"","sources":["../../../src/plugins/subtitles/ClosedCaptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAwB,MAAM,cAAc,CAAA;AAOzE,OAAO,sCAAsC,CAAA;AAgB7C;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,oBAAoB,CAAQ;IAEpC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,KAAK,CAA6B;IAE1C,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,KAAK,CAA2B;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"ClosedCaptions.d.ts","sourceRoot":"","sources":["../../../src/plugins/subtitles/ClosedCaptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAwB,MAAM,cAAc,CAAA;AAOzE,OAAO,sCAAsC,CAAA;AAgB7C;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,oBAAoB,CAAQ;IAEpC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,KAAK,CAA6B;IAE1C,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,KAAK,CAA2B;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEhE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuB;IAE3D;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED,OAAO,KAAK,mBAAmB,GAM9B;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACH,IAAI;IAcJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA4Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,KAAK;CAMd"}
|
|
@@ -42,6 +42,7 @@ const T = 'plugins.cc';
|
|
|
42
42
|
export class ClosedCaptions extends UICorePlugin {
|
|
43
43
|
isPreselectedApplied = false;
|
|
44
44
|
active = false;
|
|
45
|
+
open = false;
|
|
45
46
|
track = null;
|
|
46
47
|
tracks = [];
|
|
47
48
|
$line = null;
|
|
@@ -63,14 +64,14 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
63
64
|
static get version() {
|
|
64
65
|
return VERSION;
|
|
65
66
|
}
|
|
66
|
-
static
|
|
67
|
-
static
|
|
67
|
+
static templateControl = template(comboboxHTML);
|
|
68
|
+
static templateLine = template(stringHTML);
|
|
68
69
|
/**
|
|
69
70
|
* @internal
|
|
70
71
|
*/
|
|
71
72
|
get attributes() {
|
|
72
73
|
return {
|
|
73
|
-
class: 'media-control-cc',
|
|
74
|
+
class: 'media-control-cc media-control-dd__wrap',
|
|
74
75
|
};
|
|
75
76
|
}
|
|
76
77
|
/**
|
|
@@ -78,8 +79,8 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
78
79
|
*/
|
|
79
80
|
get events() {
|
|
80
81
|
return {
|
|
81
|
-
'click #cc-
|
|
82
|
-
'click #cc-button': 'toggleMenu',
|
|
82
|
+
'click #gplayer-cc-menu [data-item]': 'onItemSelect',
|
|
83
|
+
'click #gplayer-cc-button': 'toggleMenu',
|
|
83
84
|
};
|
|
84
85
|
}
|
|
85
86
|
get preselectedLanguage() {
|
|
@@ -96,10 +97,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
96
97
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);
|
|
97
98
|
}
|
|
98
99
|
onCoreReady() {
|
|
99
|
-
trace(`${T} onCoreReady`);
|
|
100
100
|
const mediaControl = this.core.getPlugin('media_control');
|
|
101
101
|
assert(mediaControl, 'media_control plugin is required');
|
|
102
|
-
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.
|
|
102
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.mount);
|
|
103
103
|
this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, () => {
|
|
104
104
|
this.hideMenu();
|
|
105
105
|
});
|
|
@@ -110,11 +110,14 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
112
|
onContainerChanged() {
|
|
113
|
-
trace(`${T} onContainerChanged`);
|
|
114
113
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_FULLSCREEN, this.playerResize);
|
|
115
114
|
this.listenTo(this.core.activeContainer, 'container:advertisement:start', this.onStartAd);
|
|
116
115
|
this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);
|
|
117
116
|
this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_CHANGED, this.onSubtitleChanged);
|
|
117
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_CLICK, () => {
|
|
118
|
+
// TODO test
|
|
119
|
+
this.hideMenu();
|
|
120
|
+
});
|
|
118
121
|
// fix for iOS
|
|
119
122
|
const video = this.core.activePlayback.el;
|
|
120
123
|
assert(video, 'video element is required');
|
|
@@ -132,6 +135,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
132
135
|
onSubtitleAvailable() {
|
|
133
136
|
trace(`${T} onSubtitleAvailable`);
|
|
134
137
|
this.applyTracks();
|
|
138
|
+
this.mount();
|
|
135
139
|
}
|
|
136
140
|
onSubtitleChanged({ id }) {
|
|
137
141
|
trace(`${T} onSubtitleChanged`, { id });
|
|
@@ -196,6 +200,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
196
200
|
}
|
|
197
201
|
try {
|
|
198
202
|
this.resizeFont();
|
|
203
|
+
this.clampPopup();
|
|
199
204
|
}
|
|
200
205
|
catch (error) {
|
|
201
206
|
reportError(error);
|
|
@@ -206,7 +211,10 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
206
211
|
*/
|
|
207
212
|
hide() {
|
|
208
213
|
this.active = false;
|
|
214
|
+
this.open = false;
|
|
209
215
|
this.renderIcon();
|
|
216
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
217
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
210
218
|
this.$line.hide();
|
|
211
219
|
if (this.tracks) {
|
|
212
220
|
for (const t of this.tracks) {
|
|
@@ -249,17 +257,18 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
249
257
|
if (!this.core.activeContainer) {
|
|
250
258
|
return this;
|
|
251
259
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
this.$el.find('#cc-
|
|
258
|
-
this.
|
|
259
|
-
this.$line
|
|
260
|
+
this.$el.html(ClosedCaptions.templateControl({
|
|
261
|
+
tracks: this.tracks ?? [],
|
|
262
|
+
i18n: this.core.i18n,
|
|
263
|
+
current: this.track?.id ?? -1,
|
|
264
|
+
}));
|
|
265
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
266
|
+
this.open = false;
|
|
267
|
+
this.core.activeContainer.$el.find('#gplayer-cc-line').remove();
|
|
268
|
+
this.$line = $(ClosedCaptions.templateLine());
|
|
260
269
|
this.resizeFont();
|
|
270
|
+
this.clampPopup();
|
|
261
271
|
this.core.activeContainer.$el.append(this.$line);
|
|
262
|
-
mediaControl.slot('cc', this.$el);
|
|
263
272
|
this.updateSelection();
|
|
264
273
|
this.renderIcon();
|
|
265
274
|
return this;
|
|
@@ -273,9 +282,10 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
273
282
|
this.updateSelection();
|
|
274
283
|
}
|
|
275
284
|
onItemSelect(event) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
285
|
+
// event.target does not exist for some reason in tests
|
|
286
|
+
const id = (event.target ?? event.currentTarget).dataset?.item ??
|
|
287
|
+
'-1';
|
|
288
|
+
localStorage.setItem(LOCAL_STORAGE_CC_ID, id); // TODO store language instead
|
|
279
289
|
this.selectItem(this.findById(Number(id)));
|
|
280
290
|
this.hideMenu();
|
|
281
291
|
return false;
|
|
@@ -292,26 +302,33 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
292
302
|
}
|
|
293
303
|
}
|
|
294
304
|
hideMenu() {
|
|
295
|
-
|
|
296
|
-
this.$el.find('#cc-
|
|
305
|
+
this.open = false;
|
|
306
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
307
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
297
308
|
}
|
|
298
309
|
toggleMenu() {
|
|
299
|
-
trace(`${T} toggleMenu`, { display: this.$el.find('#cc-select').css('display') });
|
|
300
310
|
this.core
|
|
301
311
|
.getPlugin('media_control')
|
|
302
312
|
.trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
|
|
303
|
-
this
|
|
304
|
-
|
|
313
|
+
this.open = !this.open;
|
|
314
|
+
if (this.open) {
|
|
315
|
+
this.$el.find('#gplayer-cc-menu').show();
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
319
|
+
}
|
|
320
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', this.open);
|
|
305
321
|
}
|
|
306
322
|
itemElement(id) {
|
|
307
|
-
|
|
323
|
+
// TODO fix semantically
|
|
324
|
+
return this.$el.find(`#gplayer-cc-menu [data-item="${id}"]`).parent();
|
|
308
325
|
}
|
|
309
326
|
allItemElements() {
|
|
310
|
-
return this.$('#cc-
|
|
327
|
+
return this.$el.find('#gplayer-cc-menu li'); // TODO fix semantically
|
|
311
328
|
}
|
|
312
329
|
selectSubtitles() {
|
|
313
330
|
const trackId = this.track ? this.track.id : -1;
|
|
314
|
-
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
331
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId; // TODO test
|
|
315
332
|
}
|
|
316
333
|
getSubtitleText(track) {
|
|
317
334
|
const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
|
|
@@ -321,6 +338,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
321
338
|
for (const cue of cues) {
|
|
322
339
|
if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
|
|
323
340
|
lines.push(cue.getCueAsHTML().textContent);
|
|
341
|
+
// TODO break?
|
|
324
342
|
}
|
|
325
343
|
}
|
|
326
344
|
}
|
|
@@ -346,18 +364,30 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
346
364
|
this.allItemElements()
|
|
347
365
|
.removeClass('current')
|
|
348
366
|
.find('a')
|
|
349
|
-
.removeClass('gcore-skin-active')
|
|
350
|
-
|
|
351
|
-
track: this.track?.id,
|
|
352
|
-
});
|
|
367
|
+
.removeClass('gcore-skin-active')
|
|
368
|
+
.attr('aria-checked', 'false');
|
|
353
369
|
const currentLevelElement = this.itemElement(this.track ? this.track.id : -1);
|
|
354
370
|
currentLevelElement
|
|
355
371
|
.addClass('current')
|
|
356
372
|
.find('a')
|
|
357
|
-
.addClass('gcore-skin-active')
|
|
373
|
+
.addClass('gcore-skin-active')
|
|
374
|
+
.attr('aria-checked', 'true');
|
|
358
375
|
}
|
|
359
376
|
renderIcon() {
|
|
377
|
+
// render both icons at once
|
|
360
378
|
const icon = this.active ? subtitlesOnIcon : subtitlesOffIcon;
|
|
361
|
-
this.$el.find('
|
|
379
|
+
this.$el.find('#gplayer-cc-button').html(icon);
|
|
380
|
+
}
|
|
381
|
+
clampPopup() {
|
|
382
|
+
const availableHeight = this.core
|
|
383
|
+
.getPlugin('media_control')
|
|
384
|
+
.getAvailablePopupHeight();
|
|
385
|
+
this.$el.find('#gplayer-cc-menu').css('max-height', `${availableHeight}px`);
|
|
386
|
+
}
|
|
387
|
+
mount() {
|
|
388
|
+
if (this.shouldRender()) {
|
|
389
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
390
|
+
mediaControl.slot('cc', this.$el);
|
|
391
|
+
}
|
|
362
392
|
}
|
|
363
393
|
}
|