@gcorevideo/player 2.20.1 → 2.20.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 (289) hide show
  1. package/dist/core.js +30 -6
  2. package/dist/index.css +1572 -1572
  3. package/dist/index.js +343 -226
  4. package/dist/player.d.ts +280 -52
  5. package/dist/plugins/index.css +619 -619
  6. package/dist/plugins/index.js +1468 -1351
  7. package/docs/api/player.audioselector.md +1 -251
  8. package/docs/api/player.bigmutebutton.md +1 -156
  9. package/docs/api/player.clapprstats.exportmetrics.md +4 -0
  10. package/docs/api/player.clapprstats.md +7 -223
  11. package/docs/api/player.clapprstats.setupdatemetrics.md +2 -0
  12. package/docs/api/player.clicktopause.md +5 -113
  13. package/docs/api/player.clipsplugin.gettext.md +9 -0
  14. package/docs/api/player.clipsplugin.md +10 -94
  15. package/docs/api/player.clipspluginsettings.md +57 -0
  16. package/docs/api/player.clipspluginsettings.text.md +13 -0
  17. package/docs/api/player.contextmenu._constructor_.md +6 -3
  18. package/docs/api/player.contextmenu.md +13 -256
  19. package/docs/api/{player.audioselector.bindevents.md → player.contextmenupluginsettings.label.md} +3 -7
  20. package/docs/api/player.contextmenupluginsettings.md +98 -0
  21. package/docs/api/{player.audioselector.attributes.md → player.contextmenupluginsettings.preventshowcontextmenu.md} +3 -6
  22. package/docs/api/{player.audioselector.reload.md → player.contextmenupluginsettings.url.md} +3 -7
  23. package/docs/api/player.dvrcontrols.md +1 -1
  24. package/docs/api/player.errorscreen.md +0 -2
  25. package/docs/api/player.favicon._constructor_.md +3 -0
  26. package/docs/api/player.favicon.bindevents.md +3 -0
  27. package/docs/api/player.favicon.configure.md +3 -0
  28. package/docs/api/player.favicon.destroy.md +3 -0
  29. package/docs/api/player.favicon.disable.md +3 -0
  30. package/docs/api/player.favicon.md +18 -1
  31. package/docs/api/player.favicon.name.md +3 -0
  32. package/docs/api/player.favicon.supportedversion.md +3 -0
  33. package/docs/api/player.gearevents.md +4 -1
  34. package/docs/api/player.googleanalytics._constructor_.md +3 -0
  35. package/docs/api/player.googleanalytics.addeventlisteners.md +3 -0
  36. package/docs/api/player.googleanalytics.embedscript.md +3 -0
  37. package/docs/api/player.googleanalytics.md +42 -1
  38. package/docs/api/player.googleanalytics.name.md +3 -0
  39. package/docs/api/player.googleanalytics.onbufferfull.md +3 -0
  40. package/docs/api/player.googleanalytics.onbuffering.md +3 -0
  41. package/docs/api/player.googleanalytics.ondvr.md +3 -0
  42. package/docs/api/player.googleanalytics.onended.md +3 -0
  43. package/docs/api/player.googleanalytics.onerror.md +3 -0
  44. package/docs/api/player.googleanalytics.onfullscreen.md +3 -0
  45. package/docs/api/player.googleanalytics.onhd.md +3 -0
  46. package/docs/api/player.googleanalytics.onpause.md +3 -0
  47. package/docs/api/player.googleanalytics.onplay.md +3 -0
  48. package/docs/api/player.googleanalytics.onready.md +3 -0
  49. package/docs/api/player.googleanalytics.onseek.md +3 -0
  50. package/docs/api/player.googleanalytics.onstop.md +3 -0
  51. package/docs/api/player.googleanalytics.onvolumechanged.md +3 -0
  52. package/docs/api/player.googleanalytics.push.md +3 -0
  53. package/docs/api/player.googleanalytics.supportedversion.md +3 -0
  54. package/docs/api/player.initeventdata.event.md +3 -0
  55. package/docs/api/player.initeventdata.md +7 -0
  56. package/docs/api/player.logo._constructor_.md +3 -0
  57. package/docs/api/player.logo.attributes.md +3 -0
  58. package/docs/api/player.logo.bindevents.md +3 -0
  59. package/docs/api/player.logo.md +20 -1
  60. package/docs/api/player.logo.name.md +3 -0
  61. package/docs/api/player.logo.render.md +3 -0
  62. package/docs/api/player.logo.stoplistening.md +3 -0
  63. package/docs/api/player.logo.supportedversion.md +3 -0
  64. package/docs/api/player.logo.template.md +3 -0
  65. package/docs/api/player.md +73 -21
  66. package/docs/api/player.mediacontrolelement.md +1 -1
  67. package/docs/api/player.multicamera._constructor_.md +3 -0
  68. package/docs/api/player.multicamera.activebyid.md +3 -0
  69. package/docs/api/player.multicamera.attributes.md +3 -0
  70. package/docs/api/player.multicamera.bindevents.md +3 -0
  71. package/docs/api/player.multicamera.events.md +3 -0
  72. package/docs/api/player.multicamera.getcameraslist.md +3 -0
  73. package/docs/api/player.multicamera.getcurrentcamera.md +3 -0
  74. package/docs/api/player.multicamera.md +30 -1
  75. package/docs/api/player.multicamera.name.md +3 -0
  76. package/docs/api/player.multicamera.render.md +3 -0
  77. package/docs/api/player.multicamera.supportedversion.md +3 -0
  78. package/docs/api/player.multicamera.template.md +3 -0
  79. package/docs/api/player.multicamera.unbindevents.md +3 -0
  80. package/docs/api/player.multicamera.version.md +3 -0
  81. package/docs/api/player.seektime.attributes.md +3 -0
  82. package/docs/api/player.seektime.bindevents.md +3 -0
  83. package/docs/api/player.seektime.durationshown.md +3 -0
  84. package/docs/api/player.seektime.getseektime.md +3 -0
  85. package/docs/api/player.seektime.islivestreamwithdvr.md +3 -0
  86. package/docs/api/player.seektime.md +31 -0
  87. package/docs/api/player.seektime.mediacontrol.md +3 -0
  88. package/docs/api/player.seektime.mediacontrolcontainer.md +3 -0
  89. package/docs/api/player.seektime.name.md +3 -0
  90. package/docs/api/player.seektime.render.md +3 -0
  91. package/docs/api/player.seektime.shouldbevisible.md +3 -0
  92. package/docs/api/player.seektime.supportedversion.md +3 -0
  93. package/docs/api/player.seektime.template.md +3 -0
  94. package/docs/api/player.seektime.update.md +3 -0
  95. package/docs/api/player.share.md +2 -0
  96. package/docs/api/player.skiptime.md +2 -0
  97. package/docs/api/player.stalleventdata.count.md +3 -0
  98. package/docs/api/player.stalleventdata.event.md +3 -0
  99. package/docs/api/player.stalleventdata.md +8 -3
  100. package/docs/api/player.stalleventdata.time.md +3 -0
  101. package/docs/api/player.stalleventdata.total_ms.md +3 -0
  102. package/docs/api/player.starteventdata.event.md +3 -0
  103. package/docs/api/player.starteventdata.md +7 -0
  104. package/docs/api/player.telemetryevent.md +11 -0
  105. package/docs/api/player.telemetryeventdata.md +3 -0
  106. package/docs/api/player.telemetrypluginsettings.md +4 -1
  107. package/docs/api/player.telemetrypluginsettings.send.md +3 -0
  108. package/docs/api/player.telemetryrecord.md +3 -0
  109. package/docs/api/player.thumbnails.md +21 -139
  110. package/docs/api/player.thumbnailspluginsettings.md +23 -0
  111. package/docs/api/player.volumefade.md +1 -0
  112. package/docs/api/player.volumefadeevents.md +7 -0
  113. package/docs/api/player.watcheventdata.event.md +3 -0
  114. package/docs/api/player.watcheventdata.md +7 -0
  115. package/docs/api/player.zeptoresult.md +1 -0
  116. package/lib/Player.d.ts +5 -3
  117. package/lib/Player.d.ts.map +1 -1
  118. package/lib/Player.js +30 -6
  119. package/lib/index.plugins.d.ts +0 -1
  120. package/lib/index.plugins.d.ts.map +1 -1
  121. package/lib/index.plugins.js +0 -1
  122. package/lib/internal.types.d.ts +7 -7
  123. package/lib/internal.types.d.ts.map +1 -1
  124. package/lib/plugins/audio-selector/AudioSelector.d.ts +28 -6
  125. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
  126. package/lib/plugins/audio-selector/AudioSelector.js +52 -22
  127. package/lib/plugins/big-mute-button/BigMuteButton.d.ts +18 -2
  128. package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -1
  129. package/lib/plugins/big-mute-button/BigMuteButton.js +21 -16
  130. package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -0
  131. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  132. package/lib/plugins/bottom-gear/BottomGear.js +1 -0
  133. package/lib/plugins/clappr-stats/ClapprStats.d.ts +31 -8
  134. package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
  135. package/lib/plugins/clappr-stats/ClapprStats.js +24 -0
  136. package/lib/plugins/clappr-stats/types.d.ts +12 -0
  137. package/lib/plugins/clappr-stats/types.d.ts.map +1 -1
  138. package/lib/plugins/clappr-stats/types.js +3 -0
  139. package/lib/plugins/click-to-pause/ClickToPause.d.ts +13 -1
  140. package/lib/plugins/click-to-pause/ClickToPause.d.ts.map +1 -1
  141. package/lib/plugins/click-to-pause/ClickToPause.js +14 -4
  142. package/lib/plugins/clips/Clips.d.ts +34 -2
  143. package/lib/plugins/clips/Clips.d.ts.map +1 -1
  144. package/lib/plugins/clips/Clips.js +51 -22
  145. package/lib/plugins/context-menu/ContextMenu.d.ts +44 -13
  146. package/lib/plugins/context-menu/ContextMenu.d.ts.map +1 -1
  147. package/lib/plugins/context-menu/ContextMenu.js +48 -36
  148. package/lib/plugins/dvr-controls/DvrControls.d.ts +1 -3
  149. package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
  150. package/lib/plugins/dvr-controls/DvrControls.js +11 -28
  151. package/lib/plugins/error-screen/ErrorScreen.d.ts +0 -1
  152. package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
  153. package/lib/plugins/error-screen/ErrorScreen.js +0 -1
  154. package/lib/plugins/favicon/Favicon.d.ts +4 -0
  155. package/lib/plugins/favicon/Favicon.d.ts.map +1 -1
  156. package/lib/plugins/favicon/Favicon.js +4 -0
  157. package/lib/plugins/google-analytics/GoogleAnalytics.d.ts +4 -0
  158. package/lib/plugins/google-analytics/GoogleAnalytics.d.ts.map +1 -1
  159. package/lib/plugins/google-analytics/GoogleAnalytics.js +5 -1
  160. package/lib/plugins/index.d.ts +0 -1
  161. package/lib/plugins/index.d.ts.map +1 -1
  162. package/lib/plugins/index.js +0 -1
  163. package/lib/plugins/logo/Logo.d.ts +4 -0
  164. package/lib/plugins/logo/Logo.d.ts.map +1 -1
  165. package/lib/plugins/logo/Logo.js +4 -0
  166. package/lib/plugins/media-control/MediaControl.d.ts +1 -1
  167. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  168. package/lib/plugins/media-control/MediaControl.js +3 -1
  169. package/lib/plugins/multi-camera/MultiCamera.d.ts +4 -0
  170. package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -1
  171. package/lib/plugins/multi-camera/MultiCamera.js +6 -2
  172. package/lib/plugins/seek-time/SeekTime.d.ts +4 -0
  173. package/lib/plugins/seek-time/SeekTime.d.ts.map +1 -1
  174. package/lib/plugins/seek-time/SeekTime.js +6 -2
  175. package/lib/plugins/share/Share.d.ts +3 -0
  176. package/lib/plugins/share/Share.d.ts.map +1 -1
  177. package/lib/plugins/share/Share.js +4 -1
  178. package/lib/plugins/skip-time/SkipTime.d.ts +3 -0
  179. package/lib/plugins/skip-time/SkipTime.d.ts.map +1 -1
  180. package/lib/plugins/skip-time/SkipTime.js +3 -0
  181. package/lib/plugins/telemetry/Telemetry.d.ts +18 -0
  182. package/lib/plugins/telemetry/Telemetry.d.ts.map +1 -1
  183. package/lib/plugins/telemetry/Telemetry.js +1 -0
  184. package/lib/plugins/thumbnails/Thumbnails.d.ts +48 -3
  185. package/lib/plugins/thumbnails/Thumbnails.d.ts.map +1 -1
  186. package/lib/plugins/thumbnails/Thumbnails.js +52 -18
  187. package/lib/plugins/volume-fade/VolumeFade.d.ts +5 -0
  188. package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
  189. package/lib/plugins/volume-fade/VolumeFade.js +5 -0
  190. package/lib/types.d.ts +9 -1
  191. package/lib/types.d.ts.map +1 -1
  192. package/lib/utils/types.d.ts +1 -0
  193. package/lib/utils/types.d.ts.map +1 -1
  194. package/package.json +1 -1
  195. package/release_notes +297 -0
  196. package/src/Player.ts +101 -46
  197. package/src/__tests__/Player.test.ts +23 -1
  198. package/src/index.plugins.ts +0 -1
  199. package/src/internal.types.ts +86 -79
  200. package/src/plugins/audio-selector/AudioSelector.ts +227 -154
  201. package/src/plugins/big-mute-button/BigMuteButton.ts +100 -79
  202. package/src/plugins/bottom-gear/BottomGear.ts +1 -0
  203. package/src/plugins/clappr-stats/ClapprStats.ts +32 -8
  204. package/src/plugins/clappr-stats/types.ts +13 -0
  205. package/src/plugins/click-to-pause/ClickToPause.ts +47 -36
  206. package/src/plugins/clips/Clips.ts +127 -71
  207. package/src/plugins/context-menu/ContextMenu.ts +109 -76
  208. package/src/plugins/dvr-controls/DvrControls.ts +11 -30
  209. package/src/plugins/error-screen/ErrorScreen.ts +0 -1
  210. package/src/plugins/favicon/Favicon.ts +4 -0
  211. package/src/plugins/google-analytics/GoogleAnalytics.ts +5 -1
  212. package/src/plugins/index.ts +0 -1
  213. package/src/plugins/logo/Logo.ts +4 -0
  214. package/src/plugins/media-control/MediaControl.ts +4 -1
  215. package/src/plugins/multi-camera/MultiCamera.ts +6 -2
  216. package/src/plugins/seek-time/SeekTime.ts +6 -2
  217. package/src/plugins/share/Share.ts +4 -1
  218. package/src/plugins/skip-time/SkipTime.ts +3 -0
  219. package/src/plugins/telemetry/Telemetry.ts +18 -0
  220. package/src/plugins/thumbnails/Thumbnails.ts +268 -194
  221. package/src/plugins/volume-fade/VolumeFade.ts +5 -0
  222. package/src/types.ts +11 -1
  223. package/src/utils/types.ts +1 -0
  224. package/temp/player.api.json +627 -2468
  225. package/tsconfig.tsbuildinfo +1 -1
  226. package/docs/api/player.audioselector.events.md +0 -17
  227. package/docs/api/player.audioselector.hideselecttrackmenu.md +0 -18
  228. package/docs/api/player.audioselector.name.md +0 -14
  229. package/docs/api/player.audioselector.onshowlevelselectmenu.md +0 -18
  230. package/docs/api/player.audioselector.render.md +0 -18
  231. package/docs/api/player.audioselector.supportedversion.md +0 -16
  232. package/docs/api/player.audioselector.template.md +0 -14
  233. package/docs/api/player.audioselector.togglecontextmenu.md +0 -18
  234. package/docs/api/player.audioselector.unbindevents.md +0 -18
  235. package/docs/api/player.audioselector.version.md +0 -14
  236. package/docs/api/player.bigmutebutton.bindevents.md +0 -18
  237. package/docs/api/player.bigmutebutton.events.md +0 -17
  238. package/docs/api/player.bigmutebutton.name.md +0 -14
  239. package/docs/api/player.bigmutebutton.render.md +0 -18
  240. package/docs/api/player.bigmutebutton.supportedversion.md +0 -16
  241. package/docs/api/player.bigmutebutton.template.md +0 -14
  242. package/docs/api/player.clapprstats._buildreport.md +0 -18
  243. package/docs/api/player.clapprstats._defaultreport.md +0 -52
  244. package/docs/api/player.clapprstats._playbackname.md +0 -14
  245. package/docs/api/player.clapprstats._playbacktype.md +0 -14
  246. package/docs/api/player.clapprstats.bindevents.md +0 -18
  247. package/docs/api/player.clapprstats.destroy.md +0 -18
  248. package/docs/api/player.clapprstats.name.md +0 -14
  249. package/docs/api/player.clapprstats.onfirstplaying.md +0 -18
  250. package/docs/api/player.clapprstats.playafterpause.md +0 -18
  251. package/docs/api/player.clapprstats.starttimers.md +0 -18
  252. package/docs/api/player.clapprstats.stopreporting.md +0 -18
  253. package/docs/api/player.clapprstats.supportedversion.md +0 -16
  254. package/docs/api/player.clicktopause.bindevents.md +0 -15
  255. package/docs/api/player.clicktopause.config.md +0 -11
  256. package/docs/api/player.clicktopause.name.md +0 -11
  257. package/docs/api/player.clicktopause.supportedversion.md +0 -13
  258. package/docs/api/player.clipsplugin.attributes.md +0 -13
  259. package/docs/api/player.clipsplugin.bindevents.md +0 -15
  260. package/docs/api/player.clipsplugin.makesvg.md +0 -49
  261. package/docs/api/player.clipsplugin.name.md +0 -11
  262. package/docs/api/player.clipsplugin.unbindevents.md +0 -15
  263. package/docs/api/player.contextmenu.attributes.md +0 -13
  264. package/docs/api/player.contextmenu.bindevents.md +0 -15
  265. package/docs/api/player.contextmenu.destroy.md +0 -15
  266. package/docs/api/player.contextmenu.events.md +0 -13
  267. package/docs/api/player.contextmenu.exposeversion.md +0 -14
  268. package/docs/api/player.contextmenu.label.md +0 -11
  269. package/docs/api/player.contextmenu.mediacontrol.md +0 -11
  270. package/docs/api/player.contextmenu.name.md +0 -11
  271. package/docs/api/player.contextmenu.render.md +0 -15
  272. package/docs/api/player.contextmenu.supportedversion.md +0 -13
  273. package/docs/api/player.contextmenu.template.md +0 -11
  274. package/docs/api/player.contextmenu.url.md +0 -11
  275. package/docs/api/player.disablecontrols.bindevents.md +0 -15
  276. package/docs/api/player.disablecontrols.container.md +0 -11
  277. package/docs/api/player.disablecontrols.md +0 -138
  278. package/docs/api/player.disablecontrols.name.md +0 -11
  279. package/docs/api/player.disablecontrols.supportedversion.md +0 -13
  280. package/docs/api/player.disablecontrols.unbindevents.md +0 -15
  281. package/docs/api/player.thumbnails.attributes.md +0 -13
  282. package/docs/api/player.thumbnails.bindevents.md +0 -15
  283. package/docs/api/player.thumbnails.name.md +0 -11
  284. package/docs/api/player.thumbnails.settext.md +0 -49
  285. package/docs/api/player.thumbnails.supportedversion.md +0 -13
  286. package/docs/api/player.thumbnails.template.md +0 -11
  287. package/src/plugins/disable-controls/DisableControls.ts +0 -81
  288. package/src/plugins/ga-events/GaEvents.js +0 -395
  289. package/src/plugins/ga-events/ga-tracking.js +0 -46
