@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,224 +1,287 @@
1
- import { Events, UICorePlugin, template } from '@clappr/core';
1
+ import { Events, UICorePlugin, template } from '@clappr/core'
2
2
  import {
3
3
  AudioTrackLoadedData,
4
4
  AudioTrackSwitchedData,
5
5
  AudioTracksUpdatedData,
6
6
  Events as HlsEvents,
7
- } from 'hls.js';
7
+ } from 'hls.js'
8
8
 
9
- import { CLAPPR_VERSION } from '../../build.js';
9
+ import { CLAPPR_VERSION } from '../../build.js'
10
10
 
11
- import pluginHtml from '../../../assets/audio-selector/track-selector.ejs';
12
- import '../../../assets/audio-selector/style.scss';
13
- import audioArrow from '../../../assets/icons/old/quality-arrow.svg';
14
- import { ZeptoResult } from '../../utils/types.js';
11
+ import pluginHtml from '../../../assets/audio-selector/track-selector.ejs'
12
+ import '../../../assets/audio-selector/style.scss'
13
+ import audioArrow from '../../../assets/icons/old/quality-arrow.svg'
14
+ import { ZeptoResult } from '../../utils/types.js'
15
+ import assert from 'assert'
15
16
 
16
- const VERSION: string = '0.0.1';
17
+ const VERSION: string = '0.0.1'
17
18
 
18
19
  // const T = 'plugins.audio_selector';
19
20
 
20
- const AUTO = 0;
21
+ const AUTO = 0
21
22
 
22
23
  type AudioTrackW3C = {
23
- enabled: boolean;
24
- id: string;
24
+ enabled: boolean
25
+ id: string
25
26
  kind: string
26
- label: string;
27
+ label: string
27
28
  }
28
29
 
29
30
  type AudioTrackItem = {
30
- id: number;
31
- label: string;
31
+ id: number
32
+ label: string
32
33
  }
33
34
 
34
35
  type AudioTrackList = {
35
- length: number;
36
- addEventListener(type: 'change' | 'addtrack' | 'removetrack', listener: EventListenerOrEventListenerObject): void;
37
- getTrackById(id: string): AudioTrackW3C | null;
38
- [Symbol.iterator](): IterableIterator<AudioTrackW3C>;
36
+ length: number
37
+ addEventListener(
38
+ type: 'change' | 'addtrack' | 'removetrack',
39
+ listener: EventListenerOrEventListenerObject,
40
+ ): void
41
+ getTrackById(id: string): AudioTrackW3C | null
42
+ [Symbol.iterator](): IterableIterator<AudioTrackW3C>
39
43
  }
40
44
 
41
45
  /**
46
+ * Adds an audio track selector to the media control UI.
42
47
  * @beta
43
48
  */
44
49
  export class AudioSelector extends UICorePlugin {
45
- private selectedTrackId: number | undefined;
50
+ // TODO
46
51
 
47
- private currentTrack: AudioTrackItem | null = null;
52
+ private selectedTrackId: number | undefined
48
53
 
49
- private tracks: AudioTrackItem[] = [];
54
+ private currentTrack: AudioTrackItem | null = null
50
55
 
56
+ private tracks: AudioTrackItem[] = []
57
+
58
+ /**
59
+ * @internal
60
+ */
51
61
  get name() {
52
- return 'media_control_audio_selector';
62
+ return 'audio_selector'
53
63
  }
54
64
 
65
+ /**
66
+ * @internal
67
+ */
55
68
  get supportedVersion() {
56
- return { min: CLAPPR_VERSION };
69
+ return { min: CLAPPR_VERSION }
57
70
  }
58
71
 
72
+ /**
73
+ * @internal
74
+ */
59
75
  static get version() {
60
- return VERSION;
76
+ return VERSION
61
77
  }
62
78
 
63
- get template() {
64
- return template(pluginHtml);
65
- }
79
+ private static readonly template = template(pluginHtml)
66
80
 
81
+ /**
82
+ * @internal
83
+ */
67
84
  override get attributes() {
68
85
  return {
69
- 'class': this.name,
70
- 'data-track-selector': ''
71
- };
86
+ class: this.name,
87
+ 'data-track-selector': '',
88
+ }
72
89
  }
