@gcorevideo/player 2.19.12 → 2.19.13

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 (166) hide show
  1. package/dist/core.js +16 -11
  2. package/dist/index.css +689 -689
  3. package/dist/index.js +301 -150
  4. package/dist/player.d.ts +208 -45
  5. package/dist/plugins/index.css +563 -563
  6. package/dist/plugins/index.js +3227 -3079
  7. package/docs/api/player.bottomgear.md +3 -289
  8. package/docs/api/player.dvrcontrols._constructor_.md +3 -0
  9. package/docs/api/player.dvrcontrols.md +10 -201
  10. package/docs/api/player.levelselector.md +8 -140
  11. package/docs/api/player.md +8 -4
  12. package/docs/api/player.mediacontrol.disable.md +2 -0
  13. package/docs/api/player.mediacontrol.disabledcontrolbutton.md +1 -1
  14. package/docs/api/player.mediacontrol.enable.md +2 -0
  15. package/docs/api/player.mediacontrol.enablecontrolbutton.md +1 -1
  16. package/docs/api/player.mediacontrol.getelement.md +19 -1
  17. package/docs/api/player.mediacontrol.md +17 -281
  18. package/docs/api/player.mediacontrol.volume.md +2 -2
  19. package/docs/api/player.mediacontrolelement.md +2 -1
  20. package/docs/api/player.poster.disable.md +5 -0
  21. package/docs/api/player.poster.enable.md +5 -0
  22. package/docs/api/player.poster.md +25 -183
  23. package/lib/Player.d.ts +1 -0
  24. package/lib/Player.d.ts.map +1 -1
  25. package/lib/Player.js +15 -10
  26. package/lib/plugins/audio-selector/AudioSelector.js +2 -2
  27. package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -1
  28. package/lib/plugins/big-mute-button/BigMuteButton.js +2 -1
  29. package/lib/plugins/bottom-gear/BottomGear.d.ts +28 -7
  30. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  31. package/lib/plugins/bottom-gear/BottomGear.js +44 -31
  32. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +1 -1
  33. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +3 -2
  34. package/lib/plugins/clappr-stats/ClapprStats.js +1 -1
  35. package/lib/plugins/click-to-pause/ClickToPause.js +1 -1
  36. package/lib/plugins/clips/Clips.js +2 -2
  37. package/lib/plugins/context-menu/ContextMenu.js +1 -1
  38. package/lib/plugins/disable-controls/DisableControls.js +1 -1
  39. package/lib/plugins/dvr-controls/DvrControls.d.ts +30 -4
  40. package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
  41. package/lib/plugins/dvr-controls/DvrControls.js +39 -11
  42. package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
  43. package/lib/plugins/error-screen/ErrorScreen.js +2 -1
  44. package/lib/plugins/favicon/Favicon.js +1 -1
  45. package/lib/plugins/google-analytics/GoogleAnalytics.js +1 -1
  46. package/lib/plugins/level-selector/LevelSelector.d.ts +25 -6
  47. package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
  48. package/lib/plugins/level-selector/LevelSelector.js +33 -12
  49. package/lib/plugins/logo/Logo.js +1 -1
  50. package/lib/plugins/media-control/MediaControl.d.ts +66 -22
  51. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  52. package/lib/plugins/media-control/MediaControl.js +71 -34
  53. package/lib/plugins/multi-camera/MultiCamera.js +3 -3
  54. package/lib/plugins/picture-in-picture/PictureInPicture.js +3 -3
  55. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  56. package/lib/plugins/playback-rate/PlaybackRate.js +3 -3
  57. package/lib/plugins/poster/Poster.d.ts +57 -3
  58. package/lib/plugins/poster/Poster.d.ts.map +1 -1
  59. package/lib/plugins/poster/Poster.js +57 -9
  60. package/lib/plugins/seek-time/SeekTime.js +2 -2
  61. package/lib/plugins/share/Share.js +2 -2
  62. package/lib/plugins/skip-time/SkipTime.js +1 -1
  63. package/lib/plugins/source-controller/SourceController.js +1 -1
  64. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +1 -1
  65. package/lib/plugins/statistics/Statistics.js +1 -1
  66. package/lib/plugins/subtitles/Subtitles.js +3 -3
  67. package/lib/plugins/thumbnails/Thumbnails.js +3 -3
  68. package/lib/plugins/types.d.ts +1 -7
  69. package/lib/plugins/types.d.ts.map +1 -1
  70. package/lib/plugins/vast-ads/VastAds.d.ts +1 -0
  71. package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -1
  72. package/lib/plugins/vast-ads/VastAds.js +6 -3
  73. package/package.json +2 -1
  74. package/src/Player.ts +15 -9
  75. package/src/__tests__/Player.test.ts +15 -76
  76. package/src/plugins/audio-selector/AudioSelector.ts +2 -2
  77. package/src/plugins/big-mute-button/BigMuteButton.ts +2 -1
  78. package/src/plugins/bottom-gear/BottomGear.ts +50 -39
  79. package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +3 -2
  80. package/src/plugins/clappr-stats/ClapprStats.ts +1 -1
  81. package/src/plugins/click-to-pause/ClickToPause.ts +1 -1
  82. package/src/plugins/clips/Clips.ts +2 -2
  83. package/src/plugins/context-menu/ContextMenu.ts +1 -1
  84. package/src/plugins/disable-controls/DisableControls.ts +1 -1
  85. package/src/plugins/dvr-controls/DvrControls.ts +42 -14
  86. package/src/plugins/error-screen/ErrorScreen.ts +2 -1
  87. package/src/plugins/favicon/Favicon.ts +1 -1
  88. package/src/plugins/google-analytics/GoogleAnalytics.ts +1 -1
  89. package/src/plugins/level-selector/LevelSelector.ts +34 -14
  90. package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +22 -2
  91. package/src/plugins/logo/Logo.ts +1 -1
  92. package/src/plugins/media-control/MediaControl.ts +82 -44
  93. package/src/plugins/multi-camera/MultiCamera.ts +3 -3
  94. package/src/plugins/picture-in-picture/PictureInPicture.ts +3 -3
  95. package/src/plugins/playback-rate/PlaybackRate.ts +3 -4
  96. package/src/plugins/poster/Poster.ts +59 -12
  97. package/src/plugins/seek-time/SeekTime.ts +2 -2
  98. package/src/plugins/share/Share.ts +2 -2
  99. package/src/plugins/skip-time/SkipTime.ts +1 -1
  100. package/src/plugins/source-controller/SourceController.ts +1 -1
  101. package/src/plugins/source-controller/__tests__/SourceController.test.ts +5 -0
  102. package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +1 -1
  103. package/src/plugins/statistics/Statistics.ts +1 -1
  104. package/src/plugins/subtitles/Subtitles.ts +3 -3
  105. package/src/plugins/thumbnails/Thumbnails.ts +3 -3
  106. package/src/plugins/types.ts +1 -0
  107. package/src/plugins/vast-ads/VastAds.ts +6 -6
  108. package/temp/player.api.json +3300 -5029
  109. package/tsconfig.tsbuildinfo +1 -1
  110. package/docs/api/player.bottomgear.attributes.md +0 -17
  111. package/docs/api/player.bottomgear.bindevents.md +0 -18
  112. package/docs/api/player.bottomgear.container.md +0 -14
  113. package/docs/api/player.bottomgear.events.md +0 -16
  114. package/docs/api/player.bottomgear.hide.md +0 -18
  115. package/docs/api/player.bottomgear.name.md +0 -14
  116. package/docs/api/player.bottomgear.refresh.md +0 -18
  117. package/docs/api/player.bottomgear.reload.md +0 -18
  118. package/docs/api/player.bottomgear.render.md +0 -18
  119. package/docs/api/player.bottomgear.supportedversion.md +0 -16
  120. package/docs/api/player.bottomgear.template.md +0 -14
  121. package/docs/api/player.bottomgear.togglegearmenu.md +0 -18
  122. package/docs/api/player.bottomgear.unbindevents.md +0 -18
  123. package/docs/api/player.bottomgear.version.md +0 -14
  124. package/docs/api/player.dvrcontrols.attributes.md +0 -14
  125. package/docs/api/player.dvrcontrols.bindevents.md +0 -15
  126. package/docs/api/player.dvrcontrols.click.md +0 -15
  127. package/docs/api/player.dvrcontrols.events.md +0 -13
  128. package/docs/api/player.dvrcontrols.name.md +0 -11
  129. package/docs/api/player.dvrcontrols.render.md +0 -15
  130. package/docs/api/player.dvrcontrols.settingsupdate.md +0 -15
  131. package/docs/api/player.dvrcontrols.shouldrender.md +0 -15
  132. package/docs/api/player.dvrcontrols.supportedversion.md +0 -13
  133. package/docs/api/player.dvrcontrols.template.md +0 -11
  134. package/docs/api/player.levelselector.attributes.md +0 -17
  135. package/docs/api/player.levelselector.bindevents.md +0 -18
  136. package/docs/api/player.levelselector.name.md +0 -14
  137. package/docs/api/player.levelselector.render.md +0 -18
  138. package/docs/api/player.levelselector.supportedversion.md +0 -16
  139. package/docs/api/player.levelselector.version.md +0 -14
  140. package/docs/api/player.mediacontrol.attributes.md +0 -17
  141. package/docs/api/player.mediacontrol.bindcontainerevents.md +0 -18
  142. package/docs/api/player.mediacontrol.bindevents.md +0 -18
  143. package/docs/api/player.mediacontrol.container.md +0 -14
  144. package/docs/api/player.mediacontrol.destroy.md +0 -18
  145. package/docs/api/player.mediacontrol.disabled.md +0 -14
  146. package/docs/api/player.mediacontrol.events.md +0 -40
  147. package/docs/api/player.mediacontrol.getexternalinterface.md +0 -21
  148. package/docs/api/player.mediacontrol.name.md +0 -14
  149. package/docs/api/player.mediacontrol.pause.md +0 -20
  150. package/docs/api/player.mediacontrol.play.md +0 -20
  151. package/docs/api/player.mediacontrol.playback.md +0 -14
  152. package/docs/api/player.mediacontrol.render.md +0 -18
  153. package/docs/api/player.mediacontrol.setmuted.md +0 -52
  154. package/docs/api/player.mediacontrol.stop.md +0 -20
  155. package/docs/api/player.mediacontrol.supportedversion.md +0 -16
  156. package/docs/api/player.poster.attributes.md +0 -14
  157. package/docs/api/player.poster.bindevents.md +0 -15
  158. package/docs/api/player.poster.destroy.md +0 -15
  159. package/docs/api/player.poster.events.md +0 -13
  160. package/docs/api/player.poster.name.md +0 -11
  161. package/docs/api/player.poster.render.md +0 -15
  162. package/docs/api/player.poster.shouldrender.md +0 -11
  163. package/docs/api/player.poster.showonvideoend.md +0 -11
  164. package/docs/api/player.poster.supportedversion.md +0 -13
  165. package/docs/api/player.poster.template.md +0 -11
  166. package/src/plugins/build.ts +0 -1