@@ -1,191 +1,212 @@
1
- import { Events, template, UICorePlugin, Utils } from '@clappr/core';
2
- import { trace } from '@gcorevideo/utils';
1
+ import { Events, template, UICorePlugin, Utils } from '@clappr/core'
2
+ import { trace } from '@gcorevideo/utils'
3
3
 
4
- import { CLAPPR_VERSION } from '../../build.js';
5
- import { ZeptoResult } from "../../utils/types.js";
4
+ import { CLAPPR_VERSION } from '../../build.js'
5
+ import { ZeptoResult } from '../../utils/types.js'
6
6
 
7
- import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg';
8
- import pluginHtml from '../../../assets/big-mute-button/big-mute-button.ejs';
9
- import '../../../assets/big-mute-button/big-mute-button.scss';
7
+ import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg'
8
+ import pluginHtml from '../../../assets/big-mute-button/big-mute-button.ejs'
9
+ import '../../../assets/big-mute-button/big-mute-button.scss'
10
10
 
11
- const T = "plugins.big_mute_button";
11
+ const T = 'plugins.big_mute_button'
12
+
13
+ // TODO rewrite as a container plugin
12
14
 
13
15
  /**
16
+ * Displays a big mute button over the video when it's muted.
17
+ * Once pressed, it unmutes the video.
14
18
  * @beta
15
19
  */
