@gcorevideo/player 2.21.1 → 2.21.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/assets/audio-selector/style.scss +1 -1
  2. package/assets/audio-selector/track-selector.ejs +3 -3
  3. package/assets/bottom-gear/bottomgear.ejs +2 -2
  4. package/assets/media-control/container.scss +1 -1
  5. package/assets/media-control/media-control.ejs +1 -11
  6. package/assets/media-control/media-control.scss +49 -57
  7. package/assets/media-control/width270.scss +1 -1
  8. package/assets/media-control/width370.scss +7 -9
  9. package/assets/playback-rate/button.ejs +2 -2
  10. package/assets/playback-rate/list.ejs +4 -4
  11. package/assets/subtitles/combobox.ejs +10 -12
  12. package/assets/subtitles/string.ejs +1 -1
  13. package/assets/subtitles/style.scss +9 -16
  14. package/dist/core.js +5 -1
  15. package/dist/index.css +782 -794
  16. package/dist/index.js +240 -244
  17. package/dist/player.d.ts +141 -119
  18. package/dist/plugins/index.css +862 -874
  19. package/dist/plugins/index.js +222 -238
  20. package/docs/api/player.bottomgear.getelement.md +2 -2
  21. package/docs/api/player.bottomgear.md +1 -1
  22. package/docs/api/{player.subtitles.hide.md → player.closedcaptions.hide.md} +2 -2
  23. package/docs/api/{player.subtitles.md → player.closedcaptions.md} +11 -11
  24. package/docs/api/{player.subtitles.show.md → player.closedcaptions.show.md} +2 -2
  25. package/docs/api/player.closedcaptionspluginsettings.md +13 -0
  26. package/docs/api/player.gearitemelement.md +6 -4
  27. package/docs/api/player.gearoptionsitem.md +16 -0
  28. package/docs/api/player.md +48 -12
  29. package/docs/api/player.mediacontrol.putelement.md +2 -2
  30. package/docs/api/player.mediacontrolelement.md +1 -1
  31. package/docs/api/player.playbackrate.md +1 -1
  32. package/docs/api/player.subtitlespluginsettings.md +18 -0
  33. package/docs/api/player.texttrackitem.id.md +11 -0
  34. package/docs/api/player.texttrackitem.md +87 -0
  35. package/docs/api/player.texttrackitem.name.md +11 -0
  36. package/docs/api/player.texttrackitem.track.md +11 -0
  37. package/lib/index.d.ts +1 -1
  38. package/lib/index.js +1 -1
  39. package/lib/index.plugins.d.ts +2 -1
  40. package/lib/index.plugins.d.ts.map +1 -1
  41. package/lib/index.plugins.js +2 -1
  42. package/lib/playback/BasePlayback.d.ts +1 -0
  43. package/lib/playback/BasePlayback.d.ts.map +1 -1
  44. package/lib/playback/BasePlayback.js +3 -0
  45. package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
  46. package/lib/playback/dash-playback/DashPlayback.js +1 -0
  47. package/lib/playback.types.d.ts +5 -0
  48. package/lib/playback.types.d.ts.map +1 -1
  49. package/lib/plugins/audio-selector/AudioSelector.d.ts +2 -3
  50. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
  51. package/lib/plugins/audio-selector/AudioSelector.js +6 -7
  52. package/lib/plugins/bottom-gear/BottomGear.d.ts +7 -3
  53. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  54. package/lib/plugins/bottom-gear/BottomGear.js +4 -2
  55. package/lib/plugins/media-control/MediaControl.d.ts +5 -6
  56. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  57. package/lib/plugins/media-control/MediaControl.js +48 -39
  58. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +1 -0
  59. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
  60. package/lib/plugins/picture-in-picture/PictureInPicture.js +4 -4
  61. package/lib/plugins/playback-rate/PlaybackRate.d.ts +1 -1
  62. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  63. package/lib/plugins/playback-rate/PlaybackRate.js +24 -14
  64. package/lib/plugins/subtitles/ClosedCaptions.d.ts +118 -0
  65. package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -0
  66. package/lib/plugins/subtitles/ClosedCaptions.js +348 -0
  67. package/lib/plugins/subtitles/Subtitles.d.ts +31 -26
  68. package/lib/plugins/subtitles/Subtitles.d.ts.map +1 -1
  69. package/lib/plugins/subtitles/Subtitles.js +138 -169
  70. package/lib/testUtils.d.ts +22 -18
  71. package/lib/testUtils.d.ts.map +1 -1
  72. package/lib/testUtils.js +22 -36
  73. package/package.json +1 -1
  74. package/src/index.plugins.ts +2 -1
  75. package/src/index.ts +1 -1
  76. package/src/playback/BasePlayback.ts +4 -0
  77. package/src/playback/dash-playback/DashPlayback.ts +1 -0
  78. package/src/playback.types.ts +6 -0
  79. package/src/plugins/audio-selector/AudioSelector.ts +9 -8
  80. package/src/plugins/bottom-gear/BottomGear.ts +14 -5
  81. package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
  82. package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +2 -2
  83. package/src/plugins/media-control/MediaControl.ts +84 -60
  84. package/src/plugins/media-control/__tests__/MediaControl.test.ts +43 -0
  85. package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +175 -0
  86. package/src/plugins/picture-in-picture/PictureInPicture.ts +5 -5
  87. package/src/plugins/playback-rate/PlaybackRate.ts +143 -100
  88. package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +65 -0
  89. package/src/plugins/playback-rate/__tests__/__snapshots__/PlaybackRate.test.ts.snap +11 -0
  90. package/src/plugins/subtitles/ClosedCaptions.ts +469 -0
  91. package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +58 -0
  92. package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +25 -0
  93. package/src/testUtils.ts +22 -36
  94. package/temp/player.api.json +269 -89
  95. package/tsconfig.tsbuildinfo +1 -1
  96. package/src/plugins/index.ts +0 -39
  97. package/src/plugins/subtitles/Subtitles.ts +0 -496