@@ -1,11 +1,11 @@
1
1
  import { UICorePlugin, Events, template, $ } from '@clappr/core';
2
2
  import { reportError, trace } from '@gcorevideo/utils';
3
3
  import parseSRT from 'parse-srt';
4
- import { CLAPPR_VERSION } from '../build.js';
4
+ import { CLAPPR_VERSION } from '../../build.js';
5
5
  import pluginHtml from '../../../assets/thumbnails/scrub-thumbnails.ejs';
6
6
  import '../../../assets/thumbnails/style.scss';
7
7
  import { getPageX } from '../utils.js';
8
- const T = 'plugins.thumbnails';
8
+ const T = 'plugins.media_control_thumbnails';
9
9
  export class Thumbnails extends UICorePlugin {
10
10
  _$spotlight = null;
11
11
  _$backdrop = null;
@@ -21,7 +21,7 @@ export class Thumbnails extends UICorePlugin {
21
21
  _oldContainer = null;
22
22
  _thumbs = [];
23
23
  get name() {
24
- return 'thumbnails';
24
+ return 'media_control_thumbnails';
25
25
  }
26
26
  get supportedVersion() {
27
27
  return { min: CLAPPR_VERSION };
@@ -1,8 +1,2 @@
1
- import { $ } from "@clappr/core";
2
- export type ZeptoResult = ReturnType<typeof $>;
3
- export type TimePosition = {
4
- current: number;
5
- total: number;
6
- };
7
- export type TimerId = ReturnType<typeof setTimeout>;
1
+ export type TemplateFunction = (data: Record<string, unknown>) => string;
8
2
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/C,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAA"}
@@ -68,5 +68,6 @@ export declare class VastAds extends UICorePlugin {
68
68
  private destroyRoll;
69
69
  private _playVideoContent;
70
70
  render(): this;
71
+ private setMuted;
71
72
  }
72
73
  //# sourceMappingURL=VastAds.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VastAds.d.ts","sourceRoot":"","sources":["../../../src/plugins/vast-ads/VastAds.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,IAAI,EAIJ,QAAQ,EAER,YAAY,EAEb,MAAM,cAAc,CAAA;AAYrB,OAAO,qCAAqC,CAAA;AAQ5C,qBAAa,OAAQ,SAAQ,YAAY;IACvC,OAAO,CAAC,mBAAmB,CAAiC;IAE5D,OAAO,CAAC,qBAAqB,CAAwC;IAErE,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,eAAe,CAAI;IAE3B,OAAO,CAAC,mBAAmB,CAAI;IAE/B,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,SAAS,CAAwB;IAEzC,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,aAAa,CAAiC;IAEtD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,uBAAuB,CAAI;IAEnC,OAAO,CAAC,0BAA0B,CAAI;IAEtC,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,YAAY,CAA2B;IAE/C,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,MAAM,KAAK,OAAO,WAEjB;IAED,IAAI,YAAY,QAEf;IAED,IAAa,UAAU;;;MAKtB;gBAEW,IAAI,EAAE,IAAI;IAqEb,UAAU;IA8FnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,oBAAoB;IAkE5B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,qBAAqB;IAwD7B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,mBAAmB;IAiD3B,YAAY;IASZ,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IA6BpB,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAG3B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,OAAO,CAAC,kBAAkB;IAU1B,gBAAgB,CAAC,CAAC,EAAE,MAAM;IAQ1B,cAAc;IAsBd,eAAe;IAkBf,WAAW;IAiBX,OAAO,CAAC,UAAU;IA+ClB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAiHhB,MAAM;CAwBhB"}
1
+ {"version":3,"file":"VastAds.d.ts","sourceRoot":"","sources":["../../../src/plugins/vast-ads/VastAds.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,IAAI,EAIJ,QAAQ,EAER,YAAY,EAEb,MAAM,cAAc,CAAA;AAYrB,OAAO,qCAAqC,CAAA;AAQ5C,qBAAa,OAAQ,SAAQ,YAAY;IACvC,OAAO,CAAC,mBAAmB,CAAiC;IAE5D,OAAO,CAAC,qBAAqB,CAAwC;IAErE,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,eAAe,CAAI;IAE3B,OAAO,CAAC,mBAAmB,CAAI;IAE/B,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,SAAS,CAAwB;IAEzC,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,aAAa,CAAiC;IAEtD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,uBAAuB,CAAI;IAEnC,OAAO,CAAC,0BAA0B,CAAI;IAEtC,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,YAAY,CAA2B;IAE/C,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,MAAM,KAAK,OAAO,WAEjB;IAED,IAAI,YAAY,QAEf;IAED,IAAa,UAAU;;;MAKtB;gBAEW,IAAI,EAAE,IAAI;IAqEb,UAAU;IA8FnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,oBAAoB;IAkE5B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,qBAAqB;IAwD7B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,mBAAmB;IAiD3B,YAAY;IASZ,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IA6BpB,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAG3B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,OAAO,CAAC,kBAAkB;IAU1B,gBAAgB,CAAC,CAAC,EAAE,MAAM;IAQ1B,cAAc;IAsBd,eAAe;IAkBf,WAAW;IAiBX,OAAO,CAAC,UAAU;IA+ClB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAiHhB,MAAM;IAqBf,OAAO,CAAC,QAAQ;CAGjB"}
@@ -1,7 +1,7 @@
1
1
  import { $, Browser, Events, HTML5Video, Log, UICorePlugin, Utils, } from '@clappr/core';
2
2
  import { reportError } from '@gcorevideo/utils';
3
3
  import assert from 'assert';
4
- import { CLAPPR_VERSION } from '../build.js';
4
+ import { CLAPPR_VERSION } from '../../build.js';
5
5
  import RollManager from './rollmanager.js';
6
6
  import SCTEManager from './sctemanager.js';
7
7
  import { VolumeFadeEvents } from '../volume-fade/VolumeFade.js';
@@ -604,7 +604,7 @@ export class VastAds extends UICorePlugin {
604
604
  setTimeout(async () => {
605
605
  if (currentRoll === 'scteroll') {
606
606
  this.options.mute = this.core.options.mute;
607
- this.core.mediaControl.setMuted(this.core.options.mute);
607
+ this.setMuted(this.core.options.mute);
608
608
  this.core.mediaControl.setInitialVolume();
609
609
  }
610
610
  // this.adTemplates = null;
@@ -659,7 +659,7 @@ export class VastAds extends UICorePlugin {
659
659
  }
660
660
  await this.playback?.play();
661
661
  this.options.mute = this.core.options.mute;
662
- this.core.mediaControl.setMuted(this.core.options.mute);
662
+ this.setMuted(this.core.options.mute);
663
663
  this.core.mediaControl.setInitialVolume();
664
664
  }
665
665
  }, 0);
@@ -683,4 +683,7 @@ export class VastAds extends UICorePlugin {
683
683
  this._adContainer = this._$adContainer[0];
684
684
  return this;
685
685
  }
686
+ setMuted(muted) {
687
+ this.core.activeContainer.options.mute = muted;
688
+ }
686
689
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.19.12",
3
+ "version": "2.19.13",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -36,6 +36,7 @@
36
36
  "@rollup/plugin-json": "^6.1.0",
37
37
  "@rollup/plugin-node-resolve": "^15.3.0",
38
38
  "@sinonjs/fake-timers": "^14.0.0",
39
+ "@types/assert": "^1.5.11",
39
40
  "@types/human-format": "^1.0.3",
40
41
  "@types/mousetrap": "^1.6.15",
41
42
  "@types/node": "^22.10.1",
package/src/Player.ts CHANGED
@@ -353,6 +353,8 @@ export class Player {
353
353
 
354
354
  private initPlayer(coreOptions: CoreOptions): void {
355
355
  trace(`${T} initPlayer`, {
356
+ autoPlay: coreOptions.autoPlay,
357
+ sources: coreOptions.sources,
356
358
  // TODO selected options
357
359
  })
358
360
 
@@ -372,12 +374,7 @@ export class Player {
372
374
  null,
373
375
  )
374
376
  if (this.config.autoPlay) {
375
- trace(`${T} autoPlay`)
376
- setTimeout(() => {
377
- this.player?.play({
378
- autoPlay: true,
379
- })
380
- }, 0)
377
+ this.triggerAutoPlay()
381
378
  }
382
379
  try {
383
380
  this.emitter.emit(PlayerEvent.Ready)
@@ -386,6 +383,15 @@ export class Player {
386
383
  }
387
384
  }
388
385
 
386
+ private triggerAutoPlay() {
387
+ trace(`${T} triggerAutoPlay`)
388
+ setTimeout(() => {
389
+ this.player?.play({
390
+ autoPlay: true,
391
+ })
392
+ }, 0)
393
+ }
394
+
389
395
  private safeTriggerEvent<E extends PlayerEvent>(event: E, ...args: PlayerEventParams<E>) {
390
396
  try {
391
397
  this.emitter.emit(event, ...args)
@@ -456,10 +462,10 @@ export class Player {
456
462
  },
457
463
  parent: rootNode,
458
464
  width: rootNode.clientWidth,
459
- source: source ? source.source : undefined,
460
- mimeType: source ? source.mimeType : undefined,
461
465
  }, this.config, {
462
- autoPlay: false, // TODO write a test to check it's reset to false
466
+ autoPlay: false,
467
+ mimeType: source ? source.mimeType : undefined,
468
+ source: source ? source.source : undefined,
463
469
  sources,
464
470
  })
465
471
  return coreOptions
@@ -146,86 +146,25 @@ describe('Player', () => {
146
146
  expect(PlayerClappr).toHaveBeenCalledWith(
147
147
  expect.objectContaining({
148
148
  source,
149
+ // TODO sources
149
150
  }),
150
151
  )
151
152
  })
152
153
  },
153
154
  )
154
155
  })
156
+ describe('autoPlay', () => {
157
+ describe('initially', () => {
158
+ it('should reset to false', () => {
159
+ const player = new Player({autoPlay: true, sources: []})
160
+ const node = document.createElement('div')
161
+ player.attachTo(node)
162
+ expect(PlayerClappr).toHaveBeenCalledWith(
163
+ expect.objectContaining({
164
+ autoPlay: false,
165
+ }),
166
+ )
167
+ })
168
+ })
169
+ })
155
170
  })