73
90
 
91
+ /**
92
+ * @internal
93
+ */
74
94
  override get events() {
75
95
  return {
76
96
  'click [data-track-selector-select]': 'onTrackSelect',
77
- 'click [data-track-selector-button]': 'onShowLevelSelectMenu'
78
- };
97
+ 'click [data-track-selector-button]': 'onShowLevelSelectMenu',
98
+ }
79
99
  }
80
100
 
101
+ /**
102
+ * @internal
103
+ */
81
104
  override bindEvents() {
82
- this.listenTo(this.core, Events.CORE_READY, this.bindPlaybackEvents);
83
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
84
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
85
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hideSelectTrackMenu);
105
+ this.listenTo(this.core, Events.CORE_READY, this.bindPlaybackEvents)
106
+ // TODO CORE_ACTIVE_CONTAINER_CHANGED
107
+ this.listenTo(
108
+ this.core.mediaControl,
109
+ Events.MEDIACONTROL_CONTAINERCHANGED,
110
+ this.reload,
111
+ )
112
+ this.listenTo(
113
+ this.core.mediaControl,
114
+ Events.MEDIACONTROL_RENDERED,
115
+ this.render,
116
+ )
117
+ this.listenTo(
118
+ this.core.mediaControl,
119
+ Events.MEDIACONTROL_HIDE,
120
+ this.hideSelectTrackMenu,
121
+ )
86
122
  }
87
123
 
88
- unBindEvents() {
124
+ private unBindEvents() {
89
125
  // @ts-ignore
90
- this.stopListening(this.core, Events.CORE_READY);
126
+ this.stopListening(this.core, Events.CORE_READY)
91
127
  // @ts-ignore
92
- this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED);
128
+ this.stopListening(
129
+ this.core.mediaControl,
130
+ Events.MEDIACONTROL_CONTAINERCHANGED,
131
+ )
93
132
  // @ts-ignore
94
- this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED);
133
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED)
95
134
  // @ts-ignore
96
- this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_HIDE);
135
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_HIDE)
97
136
  }
98
137
 
99
138
  private bindPlaybackEvents() {
100
139
  // this.currentTrack = {};
101
140
  // this.removeAuto = false;
102
- this.selectedTrackId = undefined;
103
- const currentPlayback = this.core.activePlayback;
141
+ this.selectedTrackId = undefined
142
+ const currentPlayback = this.core.activePlayback
104
143
 
105
- this.listenTo(currentPlayback, Events.PLAYBACK_STOP, this.onStop);
106
- this.setupAudioTrackListeners();
144
+ this.listenTo(currentPlayback, Events.PLAYBACK_STOP, this.onStop)
145
+ this.setupAudioTrackListeners()
107
146
  }
108
147
 