16
20
  export class BigMuteButton extends UICorePlugin {
17
- private isBigMuteButtonHidden = false;
21
+ private isBigMuteButtonHidden = false
18
22
 
19
- private _adIsPlaying = false;
23
+ private _adIsPlaying = false
20
24
 
21
- private $bigMuteBtnContainer: ZeptoResult | null = null;
25
+ private $bigMuteBtnContainer: ZeptoResult | null = null
22
26
 
23
- private $bigMuteButton: ZeptoResult | null = null;
27
+ private $bigMuteButton: ZeptoResult | null = null
24
28
 
29
+ /**
30
+ * @internal
31
+ */
25
32
  get name() {
26
- return 'big_mute_button';
33
+ return 'big_mute_button'
27
34
  }
28
35
 
36
+ /**
37
+ * @internal
38
+ */
29
39
  get supportedVersion() {
30
- return { min: CLAPPR_VERSION };
40
+ return { min: CLAPPR_VERSION }
31
41
  }
32
42
 
33
- get template() {
34
- return template(pluginHtml);
35
- }
43
+ private static readonly template = template(pluginHtml)
36
44
 
45
+ /**
46
+ * @internal
47
+ */
37
48
  override get events() {
38
49
  return {
39
50
  'click .big-mute-icon': 'handleBigMuteBtnClick',
40
51
  'click .big-mute-icon-wrapper': 'destroyBigMuteBtn',
41
- };
52
+ }
42
53
  }
