@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,395 +0,0 @@
1
- // Clappr player is Copyright 2014 Globo.com Player authors. All rights reserved.
2
-
3
- import { CorePlugin, Events, Playback, $ } from '@clappr/core';
4
- import gaTrackingSnippet from './ga-tracking';
5
-
6
- export class GaEvents extends CorePlugin {
7
- get name() {
8
- return 'ga_events';
9
- }
10
-
11
- constructor(core) {
12
- super(core);
13
- this._volumeTimer = null;
14
- this._doSendPlay = true;
15
- this.readPluginConfig(this.options.gaEventsPlugin);
16
- gaTrackingSnippet(this._gaCfg.name, this._gaCfg.debug, this._gaCfg.trace);
17
- this._ga('create', this._trackingId, this._createFieldsObject);
18
- }
19
-
20
- bindEvents() {
21
- const eventsToAlwaysBind = [
22
- { event: Events.CONTAINER_TIMEUPDATE, handler: this.onTimeUpdate },
23
- { event: Events.CONTAINER_PLAY, handler: this.onPlay },
24
- { event: Events.CONTAINER_SEEK, handler: (event) => this.onSeek(event) },
25
- { event: Events.CONTAINER_PAUSE, handler: this.onPause },
26
- { event: Events.CONTAINER_STOP, handler: this.onStop },
27
- { event: Events.CONTAINER_ENDED, handler: this.onEnded },
28
- ];
29
-
30
- const conditionalEvents = [
31
- { condition: 'ready', event: Events.CONTAINER_READY, handler: this.onReady },
32
- { condition: 'buffering', event: Events.CONTAINER_STATE_BUFFERING, handler: this.onBuffering },
33
- { condition: 'bufferfull', event: Events.CONTAINER_STATE_BUFFERFULL, handler: this.onBufferFull },
34
- { condition: 'loadedmetadata', event: Events.CONTAINER_LOADEDMETADATA, handler: this.onLoadedMetadata },
35
- { condition: 'volume', event: Events.CONTAINER_VOLUME, handler: (event) => this.onVolumeChanged(event) },
36
- { condition: 'fullscreen', event: Events.CONTAINER_FULLSCREEN, handler: this.onFullscreen },
37
- { condition: 'playbackstate', event: Events.CONTAINER_PLAYBACKSTATE, handler: this.onPlaybackChanged },
38
- { condition: 'highdefinitionupdate', event: Events.CONTAINER_HIGHDEFINITIONUPDATE, handler: this.onHD },
39
- { condition: 'playbackdvrstatechanged', event: Events.CONTAINER_PLAYBACKDVRSTATECHANGED, handler: this.onDVR },
40
- { condition: 'error', event: Events.CONTAINER_ERROR, handler: this.onError },
41
- ];
42
-
43
- this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.containerChanged);
44
- this._container = this.core.activeContainer;
45
- if (this._container) {
46
- // Set resolved source as eventLabel if not defined in plugin configuration
47
- if (!this._label) {
48
- this._label = this._container.options.src;
49
- }
50
-
51
- eventsToAlwaysBind.forEach(({ event, handler }) => {
52
- this.listenTo(this._container, event, handler);
53
- });
54
-
55
- conditionalEvents.forEach(({ condition, event, handler }) => {
56
- if (this._hasEvent(condition)) {
57
- this.listenTo(this._container, event, handler);
58
- }
59
- });
60
- }
61
- }
62
-
63
- getExternalInterface() {
64
- // Expose player method only if tracker name is available
65
- if (this._trackerName) {
66
- return {
67
- gaEventsTracker: this.gaTracker
68
- };
69
- }
70
-
71
- return {};
72
- }
73
-
74
- containerChanged() {
75
- this.stopListening();
76
- this.bindEvents();
77
- }
78
-
79
- get _ga() {
80
- return window[window.GoogleAnalyticsObject];
81
- }
82
-
83
- gaTracker() {
84
- return this._ga.getByName && this._ga.getByName(this._trackerName);
85
- }
86
-
87
- gaEvent(category, action, label, value) {
88
- this._ga(this._send, 'event', category, action, label, value);
89
- }
90
-
91
- gaException(desc, isFatal=false) {
92
- this._ga(this._send, 'exception', {
93
- 'exDescription': desc,
94
- 'exFatal': isFatal
95
- });
96
- }
97
-
98
- readPluginConfig(cfg) {
99
- if (!cfg) {
100
- throw new Error(this.name + ' plugin config is missing');
101
- }
102
- if (!cfg.trackingId) {
103
- throw new Error(this.name + ' plugin "trackingId" required config parameter is missing');
104
- }
105
-
106
- this._gaCfg = cfg.gaCfg || { name: 'ga', debug: false, trace: false };
107
- this._trackingId = cfg.trackingId;
108
- this._createFieldsObject = cfg.createFieldsObject;
109
- this._trackerName = this._createFieldsObject && this._createFieldsObject.name;
110
- this._send = this._trackerName ? this._trackerName + '.send' : 'send';
111
- this._category = cfg.eventCategory || 'Video';
112
- this._label = cfg.eventLabel; // Otherwise filled in bindEvents()
113
- this._setValue = cfg.eventValueAuto === true;
114
- this._events = $.isArray(cfg.eventToTrack) && cfg.eventToTrack || this._defaultEvents;
115
- this._eventMap = $.isPlainObject(cfg.eventMapping) && cfg.eventMapping || this._defaultEventMap;
116
- this._gaPlayOnce = cfg.sendPlayOnce === true;
117
- this._gaEx = cfg.sendExceptions === true;
118
- this._gaExDesc = cfg.sendExceptionsMsg === true;
119
-
120
- // Add 'error' to tracked events if GA exceptions are enabled
121
- if (this._gaEx && !this._hasEvent('error')) {
122
- this._events.push('error');
123
- }
124
-
125
- this._gaPercent = $.isArray(cfg.progressPercent) && cfg.progressPercent || [];
126
- this._gaPercentCat = cfg.progressPercentCategory || this._category;
127
- this._gaPercentAct = $.isFunction(cfg.progressPercentAction) && cfg.progressPercentAction || function(i) {
128
- return 'progress_' + i + 'p';
129
- };
130
- this._processGaPercent = this._gaPercent.length > 0;
131
- this._gaSeconds = $.isArray(cfg.progressSeconds) && cfg.progressSeconds || [];
132
- this._gaSecondsCat = cfg.progressSecondsCategory || this._category;
133
- this._gaSecondsAct = $.isFunction(cfg.progressSecondsAction) && cfg.progressSecondsAction || function(i) {
134
- return 'progress_' + i + 's';
135
- };
136
- this._gaSecondsTimerStarted = false;
137
- this._processGaSeconds = this._gaSeconds.length > 0;
138
- }
139
-
140
- get _defaultEventMap() {
141
- return {
142
- 'ready': 'ready',
143
- 'buffering': 'buffering',
144
- 'bufferfull': 'bufferfull',
145
- 'loadedmetadata': 'loadedmetadata',
146
- 'play': 'play',
147
- 'seek': 'seek',
148
- 'pause': 'pause',
149
- 'stop': 'stop',
150
- 'ended': 'ended',
151
- 'volume': 'volume',
152
- 'fullscreen': 'fullscreen',
153
- 'error': 'error',
154
- 'playbackstate': 'playbackstate',
155
- 'highdefinitionupdate': 'highdefinitionupdate',
156
- 'playbackdvrstatechanged': 'playbackdvrstatechanged'
157
- };
158
- }
159
-
160
- get _defaultEvents() {
161
- return [
162
- 'play',
163
- 'seek',
164
- 'pause',
165
- 'stop',
166
- 'ended',
167
- 'volume'
168
- ];
169
- }
170
-
171
- _hasEvent(e) {
172
- return this._events.indexOf(e) !== -1;
173
- }
174
-
175
- _action(e) {
176
- return this._eventMap[e];
177
- }
178
-
179
- _value(v) {
180
- if (this._setValue) {
181
- return v;
182
- }
183
- }
184
-
185
- get position() {
186
- return this.isLive ? 0 : this._position;
187
- }
188
-
189
- get duration() {
190
- return this.isLive ? 0 : this._container && this._container.getDuration();
191
- }
192
-
193
- get isLive() {
194
- return this._container.getPlaybackType() === Playback.LIVE;
195
- }
196
-
197
- get isPlaying() {
198
- return this._container.isPlaying();
199
- }
200
-
201
- trunc(v) {
202
- return parseInt(v, 10);
203
- }
204
-
205
- onTimeUpdate(o){
206
- this._position = o.current && this.trunc(o.current) || 0;
207
-
208
- if (this.isLive || !this.isPlaying) {
209
- return;
210
- }
211
-
212
- // Check for "seconds" progress event
213
- this._processGaSeconds && this.processGaSeconds(this._position);
214
-
215
- // Check for "percent" progress event
216
- this._processGaPercent && this.processGaPercent(this._position);
217
- }
218
-
219
- processGaSeconds(pos) {
220
- if (this._gaSecondsPrev !== pos && this._gaSeconds.indexOf(pos) !== -1) {
221
- this._gaSecondsPrev = pos;
222
- this.gaEvent(this._gaSecondsCat, this._gaSecondsAct(pos), this._label);
223
- }
224
- }
225
-
226
- processGaPercent(pos) {
227
- // FIXME: check if (duration > 0) ?
228
- const percent = this.trunc((pos * 100) / this.duration);
229
-
230
- $.each(this._gaPercent, (i, v) => {
231
- // Percentage value may never match expected value. To fix that, we compare to previous and current.
232
- // This introduce a small approximation, but this function is called multiples time per seconds.
233
- if (this._gaPercentPrev < v && percent >= v) {
234
- this.gaEvent(this._gaPercentCat, this._gaPercentAct(v), this._label);
235
-
236
- return false;
237
- }
238
- });
239
- this._gaPercentPrev = percent;
240
- }
241
-
242
- onReady() {
243
- this.gaEvent(this._category, this._action('ready'), this._label);
244
- }
245
-
246
- onBuffering() {
247
- this.gaEvent(this._category, this._action('buffering'), this._label);
248
- }
249
-
250
- onBufferFull() {
251
- this.gaEvent(this._category, this._action('bufferfull'), this._label);
252
- }
253
-
254
- onLoadedMetadata() {
255
- this.gaEvent(this._category, this._action('loadedmetadata'), this._label);
256
- }
257
-
258
- onPlay() {
259
- if (this._gaPlayOnce) {
260
- if (!this._doSendPlay) {
261
- return;
262
- }
263
- this._doSendPlay = false;
264
- }
265
- this.gaEvent(this._category, this._action('play'), this._label, this._value(this.position));
266
-
267
- // Start "seconds" progress event timer (if LIVE playback type)
268
- this.isLive && this._processGaSeconds && this._startGaSecondsTimer();
269
- }
270
-
271
- _startGaSecondsTimer() {
272
- if (this._gaSecondsTimerStarted) {
273
- return;
274
- }
275
-
276
- this._gaSecondsTimerStarted = true;
277
- this._gaSecondsElapsed = 0;
278
- this.processGaSeconds(this._gaSecondsElapsed);
279
- this._gaSecondsTimerId = setInterval(() => {
280
- this._gaSecondsElapsed++;
281
- this.processGaSeconds(this._gaSecondsElapsed);
282
- }, 1000);
283
- }
284
-
285
- _stopGaSecondsTimer() {
286
- clearInterval(this._gaSecondsTimerId);
287
- this._gaSecondsPrev = -1;
288
- this._gaSecondsTimerStarted = false;
289
- }
290
-
291
- onSeek(pos) {
292
- if (this._hasEvent('seek')) {
293
- this.gaEvent(this._category, this._action('seek'), this._label, this._value(this.trunc(pos)));
294
- }
295
- if (this._gaPlayOnce) {
296
- this._doSendPlay = true;
297
- }
298
-
299
- // Adjust previous "percent" event value
300
- if (!this.isLive && this._processGaPercent) {
301
- this._gaPercentPrev = this.trunc((this.trunc(pos) * 100) / this.duration) - 1;
302
- }
303
-
304
- // Stop "seconds" progress event timer (if LIVE playback type)
305
- this.isLive && this._processGaSeconds && this._stopGaSecondsTimer();
306
- }
307
-
308
- onPause() {
309
- if (this._hasEvent('pause')) {
310
- this.gaEvent(this._category, this._action('pause'), this._label, this._value(this.position));
311
- }
312
- if (this._gaPlayOnce) {
313
- this._doSendPlay = true;
314
- }
315
-
316
- // Stop "seconds" progress event timer (if LIVE playback type)
317
- this.isLive && this._processGaSeconds && this._stopGaSecondsTimer();
318
- }
319
-
320
- onStop() {
321
- if (this._hasEvent('stop')) {
322
- this.gaEvent(this._category, this._action('stop'), this._label, this._value(this.position));
323
- }
324
- if (this._gaPlayOnce) {
325
- this._doSendPlay = true;
326
- }
327
-
328
- // Stop "seconds" progress event timer (if LIVE playback type)
329
- this.isLive && this._processGaSeconds && this._stopGaSecondsTimer();
330
- }
331
-
332
- onEnded() {
333
- if (this._hasEvent('ended')) {
334
- this.gaEvent(this._category, this._action('ended'), this._label, this._value(this.position));
335
- }
336
- if (this._gaPlayOnce) {
337
- this._doSendPlay = true;
338
- }
339
-
340
- // Check for video ended progress events
341
- this._processGaSeconds && this.processGaSeconds(this.duration);
342
- this._processGaPercent && this.processGaPercent(this.duration);
343
- }
344
-
345
- onVolumeChanged(e) {
346
- // Rate limit to avoid HTTP hammering
347
- clearTimeout(this._volumeTimer);
348
- this._volumeTimer = setTimeout(() => {
349
- this.gaEvent(this._category, this._action('volume'), this._label, this._value(this.trunc(e)));
350
- }, 400);
351
- }
352
-
353
- onFullscreen() {
354
- this.gaEvent(this._category, this._action('fullscreen'), this._label);
355
- }
356
-
357
- onPlaybackChanged() {
358
- this.gaEvent(this._category, this._action('playbackstate'), this._label);
359
- }
360
-
361
- onHD() {
362
- this.gaEvent(this._category, this._action('highdefinitionupdate'), this._label);
363
- }
364
-
365
- onDVR() {
366
- this.gaEvent(this._category, this._action('playbackdvrstatechanged'), this._label);
367
- }
368
-
369
- resolveErrMsg(o) {
370
- if (!this._gaExDesc) {
371
- return 'error';
372
- }
373
-
374
- let msg;
375
-
376
- if (typeof o.error === 'string') {
377
- msg = o.error;
378
- } else if ($.isPlainObject(o.error) && o.error.message) {
379
- msg = o.error.message;
380
- } else {
381
- // FIXME: find out a more elegant way
382
- msg = 'Error: ' + o.error;
383
- }
384
-
385
- return msg;
386
- }
387
-
388
- onError(errorObj) {
389
- if (this._gaEx) {
390
- this.gaException(this.resolveErrMsg(errorObj), true);
391
- } else {
392
- this.gaEvent(this._category, this._action('error'), this._label);
393
- }
394
- }
395
- }
@@ -1,46 +0,0 @@
1
- // Based on Google Analytics JavaScript Tracking Snippet
2
- // See original @ https://developers.google.com/analytics/devguides/collection/analyticsjs/tracking-snippet-reference
3
-
4
- /**
5
- * Creates a temporary global ga object and lazy loads analytics.js.
6
- * @function
7
- * @param {string} Global name of analytics object. Defaults to 'ga'.
8
- * @param {boolean} Set to true to load the debug version of the analytics.js library.
9
- * @param {boolean} Set to true to enable trace debugging.
10
- */
11
- export default function(name='ga', debug, trace) {
12
- // Preserve renaming support and minification
13
- const win = window, doc = document, el = 'script';
14
-
15
- // Ensure analytics.js is not already loaded
16
- if (win[name]) {
17
- return;
18
- }
19
-
20
- if (trace) {
21
- win['ga_debug'] = { trace: true };
22
- }
23
-
24
- // Acts as a pointer to support renaming
25
- win.GoogleAnalyticsObject = name;
26
-
27
- // Creates an initial ga() function
28
- // The queued commands will be executed once analytics.js loads
29
- win[name] = function() {
30
- win[name].q.push(arguments);
31
- };
32
- win[name].q = [];
33
-
34
- // Sets the time (as an integer) this tag was executed
35
- // Used for timing hits
36
- win[name].l = 1 * new Date();
37
-
38
- // Insert script element above the first script element in document
39
- // (async + https)
40
- const first = doc.getElementsByTagName(el)[0];
41
- const script = doc.createElement(el);
42
-
43
- script.src = 'https://www.google-analytics.com/analytics' + (debug ? '_debug.js' : '.js');
44
- script.async = true;
45
- first.parentNode.insertBefore(script, first);
46
- }