109
148
  private setupAudioTrackListeners() {
110
- const currentPlayback = this.core.activePlayback;
149
+ const currentPlayback = this.core.activePlayback
111
150
 
112
151
  // TODO no-crutch:currentPlayback._hls
113
152
  if (currentPlayback._hls) {
114
153
  // TODO AUDIO_TRACKS_UPDATED
115
154
  // currentPlayback._hls.on('hlsAudioTracksUpdated', (e, data) => {
116
- currentPlayback._hls.on(HlsEvents.AUDIO_TRACKS_UPDATED, (e: HlsEvents.AUDIO_TRACKS_UPDATED, data: AudioTracksUpdatedData) => {
117
- // let id = -1;
118
- // for (const audioTrack of data.audioTracks) {
119
- // if (audioTrack.default) {
120
- // id = audioTrack.id;
121
- // this.currentTrack = audioTrack;
122
- // }
123
- // }
124
- const defaultTrack = data.audioTracks.find((track) => track.default);
125
- if (defaultTrack) {
126
- this.currentTrack = {
127
- id: defaultTrack.id,
128
- label: defaultTrack.name
129
- };
130
- }
131
- this.fillTracks(data.audioTracks.map(p => ({
132
- id: p.id,
133
- label: p.name
134
- })), defaultTrack?.id);
135
- });
136
- currentPlayback._hls.on(HlsEvents.AUDIO_TRACK_SWITCHING, this.startTrackSwitch.bind(this));
137
- currentPlayback._hls.on(HlsEvents.AUDIO_TRACK_SWITCHED, this.updateCurrentTrack.bind(this));
138
- currentPlayback._hls.on(HlsEvents.AUDIO_TRACK_LOADED, this.updateCurrentTrack.bind(this));
155
+ currentPlayback._hls.on(
156
+ HlsEvents.AUDIO_TRACKS_UPDATED,
157
+ (e: HlsEvents.AUDIO_TRACKS_UPDATED, data: AudioTracksUpdatedData) => {
158
+ // let id = -1;
159
+ // for (const audioTrack of data.audioTracks) {
160
+ // if (audioTrack.default) {
161
+ // id = audioTrack.id;
162
+ // this.currentTrack = audioTrack;
163
+ // }
164
+ // }
165
+ const defaultTrack = data.audioTracks.find((track) => track.default)
166
+ if (defaultTrack) {
167
+ this.currentTrack = {
168
+ id: defaultTrack.id,
169
+ label: defaultTrack.name,
170
+ }
171
+ }
172
+ this.fillTracks(
173
+ data.audioTracks.map((p) => ({
174
+ id: p.id,
175
+ label: p.name,
176
+ })),
177
+ defaultTrack?.id,
178
+ )
179
+ },
180
+ )
181
+ currentPlayback._hls.on(
182
+ HlsEvents.AUDIO_TRACK_SWITCHING,
183
+ this.startTrackSwitch.bind(this),
184
+ )
185
+ currentPlayback._hls.on(
186
+ HlsEvents.AUDIO_TRACK_SWITCHED,
187
+ this.updateCurrentTrack.bind(this),
188
+ )
189
+ currentPlayback._hls.on(
190
+ HlsEvents.AUDIO_TRACK_LOADED,
191
+ this.updateCurrentTrack.bind(this),
192
+ )
139
193
  } else {
140
194
  this.listenToOnce(currentPlayback, Events.PLAYBACK_PLAY, () => {
141
- const mediaElement = currentPlayback.$el.get(0);
195
+ const mediaElement = currentPlayback.$el.get(0)
142
196
  // const { audioTracks } = currentPlayback.$el.get(0);
143
- const audioTracks: AudioTrackList = mediaElement.audioTracks;
197
+ const audioTracks: AudioTrackList = mediaElement.audioTracks
144
198
 
145
199
  if (audioTracks && audioTracks.length) {
146
- let index = 0;
147
- const trackItems: AudioTrackItem[] = [];
200
+ let index = 0
201
+ const trackItems: AudioTrackItem[] = []
148
202
  for (const audioTrack of audioTracks) {
149
203
  if (audioTrack.enabled) {
150
204
  const t = {
151
205
  id: index,
152
206
  label: audioTrack.label,
153
- };
154
- this.currentTrack = t;
155
- trackItems.push(t);
156
- index++;
207
+ }
208
+ this.currentTrack = t
209
+ trackItems.push(t)
210
+ index++
157
211
  }
158
212
  }
159
213
 
160
- audioTracks.addEventListener('change', () => this.updateCurrentTrackW3C());
214
+ audioTracks.addEventListener('change', () =>
215
+ this.updateCurrentTrackW3C(),
216
+ )
161
217
 
162
- this.fillTracks(trackItems, trackItems[0].id);
218
+ this.fillTracks(trackItems, trackItems[0].id)
163
219
  }
164
- });
220
+ })
165
221
  }
