@gcorevideo/player 2.22.4 → 2.22.7

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 (60) hide show
  1. package/assets/level-selector/button.ejs +1 -1
  2. package/assets/level-selector/list.ejs +10 -4
  3. package/assets/level-selector/style.scss +8 -3
  4. package/assets/media-control/media-control.ejs +1 -2
  5. package/dist/core.js +2 -2
  6. package/dist/index.css +916 -912
  7. package/dist/index.js +452 -413
  8. package/dist/plugins/index.css +668 -664
  9. package/dist/plugins/index.js +514 -474
  10. package/lib/index.plugins.d.ts +2 -1
  11. package/lib/index.plugins.d.ts.map +1 -1
  12. package/lib/index.plugins.js +2 -1
  13. package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
  14. package/lib/playback/dash-playback/DashPlayback.js +1 -1
  15. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  16. package/lib/plugins/bottom-gear/BottomGear.js +2 -2
  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/media-control/MediaControl.d.ts +37 -6
  24. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  25. package/lib/plugins/media-control/MediaControl.js +54 -36
  26. package/lib/plugins/playback-rate/PlaybackRate.d.ts +5 -4
  27. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  28. package/lib/plugins/playback-rate/PlaybackRate.js +46 -24
  29. package/lib/plugins/subtitles/ClosedCaptions.js +1 -1
  30. package/lib/plugins/utils/fullscreen.d.ts +4 -0
  31. package/lib/plugins/utils/fullscreen.d.ts.map +1 -0
  32. package/lib/plugins/utils/fullscreen.js +30 -0
  33. package/lib/plugins/utils.d.ts +0 -1
  34. package/lib/plugins/utils.d.ts.map +1 -1
  35. package/lib/plugins/utils.js +0 -28
  36. package/lib/plugins/vast-ads/VastAds.d.ts +1 -0
  37. package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -1
  38. package/lib/plugins/vast-ads/VastAds.js +6 -3
  39. package/lib/utils/fullscreen.d.ts +3 -0
  40. package/lib/utils/fullscreen.d.ts.map +1 -0
  41. package/lib/utils/fullscreen.js +2 -0
  42. package/package.json +1 -1
  43. package/src/index.plugins.ts +2 -1
  44. package/src/playback/dash-playback/DashPlayback.ts +1 -4
  45. package/src/plugins/bottom-gear/BottomGear.ts +2 -2
  46. package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +15 -3
  47. package/src/plugins/level-selector/{LevelSelector.ts → QualityLevels.ts} +19 -13
  48. package/src/plugins/level-selector/__tests__/{LevelSelector.test.ts → QualityLevels.test.ts} +20 -6
  49. package/src/plugins/level-selector/__tests__/__snapshots__/{LevelSelector.test.ts.snap → QualityLevels.test.ts.snap} +58 -25
  50. package/src/plugins/media-control/MediaControl.ts +111 -62
  51. package/src/plugins/media-control/__tests__/MediaControl.test.ts +118 -8
  52. package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +149 -5
  53. package/src/plugins/playback-rate/PlaybackRate.ts +48 -26
  54. package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +125 -55
  55. package/src/plugins/playback-rate/__tests__/__snapshots__/PlaybackRate.test.ts.snap +1 -1
  56. package/src/plugins/subtitles/ClosedCaptions.ts +1 -1
  57. package/src/plugins/utils/fullscreen.ts +34 -0
  58. package/src/plugins/utils.ts +0 -31
  59. package/src/plugins/vast-ads/VastAds.ts +8 -4
  60. package/tsconfig.tsbuildinfo +1 -1
@@ -2,19 +2,51 @@ import { UICorePlugin, Core } from '@clappr/core';
2
2
  import { ZeptoResult } from '../../types.js';
3
3
  import '../../../assets/media-control/media-control.scss';
4
4
  /**
5
- * Media control elements, mount points for additional plugins
5
+ * Media control elements that appear in the left area.
6
6
  * @beta
7
7
  */