43
54
 
55
+ /**
56
+ * @internal
57
+ */
44
58
  override bindEvents() {
45
- super.bindEvents();
46
- this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
47
- this.listenTo(this.core, 'core:advertisement:start', this.onStartAd);
48
- this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd);
59
+ super.bindEvents()
60
+ this.listenTo(this.core, Events.CORE_READY, this.onCoreReady)
61
+ this.listenTo(this.core, 'core:advertisement:start', this.onStartAd)
62
+ this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd)
49
63
  trace(`${T} bindEvents`, {
50
64
  mediacontrol: !!this.core.mediaControl,
51
- });
52
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.mediaControlRendered);
53
- }
54
-
55
- private unBindEvents() {
56
- // @ts-ignore
57
- this.stopListening(this.core, Events.CORE_READY);
58
- this.stopListening(this.core, 'core:advertisement:start', this.onStartAd);
59
- this.stopListening(this.core, 'core:advertisement:finish', this.onFinishAd);
60
- this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.mediaControlRendered);
61
-
62
- const container = this.core.activeContainer;
63
-
64
- if (container) {
65
- this.stopListening(container.playback, Events.PLAYBACK_PLAY, this.render);
66
- }
65
+ })
66
+ this.listenTo(
67
+ this.core.mediaControl,
68
+ Events.MEDIACONTROL_RENDERED,
69
+ this.mediaControlRendered,
70
+ )
67
71
  }