@@ -6,7 +6,11 @@ import { ZeptoResult } from '../../types.js';
6
6
  * An element inside the gear menu
7
7
  * @beta
8
8
  */
9
- export type GearItemElement = 'quality' | 'rate' | 'nerd';
9
+ export type GearOptionsItem = 'quality' | 'rate' | 'nerd';
10
+ /**
11
+ * @deprecated Use {@link GearOptionsItem} instead
12
+ */
13
+ export type GearItemElement = GearOptionsItem;
10
14
  /**
11
15
  * `PLUGIN` that adds the gear button with an extra options menu on the right side of the {@link MediaControl | media control} UI
12
16
  * @beta
@@ -15,7 +19,7 @@ export type GearItemElement = 'quality' | 'rate' | 'nerd';
15
19
  *
16
20
  * Depends on:
17
21
  *
18
- * - {@link MediaControl | media_control}
22
+ * - {@link MediaControl}
19
23
  */
20
24
  export declare class BottomGear extends UICorePlugin {
21
25
  private isHd;
@@ -54,7 +58,7 @@ export declare class BottomGear extends UICorePlugin {
54
58
  * @param name - Name of a gear menu placeholder item to attach custom UI
55
59
  * @returns Zepto result of the element
56
60
  */
57
- getElement(name: GearItemElement): ZeptoResult | null;
61
+ getElement(name: GearOptionsItem): ZeptoResult | null;
58
62
  /**
59
63
  * Replaces the content of the gear menu
60
64
  * @param content - Zepto result of the element
@@ -1 +1 @@
1
- {"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAO9E,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gDAAgD,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,IAAI,CAAS;IAErB;;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;IAKnB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAIrD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW;IAI/B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAiBf;;;;OAIG;IACH,OAAO;IAKP,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,WAAW;CAMpB"}
1
+ {"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAO9E,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gDAAgD,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC;AAI9C;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,IAAI,CAAS;IAErB;;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;IAKnB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAMrD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW;IAI/B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAiBf;;;;OAIG;IACH,OAAO;IAKP,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,WAAW;CAMpB"}
@@ -10,6 +10,7 @@ import gearHdIcon from '../../../assets/icons/new/gear-hd.svg';
10
10
  import { MediaControlEvents } from '../media-control/MediaControl';
11
11
  const VERSION = '2.19.12';
12
12
  const T = 'plugins.bottom_gear';
13
+ // TODO disabled if no items added
13
14
  /**
14
15
  * `PLUGIN` that adds the gear button with an extra options menu on the right side of the {@link MediaControl | media control} UI
15
16
  * @beta
@@ -18,7 +19,7 @@ const T = 'plugins.bottom_gear';
18
19
  *
19
20
  * Depends on:
20
21
  *
21
- * - {@link MediaControl | media_control}
22
+ * - {@link MediaControl}
22
23
  */
23
24
  export class BottomGear extends UICorePlugin {
24
25
  isHd = false;
@@ -71,6 +72,7 @@ export class BottomGear extends UICorePlugin {
71
72
  getElement(name) {
72
73
  return this.$el.find(`.gear-options-list [data-${name}]`);
73
74
  }
75
+ // TODO implement putElement/addElement method
74
76
  /**
75
77
  * Replaces the content of the gear menu
76
78
  * @param content - Zepto result of the element
@@ -104,7 +106,7 @@ export class BottomGear extends UICorePlugin {
104
106
  ];
105
107
  const icon = this.isHd ? gearHdIcon : gearIcon;
106
108
  this.$el.html(BottomGear.template({ icon, items }));
107
- mediaControl.putElement('gear', this.$el);
109
+ mediaControl.putElement('gear', this.el);
108
110
  mediaControl.trigger(MediaControlEvents.MEDIACONTROL_GEAR_RENDERED);
109
111
  return this;
110
112
  }
@@ -5,7 +5,7 @@ import '../../../assets/media-control/media-control.scss';
5
5
  * Media control elements, mount points for additional plugins
6
6
  * @beta
7
7
  */
8
- export type MediaControlElement = 'audioTracksSelector' | 'clipText' | 'gear' | 'pip' | 'playbackRate' | 'seekBarContainer' | 'subtitlesSelector';
8
+ export type MediaControlElement = 'audiotracks' | 'clipText' | 'gear' | 'pip' | 'playbackRate' | 'seekBarContainer' | 'cc';
9
9
  /**
10
10
  * Custom events emitted by the plugins to communicate with one another
11
11
  * @beta
@@ -23,7 +23,6 @@ export declare enum MediaControlEvents {
23
23
  * The methods exposed are to be used by the other plugins that extend the media control UI.
24
24
  */
25
25
  export declare class MediaControl extends UICorePlugin {
26
- private advertisementPlaying;
27
26
  private buttonsColor;
28
27
  private currentDurationValue;
29
28
  private currentPositionValue;
@@ -65,7 +64,6 @@ export declare class MediaControl extends UICorePlugin {
65
64
  private $seekBarLoaded;
66
65
  private $seekBarPosition;
67
66
  private $seekBarScrubber;
68
- private $subtitlesSelector;
69
67
  private $volumeBarContainer;
70
68
  private $volumeBarBackground;
71
69
  private $volumeBarFill;
@@ -166,7 +164,7 @@ export declare class MediaControl extends UICorePlugin {
166
164
  */
167
165
  setInitialVolume(): void;
168
166
  private onVolumeChanged;
169
- private onLoadedMetadataOnVideoTag;
167
+ private onLoadedMetadata;
170
168
  private updateVolumeUI;
171
169
  private changeTogglePlay;
172
170
  private mousemoveOnSeekBar;
@@ -208,7 +206,7 @@ export declare class MediaControl extends UICorePlugin {
208
206
  private show;
209
207
  private hide;
210
208
  private updateCursorStyle;
211
- private settingsUpdate;
209
+ private updateSettings;
212
210
  private highDefinitionUpdate;
213
211
  private createCachedElements;
214
212
  /**
@@ -231,7 +229,7 @@ export declare class MediaControl extends UICorePlugin {
231
229
  * ```
232
230
  */
233
231
  getElement(name: MediaControlElement): ZeptoResult | null;
234
- putElement(name: MediaControlElement, element: ZeptoResult): void;
232
+ putElement(name: MediaControlElement, element: HTMLElement): void;
235
233
  /**
236
234
  * Get the right panel area to append custom elements to
237
235
  * @returns ZeptoSelector of the right panel element
@@ -276,5 +274,6 @@ export declare class MediaControl extends UICorePlugin {
276
274
  */
277
275
  disabledControlButton(): void;
278
276
  private isSeekEnabledForHtml5Playback;
277
+ private getElementLocation;
279
278
  }
280
279
  //# sourceMappingURL=MediaControl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
@@ -53,7 +53,7 @@ function orderByOrderPattern(arr, order) {
53
53
  * The methods exposed are to be used by the other plugins that extend the media control UI.
54
54
  */
55
55
  export class MediaControl extends UICorePlugin {
56
- advertisementPlaying = false;
56
+ // private advertisementPlaying = false
57
57
  buttonsColor = null;
58
58
  currentDurationValue = 0;
59
59
  currentPositionValue = 0;
@@ -75,7 +75,7 @@ export class MediaControl extends UICorePlugin {
75
75
  lastMouseY = 0;
76
76
  persistConfig;
77
77
  rendered = false;
78
- settings = {};
78
+ settings = {}; // TODO & seekEnabled: boolean, ...
79
79
  userDisabled = false;
80
80
  userKeepVisible = false;
81
81
  verticalVolume = false;
@@ -95,7 +95,6 @@ export class MediaControl extends UICorePlugin {
95
95
  $seekBarLoaded = null;
96
96
  $seekBarPosition = null;
97
97
  $seekBarScrubber = null;
98
- $subtitlesSelector = null;
99
98
  $volumeBarContainer = null;
100
99
  $volumeBarBackground = null;
101
100
  $volumeBarFill = null;
@@ -116,7 +115,8 @@ export class MediaControl extends UICorePlugin {
116
115
  return { min: CLAPPR_VERSION };
117
116
  }
118
117
  get disabled() {
119
- const playbackIsNOOP = this.core.activeContainer && this.core.activeContainer.getPlaybackType() === Playback.NO_OP;
118
+ const playbackIsNOOP = this.core.activeContainer &&
119
+ this.core.activeContainer.getPlaybackType() === Playback.NO_OP;
120
120
  return this.userDisabled || playbackIsNOOP;
121
121
  }
122
122
  /**
@@ -256,18 +256,16 @@ export class MediaControl extends UICorePlugin {
256
256
  this.listenTo(this.core.activeContainer, Events.CONTAINER_DBLCLICK, this.toggleFullscreen);
257
257
  this.listenTo(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
258
258
  this.listenTo(this.core.activeContainer, Events.CONTAINER_PROGRESS, this.updateProgressBar);
259
- this.listenTo(this.core.activeContainer, Events.CONTAINER_SETTINGSUPDATE, this.settingsUpdate);
260
- this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.settingsUpdate);
259
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_SETTINGSUPDATE, this.updateSettings);
260
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.updateSettings);
261
261
  this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
262
262
  this.listenTo(this.core.activeContainer, Events.CONTAINER_MEDIACONTROL_DISABLE, this.disable);
263
263
  this.listenTo(this.core.activeContainer, Events.CONTAINER_MEDIACONTROL_ENABLE, this.enable);
264
264
  this.listenTo(this.core.activeContainer, Events.CONTAINER_ENDED, this.ended);
265
265
  this.listenTo(this.core.activeContainer, Events.CONTAINER_VOLUME, this.onVolumeChanged);
266
266
  this.listenTo(this.core.activeContainer, Events.CONTAINER_OPTIONS_CHANGE, this.setInitialVolume);
267
- if (this.core.activePlayback.el.nodeName.toLowerCase() === 'video') {
268
- // wait until the metadata has loaded and then check if fullscreen on video tag is supported
269
- this.listenToOnce(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadataOnVideoTag);
270
- }
267
+ // wait until the metadata has loaded and then check if fullscreen on video tag is supported
268
+ this.listenToOnce(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadata);
271
269
  }
272
270
  /**
273
271
  * Hides the media control UI
@@ -302,13 +300,13 @@ export class MediaControl extends UICorePlugin {
302
300
  onVolumeChanged() {
303
301
  this.updateVolumeUI();
304
302
  }
305
- onLoadedMetadataOnVideoTag(event) {
303
+ onLoadedMetadata() {
306
304
  const video = this.core.activePlayback?.el;
307
305
  // video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
308
306
  // see https://github.com/clappr/clappr/issues/1127
309
307
  if (!Fullscreen.fullscreenEnabled() && video.webkitSupportsFullscreen) {
310
308
  this.fullScreenOnVideoTagSupported = true;
311
- this.settingsUpdate();
309
+ this.updateSettings();
312
310
  }
313
311
  }
314
312
  updateVolumeUI() {
@@ -538,7 +536,7 @@ export class MediaControl extends UICorePlugin {
538
536
  this.setInitialVolume();
539
537
  this.changeTogglePlay();
540
538
  this.bindContainerEvents();
541
- this.settingsUpdate();
539
+ this.updateSettings();
542
540
  this.core.activeContainer.trigger(Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
543
541
  // TODO test
544
542
  if (this.core.activeContainer.mediaControlDisabled) {
@@ -719,18 +717,19 @@ export class MediaControl extends UICorePlugin {
719
717
  this.core.$el.addClass('nocursor');
720
718
  }
721
719
  }
722
- settingsUpdate() {
720
+ updateSettings() {
723
721
  const newSettings = $.extend(true, {
724
722
  left: [],
725
723
  default: [],
726
724
  right: [],
727
- }, this.core.activeContainer?.settings);
725
+ }, this.core.activeContainer.settings);
728
726
  newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
727
+ // actual order of the items appear rendered is controlled by CSS
729
728
  newSettings.right = [
730
729
  'fullscreen',
731
730
  'pip',
732
- 'bottomgear',
733
- 'subtitles',
731
+ 'gear',
732
+ 'cc',
734
733
  'multicamera',
735
734
  'playbackrate',
736
735
  'vr',
@@ -739,7 +738,7 @@ export class MediaControl extends UICorePlugin {
739
738
  if ((!this.fullScreenOnVideoTagSupported &&
740
739
  !Fullscreen.fullscreenEnabled()) ||
741
740
  this.options.fullscreenDisable) {
742
- // remove fullscreen from settings if it is present
741
+ // remove fullscreen from settings if it is not available
743
742
  removeArrayItem(newSettings.default, 'fullscreen');
744
743
  removeArrayItem(newSettings.left, 'fullscreen');
745
744
  removeArrayItem(newSettings.right, 'fullscreen');
@@ -776,10 +775,9 @@ export class MediaControl extends UICorePlugin {
776
775
  this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');
777
776
  this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');
778
777
  this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
779
- this.$subtitlesSelector = this.$el.find('.media-control-subtitles[data-subtitles]');
780
778
  this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
781
779
  this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
782
- this.$clipText = this.$el.find('.media-clip-text[data-clipstext]');
780
+ this.$clipText = this.$el.find('.media-clip-text[data-clipstext]'); // TODO
783
781
  this.$clipTextContainer = this.$el.find('.media-clip-container[data-clipstext]');
784
782
  this.resetIndicators();
785
783
  this.initializeIcons();
@@ -805,33 +803,32 @@ export class MediaControl extends UICorePlugin {
805
803
  */
806
804
  getElement(name) {
807
805
  switch (name) {
808
- case 'audioTracksSelector':
806
+ case 'audiotracks':
809
807
  return null;
810
808
  case 'clipText':
811
809
  return this.$clipText;
812
- case 'gear':
813
- return null;
814
- case 'pip':
815
- return null;
816
810
  case 'playbackRate':
817
811
  return this.$playbackRate;
818
812
  case 'seekBarContainer':
819
813
  return this.$seekBarContainer;
820
- case 'subtitlesSelector':
821
- return this.$subtitlesSelector;
822
814
  }
823
815
  }
824
816
  putElement(name, element) {
825
- switch (name) {
826
- case 'audioTracksSelector':
827
- this.getRightPanel().append(element);
828
- break;
829
- case 'pip':
830
- this.getRightPanel().append(element);
831
- break;
832
- case 'gear':
833
- this.getRightPanel().append(element);
834
- break;
817
+ const panel = this.getElementLocation(name);
818
+ trace(`${T} putElement`, { name, panel: !!panel });
819
+ if (panel) {
820
+ const current = panel.find(`[data-${name}]`);
821
+ element.setAttribute(`data-${name}`, "");
822
+ // TODO test
823
+ if (current.length) {
824
+ if (current[0] === element) {
825
+ return;
826
+ }
827
+ current.replaceWith(element);
828
+ }
829
+ else {
830
+ panel.append(element);
831
+ }
835
832
  }
836
833
  }
837
834
  /**
@@ -1069,12 +1066,12 @@ export class MediaControl extends UICorePlugin {
1069
1066
  }
1070
1067
  // TODO manage by the ads plugin
1071
1068
  onStartAd() {
1072
- this.advertisementPlaying = true;
1069
+ // this.advertisementPlaying = true
1073
1070
  this.disable();
1074
1071
  }
1075
1072
  // TODO manage by the ads plugin
1076
1073
  onFinishAd() {
1077
- this.advertisementPlaying = false;
1074
+ // this.advertisementPlaying = false
1078
1075
  this.enable();
1079
1076
  }
1080
1077
  // TODO remove
@@ -1118,6 +1115,18 @@ export class MediaControl extends UICorePlugin {
1118
1115
  }
1119
1116
  return isFinite(this.core.activePlayback.getDuration());
1120
1117
  }
1118
+ getElementLocation(name) {
1119
+ if (this.settings.right?.includes(name)) {
1120
+ return this.getRightPanel();
1121
+ }
1122
+ if (this.settings.left?.includes(name)) {
1123
+ return this.getLeftPanel();
1124
+ }
1125
+ if (this.settings.default?.includes(name)) {
1126
+ return this.getCenterPanel();
1127
+ }
1128
+ return null;
1129
+ }
1121
1130
  }
1122
1131
  MediaControl.extend = function (properties) {
1123
1132
  return extend(MediaControl, properties);
@@ -25,6 +25,7 @@ export declare class PictureInPicture extends UICorePlugin {
25
25
  * @internal
26
26
  */
27
27
  static get version(): string;
28
+ private static buttonTemplate;
28
29
  /**
29
30
  * @internal
30
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"PictureInPicture.d.ts","sourceRoot":"","sources":["../../../src/plugins/picture-in-picture/PictureInPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAO9D,OAAO,gDAAgD,CAAC;AAMxD;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,IAAa,UAAU;;MAItB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,cAAc;IAStB;;OAEG;IACM,MAAM;IAiBf,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,oBAAoB;CAI7B"}
1
+ {"version":3,"file":"PictureInPicture.d.ts","sourceRoot":"","sources":["../../../src/plugins/picture-in-picture/PictureInPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAO9D,OAAO,gDAAgD,CAAC;AAMxD;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,cAAc,CAAwB;IAErD;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,IAAa,UAAU;;MAItB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,cAAc;IAStB;;OAEG;IACM,MAAM;IAef,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,oBAAoB;CAI7B"}
@@ -35,6 +35,7 @@ export class PictureInPicture extends UICorePlugin {
35
35
  static get version() {
36
36
  return VERSION;
37
37
  }
38
+ static buttonTemplate = template(buttonHtml);
38
39
  /**
39
40
  * @internal
40
41
  */
@@ -59,8 +60,8 @@ export class PictureInPicture extends UICorePlugin {
59
60
  }
60
61
  isPiPSupported() {
61
62
  trace(`${T} isPiPSupported`, {
62
- pictureInPictureEnabled: document.pictureInPictureEnabled,
63
- requestPictureInPicture: HTMLVideoElement.prototype.requestPictureInPicture,
63
+ pictureInPictureEnabled: !!document.pictureInPictureEnabled,
64
+ requestPictureInPicture: !!HTMLVideoElement.prototype.requestPictureInPicture,
64
65
  });
65
66
  return document.pictureInPictureEnabled && !!HTMLVideoElement.prototype.requestPictureInPicture;
66
67
  }
@@ -71,8 +72,7 @@ export class PictureInPicture extends UICorePlugin {
71
72
  if (!this.isPiPSupported()) {
72
73
  return this;
73
74
  }
74
- const t = template(buttonHtml);
75
- this.$el.html(t({ pipIcon }));
75
+ this.$el.html(PictureInPicture.buttonTemplate({ pipIcon }));
76
76
  const mediaControl = this.core.getPlugin('media_control');
77
77
  if (mediaControl) {
78
78
  mediaControl.putElement('pip', this.el);
@@ -11,6 +11,7 @@ import { UICorePlugin, Core } from '@clappr/core';
11
11
  * - {@link BottomGear | bottom_gear}
12
12
  *
13
13
  * It renders a button in the gear menu, which opens a dropdown with the options to change the playback rate.
14
+ * Note that the playback rate change is supported only for VOD or DVR enabled live streams.
14
15
  */
15
16
  export declare class PlaybackRate extends UICorePlugin {
16
17
  private playbackRates;
@@ -35,7 +36,6 @@ export declare class PlaybackRate extends UICorePlugin {
35
36
  */
36
37
  get attributes(): {
37
38
  class: string;
38
- 'data-playback-rate-select': string;
39
39
  };
40
40
  /**
41
41
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"PlaybackRate.d.ts","sourceRoot":"","sources":["../../../src/plugins/playback-rate/PlaybackRate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAsB,IAAI,EAAE,MAAM,cAAc,CAAC;AAoC9E;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,aAAa,CAAgD;IAGrE,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,YAAY,CAAiC;IAErD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAE9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAE9C,IAAI,EAAE,IAAI;IAMtB;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED;;OAEG;IACM,UAAU;IAKnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACM,MAAM;IA6Bf,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,MAAM;IAGd,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,oBAAoB;CAS7B"}
1
+ {"version":3,"file":"PlaybackRate.d.ts","sourceRoot":"","sources":["../../../src/plugins/playback-rate/PlaybackRate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAsB,IAAI,EAAE,MAAM,cAAc,CAAA;AAuC7E;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,aAAa,CAA+C;IAGpE,OAAO,CAAC,gBAAgB,CAAoB;IAE5C,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,YAAY,CAAgC;IAEpD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAE7C,IAAI,EAAE,IAAI;IAQtB;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,YAAY;IAepB;;OAEG;IACM,MAAM;IAgCf,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,oBAAoB;CAS7B"}
@@ -9,7 +9,7 @@ import arrowRightIcon from '../../../assets/icons/new/arrow-right.svg';
9
9
  import arrowLeftIcon from '../../../assets/icons/new/arrow-left.svg';
10
10
  import checkIcon from '../../../assets/icons/new/check.svg';
11
11
  import { PlaybackEvents } from '../../playback/types.js';
12
- import { MediaControlEvents } from '../media-control/MediaControl.js';
12
+ import { MediaControlEvents, } from '../media-control/MediaControl.js';
13
13
  const DEFAULT_PLAYBACK_RATES = [
14
14
  { value: '0.5', label: '0.5x' },
15
15
  { value: '0.75', label: '0.75x' },
@@ -17,7 +17,7 @@ const DEFAULT_PLAYBACK_RATES = [
17
17
  { value: '1.25', label: '1.25x' },
18
18
  { value: '1.5', label: '1.5x' },
19
19
  { value: '1.75', label: '1.75x' },
20
- { value: '2.0', label: '2x' }
20
+ { value: '2.0', label: '2x' },
21
21
  ];
22
22
  const DEFAULT_PLAYBACK_RATE = '1.0';
23
23
  const T = 'plugins.playback_rate';
@@ -33,6 +33,7 @@ const T = 'plugins.playback_rate';
33
33
  * - {@link BottomGear | bottom_gear}
34
34
  *
35
35
  * It renders a button in the gear menu, which opens a dropdown with the options to change the playback rate.
36
+ * Note that the playback rate change is supported only for VOD or DVR enabled live streams.
36
37
  */
37
38
  export class PlaybackRate extends UICorePlugin {
38
39
  playbackRates = DEFAULT_PLAYBACK_RATES;
@@ -56,16 +57,17 @@ export class PlaybackRate extends UICorePlugin {
56
57
  static listTemplate = template(listHtml);
57
58
  constructor(core) {
58
59
  super(core);
59
- this.playbackRates = core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
60
- this.selectedRate = core.options.playbackRate?.defaultValue || DEFAULT_PLAYBACK_RATE;
60
+ this.playbackRates =
61
+ core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
62
+ this.selectedRate =
63
+ core.options.playbackRate?.defaultValue || DEFAULT_PLAYBACK_RATE;
61
64
  }
62
65
  /**
63
66
  * @internal
64
67
  */
65
68
  get attributes() {
66
69
  return {
67
- 'class': this.name,
68
- 'data-playback-rate-select': ''
70
+ class: 'media-control-playbackrate',
69
71
  };
70
72
  }
71
73
  /**
@@ -86,6 +88,7 @@ export class PlaybackRate extends UICorePlugin {
86
88
  this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChange);
87
89
  }
88
90
  onCoreReady() {
91
+ trace(`${T} onCoreReady`);
89
92
  const mediaControl = this.core.getPlugin('media_control');
90
93
  assert(mediaControl, 'media_control plugin is required');
91
94
  const gear = this.core.getPlugin('bottom_gear');
@@ -93,6 +96,7 @@ export class PlaybackRate extends UICorePlugin {
93
96
  this.listenTo(mediaControl, MediaControlEvents.MEDIACONTROL_GEAR_RENDERED, this.onGearRendered);
94
97
  }
95
98
  onActiveContainerChange() {
99
+ trace(`${T} onActiveContainerChange`);
96
100
  this.listenTo(this.core.activePlayback, Events.PLAYBACK_STOP, this.onStop);
97
101
  this.listenTo(this.core.activePlayback, Events.PLAYBACK_PLAY, this.onPlay);
98
102
  this.listenTo(this.core.activePlayback, PlaybackEvents.PLAYBACK_RATE_CHANGED, this.onPlaybackRateChange);
@@ -116,7 +120,7 @@ export class PlaybackRate extends UICorePlugin {
116
120
  allRateElements() {
117
121
  return this.$('ul.gear-sub-menu li');
118
122
  }
119
- rateElement(rate = "1") {
123
+ rateElement(rate = '1') {
120
124
  return this.$(`ul.gear-sub-menu a[data-rate="${rate}"]`).parent();
121
125
  }
122
126
  onPlaybackRateChange(playbackRate) {
@@ -131,10 +135,11 @@ export class PlaybackRate extends UICorePlugin {
131
135
  }
132
136
  }
133
137
  shouldRender() {
134
- if (!this.core.activeContainer) {
138
+ if (!this.core.activePlayback) {
135
139
  return false;
136
140
  }
137
- if (this.core.getPlaybackType() === Playback.LIVE && !this.core.activePlayback.dvrEnabled) {
141
+ if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
142
+ !this.core.activePlayback.dvrEnabled) {
138
143
  return false;
139
144
  }
140
145
  return 'setPlaybackRate' in this.core.activePlayback;
@@ -157,9 +162,12 @@ export class PlaybackRate extends UICorePlugin {
157
162
  title: this.getTitle(),
158
163
  speedIcon,
159
164
  arrowRightIcon,
165
+ i18n: this.core.i18n,
160
166
  });
161
167
  this.$el.html(button);
162
- this.core.getPlugin('bottom_gear')?.getElement('rate')?.html(this.el);
168
+ this.core.getPlugin('bottom_gear')
169
+ ?.getElement('rate')
170
+ ?.html(this.el);
163
171
  this.rendered = true;
164
172
  return this;
165
173
  }
@@ -174,7 +182,8 @@ export class PlaybackRate extends UICorePlugin {
174
182
  }
175
183
  }
176
184
  onPlay() {
177
- if (this.core.getPlaybackType() === Playback.LIVE && !this.core.activePlayback.dvrEnabled) {
185
+ if (this.core.getPlaybackType() === Playback.LIVE &&
186
+ !this.core.activePlayback.dvrEnabled) {
178
187
  this.resetPlaybackRate();
179
188
  }
180
189
  else {
@@ -184,8 +193,7 @@ export class PlaybackRate extends UICorePlugin {
184
193
  resetPlaybackRate() {
185
194
  this.setSelectedRate(DEFAULT_PLAYBACK_RATE);
186
195
  }
187
- onStop() {
188
- }
196
+ onStop() { }
189
197
  onRateSelect(event) {
190
198
  event.stopPropagation();
191
199
  const rate = event.currentTarget.dataset.rate;
@@ -200,6 +208,7 @@ export class PlaybackRate extends UICorePlugin {
200
208
  playbackRates: this.playbackRates,
201
209
  arrowLeftIcon,
202
210
  checkIcon,
211
+ i18n: this.core.i18n,
203
212
  }));
204
213
  this.core.getPlugin('bottom_gear')?.setContent(this.el);
205
214
  this.highlightCurrentRate();
@@ -215,7 +224,8 @@ export class PlaybackRate extends UICorePlugin {
215
224
  this.selectedRate = rate;
216
225
  }
217
226
  getTitle() {
218
- return this.playbackRates.find((r) => r.value === this.selectedRate)?.label || this.selectedRate;
227
+ return (this.playbackRates.find((r) => r.value === this.selectedRate)?.label ||
228
+ this.selectedRate);
219
229
  }
220
230
  highlightCurrentRate() {
221
231
  this.allRateElements().removeClass('current');