@gcorevideo/player 2.22.23 → 2.22.24

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.
Files changed (32) hide show
  1. package/assets/subtitles/combobox.ejs +1 -1
  2. package/assets/subtitles/style.scss +0 -1
  3. package/dist/core.js +1 -1
  4. package/dist/index.css +816 -817
  5. package/dist/index.js +48 -31
  6. package/dist/plugins/index.css +848 -849
  7. package/dist/plugins/index.js +47 -29
  8. package/lib/plugins/audio-selector/AudioTracks.d.ts +2 -2
  9. package/lib/plugins/audio-selector/AudioTracks.d.ts.map +1 -1
  10. package/lib/plugins/audio-selector/AudioTracks.js +12 -7
  11. package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -1
  12. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  13. package/lib/plugins/bottom-gear/BottomGear.js +9 -5
  14. package/lib/plugins/subtitles/ClosedCaptions.d.ts +3 -3
  15. package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
  16. package/lib/plugins/subtitles/ClosedCaptions.js +27 -19
  17. package/lib/testUtils.d.ts.map +1 -1
  18. package/lib/testUtils.js +1 -0
  19. package/package.json +1 -1
  20. package/src/plugins/audio-selector/AudioTracks.ts +12 -7
  21. package/src/plugins/audio-selector/__tests__/AudioTracks.test.ts +18 -1
  22. package/src/plugins/audio-selector/__tests__/__snapshots__/AudioTracks.test.ts.snap +1 -1
  23. package/src/plugins/bottom-gear/BottomGear.ts +9 -5
  24. package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +22 -1
  25. package/src/plugins/subtitles/ClosedCaptions.ts +27 -20
  26. package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +51 -13
  27. package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +4 -4
  28. package/src/testUtils.ts +1 -0
  29. package/tsconfig.tsbuildinfo +1 -1
  30. package/assets/subtitles/combobox copy.ejs +0 -16
  31. /package/assets/{audio-selector → audio-tracks}/style.scss +0 -0
  32. /package/assets/{audio-selector/track-selector.ejs → audio-tracks/template.ejs} +0 -0
