@gcorevideo/player 2.22.3 → 2.22.5

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 (39) hide show
  1. package/assets/audio-selector/style.scss +4 -2
  2. package/assets/audio-selector/track-selector.ejs +2 -2
  3. package/assets/level-selector/button.ejs +1 -1
  4. package/assets/level-selector/list.ejs +10 -4
  5. package/assets/level-selector/style.scss +8 -3
  6. package/dist/core.js +1 -1
  7. package/dist/index.css +1435 -1429
  8. package/dist/index.js +402 -419
  9. package/dist/plugins/index.css +1192 -1186
  10. package/dist/plugins/index.js +428 -438
  11. package/lib/index.plugins.d.ts +3 -1
  12. package/lib/index.plugins.d.ts.map +1 -1
  13. package/lib/index.plugins.js +3 -1
  14. package/lib/plugins/audio-selector/AudioSelector.d.ts +3 -9
  15. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
  16. package/lib/plugins/audio-selector/AudioSelector.js +34 -57
  17. package/lib/plugins/level-selector/LevelSelector.d.ts +6 -5
  18. package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
  19. package/lib/plugins/level-selector/LevelSelector.js +11 -8
  20. package/lib/plugins/level-selector/QualityLevels.d.ts +112 -0
  21. package/lib/plugins/level-selector/QualityLevels.d.ts.map +1 -0
  22. package/lib/plugins/level-selector/QualityLevels.js +280 -0
  23. package/lib/plugins/vast-ads/VastAds.d.ts +1 -0
  24. package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -1
  25. package/lib/plugins/vast-ads/VastAds.js +6 -3
  26. package/lib/testUtils.d.ts +2 -0
  27. package/lib/testUtils.d.ts.map +1 -1
  28. package/lib/testUtils.js +2 -0
  29. package/package.json +1 -1
  30. package/src/index.plugins.ts +3 -1
  31. package/src/plugins/audio-selector/AudioSelector.ts +36 -72
  32. package/src/plugins/audio-selector/__tests__/AudioSelector.test.ts +176 -0
  33. package/src/plugins/audio-selector/__tests__/__snapshots__/AudioSelector.test.ts.snap +67 -0
  34. package/src/plugins/level-selector/{LevelSelector.ts → QualityLevels.ts} +19 -13
  35. package/src/plugins/level-selector/__tests__/{LevelSelector.test.ts → QualityLevels.test.ts} +20 -6
  36. package/src/plugins/level-selector/__tests__/__snapshots__/{LevelSelector.test.ts.snap → QualityLevels.test.ts.snap} +58 -25
  37. package/src/plugins/vast-ads/VastAds.ts +8 -4
  38. package/src/testUtils.ts +2 -0
  39. package/tsconfig.tsbuildinfo +1 -1
@@ -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";
@@ -11,13 +12,14 @@ export * from "./plugins/dvr-controls/DvrControls.js";
11
12
  export * from "./plugins/error-screen/ErrorScreen.js";
12
13
  export * from "./plugins/favicon/Favicon.js";
13
14
  export * from "./plugins/google-analytics/GoogleAnalytics.js";
14
- export * from "./plugins/level-selector/LevelSelector.js";
15
15
  export * from "./plugins/logo/Logo.js";
16
16
  export * from "./plugins/media-control/MediaControl.js";
17
17
  export * from "./plugins/multi-camera/MultiCamera.js";
18
18
  export * from "./plugins/picture-in-picture/PictureInPicture.js";
19
19
  export * from "./plugins/playback-rate/PlaybackRate.js";
20
20
  export * from "./plugins/poster/Poster.js";
21
+ export * from "./plugins/level-selector/QualityLevels.js";
22
+ export { QualityLevels as LevelSelector } from "./plugins/level-selector/QualityLevels.js";
21
23
  export * from "./plugins/seek-time/SeekTime.js";
22
24
  export * from "./plugins/share/Share.js";
23
25
  export * from "./plugins/skip-time/SkipTime.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,wBAAwB,CAAC;AACvC,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kDAAkD,CAAC;AACjE,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC3F,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";
@@ -12,13 +13,14 @@ export * from "./plugins/error-screen/ErrorScreen.js";
12
13
  export * from "./plugins/favicon/Favicon.js";
13
14
  // _ ga-events
14
15
  export * from "./plugins/google-analytics/GoogleAnalytics.js";
15
- export * from "./plugins/level-selector/LevelSelector.js";
16
16
  export * from "./plugins/logo/Logo.js";
17
17
  export * from "./plugins/media-control/MediaControl.js";
18
18
  export * from "./plugins/multi-camera/MultiCamera.js";
19
19
  export * from "./plugins/picture-in-picture/PictureInPicture.js";
20
20
  export * from "./plugins/playback-rate/PlaybackRate.js";
21
21
  export * from "./plugins/poster/Poster.js";
22
+ export * from "./plugins/level-selector/QualityLevels.js";
23
+ export { QualityLevels as LevelSelector } from "./plugins/level-selector/QualityLevels.js";
22
24
  export * from "./plugins/seek-time/SeekTime.js";