68
72
 
69
73
  private onCoreReady() {
70
- this.listenTo(this.core.activeContainer, Events.CONTAINER_VOLUME, this.onContainerVolume);
71
- this.listenTo(this.core.activeContainer, Events.CONTAINER_READY, this.onContainerStart);
72
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_ENDED, this.onPlaybackEnded);
74
+ this.listenTo(
75
+ this.core.activeContainer,
76
+ Events.CONTAINER_VOLUME,
77
+ this.onContainerVolume,
78
+ )
79
+ this.listenTo(
80
+ this.core.activeContainer,
81
+ Events.CONTAINER_READY,
82
+ this.onContainerStart,
83
+ )
84
+ this.listenTo(
85
+ this.core.activePlayback,
86
+ Events.PLAYBACK_ENDED,
87
+ this.onPlaybackEnded,
88
+ )
73
89
  }
74
90
 
75
91
  private onContainerVolume(value: number) {
76
92
  if (value !== 0) {
77
- this.destroyBigMuteBtn();
93
+ this.destroyBigMuteBtn()
78
94
  }
79
95
  }
80
96
 
81
97
  private onContainerStart() {
82
98
  if (this.isBigMuteButtonHidden) {
83
- this.showBigMuteBtn();
99
+ this.showBigMuteBtn()
84
100
  }
85
101
  }
86
102
 
87
103
  private onPlaybackEnded() {
88
- this.hideBigMuteBtn();
104
+ this.hideBigMuteBtn()
89
105
  }
90
106
 
91
107
  private mediaControlRendered() {
92
- const container = this.core.activeContainer;
108
+ const container = this.core.activeContainer
93
109
 
94
110
  trace(`${T} mediaControlRendered`, {
95
111
  container: !!container,
96
- });
112
+ })
97
113
 
98
114
  if (container) {
99
115
  this.listenTo(container.playback, Events.PLAYBACK_PLAY, () => {
100
- trace(`${T} PLAYBACK_PLAY`);
101
- this.render();
102
- });
116
+ trace(`${T} PLAYBACK_PLAY`)
117
+ this.render()
118
+ })
103
119
  }
104
120
  }
105
121
 