156
-
157
- class MockPlayback extends EventLite {
158
- constructor(
159
- protected options: any,
160
- readonly i18n: any,
161
- protected playerError?: any,
162
- ) {
163
- super()
164
- }
165
-
166
- get name() {
167
- return 'mock'
168
- }
169
-
170
- consent() {}
171
-
172
- play() {}
173
-
174
- pause() {}
175
-
176
- stop() {}
177
-
178
- destroy() {}
179
-
180
- seek() {}
181
-
182
- seekPercentage() {}
183
-
184
- getDuration() {
185
- return 100
186
- }
187
-
188
- enterPiP() {}
189
-
190
- exitPiP() {}
191
-
192
- getPlaybackType() {
193
- return 'live'
194
- }
195
-
196
- getStartTimeOffset() {
197
- return 0
198
- }
199
-
200
- getCurrentTime() {
201
- return 0
202
- }
203
-
204
- isHighDefinitionInUse() {
205
- return false
206
- }
207
-
208
- mute() {}
209
-
210
- unmute() {}
211
-
212
- volume() {}
213
-
214
- configure() {}
215
-
216
- attemptAutoPlay() {
217
- return true
218
- }
219
-
220
- canAutoPlay() {
221
- return true
222
- }
223
-
224
- onResize() {
225
- return true
226
- }
227
-
228
- trigger(event: string, ...args: any[]) {
229
- this.emit(event, ...args)
230
- }
231
- }
@@ -6,7 +6,7 @@ import {
6
6
  Events as HlsEvents,
7
7
  } from 'hls.js';