8
- export type MediaControlElement = 'audiotracks' | 'cc' | 'clipText' | 'dvr' | 'duration' | 'fullscreen' | 'gear' | 'multicamera' | 'pip' | 'playbackRate' | 'position' | 'seekBarContainer' | 'vr' | 'volume';
8
+ export type MediaControlLeftElement = 'clipText' | 'duration' | 'dvr' | 'playpause' | 'playstop' | 'position' | 'volume';
9
+ /**
10
+ * Media control elements that appear in main layer, spanning the entire width of the player.
11
+ * @beta
12
+ */
13
+ export type MediaControlLayerElement = 'seekbar' | 'seekBarContainer';
14
+ /**
15
+ * Media control elements that appear in the right area.
16
+ * @beta
17
+ */
18
+ export type MediaControlRightElement = 'audiotracks' | 'cc' | 'fullscreen' | 'hd-indicator' | 'gear' | 'multicamera' | 'pip' | 'vr';
19
+ /**
20
+ * Built-in media control elements.
21
+ * @beta
22
+ */
23
+ export type MediaControlElement = MediaControlLeftElement | MediaControlLayerElement | MediaControlRightElement;
24
+ /**
25
+ * Specifies the allowed media control elements in each area.
26
+ * Can be used to restrict rendered media control elements.
27
+ * @beta
28
+ */
29
+ export type MediaControlSettings = {
30
+ left: MediaControlLeftElement[];
31
+ right: MediaControlRightElement[];
32
+ default: MediaControlLayerElement[];
33
+ seekEnabled: boolean;
34
+ };
9
35
  /**
10
36
  * `PLUGIN` that provides basic playback controls UI and a foundation for developing custom UI.
11
37
  * @beta
12
38
  * @remarks
13
39
  * The methods exposed are to be used by the other plugins that extend the media control UI.
40
+ *
41
+ * Configuration options:
42
+ *
43
+ * - `mediaControl`: {@link MediaControlSettings} - specifies the allowed media control elements in each area
44
+ *
45
+ * - `persistConfig`: boolean - `common` option, makes the plugin persist the media control settings
46
+ *
47
+ * - `chromeless`: boolean
14
48
  */