106
122
  private onStartAd() {
107
- this._adIsPlaying = true;
123
+ this._adIsPlaying = true
108
124
  if (this.$bigMuteBtnContainer) {
109
- this.$bigMuteBtnContainer.addClass('hide');
125
+ this.$bigMuteBtnContainer.addClass('hide')
110
126
  }
111
127
  }
112
128
 
113
129
  private onFinishAd() {
114
- this._adIsPlaying = false;
130
+ this._adIsPlaying = false
115
131
  if (this.$bigMuteBtnContainer) {
116
- this.$bigMuteBtnContainer.removeClass('hide');
132
+ this.$bigMuteBtnContainer.removeClass('hide')
117
133
  }
118
134
  }
119
135
 
120
136
  private shouldRender() {
121
- const container = this.core.activeContainer;
137
+ const container = this.core.activeContainer
122
138
 
123
139
  if (!container) {
124
- return false;
140
+ return false
125
141
  }
126
142
 
127
- const { autoPlay, wasMuted } = this.options;
128
- const volume = container.volume;
143
+ const { autoPlay, wasMuted } = this.options
144
+ const volume = container.volume
129
145
 
130
146
  trace(`${T} shouldRender`, {
131
147
  autoPlay,
132
148
  wasMuted,
133
149
  volume,
134
- });
150
+ })
135
151
 
136
- return autoPlay && !wasMuted && volume === 0;
152
+ return autoPlay && !wasMuted && volume === 0
137
153
  }
138
154
 
155
+ /**
156
+ * @internal
157
+ */
139
158
  override render() {
140
159
  if (this.shouldRender()) {
141
160
  trace(`${T} render`, {
142
161
  el: !!this.$el,
143
- });
144
- this.$el.html(this.template());
162
+ })
163
+ this.$el.html(BigMuteButton.template())
145
164
 
146
- this.$bigMuteBtnContainer = this.$el.find('.big-mute-icon-wrapper[data-big-mute]');
147
- this._adIsPlaying && this.$bigMuteBtnContainer.addClass('hide');
165
+ this.$bigMuteBtnContainer = this.$el.find(
166
+ '.big-mute-icon-wrapper[data-big-mute]',
167
+ )
168
+ this._adIsPlaying && this.$bigMuteBtnContainer.addClass('hide')
148
169
 
149
- this.$bigMuteButton = this.$bigMuteBtnContainer.find('.big-mute-icon');
150
- this.$bigMuteButton.append(volumeMuteIcon);
170
+ this.$bigMuteButton = this.$bigMuteBtnContainer.find('.big-mute-icon')
171
+ this.$bigMuteButton.append(volumeMuteIcon)
151
172
 
152
- const container = this.core.activeContainer;
173
+ const container = this.core.activeContainer
153
174
 
154
- container.$el.append(this.$el.get(0));
175
+ container.$el.append(this.$el.get(0))
155
176
  }
156
177
 
157
- return this;
178
+ return this
158
179
  }
159
180
 
160
181
  private hideBigMuteBtn() {
161
- this.isBigMuteButtonHidden = true;
162
- this.$bigMuteBtnContainer?.addClass('hide');
182
+ this.isBigMuteButtonHidden = true
183
+ this.$bigMuteBtnContainer?.addClass('hide')
163
184
  }
164
185
 
165
186
  private showBigMuteBtn() {
166
- this.isBigMuteButtonHidden = false;
187
+ this.isBigMuteButtonHidden = false
167
188
  if (this.$bigMuteBtnContainer) {
168
- this.$bigMuteBtnContainer.removeClass('hide');
189
+ this.$bigMuteBtnContainer.removeClass('hide')
169
190
  }
170
191
  }
171
192
 
172
193
  private destroyBigMuteBtn(e?: MouseEvent) {
173
- this.hideBigMuteBtn();
194
+ this.hideBigMuteBtn()
174
195
 
175
196
  if (e && e.stopPropagation) {
176
- e.stopPropagation();
197
+ e.stopPropagation()
177
198
  }
178
199
 
179
- this.destroy();
200
+ this.destroy()
180
201
  }
181
202
 
182
203
  private handleBigMuteBtnClick(e: MouseEvent) {
183
- const localVolume = Utils.Config.restore('volume');
184
- const volume = !isNaN(localVolume) ? localVolume : 100;
204
+ const localVolume = Utils.Config.restore('volume')
205
+ const volume = !isNaN(localVolume) ? localVolume : 100
185
206
 
186
207
  // TODO use container.setVolume() instead
187
- this.core.mediaControl.setVolume(volume === 0 ? 100 : volume);
208
+ this.core.mediaControl.setVolume(volume === 0 ? 100 : volume)
188
209
 
189
- this.destroyBigMuteBtn(e);
210
+ this.destroyBigMuteBtn(e)
190
211
  }
191
212
  }
@@ -17,6 +17,7 @@ const T = 'plugins.bottom_gear';
17
17
 
18
18
  /**
19
19
  * Custom events emitted by the plugin
20
+ * @beta
20
21
  */