23
25
  export * from "./plugins/share/Share.js";
24
26
  export * from "./plugins/skip-time/SkipTime.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');
@@ -1,10 +1,10 @@
1
1
  import { UICorePlugin } from '@clappr/core';
2
2
  import '../../../assets/level-selector/style.scss';
3
3
  /**
4
- * Configuration options for the {@link LevelSelector | level selector} plugin.
4
+ * Configuration options for the {@link QualityLevels} plugin.
5
5
  * @beta
6
6
  */
7
- export interface LevelSelectorPluginSettings {
7
+ export interface QualityLevelsPluginSettings {
8
8
  /**
9
9
  * The maximum resolution to allow in the level selector.
10
10
  */
@@ -31,19 +31,19 @@ export interface LevelSelectorPluginSettings {
31
31
  *
32
32
  * The plugin is rendered as an item in the gear menu, which, when clicked, shows a list of quality levels to choose from.
33
33
  *
34
- * Configuration options - {@link LevelSelectorPluginSettings}
34
+ * Configuration options - {@link QualityLevelsPluginSettings}
35
35
  *
36
36
  * @example
37
37
  * ```ts
38
38
  * new Player({
39
- * levelSelector: {
39
+ * qualityLevels: {
40
40
  * restrictResolution: 360,
41
41
  * labels: { 360: 'SD', 720: 'HD' },
42
42
  * },
43
43
  * })
44
44
  * ```
45
45
  */
46
- export declare class LevelSelector extends UICorePlugin {
46
+ export declare class QualityLevels extends UICorePlugin {
47
47
  private levels;
48
48
  private levelLabels;
49
49
  private removeAuto;
@@ -93,6 +93,7 @@ export declare class LevelSelector extends UICorePlugin {
93
93
  render(): this;
94
94
  private renderDropdown;
95
95
  private updateButton;
96
+ private get pluginOptions();
96
97
  private get maxLevel();
97
98
  private onLevelsAvailable;
98
99
  private makeLevelsLabels;
@@ -1 +1 @@
1
- {"version":3,"file":"LevelSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/LevelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAA;AAgB7D,OAAO,2CAA2C,CAAA;AAMlD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,eAAe,CAAK;IAE5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAChB;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuC;IAE3E;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACM,MAAM;IAUf,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;IAcpB,OAAO,KAAK,QAAQ,GASnB;IAED,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,qBAAqB;CAkB9B"}
1
+ {"version":3,"file":"LevelSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/LevelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAA;AAgB7D,OAAO,2CAA2C,CAAA;AAMlD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,eAAe,CAAK;IAE5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAChB;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuC;IAE3E;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACM,MAAM;IAUf,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;IAcpB,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,QAAQ,GASnB;IAED,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,qBAAqB;CAkB9B"}
@@ -25,19 +25,19 @@ const VERSION = '2.19.4';
25
25
  *
26
26
  * The plugin is rendered as an item in the gear menu, which, when clicked, shows a list of quality levels to choose from.
27
27
  *
28
- * Configuration options - {@link LevelSelectorPluginSettings}
28
+ * Configuration options - {@link QualityLevelsPluginSettings}
29
29
  *
30
30
  * @example
31
31
  * ```ts
32
32
  * new Player({
33
- * levelSelector: {
33
+ * qualityLevels: {
34
34
  * restrictResolution: 360,
35
35
  * labels: { 360: 'SD', 720: 'HD' },
36
36
  * },
37
37
  * })
38
38
  * ```
39
39
  */
40
- export class LevelSelector extends UICorePlugin {
40
+ export class QualityLevels extends UICorePlugin {
41
41
  levels = [];
42
42
  levelLabels = [];
43
43
  removeAuto = false;
@@ -156,7 +156,7 @@ export class LevelSelector extends UICorePlugin {
156
156
  return this;
157
157
  }
158
158
  renderDropdown() {
159
- this.$el.html(LevelSelector.listTemplate({
159
+ this.$el.html(QualityLevels.listTemplate({
160
160
  arrowLeftIcon,
161
161
  checkIcon,
162
162
  current: this.selectedLevelId,
@@ -171,7 +171,7 @@ export class LevelSelector extends UICorePlugin {
171
171
  ;
172
172
  this.core.getPlugin('bottom_gear')
173
173
  ?.addItem('quality', this.$el)
174
- .html(LevelSelector.buttonTemplate({
174
+ .html(QualityLevels.buttonTemplate({
175
175
  arrowRightIcon,
176
176
  currentText: this.currentText,
177
177
  isHd: this.isHd,
@@ -179,15 +179,18 @@ export class LevelSelector extends UICorePlugin {
179
179
  i18n: this.core.i18n,
180
180
  }));
181
181
  }
182
+ get pluginOptions() {
183
+ return this.core.options.qualityLevels || this.core.options.levelSelector;
184
+ }
182
185
  get maxLevel() {
183
- const maxRes = this.core.options.levelSelector?.restrictResolution;
186
+ const maxRes = this.pluginOptions.restrictResolution;
184
187
  return maxRes
185
188
  ? this.levels.find((level) => (level.height > level.width ? level.width : level.height) ===
186
189
  maxRes)?.level ?? -1
187
190
  : -1;
188
191
  }
189
192
  onLevelsAvailable(levels) {
190
- const maxResolution = this.core.options.levelSelector?.restrictResolution;
193
+ const maxResolution = this.pluginOptions.restrictResolution;
191
194
  this.levels = levels;
192
195
  this.makeLevelsLabels();
193
196
  if (maxResolution) {
@@ -201,7 +204,7 @@ export class LevelSelector extends UICorePlugin {
201
204
  this.render();
202
205
  }
203
206
  makeLevelsLabels() {
204
- const labels = this.core.options.levelSelector?.labels ?? {};
207
+ const labels = this.pluginOptions.labels ?? {};
205
208
  this.levelLabels = [];
206
209
  for (const level of this.levels) {
207
210
  const ll = level.width > level.height ? level.height : level.width;
@@ -0,0 +1,112 @@
1
+ import { UICorePlugin } from '@clappr/core';
2
+ import '../../../assets/level-selector/style.scss';
3
+ /**
4
+ * Configuration options for the {@link QualityLevels} plugin.
5
+ * @beta
6
+ */
7
+ export interface QualityLevelsPluginSettings {
8
+ /**
9
+ * The maximum resolution to allow in the level selector.
10
+ */
11
+ restrictResolution?: number;
12
+ /**
13
+ * The labels to show in the level selector.
14
+ * @example
15
+ * ```ts
16
+ * { 360: 'SD', 720: 'HD' }
17
+ * ```
18
+ */
19
+ labels?: Record<number, string>;
20
+ }
21
+ /**
22
+ * `PLUGIN` that provides a UI to select the desired quality level of the playback.
23
+ * @beta
24
+ *
25
+ * @remarks
26
+ * Depends on:
27
+ *
28
+ * - {@link MediaControl}
29
+ *
30
+ * - {@link BottomGear}
31
+ *
32
+ * The plugin is rendered as an item in the gear menu, which, when clicked, shows a list of quality levels to choose from.
33
+ *
34
+ * Configuration options - {@link QualityLevelsPluginSettings}
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * new Player({
39
+ * qualityLevels: {
40
+ * restrictResolution: 360,
41
+ * labels: { 360: 'SD', 720: 'HD' },
42
+ * },
43
+ * })
44
+ * ```
45
+ */
46
+ export declare class QualityLevels extends UICorePlugin {
47
+ private levels;
48
+ private levelLabels;
49
+ private removeAuto;
50
+ private isHd;
51
+ private currentText;
52
+ private selectedLevelId;
53
+ private static readonly buttonTemplate;
54
+ private static readonly listTemplate;
55
+ /**
56
+ * @internal
57
+ */
58
+ get name(): string;
59
+ /**
60
+ * @internal
61
+ */
62
+ get supportedVersion(): {
63
+ min: string;
64
+ };
65
+ /**
66
+ * @internal
67
+ */
68
+ static get version(): string;
69
+ /**
70
+ * @internal
71
+ */
72
+ get attributes(): {
73
+ class: string;
74
+ 'data-level-selector': string;
75
+ };
76
+ get events(): {
77
+ 'click .gear-sub-menu_btn': string;
78
+ 'click .go-back': string;
79
+ };
80
+ /**
81
+ * @internal
82
+ */
83
+ bindEvents(): void;
84
+ private onCoreReady;
85
+ private onGearRendered;
86
+ private onActiveContainerChange;
87
+ private updateHd;
88
+ private onStop;
89
+ private shouldRender;
90
+ /**
91
+ * @internal
92
+ */
93
+ render(): this;
94
+ private renderDropdown;
95
+ private updateButton;
96
+ private get pluginOptions();
97
+ private get maxLevel();
98
+ private onLevelsAvailable;
99
+ private makeLevelsLabels;
100
+ private onSelect;
101
+ private goBack;
102
+ private setLevel;
103
+ private allLevelElements;
104
+ private levelElement;
105
+ private onLevelSwitchStart;
106
+ private onLevelSwitchEnd;
107
+ private updateText;
108
+ private getLevelLabel;
109
+ private onBitrate;
110
+ private highlightCurrentLevel;
111
+ }
112
+ //# sourceMappingURL=QualityLevels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QualityLevels.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/QualityLevels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAA;AAgB7D,OAAO,2CAA2C,CAAA;AAMlD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,eAAe,CAAK;IAE5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAChB;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuC;IAE3E;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACM,MAAM;IAUf,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;IAcpB,OAAO,KAAK,aAAa,GAIxB;IAED,OAAO,KAAK,QAAQ,GASnB;IAED,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,qBAAqB;CAkB9B"}