166
222
  }
167
223
 
168
- private onStop() { }
224
+ private onStop() {}
169
225
 
170
- reload() {
171
- this.unBindEvents();
172
- this.bindEvents();
173
- this.bindPlaybackEvents();
226
+ private reload() {
227
+ this.unBindEvents()
228
+ this.bindEvents()
229
+ this.bindPlaybackEvents()
174
230
  }
175
231
 
176
232
  private shouldRender() {
177
233
  if (!this.core.activeContainer) {
178
- return false;
234
+ return false
179
235
  }
180
236
 
181
- const currentPlayback = this.core.activePlayback;
237
+ const currentPlayback = this.core.activePlayback
182
238
 
183
239
  if (!currentPlayback) {
184
- return false;
240
+ return false
185
241
  }
186
242
 
187
- const { audioTracks } = (currentPlayback.activePlayback._hls || currentPlayback.$el.get(0));
243
+ const { audioTracks } =
244
+ currentPlayback.activePlayback._hls || currentPlayback.$el.get(0)
188
245
 
189
- this.tracks = audioTracks;
246
+ this.tracks = audioTracks
190
247
 
191
248
  // Only care if we have at least 2 to choose from
192
- return this.tracks && this.tracks.length > 1;
249
+ return this.tracks && this.tracks.length > 1
193
250
  }
194
251
 
252
+ /**
253
+ * @internal
254
+ */
195
255
  override render() {
196
- if (this.shouldRender()) {
197
- this.$el.html(this.template({ 'tracks': this.tracks, 'title': this.getTitle() }));
256
+ if (!this.shouldRender()) {
257
+ return this
258
+ }
198
259
 
199
- if (
200
- Object.prototype.hasOwnProperty.call(this.core.mediaControl, '$audioTracksSelector') &&
201
- this.core.mediaControl.$audioTracksSelector.length > 0
202
- ) {
203
- this.core.mediaControl.$audioTracksSelector.append(this.el);
204
- }
260
+ const mediaControl = this.core.getPlugin('media_control')
261
+ assert(mediaControl, 'media_control plugin is required')
262
+ this.$el.html(
263
+ AudioSelector.template({ tracks: this.tracks, title: this.getTitle() }),
264
+ )
205
265
 
206
- this.highlightCurrentTrack();
266
+ const ats = mediaControl.getElement('audioTracksSelector')
267
+ if (!(ats && ats.length > 0)) {
268
+ return this
207
269
  }
270
+ ats.append(this.el)
208
271
 
209
- if (
210
- Object.prototype.hasOwnProperty.call(this.core.mediaControl, '$audioTracksSelector') &&
211
- this.core.mediaControl.$audioTracksSelector.find('span.audio-arrow').length > 0
212
- ) {
213
- this.core.mediaControl.$audioTracksSelector.find('span.audio-arrow').append(audioArrow);
272
+ this.highlightCurrentTrack()
273
+
274
+ const aa = ats.find('audioArrow')
275
+ if (aa.length > 0) {
276
+ aa.append(audioArrow)
214
277
  }
215
278
 
216
- return this;
279
+ return this
217
280
  }
218
281
 
219
282
  private fillTracks(tracks: AudioTrackItem[], selected = AUTO) {
220
283
  if (this.selectedTrackId === undefined) {
221
- this.selectedTrackId = selected;
284
+ this.selectedTrackId = selected
222
285
  }
223
286
  // this.tracks = levels.audioTracks;
224
287
  // for (let i = 0; i < this.tracks.length; i++) {
@@ -226,98 +289,108 @@ export class AudioSelector extends UICorePlugin {
226
289
  // this.tracks[i].label = this.tracks[i].name;
227
290
  // }
228
291
  // }
229
- this.tracks = tracks;
292
+ this.tracks = tracks
230
293
 
231
294
  // Player.player.trigger('tracks', this.tracks);
232
295
  // this.core.trigger('tracks', this.tracks);
233
- this.render();
296
+ this.render()
234
297
  }
235
298
 
236
299
  private findTrackBy(id: number) {
237
- return this.tracks.find((track) => track.id === id);
300
+ return this.tracks.find((track) => track.id === id)
238
301
  }
239
302
 
240
303
  private onTrackSelect(event: MouseEvent) {
241
304
  // this.selectedTrackId = parseInt(event.target.dataset.levelSelectorSelect, 10)
242
- const id = (event.target as HTMLElement)?.dataset?.trackSelectorSelect;
305
+ const id = (event.target as HTMLElement)?.dataset?.trackSelectorSelect
243
306
  if (id) {
244
- this.setIndexTrack(Number(id));
307
+ this.setIndexTrack(Number(id))
245
308
  }
246
- this.toggleContextMenu();
247
- event.stopPropagation();
248
- return false;
309
+ this.toggleContextMenu()
310
+ event.stopPropagation()
311
+ return false
249
312
  }
250
313
 
251
314
  private setIndexTrack(index: number) {
252
- this.selectedTrackId = index;
315
+ this.selectedTrackId = index
253
316
  if (this.core.activePlayback._hls) {
254
- if (this.core.activePlayback._hls.audioTrack.id === this.selectedTrackId) {
255
- return;
317
+ if (
318
+ this.core.activePlayback._hls.audioTrack.id === this.selectedTrackId
319
+ ) {
320
+ return
256
321
  }
257
- this.core.activePlayback._hls.audioTrack = this.selectedTrackId;
322
+ this.core.activePlayback._hls.audioTrack = this.selectedTrackId
258
323
  } else {
259
- const { audioTracks } = this.core.activePlayback.$el.get(0);
324
+ const { audioTracks } = this.core.activePlayback.$el.get(0)
260
325
 
261
326
  for (const track of audioTracks) {
262
- track.enabled = track.id === this.selectedTrackId;
327
+ track.enabled = track.id === this.selectedTrackId
263
328
  }
264
329
  }
265
- this.updateText(this.selectedTrackId);
330
+ this.updateText(this.selectedTrackId)
266
331
  }
267
332
 
268
- onShowLevelSelectMenu() {
269
- this.toggleContextMenu();
333
+ private onShowLevelSelectMenu() {
334
+ this.toggleContextMenu()
270
335
  }
271
336
 
272
- hideSelectTrackMenu() {
273
- (this.$('.audio_selector ul') as ZeptoResult).hide();
337
+ private hideSelectTrackMenu() {
338
+ ;(this.$('.audio_selector ul') as ZeptoResult).hide()
274
339
  }
275
340
 
276
- toggleContextMenu() {
277
- (this.$('.audio_selector ul') as ZeptoResult).toggle();
341
+ private toggleContextMenu() {
342
+ ;(this.$('.audio_selector ul') as ZeptoResult).toggle()
278
343
  }
279
344
 
280
345
  private buttonElement(): ZeptoResult {
281
- return this.$('.audio_selector button');
346
+ return this.$('.audio_selector button')
282
347
  }
283
348
 
284
349
  private buttonElementText(): ZeptoResult {
285
- return this.$('.audio_selector button .audio-text');
350
+ return this.$('.audio_selector button .audio-text')
286
351
  }
287
352
 
288
353
  private trackElement(id?: number): ZeptoResult {
289
- return (this.$('.audio_selector ul a' + (id !== undefined ? '[data-track-selector-select="' + id + '"]' : '')) as ZeptoResult).parent();
354
+ return (
355
+ this.$(
356
+ '.audio_selector ul a' +
357
+ (id !== undefined ? '[data-track-selector-select="' + id + '"]' : ''),
358
+ ) as ZeptoResult
359
+ ).parent()
290
360
  }
291
361
 
292
362
  private getTitle(): string {
293
363
  if (!this.tracks) {
294
- return '';
364
+ return ''
295
365
  }
296
366
 
297
- const selectedTrackId = this.selectedTrackId || 0;
367
+ const selectedTrackId = this.selectedTrackId || 0
298
368
 
299
- const selectedTrack = this.tracks[selectedTrackId];
369
+ const selectedTrack = this.tracks[selectedTrackId]
300
370
 
301
- return selectedTrack?.label || '';
371
+ return selectedTrack?.label || ''
302
372
  }
303
373
 
304
374
  startTrackSwitch() {
305
- this.buttonElement().addClass('changing');
375
+ this.buttonElement().addClass('changing')
306
376
  }
307
377
 
308
378
  private updateText(trackId: number | undefined) {
309
379
  if (trackId === undefined) {
310
- return;
380
+ return
311
381
  }
312
382
 
313
- const track = this.findTrackBy(trackId);
383
+ const track = this.findTrackBy(trackId)
314
384
 
315
385
  if (track) {
316
- this.buttonElementText().text(track.label);
386
+ this.buttonElementText().text(track.label)
317
387
  }
318
388
  }
319
389
 
320
- updateCurrentTrack(e: HlsEvents.AUDIO_TRACK_SWITCHED, info: AudioTrackSwitchedData | AudioTrackLoadedData) {
390
+ updateCurrentTrack(
391
+ e: HlsEvents.AUDIO_TRACK_SWITCHED,
392
+ info: AudioTrackSwitchedData | AudioTrackLoadedData,
393
+ ) {
321
394
  // if (!info) {
322
395
  // const { audioTracks } = this.core.activePlayback.$el.get(0);
323
396
 
@@ -337,37 +410,37 @@ export class AudioSelector extends UICorePlugin {
337
410
  // this.selectedTrackId = track?.id;
338
411
  // this.highlightCurrentTrack();
339
412
  // this.buttonElement().removeClass('changing');
340
- this.setCurrentTrack(info.id);
413
+ this.setCurrentTrack(info.id)
341
414
  }
342
415
 
343
416
  private updateCurrentTrackW3C() {
344
- const { audioTracks } = this.core.activePlayback.$el.get(0);
345
- const index = audioTracks.findIndex((track: AudioTrackW3C) => track.enabled);
417
+ const { audioTracks } = this.core.activePlayback.$el.get(0)
418
+ const index = audioTracks.findIndex((track: AudioTrackW3C) => track.enabled)
346
419
  if (index >= 0) {
347
420
  this.setCurrentTrack(index)
348
421
  }
349
422
  }
350
423
 
351
424
  private setCurrentTrack(index: number) {
352
- const track = this.findTrackBy(index);
425
+ const track = this.findTrackBy(index)
353
426
 
354
- this.currentTrack = track ?? null;
355
- this.selectedTrackId = index;
356
- this.highlightCurrentTrack();
357
- this.buttonElement().removeClass('changing');
427
+ this.currentTrack = track ?? null
428
+ this.selectedTrackId = index
429
+ this.highlightCurrentTrack()
430
+ this.buttonElement().removeClass('changing')
358
431
  }
359
432
 
360
433
  highlightCurrentTrack() {
361
- this.trackElement().removeClass('current');
362
- this.trackElement().find('a').removeClass('gcore-skin-active');
434
+ this.trackElement().removeClass('current')
435
+ this.trackElement().find('a').removeClass('gcore-skin-active')
363
436
 
364
437
  if (this.currentTrack) {
365
- const currentTrackElement = this.trackElement(this.currentTrack.id);
438
+ const currentTrackElement = this.trackElement(this.currentTrack.id)
366
439
 
367
- currentTrackElement.addClass('current');
368
- currentTrackElement.find('a').addClass('gcore-skin-active');
440
+ currentTrackElement.addClass('current')
441
+ currentTrackElement.find('a').addClass('gcore-skin-active')
369
442
  }
370
443
 
371
- this.updateText(this.selectedTrackId);
444
+ this.updateText(this.selectedTrackId)
372
445
  }
373
446
  }