21
22
  export enum GearEvents {
22
23
  /**
@@ -23,7 +23,10 @@ type UriToMeasureBandwidth = {
23
23
  const updateMetrics = () => {};
24
24
 
25
25
  /**
26
+ * Collects useful statistics about playback performance.
26
27
  * @beta
28
+ * @remarks
29
+ * This plugin does not render anything and is supposed to be extended or used together with other plugins that actually render something.
27
30
  */
28
31
  export class ClapprStats extends ContainerPlugin {
29
32
  private bwMeasureCount = 0;
@@ -60,19 +63,25 @@ export class ClapprStats extends ContainerPlugin {
60
63
 
61
64
  private uriToMeasureLatency: string | undefined;
62
65
 
66
+ /**
67
+ * @internal
68
+ */
63
69
  get name() {
64
70
  return 'clappr_stats';
65
71
  }
66
72
 
73
+ /**
74
+ * @internal
75
+ */
67
76
  get supportedVersion() {
68
77
  return { min: CLAPPR_VERSION };
69
78
  }
70
79
 
71
- get _playbackName() {
80
+ private get _playbackName() {
72
81
  return String(this.container.playback.name || '');
73
82
  }
74
83
 
75
- get _playbackType() {
84
+ private get _playbackType() {
76
85
  return this.container.getPlaybackType();
77
86
  }
78
87
 
@@ -100,11 +109,15 @@ export class ClapprStats extends ContainerPlugin {
100
109
  this.metrics.timers[timer] += this._now() - this.timers[timer];
101
110
  }
102
111
 
112
+ /**
113
+ * Registers a callback to receive the metrics.
114
+ * @param updateMetricsFn
115
+ */
103
116
  setUpdateMetrics(updateMetricsFn: MetricsUpdateFn) {
104
117
  this.updateFn = updateMetricsFn;
105
118
  }
106
119
 
107
- _defaultReport(metrics: Metrics) {
120
+ private _defaultReport(metrics: Metrics) {
108
121
  this.updateFn(metrics);
109
122
  }
110
123
 
@@ -122,6 +135,9 @@ export class ClapprStats extends ContainerPlugin {
122
135
  };
123
136
  }
124
137
 
138
+ /**
139
+ * @internal
140
+ */
125
141
  override bindEvents() {
126
142
  this.listenTo(this.container, CoreEvents.CONTAINER_BITRATE, this.onBitrate);
127
143
  this.listenTo(this.container, CoreEvents.CONTAINER_STOP, this.stopReporting);
@@ -141,11 +157,18 @@ export class ClapprStats extends ContainerPlugin {
141
157
  this.listenTo(this.container.playback, CoreEvents.PLAYBACK_TIMEUPDATE, this.onTimeUpdate);
142
158
  }
143
159
 
160
+ /**
161
+ * @internal
162
+ */
144
163
  override destroy() {
145
164
  this.stopReporting();
146
165
  super.destroy();
147
166
  }
148
167
 
168
+ /**
169
+ * Returns the collected metrics.
170
+ * @returns The collected metrics
171
+ */
149
172
  exportMetrics() {
150
173
  return structuredClone(this.metrics);
151
174
  }
@@ -166,7 +189,7 @@ export class ClapprStats extends ContainerPlugin {
166
189
  this._inc('changeLevel');
167
190
  }
168
191
 
169
- stopReporting() {
192
+ private stopReporting() {
170
193
  this._buildReport();
171
194
 
172
195
  if (this.intervalId !== null) {
@@ -175,25 +198,26 @@ export class ClapprStats extends ContainerPlugin {
175
198
  }
176
199
  this._newMetrics();
177
200
 
201
+ // TODO
178
202
  // @ts-ignore
179
203
  this.stopListening();
180
204
  this.bindEvents();
181
205
  }
182
206
 
183
- startTimers() {
207
+ private startTimers() {
184
208
  this.intervalId = setInterval(this._buildReport.bind(this), this.runEach);
185
209
  this.start('session');
186
210
  this.start('startup');
187
211
  }
188
212
 
189
- onFirstPlaying() {
213
+ private onFirstPlaying() {
190
214
  this.listenTo(this.container, CoreEvents.CONTAINER_TIMEUPDATE, this.onContainerUpdateWhilePlaying);
191
215
 
192
216
  this.start('watch');
193
217
  this._stop('startup');
194
218
  }
195
219
 
196
- playAfterPause() {
220
+ private playAfterPause() {
197
221
  this.listenTo(this.container, CoreEvents.CONTAINER_TIMEUPDATE, this.onContainerUpdateWhilePlaying);
198
222
  this._stop('pause');
199
223
  this.start('watch');
@@ -280,7 +304,7 @@ export class ClapprStats extends ContainerPlugin {
280
304
  }
281
305
  }
282
306
 
283
- _buildReport() {
307
+ private _buildReport() {
284
308
  this._stop('session');
285
309
  this.start('session');
286
310
 
@@ -1,3 +1,7 @@
1
+
2
+ /**
3
+ * @beta
4
+ */
1
5
  export type Metrics = {
2
6
  counters: {
3
7
  play: number;
@@ -37,6 +41,9 @@ export type Metrics = {
37
41
  custom: Record<string, unknown>;
38
42
  };
39
43
 
44
+ /**
45
+ * @beta
46
+ */
40
47
  export type BitrateTrackRecord = {
41
48
  start: number;
42
49
  end?: number;
@@ -44,8 +51,14 @@ export type BitrateTrackRecord = {
44
51
  bitrate: number;
45
52
  }
46
53
 
54
+ /**
55
+ * @beta
56
+ */
47
57
  export type MetricsUpdateFn = (metrics: Metrics) => void;
48
58
 
59
+ /**
60
+ * @beta
61
+ */
49
62
  export enum ClapprStatsEvents {
50
63
  REPORT_EVENT = 'clappr:stats:report',
51
64
  PERCENTAGE_EVENT = 'clappr:stats:percentage',
@@ -1,63 +1,74 @@
1
1
  //Copyright 2014 Globo.com Player authors. All rights reserved.
2
2
  // Use of this source code is governed by a BSD-style
3
- // license that can be found in the LICENSE file.
3
+ // license that can be found at https://github.com/clappr/clappr-plugins/blob/master/LICENSE.
4
4
 
5
- import { ContainerPlugin, Events, Playback } from '@clappr/core';
6
- import { trace } from '@gcorevideo/utils';
5
+ import { ContainerPlugin, Events, Playback } from '@clappr/core'
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
- // const VERSION = '0.0.1';
10
+ type Timer = ReturnType<typeof setTimeout>
11
11
 
12
- type Timer = ReturnType<typeof setTimeout>;
13
-
14
- const T = 'plugins.click_to_pause_custom';
12
+ const T = 'plugins.click_to_pause_custom'
15
13
 
14
+ /**
15
+ * Adds a behavior of toggling the playback state on click over the container
16
+ * @beta
17
+ */
16
18
  export class ClickToPause extends ContainerPlugin {
17
- private pointerEnabled = false;
19
+ private pointerEnabled = false
18
20
 
19
- private timer: Timer | null = null;
21
+ private timer: Timer | null = null
20
22
 
23
+ /**
24
+ * @internal
25
+ */
21
26
  get name() {
22
- return 'click_to_pause_custom';
27
+ return 'click_to_pause_custom'
23
28
  }
24
29
 
30
+ /**
31
+ * @internal
32
+ */
25
33
  get supportedVersion() {
26
- return { min: CLAPPR_VERSION };
27
- }
28
-
29
- get config() {
30
- return this.container.options.clickToPauseConfig || {};
34
+ return { min: CLAPPR_VERSION }
31
35
  }
32
36
 
37
+ /**
38
+ * @internal
39
+ */
33
40
  override bindEvents() {
34
- this.listenTo(this.container, Events.CONTAINER_CLICK, this.click);
35
- this.listenTo(this.container, Events.CONTAINER_SETTINGSUPDATE, this.settingsUpdate);
41
+ this.listenTo(this.container, Events.CONTAINER_CLICK, this.click)
42
+ this.listenTo(
43
+ this.container,
44
+ Events.CONTAINER_SETTINGSUPDATE,
45
+ this.settingsUpdate,
46
+ )
36
47
  }
37
48
 
38
49
  private click() {
39
- const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
40
- const isDvrEnabled = this.container.isDvrEnabled();
50
+ const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE
51
+ const isDvrEnabled = this.container.isDvrEnabled()
41
52
 
42
53
  trace(`${T} click`, {
43
54
  isLivePlayback,
44
55
  isDvrEnabled,
45
- });
56
+ })
46
57
 
47
58
  if (isLivePlayback && !isDvrEnabled) {
48
- this.togglePlay(true);
59
+ this.togglePlay(true)
49
60
  } else if (!isLivePlayback || isDvrEnabled) {
50
- this.clearTimer();
61
+ this.clearTimer()
51
62
  this.timer = setTimeout(() => {
52
63
  this.timer = null
53
- this.togglePlay(false);
54
- }, 300);
64
+ this.togglePlay(false)
65
+ }, 300)
55
66
  }
56
67
  }
57
68
 
58
69
  private settingsUpdate() {
59
- const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
60
- const pointerEnabled = !isLivePlayback || this.container.isDvrEnabled();
70
+ const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE
71
+ const pointerEnabled = !isLivePlayback || this.container.isDvrEnabled()
61
72
 
62
73
  trace(`${T} settingsUpdate`, {
63
74
  isLivePlayback,
@@ -65,29 +76,29 @@ export class ClickToPause extends ContainerPlugin {
65
76
  })
66
77
 
67
78
  if (pointerEnabled === this.pointerEnabled) {
68
- return;
79
+ return
69
80
  }
70
81
 
71
- const method = pointerEnabled ? 'addClass' : 'removeClass';
82
+ const method = pointerEnabled ? 'addClass' : 'removeClass'
72
83
 
73
- this.container.$el[method]('pointer-enabled');
74
- this.pointerEnabled = pointerEnabled;
84
+ this.container.$el[method]('pointer-enabled')
85
+ this.pointerEnabled = pointerEnabled
75
86
  }
76
87
 
77
88
  private togglePlay(useStop: boolean) {
78
- const isPlaying = this.container && this.container.isPlaying();
89
+ const isPlaying = this.container && this.container.isPlaying()
79
90
 
80
91
  if (isPlaying) {
81
- useStop ? this.container.stop() : this.container.pause();
92
+ useStop ? this.container.stop() : this.container.pause()
82
93
  } else {
83
- this.container.play();
94
+ this.container.play()
84
95
  }
85
96
  }
86
97
 
87
98
  private clearTimer() {
88
99
  if (this.timer) {
89
- clearTimeout(this.timer);
90
- this.timer = null;
100
+ clearTimeout(this.timer)
101
+ this.timer = null
91
102
  }
92
103
  }
93
104
  }