@@ -11241,7 +11241,7 @@ class AudioTracks extends UICorePlugin {
11241
11241
  * @internal
11242
11242
  */
11243
11243
  get name() {
11244
- return 'audio_selector'; // TODO rename to audiotracks
11244
+ return 'audio_tracks';
11245
11245
  }
11246
11246
  /**
11247
11247
  * @internal
@@ -11270,7 +11270,7 @@ class AudioTracks extends UICorePlugin {
11270
11270
  get events() {
11271
11271
  return {
11272
11272
  'click [data-audiotracks-select]': 'onTrackSelect',
11273
- 'click #audiotracks-button': 'toggleContextMenu',
11273
+ 'click #audiotracks-button': 'toggleMenu',
11274
11274
  };
11275
11275
  }
11276
11276
  /**
@@ -11287,7 +11287,11 @@ class AudioTracks extends UICorePlugin {
11287
11287
  mediaControl.mount('audiotracks', this.$el);
11288
11288
  });
11289
11289
  this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
11290
- this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hideMenu);
11290
+ this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
11291
+ if (from !== this.name) {
11292
+ this.hideMenu();
11293
+ }
11294
+ });
11291
11295
  }
11292
11296
  onActiveContainerChanged() {
11293
11297
  this.currentTrack = null;
@@ -11342,9 +11346,10 @@ class AudioTracks extends UICorePlugin {
11342
11346
  }
11343
11347
  hideMenu() {
11344
11348
  this.$el.find('#audiotracks-select').addClass('hidden');
11349
+ this.$el.find('#audiotracks-button').attr('aria-expanded', 'false');
11345
11350
  }
11346
- toggleContextMenu() {
11347
- this.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE);
11351
+ toggleMenu() {
11352
+ this.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
11348
11353
  this.$el.find('#audiotracks-select').toggleClass('hidden'); // TODO use plain CSS display: none
11349
11354
  const open = !this.$el.find('#audiotracks-select').hasClass('hidden'); // TODO hold state
11350
11355
  this.$el.find('#audiotracks-button').attr('aria-expanded', open);
@@ -11617,7 +11622,7 @@ var GearEvents;
11617
11622
  * ```
11618
11623
  */
11619
11624
  class BottomGear extends UICorePlugin {
11620
- isHd = false;
11625
+ hd = false;
11621
11626
  /**
11622
11627
  * @internal
11623
11628
  */
@@ -11710,7 +11715,7 @@ class BottomGear extends UICorePlugin {
11710
11715
  this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
11711
11716
  }
11712
11717
  highDefinitionUpdate(isHd) {
11713
- this.isHd = isHd;
11718
+ this.hd = isHd;
11714
11719
  this.$el.find('.gear-icon').html(isHd ? gearHdIcon : gearIcon);
11715
11720
  }
11716
11721
  /**
@@ -11721,7 +11726,7 @@ class BottomGear extends UICorePlugin {
11721
11726
  if (!mediaControl) {
11722
11727
  return this; // TODO test
11723
11728
  }
11724
- const icon = this.isHd ? gearHdIcon : gearIcon;
11729
+ const icon = this.hd ? gearHdIcon : gearIcon;
11725
11730
  this.$el
11726
11731
  .html(BottomGear.template({ icon }))
11727
11732
  .find('#gear-sub-menu-wrapper')
@@ -11744,7 +11749,7 @@ class BottomGear extends UICorePlugin {
11744
11749
  toggleGearMenu() {
11745
11750
  this.core
11746
11751
  .getPlugin('media_control')
11747
- .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE);
11752
+ .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
11748
11753
  this.$el.find('#gear-options-wrapper').toggle();
11749
11754
  }
11750
11755
  hide() {
@@ -11755,7 +11760,11 @@ class BottomGear extends UICorePlugin {
11755
11760
  assert(mediaControl, 'media_control plugin is required');
11756
11761
  this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.onMediaControlRendered);
11757
11762
  this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hide);
11758
- this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hide);
11763
+ this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
11764
+ if (from !== this.name) {
11765
+ this.hide();
11766
+ }
11767
+ });
11759
11768
  }
11760
11769
  onMediaControlRendered() {
11761
11770
  const mediaControl = this.core.getPlugin('media_control');
@@ -17724,7 +17733,7 @@ const subtitlesOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"
17724
17733
 
17725
17734
  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";
17726
17735
 
17727
- 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";
17736
+ 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\"><%= i18n.t('off') %></a></li>\n</ul>\n";
17728
17737
 
17729
17738
  const stringHTML = "<div class=\"cc-line\" id=\"cc-line\">\n <p></p>\n</div>\n";
17730
17739
 
@@ -17760,7 +17769,7 @@ const T$2 = 'plugins.cc';
17760
17769
  */
17761
17770
  class ClosedCaptions extends UICorePlugin {
17762
17771
  isPreselectedApplied = false;
17763
- isShowing = false;
17772
+ active = false;
17764
17773
  track = null;
17765
17774
  tracks = [];
17766
17775
  $line = null;
@@ -17797,8 +17806,8 @@ class ClosedCaptions extends UICorePlugin {
17797
17806
  */
17798
17807
  get events() {
17799
17808
  return {
17800
- 'click [data-cc-select]': 'onItemSelect',
17801
- 'click [data-cc-button]': 'toggleMenu',
17809
+ 'click #cc-select li a': 'onItemSelect',
17810
+ 'click #cc-button': 'toggleMenu',
17802
17811
  };
17803
17812
  }
17804
17813
  get preselectedLanguage() {
@@ -17817,9 +17826,15 @@ class ClosedCaptions extends UICorePlugin {
17817
17826
  onCoreReady() {
17818
17827
  const mediaControl = this.core.getPlugin('media_control');
17819
17828
  assert(mediaControl, 'media_control plugin is required');
17820
- this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
17821
- this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
17822
- this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hideMenu);
17829
+ this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render); // TODO mount to media control
17830
+ this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, () => {
17831
+ this.hideMenu();
17832
+ });
17833
+ this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
17834
+ if (from !== this.name) {
17835
+ this.hideMenu();
17836
+ }
17837
+ });
17823
17838
  }
17824
17839
  onContainerChanged() {
17825
17840
  this.listenTo(this.core.activeContainer, Events.CONTAINER_FULLSCREEN, this.playerResize);
@@ -17881,7 +17896,7 @@ class ClosedCaptions extends UICorePlugin {
17881
17896
  }
17882
17897
  }
17883
17898
  onStartAd() {
17884
- if (this.isShowing && this.core.activeContainer) {
17899
+ if (this.active && this.core.activeContainer) {
17885
17900
  this.hide();
17886
17901
  this.listenTo(this.core.activeContainer, 'container:advertisement:finish', this.onFinishAd);
17887
17902
  }
@@ -17896,7 +17911,7 @@ class ClosedCaptions extends UICorePlugin {
17896
17911
  this.track &&
17897
17912
  this.track.track.mode &&
17898
17913
  Browser.isiOS &&
17899
- this.isShowing;
17914
+ this.active;
17900
17915
  if (shouldShow) {
17901
17916
  this.show();
17902
17917
  }
@@ -17910,7 +17925,7 @@ class ClosedCaptions extends UICorePlugin {
17910
17925
  * Hides the subtitles menu and the subtitles.
17911
17926
  */
17912
17927
  hide() {
17913
- this.isShowing = false;
17928
+ this.active = false;
17914
17929
  this.renderIcon();
17915
17930
  this.$line.hide();
17916
17931
  if (this.tracks) {
@@ -17923,7 +17938,7 @@ class ClosedCaptions extends UICorePlugin {
17923
17938
  * Shows the subtitles menu and the subtitles.
17924
17939
  */
17925
17940
  show() {
17926
- this.isShowing = true;
17941
+ this.active = true;
17927
17942
  this.renderIcon();
17928
17943
  if (this.core.activeContainer &&
17929
17944
  isFullscreen(this.core.activeContainer.el) &&
@@ -17958,7 +17973,8 @@ class ClosedCaptions extends UICorePlugin {
17958
17973
  return this;
17959
17974
  }
17960
17975
  const mediaControl = this.core.getPlugin('media_control');
17961
- this.$el.html(ClosedCaptions.template({ tracks: this.tracks }));
17976
+ this.$el.html(ClosedCaptions.template({ tracks: this.tracks, i18n: this.core.i18n }));
17977
+ this.$el.find('#cc-select').hide();
17962
17978
  this.core.activeContainer.$el.find('#cc-line').remove();
17963
17979
  this.$line = $(ClosedCaptions.templateString());
17964
17980
  this.resizeFont();
@@ -17974,13 +17990,13 @@ class ClosedCaptions extends UICorePlugin {
17974
17990
  selectItem(item) {
17975
17991
  this.clearSubtitleText();
17976
17992
  this.track = item;
17977
- this.hideMenu();
17978
17993
  this.updateSelection();
17979
17994
  }
17980
17995
  onItemSelect(event) {
17981
17996
  const id = event.target.dataset.ccSelect ?? '-1';
17982
17997
  localStorage.setItem(LOCAL_STORAGE_CC_ID, id);
17983
17998
  this.selectItem(this.findById(Number(id)));
17999
+ this.hideMenu();
17984
18000
  return false;
17985
18001
  }
17986
18002
  applyPreselectedSubtitles() {
@@ -17995,19 +18011,21 @@ class ClosedCaptions extends UICorePlugin {
17995
18011
  }
17996
18012
  }
17997
18013
  hideMenu() {
17998
- this.$('[data-cc] ul').hide();
18014
+ this.$el.find('#cc-select').hide();
17999
18015
  }
18000
18016
  toggleMenu() {
18017
+ trace(`${T$2} toggleMenu`, { display: this.$el.find('#cc-select').css('display') });
18001
18018
  this.core
18002
18019
  .getPlugin('media_control')
18003
- .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE);
18004
- this.$el.find('[data-cc] ul').toggle();
18020
+ .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
18021
+ this.$el.find('#cc-select').toggle();
18022
+ // TODO hold state, add aria-expanded to the button, add active state to the button
18005
18023
  }
18006
18024
  itemElement(id) {
18007
- return this.$(`ul li a[data-cc-select="${id}"]`).parent();
18025
+ return this.$el.find(`#cc-select li a[data-cc-select="${id}"]`).parent();
18008
18026
  }
18009
18027
  allItemElements() {
18010
- return this.$('[data-cc] li');
18028
+ return this.$('#cc-select li');
18011
18029
  }
18012
18030
  selectSubtitles() {
18013
18031
  const trackId = this.track ? this.track.id : -1;
@@ -18057,7 +18075,7 @@ class ClosedCaptions extends UICorePlugin {
18057
18075
  .addClass('gcore-skin-active');
18058
18076
  }
18059
18077
  renderIcon() {
18060
- const icon = this.isShowing ? subtitlesOnIcon : subtitlesOffIcon;
18078
+ const icon = this.active ? subtitlesOnIcon : subtitlesOffIcon;
18061
18079
  this.$el.find('span.cc-text').html(icon);
18062
18080
  }
18063
18081
  }
@@ -1,5 +1,5 @@
1
1
  import { UICorePlugin } from '@clappr/core';
2
- import '../../../assets/audio-selector/style.scss';
2
+ import '../../../assets/audio-tracks/style.scss';
3
3
  /**
4
4
  * `PLUGIN` that makes possible to switch audio tracks via the media control UI.
5
5
  * @beta
@@ -55,7 +55,7 @@ export declare class AudioTracks extends UICorePlugin {
55
55
  private onTrackSelect;
56
56
  private selectAudioTrack;
57
57
  private hideMenu;
58
- private toggleContextMenu;
58
+ private toggleMenu;
59
59
  private buttonElement;
60
60
  private buttonElementText;
61
61
  private trackElement;
@@ -1 +1 @@
1
- {"version":3,"file":"AudioTracks.d.ts","sourceRoot":"","sources":["../../../src/plugins/audio-selector/AudioTracks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAY,MAAM,cAAc,CAAA;AAO7D,OAAO,2CAA2C,CAAA;AAUlD;;;;;;;;;GASG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,YAAY,CAA0B;IAE9C,OAAO,CAAC,MAAM,CAAmB;IAEjC;;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;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACM,MAAM;IAmBf,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,qBAAqB;CAe9B"}
1
+ {"version":3,"file":"AudioTracks.d.ts","sourceRoot":"","sources":["../../../src/plugins/audio-selector/AudioTracks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAY,MAAM,cAAc,CAAA;AAO7D,OAAO,yCAAyC,CAAA;AAUhD;;;;;;;;;GASG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,YAAY,CAA0B;IAE9C,OAAO,CAAC,MAAM,CAAmB;IAEjC;;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;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACM,MAAM;IAmBf,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,qBAAqB;CAe9B"}
@@ -1,8 +1,8 @@
1
1
  import { Events, UICorePlugin, template } from '@clappr/core';
2
2
  import assert from 'assert';
3
3
  import { CLAPPR_VERSION } from '../../build.js';
4
- import pluginHtml from '../../../assets/audio-selector/track-selector.ejs';
5
- import '../../../assets/audio-selector/style.scss';
4
+ import pluginHtml from '../../../assets/audio-tracks/template.ejs';
5
+ import '../../../assets/audio-tracks/style.scss';
6
6
  import audioArrow from '../../../assets/icons/old/quality-arrow.svg';
7
7
  import { ExtendedEvents } from '../media-control/MediaControl.js';
8
8
  import { trace } from '@gcorevideo/utils';
@@ -25,7 +25,7 @@ export class AudioTracks extends UICorePlugin {
25
25
  * @internal
26
26
  */
27
27
  get name() {
28
- return 'audio_selector'; // TODO rename to audiotracks
28
+ return 'audio_tracks';
29
29
  }
30
30
  /**
31
31
  * @internal
@@ -54,7 +54,7 @@ export class AudioTracks extends UICorePlugin {
54
54
  get events() {
55
55
  return {
56
56
  'click [data-audiotracks-select]': 'onTrackSelect',
57
- 'click #audiotracks-button': 'toggleContextMenu',
57
+ 'click #audiotracks-button': 'toggleMenu',
58
58
  };
59
59
  }
60
60
  /**
@@ -71,7 +71,11 @@ export class AudioTracks extends UICorePlugin {
71
71
  mediaControl.mount('audiotracks', this.$el);
72
72
  });
73
73
  this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
74
- this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hideMenu);
74
+ this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
75
+ if (from !== this.name) {
76
+ this.hideMenu();
77
+ }
78
+ });
75
79
  }
76
80
  onActiveContainerChanged() {
77
81
  this.currentTrack = null;
@@ -127,9 +131,10 @@ export class AudioTracks extends UICorePlugin {
127
131
  hideMenu() {
128
132
  trace(`${T} hideMenu`);
129
133
  this.$el.find('#audiotracks-select').addClass('hidden');
134
+ this.$el.find('#audiotracks-button').attr('aria-expanded', 'false');
130
135
  }
131
- toggleContextMenu() {
132
- this.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE);
136
+ toggleMenu() {
137
+ this.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
133
138
  this.$el.find('#audiotracks-select').toggleClass('hidden'); // TODO use plain CSS display: none
134
139
  const open = !this.$el.find('#audiotracks-select').hasClass('hidden'); // TODO hold state
135
140
  this.$el.find('#audiotracks-button').attr('aria-expanded', open);
@@ -81,7 +81,7 @@ export declare enum GearEvents {
81
81
  * ```
82
82
  */
83
83
  export declare class BottomGear extends UICorePlugin {
84
- private isHd;
84
+ private hd;
85
85
  /**
86
86
  * @internal
87
87
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuC,MAAM,cAAc,CAAA;AAOhF,OAAO,uCAAuC,CAAA;AAC9C,OAAO,gDAAgD,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAO5C;;;GAGG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,QAAQ,aAAa;CACtB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,IAAI,CAAQ;IAEpB;;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;IASnB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW;IAyB1D,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAqBf;;;;OAIG;IACH,OAAO;IAKP,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,sBAAsB;CAK/B"}
1
+ {"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuC,MAAM,cAAc,CAAA;AAOhF,OAAO,uCAAuC,CAAA;AAC9C,OAAO,gDAAgD,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAO5C;;;GAGG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,QAAQ,aAAa;CACtB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,EAAE,CAAQ;IAElB;;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;IASnB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW;IAyB1D,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAqBf;;;;OAIG;IACH,OAAO;IAKP,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -91,7 +91,7 @@ export var GearEvents;
91
91
  * ```
92
92
  */
93
93
  export class BottomGear extends UICorePlugin {
94
- isHd = false;
94
+ hd = false;
95
95
  /**
96
96
  * @internal
97
97
  */
@@ -190,7 +190,7 @@ export class BottomGear extends UICorePlugin {
190
190
  }
191
191
  highDefinitionUpdate(isHd) {
192
192
  trace(`${T} highDefinitionUpdate`, { isHd });
193
- this.isHd = isHd;
193
+ this.hd = isHd;
194
194
  this.$el.find('.gear-icon').html(isHd ? gearHdIcon : gearIcon);
195
195
  }
196
196
  /**
@@ -202,7 +202,7 @@ export class BottomGear extends UICorePlugin {
202
202
  if (!mediaControl) {
203
203
  return this; // TODO test
204
204
  }
205
- const icon = this.isHd ? gearHdIcon : gearIcon;
205
+ const icon = this.hd ? gearHdIcon : gearIcon;
206
206
  this.$el
207
207
  .html(BottomGear.template({ icon }))
208
208
  .find('#gear-sub-menu-wrapper')
@@ -225,7 +225,7 @@ export class BottomGear extends UICorePlugin {
225
225
  toggleGearMenu() {
226
226
  this.core
227
227
  .getPlugin('media_control')
228
- .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE);
228
+ .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
229
229
  this.$el.find('#gear-options-wrapper').toggle();
230
230
  }
231
231
  hide() {
@@ -238,7 +238,11 @@ export class BottomGear extends UICorePlugin {
238
238
  assert(mediaControl, 'media_control plugin is required');
239
239
  this.listenTo(mediaControl, ClapprEvents.MEDIACONTROL_RENDERED, this.onMediaControlRendered);
240
240
  this.listenTo(mediaControl, ClapprEvents.MEDIACONTROL_HIDE, this.hide);
241
- this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hide);
241
+ this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
242
+ if (from !== this.name) {
243
+ this.hide();
244
+ }
245
+ });
242
246
  }
243
247
  onMediaControlRendered() {
244
248
  trace(`${T} onMediaControlRendered`);
@@ -39,7 +39,7 @@ export type ClosedCaptionsPluginSettings = {
39
39
  */
40
40
  export declare class ClosedCaptions extends UICorePlugin {
41
41
  private isPreselectedApplied;
42
- private isShowing;
42
+ private active;
43
43
  private track;
44
44
  private tracks;
45
45
  private $line;
@@ -69,8 +69,8 @@ export declare class ClosedCaptions extends UICorePlugin {
69
69
  * @internal
70
70
  */
71
71
  get events(): {
72
- 'click [data-cc-select]': string;
73
- 'click [data-cc-button]': string;
72
+ 'click #cc-select li a': string;
73
+ 'click #cc-button': string;
74
74
  };
75
75
  private get preselectedLanguage();
76
76
  /**
@@ -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,SAAS,CAAQ;IAEzB,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,QAAQ,CAAyB;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED,OAAO,KAAK,mBAAmB,GAM9B;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,kBAAkB;IAwC1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,IAAI;IAWJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA0Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,yBAAyB;IAkBjC,OAAO,CAAC,UAAU;CAKnB"}
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,QAAQ,CAAyB;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED,OAAO,KAAK,mBAAmB,GAM9B;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,kBAAkB;IAwC1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,IAAI;IAWJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA2Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,yBAAyB;IAkBjC,OAAO,CAAC,UAAU;CAKnB"}
@@ -41,7 +41,7 @@ const T = 'plugins.cc';
41
41
  */
42
42
  export class ClosedCaptions extends UICorePlugin {
43
43
  isPreselectedApplied = false;
44
- isShowing = false;
44
+ active = false;
45
45
  track = null;
46
46
  tracks = [];
47
47
  $line = null;
@@ -78,8 +78,8 @@ export class ClosedCaptions extends UICorePlugin {
78
78
  */
79
79
  get events() {
80
80
  return {
81
- 'click [data-cc-select]': 'onItemSelect',
82
- 'click [data-cc-button]': 'toggleMenu',
81
+ 'click #cc-select li a': 'onItemSelect',
82
+ 'click #cc-button': 'toggleMenu',
83
83
  };
84
84
  }
85
85
  get preselectedLanguage() {
@@ -99,9 +99,15 @@ export class ClosedCaptions extends UICorePlugin {
99
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.render);
103
- this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
104
- this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hideMenu);
102
+ this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render); // TODO mount to media control
103
+ this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, () => {
104
+ this.hideMenu();
105
+ });
106
+ this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
107
+ if (from !== this.name) {
108
+ this.hideMenu();
109
+ }
110
+ });
105
111
  }
106
112
  onContainerChanged() {
107
113
  trace(`${T} onContainerChanged`);
@@ -168,7 +174,7 @@ export class ClosedCaptions extends UICorePlugin {
168
174
  }
169
175
  }
170
176
  onStartAd() {
171
- if (this.isShowing && this.core.activeContainer) {
177
+ if (this.active && this.core.activeContainer) {
172
178
  this.hide();
173
179
  this.listenTo(this.core.activeContainer, 'container:advertisement:finish', this.onFinishAd);
174
180
  }
@@ -184,7 +190,7 @@ export class ClosedCaptions extends UICorePlugin {
184
190
  this.track &&
185
191
  this.track.track.mode &&
186
192
  Browser.isiOS &&
187
- this.isShowing;
193
+ this.active;
188
194
  if (shouldShow) {
189
195
  this.show();
190
196
  }
@@ -199,7 +205,7 @@ export class ClosedCaptions extends UICorePlugin {
199
205
  * Hides the subtitles menu and the subtitles.
200
206
  */
201
207
  hide() {
202
- this.isShowing = false;
208
+ this.active = false;
203
209
  this.renderIcon();
204
210
  this.$line.hide();
205
211
  if (this.tracks) {
@@ -212,7 +218,7 @@ export class ClosedCaptions extends UICorePlugin {
212
218
  * Shows the subtitles menu and the subtitles.
213
219
  */
214
220
  show() {
215
- this.isShowing = true;
221
+ this.active = true;
216
222
  this.renderIcon();
217
223
  if (this.core.activeContainer &&
218
224
  isFullscreen(this.core.activeContainer.el) &&
@@ -247,7 +253,8 @@ export class ClosedCaptions extends UICorePlugin {
247
253
  return this;
248
254
  }
249
255
  const mediaControl = this.core.getPlugin('media_control');
250
- this.$el.html(ClosedCaptions.template({ tracks: this.tracks }));
256
+ this.$el.html(ClosedCaptions.template({ tracks: this.tracks, i18n: this.core.i18n }));
257
+ this.$el.find('#cc-select').hide();
251
258
  this.core.activeContainer.$el.find('#cc-line').remove();
252
259
  this.$line = $(ClosedCaptions.templateString());
253
260
  this.resizeFont();
@@ -263,7 +270,6 @@ export class ClosedCaptions extends UICorePlugin {
263
270
  selectItem(item) {
264
271
  this.clearSubtitleText();
265
272
  this.track = item;
266
- this.hideMenu();
267
273
  this.updateSelection();
268
274
  }
269
275
  onItemSelect(event) {
@@ -271,6 +277,7 @@ export class ClosedCaptions extends UICorePlugin {
271
277
  trace(`${T} onItemSelect`, { id });
272
278
  localStorage.setItem(LOCAL_STORAGE_CC_ID, id);
273
279
  this.selectItem(this.findById(Number(id)));
280
+ this.hideMenu();
274
281
  return false;
275
282
  }
276
283
  applyPreselectedSubtitles() {
@@ -286,20 +293,21 @@ export class ClosedCaptions extends UICorePlugin {
286
293
  }
287
294
  hideMenu() {
288
295
  trace(`${T} hideMenu`);
289
- this.$('[data-cc] ul').hide();
296
+ this.$el.find('#cc-select').hide();
290
297
  }
291
298
  toggleMenu() {
292
- trace(`${T} toggleMenu`);
299
+ trace(`${T} toggleMenu`, { display: this.$el.find('#cc-select').css('display') });
293
300
  this.core
294
301
  .getPlugin('media_control')
295
- .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE);
296
- this.$el.find('[data-cc] ul').toggle();
302
+ .trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
303
+ this.$el.find('#cc-select').toggle();
304
+ // TODO hold state, add aria-expanded to the button, add active state to the button
297
305
  }
298
306
  itemElement(id) {
299
- return this.$(`ul li a[data-cc-select="${id}"]`).parent();
307
+ return this.$el.find(`#cc-select li a[data-cc-select="${id}"]`).parent();
300
308
  }
301
309
  allItemElements() {
302
- return this.$('[data-cc] li');
310
+ return this.$('#cc-select li');
303
311
  }
304
312
  selectSubtitles() {
305
313
  const trackId = this.track ? this.track.id : -1;
@@ -349,7 +357,7 @@ export class ClosedCaptions extends UICorePlugin {
349
357
  .addClass('gcore-skin-active');
350
358
  }
351
359
  renderIcon() {
352
- const icon = this.isShowing ? subtitlesOnIcon : subtitlesOffIcon;
360
+ const icon = this.active ? subtitlesOnIcon : subtitlesOffIcon;
353
361
  this.$el.find('span.cc-text').html(icon);
354
362
  }
355
363
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,MAAM,MAAM,eAAe,CAAA;AAElC;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,MAAM;IAErC,SAAS,CAAC,OAAO,EAAE,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG;gBAFjB,OAAO,EAAE,GAAG,EACb,IAAI,EAAE,GAAG,EACR,WAAW,CAAC,EAAE,GAAG,YAAA;IAK7B,IAAI,IAAI,WAEP;IAED,OAAO;IAEP,IAAI;IAEJ,KAAK;IAEL,IAAI;IAEJ,OAAO;IAEP,IAAI;IAEJ,cAAc;IAEd,WAAW;IAIX,QAAQ;IAER,OAAO;IAEP,eAAe;IAIf,kBAAkB;IAIlB,cAAc;IAId,qBAAqB;IAIrB,IAAI;IAEJ,MAAM;IAEN,MAAM;IAEN,SAAS;IAET,eAAe;IAIf,WAAW;IAIX,QAAQ;IAIR,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAGtC;AAED,wBAAgB,cAAc,CAC5B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,GAAE,GAAkC;;;;;;;;;;;;;;;;EAqB9C;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkC/C;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAA0B;;;;;;;;;;;;;;;EAoBrC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBAc/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAe7C"}
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,MAAM,MAAM,eAAe,CAAA;AAElC;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,MAAM;IAErC,SAAS,CAAC,OAAO,EAAE,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG;gBAFjB,OAAO,EAAE,GAAG,EACb,IAAI,EAAE,GAAG,EACR,WAAW,CAAC,EAAE,GAAG,YAAA;IAK7B,IAAI,IAAI,WAEP;IAED,OAAO;IAEP,IAAI;IAEJ,KAAK;IAEL,IAAI;IAEJ,OAAO;IAEP,IAAI;IAEJ,cAAc;IAEd,WAAW;IAIX,QAAQ;IAER,OAAO;IAEP,eAAe;IAIf,kBAAkB;IAIlB,cAAc;IAId,qBAAqB;IAIrB,IAAI;IAEJ,MAAM;IAEN,MAAM;IAEN,SAAS;IAET,eAAe;IAIf,WAAW;IAIX,QAAQ;IAIR,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAGtC;AAED,wBAAgB,cAAc,CAC5B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,GAAE,GAAkC;;;;;;;;;;;;;;;;EAqB9C;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkC/C;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAA0B;;;;;;;;;;;;;;;EAoBrC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBAe/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAe7C"}
package/lib/testUtils.js CHANGED
@@ -159,6 +159,7 @@ export function createMockMediaControl(core) {
159
159
  mediaControl.mount = vi.fn();
160
160
  // @ts-ignore
161
161
  mediaControl.toggleElement = vi.fn();
162
+ vi.spyOn(mediaControl, 'trigger');
162
163
  return mediaControl;
163
164
  }
164
165
  export function createMockBottomGear(core) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.22.23",
3
+ "version": "2.22.24",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -4,8 +4,8 @@ import assert from 'assert'
4
4
 
5
5
  import { CLAPPR_VERSION } from '../../build.js'
6
6
 
7
- import pluginHtml from '../../../assets/audio-selector/track-selector.ejs'
8
- import '../../../assets/audio-selector/style.scss'
7
+ import pluginHtml from '../../../assets/audio-tracks/template.ejs'
8
+ import '../../../assets/audio-tracks/style.scss'
9
9
  import audioArrow from '../../../assets/icons/old/quality-arrow.svg'
10
10
  import { ZeptoResult } from '../../types.js'
11
11
  import { ExtendedEvents, MediaControl } from '../media-control/MediaControl.js'
@@ -34,7 +34,7 @@ export class AudioTracks extends UICorePlugin {
34
34
  * @internal
35
35
  */
36
36
  get name() {
37
- return 'audio_selector' // TODO rename to audiotracks
37
+ return 'audio_tracks'
38
38
  }
39
39
 
40
40
  /**
@@ -68,7 +68,7 @@ export class AudioTracks extends UICorePlugin {
68
68
  override get events() {
69
69
  return {
70
70
  'click [data-audiotracks-select]': 'onTrackSelect',
71
- 'click #audiotracks-button': 'toggleContextMenu',
71
+ 'click #audiotracks-button': 'toggleMenu',
72
72
  }
73
73
  }
74
74
 
@@ -91,7 +91,11 @@ export class AudioTracks extends UICorePlugin {
91
91
  mediaControl.mount('audiotracks', this.$el)
92
92
  })
93
93
  this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu)
94
- this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hideMenu)
94
+ this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from: string) => {
95
+ if (from !== this.name) {
96
+ this.hideMenu()
97
+ }
98
+ })
95
99
  }
96
100
 
97
101
  private onActiveContainerChanged() {
@@ -165,10 +169,11 @@ export class AudioTracks extends UICorePlugin {
165
169
  private hideMenu() {
166
170
  trace(`${T} hideMenu`)
167
171
  this.$el.find('#audiotracks-select').addClass('hidden')
172
+ this.$el.find('#audiotracks-button').attr('aria-expanded', 'false')
168
173
  }
169
174
 
170
- private toggleContextMenu() {
171
- this.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE)
175
+ private toggleMenu() {
176
+ this.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name)
172
177
  this.$el.find('#audiotracks-select').toggleClass('hidden') // TODO use plain CSS display: none
173
178
  const open = !this.$el.find('#audiotracks-select').hasClass('hidden') // TODO hold state
174
179
  this.$el.find('#audiotracks-button').attr('aria-expanded', open)