8
8
 
9
- import { CLAPPR_VERSION } from '../build.js';
9
+ import { CLAPPR_VERSION } from '../../build.js';
10
10
 
11
11
  import pluginHtml from '../../../assets/audio-selector/track-selector.ejs';
12
12
  import '../../../assets/audio-selector/style.scss';
@@ -49,7 +49,7 @@ export class AudioSelector extends UICorePlugin {
49
49
  private tracks: AudioTrackItem[] = [];
50
50
 
51
51
  get name() {
52
- return 'audio_selector';
52
+ return 'media_control_audio_selector';
53
53
  }
54
54
 
55
55
  get supportedVersion() {
@@ -1,7 +1,7 @@
1
1
  import { Events, template, UICorePlugin, Utils } from '@clappr/core';
2
2
  import { trace } from '@gcorevideo/utils';
3
3
 
4
- import { CLAPPR_VERSION } from '../build.js';
4
+ import { CLAPPR_VERSION } from '../../build.js';
5
5
  import { ZeptoResult } from "../../utils/types.js";
6
6
 
7
7
  import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg';
@@ -183,6 +183,7 @@ export class BigMuteButton extends UICorePlugin {
183
183
  const localVolume = Utils.Config.restore('volume');
184
184
  const volume = !isNaN(localVolume) ? localVolume : 100;
185
185
 
186
+ // TODO use container.setVolume() instead
186
187
  this.core.mediaControl.setVolume(volume === 0 ? 100 : volume);
187
188
 
188
189
  this.destroyBigMuteBtn(e);
@@ -1,7 +1,8 @@
1
1
  import { UICorePlugin, template, Events } from '@clappr/core';
2
2
  import { trace } from '@gcorevideo/utils';
3
+ import assert from 'assert';
3
4
 
4
- import { CLAPPR_VERSION } from '../build.js';
5
+ import { CLAPPR_VERSION } from '../../build.js';
5
6
 
6
7
  import pluginHtml from '../../../assets/bottom-gear/bottomgear.ejs';
7
8
  import '../../../assets/bottom-gear/gear.scss';
@@ -9,30 +10,45 @@ import '../../../assets/bottom-gear/gear-sub-menu.scss';
9
10
  import gearIcon from '../../../assets/icons/new/gear.svg';
10
11
  import gearHdIcon from '../../../assets/icons/new/gear-hd.svg';
11
12
 
12
- const VERSION = '0.0.1';
13
+ const VERSION = '2.19.12';
14
+
15
+ const T = 'plugins.media_control_gear';
13
16
 
14
17
  /**
18
+ * Adds the gear button that triggers extra options menu on the right side of the {@link MediaControl | media control} UI
15
19
  * @beta
20
+ * @remarks
21
+ * The plugins provides a base for attaching custom settings UI in the gear menu
16
22
  */
17
23
  export class BottomGear extends UICorePlugin {
18
24
  private isHd = false;
19
25
 
26
+ /**
27
+ * @internal
28
+ */
20
29
  get name() {
21
- return 'gear';
30
+ return 'media_control_gear';
22
31
  }
23
32
 
33
+ /**
34
+ * @internal
35
+ */
24
36
  get supportedVersion() {
25
37
  return { min: CLAPPR_VERSION };
26
38
  }
27
39
 
40
+ /**
41
+ * @internal
42
+ */
28
43
  static get version() {
29
44
  return VERSION;
30
45
  }
31
46
 
32
- get template() {
33
- return template(pluginHtml);
34
- }
47
+ private static readonly template = template(pluginHtml)
35
48
 
49
+ /**
50
+ * @internal
51
+ */
36
52
  override get attributes() {
37
53
  return {
38
54
  'class': this.name,
@@ -40,47 +56,37 @@ export class BottomGear extends UICorePlugin {
40
56
  };
41
57
  }
42
58
 
59
+ /**
60
+ * @internal
61
+ */
43
62
  override get events() {
44
63
  return {
45
64
  'click .button-gear': 'toggleGearMenu',
46
65
  };
47
66
  }
48
67
 
49
- get container() {
50
- return this.core && this.core.activeContainer;
51
- }
52
-
68
+ /**
69
+ * @internal
70
+ */
53
71
  override bindEvents() {
72
+ const mediaControl = this.core.getPlugin('media_control');
73
+ assert(mediaControl, 'media_control plugin is required');
74
+
54
75
  this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
55
- this.listenTo(this.core, 'gear:refresh', this.refresh);
56
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
57
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
58
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hide);
76
+ this.listenTo(this.core, 'gear:refresh', this.refresh); // TODO use direct plugin method call
77
+ // this.listenTo(mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
78
+ this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
79
+ this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hide); // TODO mediacontrol show as well
59
80
  this.bindContainerEvents();
60
81
  }
61
82
 
62
- unBindEvents() {
63
- this.stopListening(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
64
- this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
65
- this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
66
- this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hide);
67
- }
68
-
69
83
  private onActiveContainerChanged() {
70
- this.bindEvents();
71
84
  this.bindContainerEvents();
72
85
  }
73
86
 
74
87
  private bindContainerEvents() {
75
- if (!this.container) {
76
- return;
77
- }
78
- this.listenTo(this.container, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
79
- }
80
-
81
- reload() {
82
- this.unBindEvents();
83
- this.bindEvents();
88
+ trace(`${T} bindContainerEvents`);
89
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
84
90
  }
85
91
 
86
92
  private highDefinitionUpdate(isHd: boolean) {
@@ -93,33 +99,38 @@ export class BottomGear extends UICorePlugin {
93
99
  }
94
100
  }
95
101
 
102
+ /**
103
+ * @internal
104
+ */
96
105
  override render() {
106
+ const mediaControl = this.core.getPlugin('media_control');
107
+ assert(mediaControl, 'media_control plugin is required');
108
+
109
+ // TODO use options.mediaControl.gear.items
97
110
  const items = [
98
111
  'quality',
99
112
  'rate',
100
113
  'nerd',
101
114
  ];
102
-
103
115
  const icon = this.isHd ? gearHdIcon : gearIcon;
116
+ this.$el.html(BottomGear.template({ icon, items }));
104
117
 
105
- this.$el.html(this.template({ icon, items }));
106
-
107
- this.core.mediaControl.$bottomGear?.html(this.el);
108
- this.core.trigger('gear:rendered');
118
+ mediaControl.getElement('bottomGear')?.html(this.el);
119
+ this.core.trigger('gear:rendered'); // TODO trigger on mediaControl instead
109
120
 
110
121
  return this;
111
122
  }
112
123
 
113
- refresh() {
124
+ private refresh() {
114
125
  this.render();
115
126
  this.$el.find('.gear-wrapper').show();
116
127
  }
117
128
 
118
- toggleGearMenu() {
129
+ private toggleGearMenu() {
119
130
  this.$el.find('.gear-wrapper').toggle();
120
131
  }
121
132
 
122
- hide() {
133
+ private hide() {
123
134
  this.$el.find('.gear-wrapper').hide();
124
135
  }
125
136
  }
@@ -2,7 +2,7 @@ import { UICorePlugin, Events, template, Core, Container } from '@clappr/core';
2
2
  import { reportError } from '@gcorevideo/utils';
3
3
  import Mousetrap from 'mousetrap';
4
4
 
5
- import { CLAPPR_VERSION } from '../build.js';
5
+ import { CLAPPR_VERSION } from '../../build.js';
6
6
  import { ClapprStatsEvents, Metrics as BaseMetrics } from '../clappr-stats/types.js';
7
7
  import { newMetrics as newBaseMetrics } from '../clappr-stats/utils.js';
8
8
  import Formatter from './formatter.js';
@@ -125,7 +125,7 @@ export class ClapprNerdStats extends UICorePlugin {
125
125
  private iconPosition: IconPosition;
126
126
 
127
127
  get name() {
128
- return 'clappr_nerd_stats';
128
+ return 'media_control_nerd_stats';
129
129
  }
130
130
 
131
131
  get supportedVersion() {
@@ -181,6 +181,7 @@ export class ClapprNerdStats extends UICorePlugin {
181
181
 
182
182
  override bindEvents() {
183
183
  this.listenToOnce(this.core, Events.CORE_READY, this.init);
184
+ // TODO trigger on mediaControl instead
184
185
  this.listenTo(this.core, 'gear:rendered', this.addToBottomGear);
185
186
  }
186
187
 
@@ -2,7 +2,7 @@ import { Container, ContainerPlugin, Events as CoreEvents, Log } from '@clappr/c
2
2
  import type { QualityLevel, TimePosition, TimeProgress } from '../../playback.types.js';
3
3
  import assert from 'assert';
4
4
 
5
- import { CLAPPR_VERSION } from '../build.js';
5
+ import { CLAPPR_VERSION } from '../../build.js';
6
6
  import { TimerId } from '../../utils/types.js';
7
7
  import type { Metrics, MetricsUpdateFn } from './types.js';
8
8
  import { ClapprStatsEvents } from './types.js';
@@ -5,7 +5,7 @@
5
5
  import { ContainerPlugin, Events, Playback } from '@clappr/core';
6
6
  import { trace } from '@gcorevideo/utils';
7
7
 
8
- import { CLAPPR_VERSION } from '../build.js';
8
+ import { CLAPPR_VERSION } from '../../build.js';
9
9
 
10
10
  // const VERSION = '0.0.1';
11
11
 
@@ -29,7 +29,7 @@ export class ClipsPlugin extends UICorePlugin {
29
29
  private svgMask: ZeptoResult | null = null;
30
30
 
31
31
  get name() {
32
- return 'clips';
32
+ return 'media_control_clips';
33
33
  }
34
34
 
35
35
  override get attributes() {
@@ -154,7 +154,7 @@ export class ClipsPlugin extends UICorePlugin {
154
154
  }
155
155
 
156
156
  private setSVGMask(svg: string) {
157
- this.core.mediaControl.setSVGMask(svg);
157
+ // this.core.mediaControl.setSVGMask(svg);
158
158
  if (this.svgMask) {
159
159
  this.svgMask.remove()
160
160
  }
@@ -1,6 +1,6 @@
1
1
  import { UICorePlugin, Events, template, $, Core, Container } from '@clappr/core';
2
2
 
3
- import { CLAPPR_VERSION } from '../build.js';
3
+ import { CLAPPR_VERSION } from '../../build.js';
4
4
 
5
5
  import '../../../assets/context-menu/context_menu.scss';
6
6
  import templateHtml from '../../../assets/context-menu/context_menu.ejs';
@@ -1,6 +1,6 @@
1
1
  import { UICorePlugin, Events } from '@clappr/core';
2
2
 
3
- import { CLAPPR_VERSION } from '../build.js';
3
+ import { CLAPPR_VERSION } from '../../build.js';
4
4
 
5
5
  export class DisableControls extends UICorePlugin {
6
6
  get name() {
@@ -1,29 +1,48 @@
1
1
  import { Core, Events, Playback, UICorePlugin, template } from '@clappr/core';
2
+ import assert from 'assert';
2
3
 
3
- import { CLAPPR_VERSION } from '../build.js';
4
+ import { CLAPPR_VERSION } from '../../build.js';
4
5
 
5
6
  import dvrHTML from '../../../assets/dvr-controls/index.ejs';
6
7
  import '../../../assets/dvr-controls/dvr_controls.scss';
7
8
 
9
+ /**
10
+ * Adds the DVR controls to the media control UI
11
+ * @beta
12
+ *
13
+ * @remarks
14
+ * The plugin is rendered in the {@link MediaControl | media control} UI.
15
+ * It renders the live stream indicator and the DVR seek bar if DVR is enabled.
16
+ */
8
17
  export class DvrControls extends UICorePlugin {
9
- get template() {
10
- return template(dvrHTML);
11
- }
18
+ private static readonly template = template(dvrHTML);
12
19
 
20
+ /**
21
+ * @internal
22
+ */
13
23
  get name() {
14
- return 'dvr_controls';
24
+ return 'media_control_dvr';
15
25
  }
16
26
 
27
+ /**
28
+ * @internal
29
+ */
17
30
  get supportedVersion() {
18
31
  return { min: CLAPPR_VERSION };
19
32
  }
20
33
 
34
+ /**
35
+ * @internal
36
+ */
21
37
  override get events() {
22
38
  return {
23
39
  'click .live-button': 'click'
24
40
  };
25
41
  }
26
42
 
43
+ /**
44
+ * @internal
45
+ */
27
46
  override get attributes() {
28
47
  return {
29
48
  'class': 'dvr-controls',
@@ -36,6 +55,9 @@ export class DvrControls extends UICorePlugin {
36
55
  this.settingsUpdate();
37
56
  }
38
57
 
58
+ /**
59
+ * @internal
60
+ */
39
61
  override bindEvents() {
40
62
  this.bindCoreEvents();
41
63
  this.bindContainerEvents();
@@ -86,9 +108,9 @@ export class DvrControls extends UICorePlugin {
86
108
  }
87
109
  }
88
110
 
89
- click() {
90
- const mediaControl = this.core.mediaControl;
91
- const container = mediaControl.container;
111
+ private click() {
112
+ const mediaControl = this.core.getPlugin('media_control');
113
+ const container = this.core.activeContainer;
92
114
 
93
115
  if (!container.isPlaying()) {
94
116
  container.play();
@@ -99,9 +121,9 @@ export class DvrControls extends UICorePlugin {
99
121
  }
100
122
  }
101
123
 
102
- settingsUpdate() {
124
+ private settingsUpdate() {
103
125
  // @ts-ignore
104
- this.stopListening();
126
+ this.stopListening(); // TODO sort out
105
127
  this.core.mediaControl.$el.removeClass('live');
106
128
  if (this.shouldRender()) {
107
129
  this.render();
@@ -110,20 +132,26 @@ export class DvrControls extends UICorePlugin {
110
132
  this.bindEvents();
111
133
  }
112
134
 
113
- shouldRender() {
135
+ private shouldRender() {
114
136
  const useDvrControls = this.core.options.useDvrControls === undefined || !!this.core.options.useDvrControls;
115
137
 
116
138
  return useDvrControls && this.core.getPlaybackType() === Playback.LIVE;
117
139
  }
118
140
 
141
+ /**
142
+ * @internal
143
+ */
119
144
  override render() {
120
- this.$el.html(this.template({
145
+ this.$el.html(DvrControls.template({
121
146
  live: this.core.i18n.t('live'),
122
147
  backToLive: this.core.i18n.t('back_to_live')
123
148
  }));
124
149
  if (this.shouldRender()) {
125
- this.core.mediaControl.$el.addClass('live');
126
- this.core.mediaControl.$('.media-control-left-panel[data-media-control]').append(this.$el);
150
+ const mediaControl = this.core.mediaControl;
151
+ assert(mediaControl, 'media_control plugin is required');
152
+ // TODO don't tap into the $el directly
153
+ mediaControl.$el.addClass('live');
154
+ mediaControl.$('.media-control-left-panel[data-media-control]').append(this.$el);
127
155
  }
128
156
 
129
157
  return this;