15
49
  export declare class MediaControl extends UICorePlugin {
16
- private customAreaElements;
17
- private customAreaHandler?;
18
50
  private buttonsColor;
19
51
  private currentDurationValue;
20
52
  private currentPositionValue;
@@ -33,6 +65,7 @@ export declare class MediaControl extends UICorePlugin {
33
65
  private kibo;
34
66
  private lastMouseX;
35
67
  private lastMouseY;
68
+ private needsUpdate;
36
69
  private persistConfig;
37
70
  private rendered;
38
71
  private settings;
@@ -46,7 +79,6 @@ export declare class MediaControl extends UICorePlugin {
46
79
  private $multiCameraSelector;
47
80
  private $playPauseToggle;
48
81
  private $playStopToggle;
49
- private $playbackRate;
50
82
  private $position;
51
83
  private $seekBarContainer;
52
84
  private $seekBarHover;
@@ -217,7 +249,6 @@ export declare class MediaControl extends UICorePlugin {
217
249
  */
218
250
  getElement(name: MediaControlElement): ZeptoResult | null;
219
251
  putElement(name: MediaControlElement, element: ZeptoResult): void;
220
- handleCustomArea(handler: (name: string, content: HTMLElement) => void): void;
221
252
  /**
222
253
  * Toggle the visibility of a media control element
223
254
  * @param name - The name of the media control element
@@ -1 +1 @@
1
- {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,YAAY,EAMZ,IAAI,EACL,MAAM,cAAc,CAAA;AASrB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C,OAAO,kDAAkD,CAAA;AAWzD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,aAAa,GACb,IAAI,GACJ,UAAU,GACV,KAAK,GACL,UAAU,GACV,YAAY,GACZ,MAAM,GACN,aAAa,GACb,KAAK,GACL,cAAc,GACd,UAAU,GACV,kBAAkB,GAClB,IAAI,GACJ,QAAQ,CAAA;AAoDZ;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAG5C,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,iBAAiB,CAAC,CAA8C;IAExE,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,wBAAwB,CAAI;IAEpC,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,0BAA0B,CAAsB;IAExD,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,OAAO,CAAC,6BAA6B,CAAuB;IAE5D,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,YAAY,CAA6C;IAEjE,OAAO,CAAC,cAAc,CAAM;IAE5B,OAAO,CAAC,WAAW,CAAQ;IAE3B,OAAO,CAAC,IAAI,CAAM;IAElB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,QAAQ,CAAyC;IAEzD,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,eAAe,CAAQ;IAE/B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,kBAAkB,CAA2B;IAErD,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,cAAc,CAA2B;IAEjD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,OAAO,CAAC,cAAc,CAA2B;IAEjD,OAAO,CAAC,kBAAkB,CAA2B;IAErD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,WAAW,CAA2B;IAE9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,KAAK,QAAQ,GAMnB;IAED;;;OAGG;IACH,IAAI,SAAS,QAEZ;IAED;;;OAGG;IACH,IAAI,QAAQ,QAEX;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;MA4BlB;IAED,IAAI,cAAc,WAEjB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAInB;IAED;;OAEG;IACH,IAAI,KAAK,YAER;gBAEW,IAAI,EAAE,IAAI;IAoBtB;;OAEG;IACM,oBAAoB;2BAmZZ,MAAM;;;IA5YvB;;OAEG;IACM,UAAU;IAuCnB,OAAO,CAAC,mBAAmB;IA2E3B;;OAEG;IACM,OAAO;IAQhB;;OAEG;IACM,MAAM;IAUf;;OAEG;IACH,gBAAgB;IAOhB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,cAAc;IAwDtB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ,CAQf;IAED,OAAO,CAAC,UAAU,CAgBjB;IAED,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,UAAU;IAIlB;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,UAAQ;IA+BhD,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,IAAI;IAkBZ,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,IAAI;IAgCZ,OAAO,CAAC,IAAI;IAmCZ,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,cAAc;IAuDtB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,oBAAoB;IAwC5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW,GAAG,IAAI;IAazD,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW;IAmB1D,gBAAgB,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI;IAQtE;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO;IAItD,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACM,OAAO;IAShB,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACM,MAAM;IAqEf,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAIvB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAcvB;;OAEG;IACH,mBAAmB;IAMnB;;OAEG;IACH,qBAAqB;IAMrB,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,iBAAiB;CAO1B"}
1
+ {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,8 @@ import { reportError, trace } from '@gcorevideo/utils';
9
9
  // TODO replace Kibo with mousetrap
10
10
  import { Kibo } from '../kibo/index.js';
11
11
  import { CLAPPR_VERSION } from '../../build.js';
12
- import { getPageX, isFullscreen } from '../utils.js';
12
+ import { getPageX } from '../utils.js';
13
+ import { fullscreenEnabled, isFullscreen } from '../utils/fullscreen.js';
13
14
  import '../../../assets/media-control/media-control.scss';
14
15
  import mediaControlHTML from '../../../assets/media-control/media-control.ejs';
15
16
  import playIcon from '../../../assets/icons/new/play.svg';
@@ -20,20 +21,29 @@ import volumeOffIcon from '../../../assets/icons/new/volume-off.svg';
20
21
  import fullscreenOffIcon from '../../../assets/icons/new/fullscreen-off.svg';
21
22
  import fullscreenOnIcon from '../../../assets/icons/new/fullscreen-on.svg';
22
23
  const DEFAULT_SETTINGS = {
23
- left: [],
24
+ default: [],
25
+ left: [
26
+ 'dvr'
27
+ ],
24
28
  right: [
29
+ 'audiotracks',
30
+ 'cc',
31
+ // 'dvr',
32
+ // 'duration',
25
33
  'fullscreen',
26
- 'pip',
27
34
  'gear',
28
- 'cc',
29
35
  'multicamera',
30
- // 'playbackrate',
36
+ 'pip',
31
37
  'vr',
32
- 'audiotracks',
33
38
  ],
34
- default: [],
35
39
  seekEnabled: true,
36
40
  };
41
+ const INITIAL_SETTINGS = {
42
+ left: [],
43
+ right: [],
44
+ default: [],
45
+ seekEnabled: false,
46
+ };
37
47
  const T = 'plugins.media_control';
38
48
  const LEFT_ORDER = [
39
49
  'playpause',
@@ -55,11 +65,17 @@ function orderByOrderPattern(arr, order) {
55
65
  * @beta
56
66
  * @remarks
57
67
  * The methods exposed are to be used by the other plugins that extend the media control UI.
68
+ *
69
+ * Configuration options:
70
+ *
71
+ * - `mediaControl`: {@link MediaControlSettings} - specifies the allowed media control elements in each area
72
+ *
73
+ * - `persistConfig`: boolean - `common` option, makes the plugin persist the media control settings
74
+ *
75
+ * - `chromeless`: boolean
58
76
  */
59
77
  export class MediaControl extends UICorePlugin {
60
78
  // private advertisementPlaying = false
61
- customAreaElements = {};
62
- customAreaHandler;
63
79
  buttonsColor = null;
64
80
  currentDurationValue = 0;
65
81
  currentPositionValue = 0;
@@ -70,7 +86,7 @@ export class MediaControl extends UICorePlugin {
70
86
  displayedSeekBarPercentage = null;
71
87
  draggingSeekBar = false;
72
88
  draggingVolumeBar = false;
73
- fullScreenOnVideoTagSupported = null;
89
+ fullScreenOnVideoTagSupported = false;
74
90
  hideId = null;
75
91
  hideVolumeId = null;
76
92
  intendedVolume = 100;
@@ -78,9 +94,10 @@ export class MediaControl extends UICorePlugin {
78
94
  kibo;
79
95
  lastMouseX = 0;
80
96
  lastMouseY = 0;
97
+ needsUpdate = false;
81
98
  persistConfig;
82
99
  rendered = false;
83
- settings = DEFAULT_SETTINGS;
100
+ settings = INITIAL_SETTINGS;
84
101
  userDisabled = false;
85
102
  userKeepVisible = false;
86
103
  verticalVolume = false;
@@ -91,7 +108,6 @@ export class MediaControl extends UICorePlugin {
91
108
  $multiCameraSelector = null;
92
109
  $playPauseToggle = null;
93
110
  $playStopToggle = null;
94
- $playbackRate = null;
95
111
  $position = null;
96
112
  $seekBarContainer = null;
97
113
  $seekBarHover = null;
@@ -305,7 +321,8 @@ export class MediaControl extends UICorePlugin {
305
321
  const video = this.core.activePlayback?.el;
306
322
  // video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
307
323
  // see https://github.com/clappr/clappr/issues/1127
308
- if (!Fullscreen.fullscreenEnabled() && video.webkitSupportsFullscreen) {
324
+ if (!fullscreenEnabled() && video.webkitSupportsFullscreen) {
325
+ // TODO sort out, use single utility function
309
326
  this.fullScreenOnVideoTagSupported = true;
310
327
  }
311
328
  this.updateSettings();
@@ -537,22 +554,21 @@ export class MediaControl extends UICorePlugin {
537
554
  }
538
555
  }
539
556
  onActiveContainerChanged() {
540
- this.fullScreenOnVideoTagSupported = null;
557
+ this.fullScreenOnVideoTagSupported = false;
541
558
  // set the new container to match the volume of the last one
542
559
  this.setInitialVolume();
543
560
  this.changeTogglePlay();
544
561
  this.bindContainerEvents();
562
+ // TODO remove?
545
563
  this.updateSettings();
546
- // TODO remove
547
- this.core.activeContainer.trigger(Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
548
- // TODO test
564
+ // TODO test, figure out if this is needed
549
565
  if (this.core.activeContainer.mediaControlDisabled) {
550
566
  this.disable();
551
567
  }
552
568
  else {
553
569
  this.enable();
554
570
  }
555
- this.trigger(Events.MEDIACONTROL_CONTAINERCHANGED); // TODO check
571
+ this.trigger(Events.MEDIACONTROL_CONTAINERCHANGED); // TODO figure out
556
572
  if (this.core.activeContainer.$el) {
557
573
  this.core.activeContainer.$el.addClass('container-skin-1');
558
574
  }
@@ -723,11 +739,13 @@ export class MediaControl extends UICorePlugin {
723
739
  }
724
740
  }
725
741
  updateSettings() {
742
+ trace(`${T} updateSettings`, { settings: this.settings });
726
743
  const newSettings = $.extend(true, {
727
744
  left: [],
728
745
  default: [],
729
746
  right: [],
730
747
  }, this.core.activeContainer.settings);
748
+ trace(`${T} updateSettings`, { newSettings });
731
749
  // TODO make order controlled via CSS
732
750
  newSettings.left = orderByOrderPattern([...newSettings.left, 'clipsText', 'volume'], LEFT_ORDER);
733
751
  if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
@@ -735,10 +753,15 @@ export class MediaControl extends UICorePlugin {
735
753
  newSettings.left.push('dvr');
736
754
  }
737
755
  // actual order of the items appear rendered is controlled by CSS
738
- newSettings.right = DEFAULT_SETTINGS.right;
756
+ newSettings.right = DEFAULT_SETTINGS.right; // TODO get from the options
739
757
  if ((!this.fullScreenOnVideoTagSupported &&
740
- !Fullscreen.fullscreenEnabled()) ||
758
+ !fullscreenEnabled()) ||
741
759
  this.options.fullscreenDisable) {
760
+ trace(`${T} updateSettings removing fullscreen`, {
761
+ supported: this.fullScreenOnVideoTagSupported,
762
+ enabled: Fullscreen.fullscreenEnabled(),
763
+ optionsDisable: this.options.fullscreenDisable,
764
+ });
742
765
  // remove fullscreen from settings if it is not available
743
766
  removeArrayItem(newSettings.default, 'fullscreen');
744
767
  removeArrayItem(newSettings.left, 'fullscreen');
@@ -753,6 +776,7 @@ export class MediaControl extends UICorePlugin {
753
776
  const settingsChanged = serializeSettings(this.settings) !== serializeSettings(newSettings);
754
777
  if (settingsChanged) {
755
778
  this.settings = newSettings;
779
+ this.needsUpdate = true;
756
780
  this.render();
757
781
  }
758
782
  }
@@ -777,7 +801,6 @@ export class MediaControl extends UICorePlugin {
777
801
  this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');
778
802
  this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');
779
803
  this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');
780
- this.$playbackRate = this.$el.find('.media-control-playbackrate[data-playbackrate]');
781
804
  this.$multiCameraSelector = this.$el.find('.media-control-multicamera[data-multicamera]');
782
805
  this.$clipText = this.$el.find('.media-clip-text[data-clipstext]'); // TODO
783
806
  this.$clipTextContainer = this.$el.find('.media-clip-container[data-clipstext]');
@@ -809,8 +832,6 @@ export class MediaControl extends UICorePlugin {
809
832
  return null;
810
833
  case 'clipText':
811
834
  return this.$clipText;
812
- case 'playbackRate':
813
- return this.$playbackRate;
814
835
  case 'seekBarContainer':
815
836
  return this.$seekBarContainer;
816
837
  }
@@ -834,13 +855,6 @@ export class MediaControl extends UICorePlugin {
834
855
  return;
835
856
  }
836
857
  }
837
- handleCustomArea(handler) {
838
- this.customAreaHandler = handler;
839
- Object.entries(this.customAreaElements).forEach(([name, element]) => {
840
- handler(name, element);
841
- });
842
- this.customAreaElements = {};
843
- }
844
858
  /**
845
859
  * Toggle the visibility of a media control element
846
860
  * @param name - The name of the media control element
@@ -938,8 +952,8 @@ export class MediaControl extends UICorePlugin {
938
952
  keys.forEach((i) => {
939
953
  this.bindKeyAndShow(i, () => {
940
954
  this.settings.seekEnabled &&
941
- this.container &&
942
- this.container.seekPercentage(Number(i) * 10);
955
+ this.core.activeContainer &&
956
+ this.core.activeContainer.seekPercentage(Number(i) * 10);
943
957
  return false;
944
958
  });
945
959
  });
@@ -1005,10 +1019,12 @@ export class MediaControl extends UICorePlugin {
1005
1019
  * @internal
1006
1020
  */
1007
1021
  render() {
1008
- trace(`${T} render`);
1022
+ trace(`${T} render`, { needsUpdate: this.needsUpdate });
1023
+ if (!this.needsUpdate) {
1024
+ return this;
1025
+ }
1009
1026
  const timeout = this.options.hideMediaControlDelay || 2000;
1010
- const html = MediaControl.template({ settings: this.settings ?? {} });
1011
- this.$el.html(html);
1027
+ this.$el.html(MediaControl.template({ settings: this.settings }));
1012
1028
  // const style = Styler.getStyleFor(mediaControlStyle, { baseUrl: this.options.baseUrl });
1013
1029
  // this.$el.append(style[0]);
1014
1030
  this.createCachedElements();
@@ -1054,7 +1070,8 @@ export class MediaControl extends UICorePlugin {
1054
1070
  this.core.$el.append(this.el);
1055
1071
  this.rendered = true;
1056
1072
  this.updateVolumeUI();
1057
- // TODO setTimeout
1073
+ this.needsUpdate = false;
1074
+ // TODO setTimeout?
1058
1075
  this.trigger(Events.MEDIACONTROL_RENDERED);
1059
1076
  return this;
1060
1077
  }
@@ -1120,6 +1137,7 @@ export class MediaControl extends UICorePlugin {
1120
1137
  element.el.css({ 'pointer-events': 'none' });
1121
1138
  });
1122
1139
  }
1140
+ // TODO drop
1123
1141
  isSeekEnabledForHtml5Playback() {
1124
1142
  if (this.core.getPlaybackType() === Playback.LIVE) {
1125
1143
  return this.options.dvrEnabled;
@@ -40,12 +40,11 @@ export type PlaybackRateSettings = {
40
40
  * { value: 1, label: '1x' },
41
41
  * ],
42
42
  * defaultValue: 1,
43
- * } as PlaybackRateSettings,
43
+ * },
44
44
  * })
45
45
  * ```
46
46
  */
47
47
  export declare class PlaybackRate extends UICorePlugin {
48
- private playbackRates;
49
48
  private selectedRate;
50
49
  /**
51
50
  * @internal
@@ -60,6 +59,7 @@ export declare class PlaybackRate extends UICorePlugin {
60
59
  private static readonly buttonTemplate;
61
60
  private static readonly listTemplate;
62
61
  constructor(core: Core);
62
+ private get playbackRates();
63
63
  /**
64
64
  * @internal
65
65
  */
@@ -81,17 +81,18 @@ export declare class PlaybackRate extends UICorePlugin {
81
81
  private onActiveContainerChange;
82
82
  private onMediaControlRendered;
83
83
  private onGearRendered;
84
- private addGearItem;
84
+ private mount;
85
85
  private onMetaDataLoaded;
86
86
  private allRateElements;
87
87
  private rateElement;
88
88
  private onPlaybackRateChange;
89
- private shouldRender;
89
+ private shouldMount;
90
90
  /**
91
91
  * @internal
92
92
  */
93
93
  render(): this;
94
94
  private onPlay;
95
+ private syncRate;
95
96
  private resetPlaybackRate;
96
97
  private onStop;
97
98
  private onSelect;
@@ -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,EAAK,MAAM,cAAc,CAAA;AAiBhF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,aAAa,CAA+C;IAKpE,OAAO,CAAC,YAAY,CAAwB;IAE5C;;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;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,YAAY;IAepB;;OAEG;IACM,MAAM;IAwCf,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,qBAAqB;CAI9B"}
1
+ {"version":3,"file":"PlaybackRate.d.ts","sourceRoot":"","sources":["../../../src/plugins/playback-rate/PlaybackRate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAsB,IAAI,EAAK,MAAM,cAAc,CAAA;AAiBhF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAI5C,OAAO,CAAC,YAAY,CAAwB;IAE5C;;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;IAOtB,OAAO,KAAK,aAAa,GAExB;IAED;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,WAAW;IAenB;;OAEG;IACM,MAAM;IAoCf,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,qBAAqB;CAM9B"}
@@ -48,12 +48,11 @@ const T = 'plugins.playback_rate';
48
48
  * { value: 1, label: '1x' },
49
49
  * ],
50
50
  * defaultValue: 1,
51
- * } as PlaybackRateSettings,
51
+ * },
52
52
  * })
53
53
  * ```
54
54
  */
55
55
  export class PlaybackRate extends UICorePlugin {
56
- playbackRates = DEFAULT_PLAYBACK_RATES;
57
56
  // Saved when an ad starts to restore after it finishes
58
57
  // private prevSelectedRate: string | undefined
59
58
  selectedRate = DEFAULT_PLAYBACK_RATE;
@@ -73,10 +72,12 @@ export class PlaybackRate extends UICorePlugin {
73
72
  static listTemplate = template(listHtml);
74
73
  constructor(core) {
75
74
  super(core);
76
- this.playbackRates =
77
- core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
78
- this.selectedRate =
79
- core.options.playbackRate?.defaultValue || DEFAULT_PLAYBACK_RATE;
75
+ if (this.core.options.playbackRate?.defaultValue) {
76
+ this.setSelectedRate(this.core.options.playbackRate.defaultValue);
77
+ }
78
+ }
79
+ get playbackRates() {
80
+ return this.core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
80
81
  }
81
82
  /**
82
83
  * @internal
@@ -124,10 +125,15 @@ export class PlaybackRate extends UICorePlugin {
124
125
  }
125
126
  onGearRendered() {
126
127
  trace(`${T} onGearRendered`);
127
- this.addGearItem();
128
+ this.mount();
128
129
  }
129
- addGearItem() {
130
- trace(`${T} addGearItem`);
130
+ mount() {
131
+ trace(`${T} mount`, {
132
+ shouldMount: this.shouldMount(),
133
+ });
134
+ if (!this.shouldMount()) {
135
+ return;
136
+ }
131
137
  this.core
132
138
  .getPlugin('bottom_gear')
133
139
  ?.addItem('rate', this.$el)
@@ -160,7 +166,7 @@ export class PlaybackRate extends UICorePlugin {
160
166
  });
161
167
  }
162
168
  }
163
- shouldRender() {
169
+ shouldMount() {
164
170
  if (!this.core.activePlayback) {
165
171
  return false;
166
172
  }
@@ -175,11 +181,8 @@ export class PlaybackRate extends UICorePlugin {
175
181
  */
176
182
  render() {
177
183
  trace(`${T} render`, {
178
- shouldRender: this.shouldRender(),
184
+ shouldMount: this.shouldMount(),
179
185
  });
180
- if (!this.shouldRender()) {
181
- return this;
182
- }
183
186
  this.$el.html(PlaybackRate.listTemplate({
184
187
  arrowLeftIcon,
185
188
  checkIcon,
@@ -187,7 +190,7 @@ export class PlaybackRate extends UICorePlugin {
187
190
  i18n: this.core.i18n,
188
191
  playbackRates: this.playbackRates,
189
192
  }));
190
- this.addGearItem();
193
+ this.mount();
191
194
  return this;
192
195
  }
193
196
  // private onStartAd() {
@@ -210,11 +213,21 @@ export class PlaybackRate extends UICorePlugin {
210
213
  this.resetPlaybackRate();
211
214
  }
212
215
  else {
213
- this.setSelectedRate(this.selectedRate);
216
+ this.syncRate();
214
217
  }
215
218
  }
219
+ syncRate() {
220
+ trace(`${T} syncRate`, {
221
+ selectedRate: this.selectedRate,
222
+ });
223
+ this.core.activePlayback?.setPlaybackRate(this.selectedRate);
224
+ }
216
225
  resetPlaybackRate() {
217
- this.setSelectedRate(DEFAULT_PLAYBACK_RATE);
226
+ trace(`${T} resetPlaybackRate`, {
227
+ selectedRate: this.selectedRate,
228
+ });
229
+ this.core.activePlayback?.setPlaybackRate(DEFAULT_PLAYBACK_RATE);
230
+ this.selectedRate = DEFAULT_PLAYBACK_RATE;
218
231
  }
219
232
  onStop() { }
220
233
  onSelect(event) {
@@ -222,8 +235,6 @@ export class PlaybackRate extends UICorePlugin {
222
235
  const rate = parseFloat(event.currentTarget.dataset.rate || '');
223
236
  if (rate) {
224
237
  this.setSelectedRate(rate);
225
- this.highlightCurrentRate();
226
- this.updateGearOptionLabel();
227
238
  }
228
239
  return false;
229
240
  }
@@ -233,14 +244,23 @@ export class PlaybackRate extends UICorePlugin {
233
244
  }, 0);
234
245
  }
235
246
  setSelectedRate(rate) {
236
- this.core.activePlayback?.setPlaybackRate(rate);
247
+ if (rate === this.selectedRate) {
248
+ return;
249
+ }
237
250
  this.selectedRate = rate;
251
+ this.syncRate();
252
+ this.highlightCurrentRate();
253
+ this.updateGearOptionLabel();
238
254
  }
239
255
  getTitle() {
240
- return (this.playbackRates.find((r) => r.value === this.selectedRate)?.label ||
241
- `x${this.selectedRate}`);
256
+ const rate = this.selectedRate;
257
+ return (this.playbackRates.find((r) => r.value === rate)?.label ||
258
+ `x${rate}`);
242
259
  }
243
260
  highlightCurrentRate() {
261
+ trace(`${T} highlightCurrentRate`, {
262
+ selectedRate: this.selectedRate,
263
+ });
244
264
  this.allRateElements().removeClass('current');
245
265
  this.allRateElements().find('a').removeClass('gcore-skin-active');
246
266
  this.rateElement(this.selectedRate)
@@ -249,7 +269,9 @@ export class PlaybackRate extends UICorePlugin {
249
269
  .addClass('gcore-skin-active');
250
270
  }
251
271
  updateGearOptionLabel() {
252
- trace(`${T} updateGearOptionLabel`);
253
- this.addGearItem();
272
+ trace(`${T} updateGearOptionLabel`, {
273
+ selectedRate: this.selectedRate,
274
+ });
275
+ this.mount();
254
276
  }
255
277
  }
@@ -7,7 +7,7 @@ import subtitlesOffIcon from '../../../assets/icons/new/subtitles-off.svg';
7
7
  import subtitlesOnIcon from '../../../assets/icons/new/subtitles-on.svg';
8
8
  import comboboxHTML from '../../../assets/subtitles/combobox.ejs';
9
9
  import stringHTML from '../../../assets/subtitles/string.ejs';
10
- import { isFullscreen } from '../utils.js';
10
+ import { isFullscreen } from '../utils/fullscreen.js';
11
11
  const VERSION = '2.19.14';
12
12
  const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
13
13
  const T = 'plugins.cc';
@@ -0,0 +1,4 @@
1
+ import { Utils } from '@clappr/core';
2
+ export declare const fullscreenEnabled: typeof Utils.Fullscreen.fullscreenEnabled;
3
+ export declare function isFullscreen(el: HTMLElement): boolean;
4
+ //# sourceMappingURL=fullscreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../../src/plugins/utils/fullscreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,MAAM,cAAc,CAAC;AAG9C,eAAO,MAAM,iBAAiB,2CAAqC,CAAA;AAEnE,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAYrD"}
@@ -0,0 +1,30 @@
1
+ import { Browser, Utils } from '@clappr/core';
2
+ import { reportError } from '@gcorevideo/utils';
3
+ export const fullscreenEnabled = Utils.Fullscreen.fullscreenEnabled;
4
+ export function isFullscreen(el) {
5
+ const video = el.nodeName === 'video'
6
+ ? el
7
+ : el.querySelector('video');
8
+ if (!video) {
9
+ return false;
10
+ }
11
+ if (Browser.isiOS) {
12
+ return FullscreenIOS.isFullscreen(video);
13
+ }
14
+ return !!document.fullscreenElement;
15
+ }
16
+ const FullscreenIOS = {
17
+ isFullscreen: function (el) {
18
+ try {
19
+ // @ts-ignore
20
+ if (el.webkitDisplayingFullscreen !== undefined) {
21
+ // @ts-ignore
22
+ return !!el.webkitDisplayingFullscreen;
23
+ }
24
+ }
25
+ catch (e) {
26
+ reportError(e);
27
+ }
28
+ return false;
29
+ },
30
+ };
@@ -1,5 +1,4 @@
1
1
  export declare function getLocation(href: string): HTMLAnchorElement;
2
2
  export declare function strtimeToMiliseconds(str: string): number;
3
- export declare function isFullscreen(el: HTMLElement): boolean;
4
3
  export declare function getPageX(event: MouseEvent | TouchEvent): number;
5
4
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,qBAMvC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBxD;AAGD,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CASrD;AAkBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAU/D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,qBAMvC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBxD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAU/D"}
@@ -1,5 +1,3 @@
1
- import { Browser } from '@clappr/core';
2
- import { reportError } from '@gcorevideo/utils';
3
1
  export function getLocation(href) {
4
2
  const l = document.createElement('a');
5
3
  l.href = href;
@@ -31,32 +29,6 @@ export function strtimeToMiliseconds(str) {
31
29
  }
32
30
  return (h + m + s);
33
31
  }
34
- // TODO refactor
35
- export function isFullscreen(el) {
36
- const video = el.nodeName === "video" ? el : el.querySelector('video');
37
- if (!video) {
38
- return false;
39
- }
40
- if (Browser.isiOS) {
41
- return FullscreenIOS.isFullscreen(video);
42
- }
43
- return !!(document.fullscreenElement);
44
- }
45
- const FullscreenIOS = {
46
- isFullscreen: function (el) {
47
- try {
48
- // @ts-ignore
49
- if (el.webkitDisplayingFullscreen !== undefined) {
50
- // @ts-ignore
51
- return !!(el.webkitDisplayingFullscreen);
52
- }
53
- }
54
- catch (e) {
55
- reportError(e);
56
- }
57
- return false;
58
- }
59
- };
60
32
  export function getPageX(event) {
61
33
  if (event.pageX) {
62
34
  return event.pageX;
@@ -52,6 +52,7 @@ export declare class VastAds extends UICorePlugin {
52
52
  private _validateData;
53
53
  private playerResize;
54
54
  private _stopPauserollListeners;
55
+ private get pluginOptions();
55
56
  private _pauserollListeners;
56
57
  unBindEvents(): void;
57
58
  private containerChanged;