@gcorevideo/player 2.22.3 → 2.22.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.
@@ -8858,14 +8858,6 @@ Loader.registerPlayback(HTMLImg);
8858
8858
  Loader.registerPlayback(HTML5Audio);
8859
8859
  Loader.registerPlayback(HTML5Video);
8860
8860
 
8861
- /**
8862
- * @public
8863
- * @param msg
8864
- * @param data
8865
- */
8866
- function trace(msg, data = {}) {
8867
- }
8868
-
8869
8861
  const global$1 = (typeof global !== "undefined" ? global :
8870
8862
  typeof self !== "undefined" ? self :
8871
8863
  typeof window !== "undefined" ? window : {});
@@ -9775,11 +9767,12 @@ function ifError(err) {
9775
9767
  // export const CLAPPR_VERSION: string = process.env.CLAPPR_VERSION || '0.11.3';
9776
9768
  const CLAPPR_VERSION = '0.11.3';
9777
9769
 
9778
- 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";
9770
+ 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\"><%= icon %></span>\n</button>\n<ul class='gcore-skin-bg-color menu hidden' 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";
9779
9771
 
9780
9772
  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";
9781
9773
 
9782
- const VERSION$6 = '0.0.1';
9774
+ const VERSION$6 = '2.22.4';
9775
+ // const T = 'plugins.audiotracks'
9783
9776
  /**
9784
9777
  * `PLUGIN` that makes possible to switch audio tracks via the media control UI.
9785
9778
  * @beta
@@ -9790,14 +9783,14 @@ const VERSION$6 = '0.0.1';
9790
9783
  *
9791
9784
  * - {@link MediaControl}
9792
9785
  */
9793
- class AudioSelector extends UICorePlugin {
9786
+ class AudioTracks extends UICorePlugin {
9794
9787
  currentTrack = null;
9795
9788
  tracks = [];
9796
9789
  /**
9797
9790
  * @internal
9798
9791
  */
9799
9792
  get name() {
9800
- return 'audio_selector';
9793
+ return 'audio_selector'; // TODO rename to audiotracks
9801
9794
  }
9802
9795
  /**
9803
9796
  * @internal
@@ -9826,52 +9819,43 @@ class AudioSelector extends UICorePlugin {
9826
9819
  get events() {
9827
9820
  return {
9828
9821
  'click [data-audiotracks-select]': 'onTrackSelect',
9829
- 'click [data-audiotracks-button]': 'onShowLevelSelectMenu',
9822
+ 'click #audiotracks-button': 'toggleContextMenu',
9830
9823
  };
9831
9824
  }
9832
9825
  /**
9833
9826
  * @internal
9834
9827
  */
9835
9828
  bindEvents() {
9836
- this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
9829
+ this.listenToOnce(this.core, Events.CORE_READY, this.onCoreReady);
9837
9830
  this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
9838
9831
  }
9839
9832
  onCoreReady() {
9840
9833
  const mediaControl = this.core.getPlugin('media_control');
9841
9834
  assert(mediaControl, 'media_control plugin is required');
9842
- this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
9843
- this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideSelectTrackMenu);
9835
+ this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, () => {
9836
+ mediaControl.putElement('audiotracks', this.$el);
9837
+ });
9838
+ this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
9844
9839
  }
9845
- bindPlaybackEvents() {
9840
+ onActiveContainerChanged() {
9846
9841
  this.currentTrack = null;
9847
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_STOP, this.onStop);
9848
- this.setupAudioTrackListeners();
9849
- }
9850
- setupAudioTrackListeners() {
9851
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_AUDIO_AVAILABLE, (tracks) => {
9842
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_AUDIO_AVAILABLE, (tracks) => {
9852
9843
  this.currentTrack =
9853
- tracks.find((track) => track.kind === 'main') ?? null;
9854
- this.fillTracks(tracks);
9844
+ tracks.find((track) => track.kind === 'main') ?? null; // TODO test
9845
+ this.tracks = tracks;
9846
+ this.render();
9855
9847
  });
9856
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_AUDIO_CHANGED, (track) => {
9848
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_AUDIO_CHANGED, (track) => {
9857
9849
  this.currentTrack = track;
9858
9850
  this.highlightCurrentTrack();
9859
9851
  this.buttonElement().removeClass('changing');
9860
9852
  this.updateText();
9861
9853
  });
9862
9854
  }
9863
- onStop() {
9864
- }
9865
- onActiveContainerChanged() {
9866
- this.bindPlaybackEvents();
9867
- }
9868
9855
  shouldRender() {
9869
- if (!this.core.activePlayback) {
9870
- return false;
9871
- }
9872
- this.tracks = this.core.activePlayback.audioTracks;
9856
+ // Render is called from the parent class constructor so tracks aren't available
9873
9857
  // Only care if we have at least 2 to choose from
9874
- return this.tracks && this.tracks.length > 1;
9858
+ return this.tracks?.length > 1;
9875
9859
  }
9876
9860
  /**
9877
9861
  * @internal
@@ -9880,43 +9864,35 @@ class AudioSelector extends UICorePlugin {
9880
9864
  if (!this.shouldRender()) {
9881
9865
  return this;
9882
9866
  }
9883
- const mediaControl = this.core.getPlugin('media_control');
9884
- this.$el.html(AudioSelector.template({ tracks: this.tracks, title: this.getTitle() }));
9885
- this.$('.audio-arrow').append(audioArrow);
9886
- mediaControl.putElement('audiotracks', this.el);
9867
+ this.core.getPlugin('media_control');
9868
+ this.$el.html(AudioTracks.template({
9869
+ tracks: this.tracks,
9870
+ title: this.getTitle(),
9871
+ icon: audioArrow,
9872
+ }));
9887
9873
  this.updateText();
9888
9874
  this.highlightCurrentTrack();
9889
9875
  return this;
9890
9876
  }
9891
- fillTracks(tracks) {
9892
- this.tracks = tracks;
9893
- this.render();
9894
- }
9895
- findTrackBy(id) {
9896
- return this.tracks.find((track) => track.id === id);
9897
- }
9898
9877
  onTrackSelect(event) {
9899
9878
  const id = event.target?.dataset?.audiotracksSelect;
9900
9879
  if (id) {
9901
9880
  this.selectAudioTrack(id);
9902
9881
  }
9903
- this.toggleContextMenu();
9882
+ this.hideMenu();
9904
9883
  event.stopPropagation();
9905
9884
  return false;
9906
9885
  }
9907
9886
  selectAudioTrack(id) {
9908
9887
  this.startTrackSwitch();
9909
- this.core.activePlayback.switchAudioTrack(id);
9888
+ this.core.activeContainer.switchAudioTrack(id);
9910
9889
  this.updateText();
9911
9890
  }
9912
- onShowLevelSelectMenu() {
9913
- this.toggleContextMenu();
9914
- }
9915
- hideSelectTrackMenu() {
9916
- this.$('ul').hide();
9891
+ hideMenu() {
9892
+ this.$el.find('#audiotracks-select').addClass('hidden');
9917
9893
  }
9918
9894
  toggleContextMenu() {
9919
- this.$('ul').toggle();
9895
+ this.$el.find('#audiotracks-select').toggleClass('hidden');
9920
9896
  }
9921
9897
  buttonElement() {
9922
9898
  return this.$('button');
@@ -9925,11 +9901,14 @@ class AudioSelector extends UICorePlugin {
9925
9901
  return this.$('button .audio-text');
9926
9902
  }
9927
9903
  trackElement(id) {
9928
- return this.$('ul a' +
9929
- (id !== undefined ? '[data-audiotracks-select="' + id + '"]' : '')).parent();
9904
+ return this.$('#audiotracks-select a' +
9905
+ (id !== undefined ? `[data-audiotracks-select="${id}"]` : '')).parent();
9930
9906
  }
9931
9907
  getTitle() {
9932
- return this.currentTrack?.label || '';
9908
+ if (!this.currentTrack) {
9909
+ return '';
9910
+ }
9911
+ return this.currentTrack.label || this.currentTrack.language;
9933
9912
  }
9934
9913
  startTrackSwitch() {
9935
9914
  this.buttonElement().addClass('changing');
@@ -9952,6 +9931,14 @@ class AudioSelector extends UICorePlugin {
9952
9931
  }
9953
9932
  }
9954
9933
 
9934
+ /**
9935
+ * @public
9936
+ * @param msg
9937
+ * @param data
9938
+ */
9939
+ function trace(msg, data = {}) {
9940
+ }
9941
+
9955
9942
  const volumeOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.50025 8.00025C4.67125 8.00025 4.00025 8.67225 4.00025 9.50025V14.5003C4.00025 15.3283 4.67125 16.0003 5.50025 16.0003H7.24824C7.65024 16.0003 8.03627 16.1613 8.31727 16.4483L12.5443 20.7413C12.7083 20.9073 12.9262 20.9963 13.1492 20.9963C13.2572 20.9963 13.3672 20.9763 13.4722 20.9333C13.7932 20.8013 14.0003 20.4923 14.0003 20.1462V16.3283C14.0003 16.1963 13.9473 16.0683 13.8543 15.9753L6.02528 8.14625C5.93228 8.05325 5.80425 8.00025 5.67225 8.00025H5.50025ZM14.0003 3.85426C14.0003 3.50826 13.7932 3.19927 13.4722 3.06727C13.1502 2.93627 12.7873 3.01226 12.5443 3.25926L9.33827 6.51527C9.14627 6.71127 9.14626 7.02625 9.34126 7.22025L13.5733 11.4522C13.7313 11.6102 14.0003 11.4982 14.0003 11.2752V3.85426ZM20.8543 20.8543C20.7563 20.9513 20.6283 21.0003 20.5003 21.0003C20.3723 21.0003 20.2442 20.9513 20.1462 20.8543L3.14625 3.85426C2.95125 3.65826 2.95125 3.34225 3.14625 3.14625C3.34225 2.95125 3.65826 2.95125 3.85426 3.14625L20.8543 20.1462C21.0493 20.3422 21.0493 20.6583 20.8543 20.8543Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
9956
9943
 
9957
9944
  const pluginHtml$6 = "<div class=\"big-mute-icon-wrapper\" data-big-mute>\n <div class=\"big-mute-icon gcore-skin-border-color\" data-big-mute-icon></div>\n</div>\n";
@@ -13358,7 +13345,7 @@ class ClipsPlugin extends UICorePlugin {
13358
13345
 
13359
13346
  const templateHtml$1 = "<ul class=\"context-menu-list\">\n <% if(options) { %>\n <% for (var i = 0; i < options.length; i++) { %>\n <li class=\"context-menu-list-item <%= options[i].class %>\"\n data-<%= options[i].name %>><%= options[i].label %></li>\n <% } %>\n <% } %>\n</ul>\n";
13360
13347
 
13361
- var version$1 = "2.22.3";
13348
+ var version$1 = "2.22.4";
13362
13349
 
13363
13350
  var packages = {
13364
13351
  "node_modules/@clappr/core": {
@@ -18704,4 +18691,4 @@ class VolumeFade extends UICorePlugin {
18704
18691
  }
18705
18692
  }
18706
18693
 
18707
- export { AudioSelector, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GearEvents, GoogleAnalytics, LevelSelector, Logo, MediaControl, MultiCamera, PictureInPicture, PlaybackRate, Poster, SeekTime, Share, SkipTime, SourceController, SpinnerThreeBounce as Spinner, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents };
18694
+ export { AudioTracks as AudioSelector, AudioTracks, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GearEvents, GoogleAnalytics, LevelSelector, Logo, MediaControl, MultiCamera, PictureInPicture, PlaybackRate, Poster, SeekTime, Share, SkipTime, SourceController, SpinnerThreeBounce as Spinner, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents };
@@ -1,5 +1,6 @@
1
1
  import '../assets/style/main.scss';
2
2
  export * from "./plugins/audio-selector/AudioSelector.js";
3
+ export { AudioTracks as AudioSelector } from "./plugins/audio-selector/AudioSelector.js";
3
4
  export * from "./plugins/big-mute-button/BigMuteButton.js";
4
5
  export * from "./plugins/bottom-gear/BottomGear.js";
5
6
  export * from "./plugins/clappr-nerd-stats/ClapprNerdStats.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.plugins.d.ts","sourceRoot":"","sources":["../src/index.plugins.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AAEnC,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAE7C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wBAAwB,CAAC;AACvC,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kDAAkD,CAAC;AACjE,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sDAAsD,CAAC;AACrE,OAAO,EAAE,kBAAkB,IAAI,OAAO,EAAE,MAAM,sDAAsD,CAAC;AACrG,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,cAAc,IAAI,SAAS,EAAE,MAAM,uCAAuC,CAAC;AACpF,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.plugins.d.ts","sourceRoot":"","sources":["../src/index.plugins.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AAEnC,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAC;AACzF,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAE7C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wBAAwB,CAAC;AACvC,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kDAAkD,CAAC;AACjE,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sDAAsD,CAAC;AACrE,OAAO,EAAE,kBAAkB,IAAI,OAAO,EAAE,MAAM,sDAAsD,CAAC;AACrG,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,cAAc,IAAI,SAAS,EAAE,MAAM,uCAAuC,CAAC;AACpF,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,qCAAqC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import '../assets/style/main.scss';
2
2
  export * from "./plugins/audio-selector/AudioSelector.js";
3
+ export { AudioTracks as AudioSelector } from "./plugins/audio-selector/AudioSelector.js";
3
4
  export * from "./plugins/big-mute-button/BigMuteButton.js";
4
5
  export * from "./plugins/bottom-gear/BottomGear.js";
5
6
  export * from "./plugins/clappr-nerd-stats/ClapprNerdStats.js";
@@ -10,7 +10,7 @@ import '../../../assets/audio-selector/style.scss';
10
10
  *
11
11
  * - {@link MediaControl}
12
12
  */
13
- export declare class AudioSelector extends UICorePlugin {
13
+ export declare class AudioTracks extends UICorePlugin {
14
14
  private currentTrack;
15
15
  private tracks;
16
16
  /**
@@ -39,28 +39,22 @@ export declare class AudioSelector extends UICorePlugin {
39
39
  */
40
40
  get events(): {
41
41
  'click [data-audiotracks-select]': string;
42
- 'click [data-audiotracks-button]': string;
42
+ 'click #audiotracks-button': string;
43
43
  };
44
44
  /**
45
45
  * @internal
46
46
  */
47
47
  bindEvents(): void;
48
48
  private onCoreReady;
49
- private bindPlaybackEvents;
50
- private setupAudioTrackListeners;
51
- private onStop;
52
49
  private onActiveContainerChanged;
53
50
  private shouldRender;
54
51
  /**
55
52
  * @internal
56
53
  */
57
54
  render(): this;
58
- private fillTracks;
59
- private findTrackBy;
60
55
  private onTrackSelect;
61
56
  private selectAudioTrack;
62
- private onShowLevelSelectMenu;
63
- private hideSelectTrackMenu;
57
+ private hideMenu;
64
58
  private toggleContextMenu;
65
59
  private buttonElement;
66
60
  private buttonElementText;
@@ -1 +1 @@
1
- {"version":3,"file":"AudioSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/audio-selector/AudioSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAY,MAAM,cAAc,CAAA;AAQ7D,OAAO,2CAA2C,CAAA;AASlD;;;;;;;;;GASG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,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;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACM,MAAM;IAkBf,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,qBAAqB;CAW9B"}
1
+ {"version":3,"file":"AudioSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/audio-selector/AudioSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAY,MAAM,cAAc,CAAA;AAO7D,OAAO,2CAA2C,CAAA;AASlD;;;;;;;;;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;IASnB,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACM,MAAM;IAmBf,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,qBAAqB;CAW9B"}
@@ -1,12 +1,11 @@
1
1
  import { Events, UICorePlugin, template } from '@clappr/core';
2
- import { trace } from '@gcorevideo/utils';
3
2
  import assert from 'assert';
4
3
  import { CLAPPR_VERSION } from '../../build.js';
5
4
  import pluginHtml from '../../../assets/audio-selector/track-selector.ejs';
6
5
  import '../../../assets/audio-selector/style.scss';
7
6
  import audioArrow from '../../../assets/icons/old/quality-arrow.svg';
8
- const VERSION = '0.0.1';
9
- const T = 'plugins.audio_selector';
7
+ const VERSION = '2.22.4';
8
+ // const T = 'plugins.audiotracks'
10
9
  /**
11
10
  * `PLUGIN` that makes possible to switch audio tracks via the media control UI.
12
11
  * @beta
@@ -17,14 +16,14 @@ const T = 'plugins.audio_selector';
17
16
  *
18
17
  * - {@link MediaControl}
19
18
  */
20
- export class AudioSelector extends UICorePlugin {
19
+ export class AudioTracks extends UICorePlugin {
21
20
  currentTrack = null;
22
21
  tracks = [];
23
22
  /**
24
23
  * @internal
25
24
  */
26
25
  get name() {
27
- return 'audio_selector';
26
+ return 'audio_selector'; // TODO rename to audiotracks
28
27
  }
29
28
  /**
30
29
  * @internal
@@ -53,58 +52,43 @@ export class AudioSelector extends UICorePlugin {
53
52
  get events() {
54
53
  return {
55
54
  'click [data-audiotracks-select]': 'onTrackSelect',
56
- 'click [data-audiotracks-button]': 'onShowLevelSelectMenu',
55
+ 'click #audiotracks-button': 'toggleContextMenu',
57
56
  };
58
57
  }
59
58
  /**
60
59
  * @internal
61
60
  */
62
61
  bindEvents() {
63
- this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
62
+ this.listenToOnce(this.core, Events.CORE_READY, this.onCoreReady);
64
63
  this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
65
64
  }
66
65
  onCoreReady() {
67
- trace(`${T} onCoreReady`);
68
66
  const mediaControl = this.core.getPlugin('media_control');
69
67
  assert(mediaControl, 'media_control plugin is required');
70
- this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
71
- this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideSelectTrackMenu);
68
+ this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, () => {
69
+ mediaControl.putElement('audiotracks', this.$el);
70
+ });
71
+ this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
72
72
  }
73
- bindPlaybackEvents() {
74
- trace(`${T} bindPlaybackEvents`);
73
+ onActiveContainerChanged() {
75
74
  this.currentTrack = null;
76
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_STOP, this.onStop);
77
- this.setupAudioTrackListeners();
78
- }
79
- setupAudioTrackListeners() {
80
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_AUDIO_AVAILABLE, (tracks) => {
81
- trace(`${T} on PLAYBACK_AUDIO_AVAILABLE`, { audioTracks: tracks });
75
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_AUDIO_AVAILABLE, (tracks) => {
82
76
  this.currentTrack =
83
- tracks.find((track) => track.kind === 'main') ?? null;
84
- this.fillTracks(tracks);
77
+ tracks.find((track) => track.kind === 'main') ?? null; // TODO test
78
+ this.tracks = tracks;
79
+ this.render();
85
80
  });
86
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_AUDIO_CHANGED, (track) => {
87
- trace(`${T} PLAYBACK_AUDIO_CHANGED`, { audioTrack: track });
81
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_AUDIO_CHANGED, (track) => {
88
82
  this.currentTrack = track;
89
83
  this.highlightCurrentTrack();
90
84
  this.buttonElement().removeClass('changing');
91
85
  this.updateText();
92
86
  });
93
87
  }
94
- onStop() {
95
- trace(`${T} onStop`);
96
- }
97
- onActiveContainerChanged() {
98
- trace(`${T} onActiveContainerChanged`);
99
- this.bindPlaybackEvents();
100
- }
101
88
  shouldRender() {
102
- if (!this.core.activePlayback) {
103
- return false;
104
- }
105
- this.tracks = this.core.activePlayback.audioTracks;
89
+ // Render is called from the parent class constructor so tracks aren't available
106
90
  // Only care if we have at least 2 to choose from
107
- return this.tracks && this.tracks.length > 1;
91
+ return this.tracks?.length > 1;
108
92
  }
109
93
  /**
110
94
  * @internal
@@ -114,44 +98,34 @@ export class AudioSelector extends UICorePlugin {
114
98
  return this;
115
99
  }
116
100
  const mediaControl = this.core.getPlugin('media_control');
117
- this.$el.html(AudioSelector.template({ tracks: this.tracks, title: this.getTitle() }));
118
- this.$('.audio-arrow').append(audioArrow);
119
- mediaControl.putElement('audiotracks', this.el);
101
+ this.$el.html(AudioTracks.template({
102
+ tracks: this.tracks,
103
+ title: this.getTitle(),
104
+ icon: audioArrow,
105
+ }));
120
106
  this.updateText();
121
107
  this.highlightCurrentTrack();
122
108
  return this;
123
109
  }
124
- fillTracks(tracks) {
125
- this.tracks = tracks;
126
- this.render();
127
- }
128
- findTrackBy(id) {
129
- return this.tracks.find((track) => track.id === id);
130
- }
131
110
  onTrackSelect(event) {
132
111
  const id = event.target?.dataset?.audiotracksSelect;
133
112
  if (id) {
134
113
  this.selectAudioTrack(id);
135
114
  }
136
- this.toggleContextMenu();
115
+ this.hideMenu();
137
116
  event.stopPropagation();
138
117
  return false;
139
118
  }
140
119
  selectAudioTrack(id) {
141
120
  this.startTrackSwitch();
142
- this.core.activePlayback.switchAudioTrack(id);
121
+ this.core.activeContainer.switchAudioTrack(id);
143
122
  this.updateText();
144
123
  }
145
- onShowLevelSelectMenu() {
146
- this.toggleContextMenu();
147
- }
148
- hideSelectTrackMenu() {
149
- ;
150
- this.$('ul').hide();
124
+ hideMenu() {
125
+ this.$el.find('#audiotracks-select').addClass('hidden');
151
126
  }
152
127
  toggleContextMenu() {
153
- ;
154
- this.$('ul').toggle();
128
+ this.$el.find('#audiotracks-select').toggleClass('hidden');
155
129
  }
156
130
  buttonElement() {
157
131
  return this.$('button');
@@ -160,11 +134,14 @@ export class AudioSelector extends UICorePlugin {
160
134
  return this.$('button .audio-text');
161
135
  }
162
136
  trackElement(id) {
163
- return this.$('ul a' +
164
- (id !== undefined ? '[data-audiotracks-select="' + id + '"]' : '')).parent();
137
+ return this.$('#audiotracks-select a' +
138
+ (id !== undefined ? `[data-audiotracks-select="${id}"]` : '')).parent();
165
139
  }
166
140
  getTitle() {
167
- return this.currentTrack?.label || '';
141
+ if (!this.currentTrack) {
142
+ return '';
143
+ }
144
+ return this.currentTrack.label || this.currentTrack.language;
168
145
  }
169
146
  startTrackSwitch() {
170
147
  this.buttonElement().addClass('changing');
@@ -91,6 +91,7 @@ export declare function createMockPlayback(name?: string): Events<string | symbo
91
91
  canAutoPlay: import("vitest").Mock<(...args: any[]) => any>;
92
92
  onResize: import("vitest").Mock<(...args: any[]) => any>;
93
93
  setPlaybackRate: import("vitest").Mock<(...args: any[]) => any>;
94
+ switchAudioTrack: import("vitest").Mock<(...args: any[]) => any>;
94
95
  trigger: <T extends string | symbol>(event: T, ...args: any[]) => boolean;
95
96
  };
96
97
  export declare function createMockContainer(playback?: any): Events<string | symbol, any> & {
@@ -105,6 +106,7 @@ export declare function createMockContainer(playback?: any): Events<string | sym
105
106
  isPlaying: import("vitest").Mock<(...args: any[]) => any>;
106
107
  play: import("vitest").Mock<(...args: any[]) => any>;
107
108
  seek: import("vitest").Mock<(...args: any[]) => any>;
109
+ switchAudioTrack: import("vitest").Mock<(...args: any[]) => any>;
108
110
  trigger: <T extends string | symbol>(event: T, ...args: any[]) => boolean;
109
111
  };
110
112
  export declare function createMockMediaControl(core: any): UICorePlugin;
@@ -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,GAA2B;;;;;;;;;;;;;;;;EAqBvC;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC/C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,GAA0B;;;;;;;;;;;;;EAiBvE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBAiB/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAY7C"}
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,GAA2B;;;;;;;;;;;;;;;;EAqBvC;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkC/C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,GAA0B;;;;;;;;;;;;;;EAkBvE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBAiB/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAY7C"}
package/lib/testUtils.js CHANGED
@@ -124,6 +124,7 @@ export function createMockPlayback(name = 'mock') {
124
124
  canAutoPlay: vi.fn().mockImplementation(() => true),
125
125
  onResize: vi.fn().mockImplementation(() => true),
126
126
  setPlaybackRate: vi.fn(),
127
+ switchAudioTrack: vi.fn(),
127
128
  trigger: emitter.emit,
128
129
  });
129
130
  }
@@ -142,6 +143,7 @@ export function createMockContainer(playback = createMockPlayback()) {
142
143
  isPlaying: vi.fn().mockReturnValue(false),
143
144
  play: vi.fn(),
144
145
  seek: vi.fn(),
146
+ switchAudioTrack: vi.fn(),
145
147
  trigger: emitter.emit,
146
148
  });
147
149
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.22.3",
3
+ "version": "2.22.4",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -1,6 +1,7 @@
1
1
  import '../assets/style/main.scss';
2
2
 
3
3
  export * from "./plugins/audio-selector/AudioSelector.js";
4
+ export { AudioTracks as AudioSelector } from "./plugins/audio-selector/AudioSelector.js";
4
5
  export * from "./plugins/big-mute-button/BigMuteButton.js";
5
6
  export * from "./plugins/bottom-gear/BottomGear.js";
6
7
  export * from "./plugins/clappr-nerd-stats/ClapprNerdStats.js";