@gcorevideo/player 2.18.3 → 2.19.0

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 (349) hide show
  1. package/assets/audio-selector/style.scss +156 -0
  2. package/assets/audio-selector/track-selector.ejs +12 -0
  3. package/assets/big-mute-button/big-mute-button.ejs +3 -0
  4. package/assets/big-mute-button/big-mute-button.scss +57 -0
  5. package/assets/bottom-gear/bottomgear.ejs +12 -0
  6. package/assets/bottom-gear/gear-sub-menu.scss +95 -0
  7. package/assets/bottom-gear/gear.scss +79 -0
  8. package/assets/clappr-nerd-stats/button.ejs +4 -0
  9. package/assets/clappr-nerd-stats/clappr-nerd-stats.ejs +212 -0
  10. package/assets/clappr-nerd-stats/clappr-nerd-stats.scss +488 -0
  11. package/assets/clappr-nerd-stats/options-list.ejs +9 -0
  12. package/assets/clappr-nerd-stats/settings.ejs +12 -0
  13. package/assets/clappr-nerd-stats/speedtest/speedtest.worker.js +775 -0
  14. package/assets/clips/clips.scss +3 -0
  15. package/assets/context-menu/context_menu.ejs +8 -0
  16. package/assets/context-menu/context_menu.scss +31 -0
  17. package/assets/dvr-controls/dvr_controls.scss +136 -0
  18. package/assets/dvr-controls/index.ejs +2 -0
  19. package/assets/error-screen/error_screen.ejs +13 -0
  20. package/assets/error-screen/error_screen.scss +40 -0
  21. package/assets/icons/new/arrow-left.svg +5 -0
  22. package/assets/icons/new/arrow-right.svg +5 -0
  23. package/assets/icons/new/check.svg +5 -0
  24. package/assets/icons/new/close.svg +12 -0
  25. package/assets/icons/new/full.svg +8 -0
  26. package/assets/icons/new/fullscreen-off.svg +14 -0
  27. package/assets/icons/new/fullscreen-on.svg +14 -0
  28. package/assets/icons/new/gear-hd.svg +16 -0
  29. package/assets/icons/new/gear.svg +12 -0
  30. package/assets/icons/new/hd.svg +8 -0
  31. package/assets/icons/new/pause.svg +5 -0
  32. package/assets/icons/new/pip.svg +5 -0
  33. package/assets/icons/new/play.svg +10 -0
  34. package/assets/icons/new/replayleft.svg +5 -0
  35. package/assets/icons/new/replayright.svg +5 -0
  36. package/assets/icons/new/speed.svg +5 -0
  37. package/assets/icons/new/stats.svg +3 -0
  38. package/assets/icons/new/stop.svg +3 -0
  39. package/assets/icons/new/subtitles-off.svg +5 -0
  40. package/assets/icons/new/subtitles-on.svg +6 -0
  41. package/assets/icons/new/volume-max.svg +5 -0
  42. package/assets/icons/new/volume-min.svg +5 -0
  43. package/assets/icons/new/volume-off.svg +5 -0
  44. package/assets/icons/old/cardboard.svg +4 -0
  45. package/assets/icons/old/close-share.svg +13 -0
  46. package/assets/icons/old/close.svg +13 -0
  47. package/assets/icons/old/fb.svg +13 -0
  48. package/assets/icons/old/fullscreen.svg +12 -0
  49. package/assets/icons/old/language.svg +1 -0
  50. package/assets/icons/old/pause.svg +12 -0
  51. package/assets/icons/old/play.svg +12 -0
  52. package/assets/icons/old/quality-arrow.svg +13 -0
  53. package/assets/icons/old/reload.svg +4 -0
  54. package/assets/icons/old/share.svg +13 -0
  55. package/assets/icons/old/sound-off.svg +15 -0
  56. package/assets/icons/old/sound-on.svg +15 -0
  57. package/assets/icons/old/streams.svg +3 -0
  58. package/assets/icons/old/twitter.svg +13 -0
  59. package/assets/icons/old/wn.svg +15 -0
  60. package/assets/icons/standard/01-play.svg +3 -0
  61. package/assets/icons/standard/02-pause.svg +3 -0
  62. package/assets/icons/standard/03-stop.svg +3 -0
  63. package/assets/icons/standard/04-volume.svg +3 -0
  64. package/assets/icons/standard/05-mute.svg +3 -0
  65. package/assets/icons/standard/06-expand.svg +3 -0
  66. package/assets/icons/standard/07-shrink.svg +3 -0
  67. package/assets/icons/standard/08-hd.svg +3 -0
  68. package/assets/icons/standard/09-cc.svg +8 -0
  69. package/assets/icons/standard/10-reload.svg +4 -0
  70. package/assets/level-selector/button.ejs +8 -0
  71. package/assets/level-selector/list.ejs +22 -0
  72. package/assets/level-selector/style.scss +4 -0
  73. package/assets/logo/styles/logo.scss +10 -0
  74. package/assets/logo/templates/logo.ejs +3 -0
  75. package/assets/media-control/closed-hand.cur +0 -0
  76. package/assets/media-control/container.scss +57 -0
  77. package/assets/media-control/media-control.ejs +133 -0
  78. package/assets/media-control/media-control.scss +390 -0
  79. package/assets/media-control/plugins.scss +94 -0
  80. package/assets/media-control/width270.scss +50 -0
  81. package/assets/media-control/width370.scss +263 -0
  82. package/assets/multi-camera/multicamera.ejs +29 -0
  83. package/assets/multi-camera/style.scss +176 -0
  84. package/assets/picture-in-picture/button.ejs +3 -0
  85. package/assets/picture-in-picture/button.scss +11 -0
  86. package/assets/playback-rate/button.ejs +6 -0
  87. package/assets/playback-rate/list.ejs +14 -0
  88. package/assets/playback-rate/playback-rate-selector.ejs +9 -0
  89. package/assets/poster/poster.ejs +1 -0
  90. package/assets/poster/poster.scss +32 -0
  91. package/assets/seek-time/seek-time.html +2 -0
  92. package/assets/seek-time/seek-time.scss +38 -0
  93. package/assets/share/share.ejs +37 -0
  94. package/assets/share/style.scss +104 -0
  95. package/assets/skip-time/skip-time.ejs +8 -0
  96. package/assets/skip-time/style.scss +24 -0
  97. package/assets/spinner-three-bounce/spinner.ejs +3 -0
  98. package/assets/spinner-three-bounce/spinner.scss +44 -0
  99. package/assets/style/main.scss +50 -0
  100. package/assets/style/theme.scss +42 -0
  101. package/assets/style/variables.scss +7 -0
  102. package/assets/subtitles/combobox copy.ejs +16 -0
  103. package/assets/subtitles/combobox.ejs +16 -0
  104. package/assets/subtitles/string.ejs +3 -0
  105. package/assets/subtitles/style.scss +99 -0
  106. package/assets/thumbnails/scrub-thumbnails.ejs +10 -0
  107. package/assets/thumbnails/style.scss +75 -0
  108. package/assets/vast-ads/style.scss +112 -0
  109. package/assets/video360/button.ejs +1 -0
  110. package/assets/video360/style.scss +8 -0
  111. package/build/vite-raw-plugin.js +18 -0
  112. package/dist/index.js +1 -1
  113. package/dist/plugins/index.css +2164 -0
  114. package/dist/plugins/index.js/index.plugins.js +40837 -0
  115. package/dist/plugins/index.plugins.js +40837 -0
  116. package/lib/index.core.d.ts +15 -0
  117. package/lib/index.core.d.ts.map +1 -0
  118. package/lib/index.core.js +14 -0
  119. package/lib/index.d.ts +2 -14
  120. package/lib/index.d.ts.map +1 -1
  121. package/lib/index.js +2 -14
  122. package/lib/index.plugins.d.ts +38 -0
  123. package/lib/index.plugins.d.ts.map +1 -0
  124. package/lib/index.plugins.js +40 -0
  125. package/lib/plugins/audio-selector/AudioSelector.d.ts +3 -3
  126. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
  127. package/lib/plugins/audio-selector/AudioSelector.js +6 -12
  128. package/lib/plugins/big-mute-button/BigMuteButton.d.ts +2 -2
  129. package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -1
  130. package/lib/plugins/big-mute-button/BigMuteButton.js +7 -12
  131. package/lib/plugins/bottom-gear/BottomGear.d.ts +4 -3
  132. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  133. package/lib/plugins/bottom-gear/BottomGear.js +11 -16
  134. package/lib/plugins/build.d.ts +2 -0
  135. package/lib/plugins/build.d.ts.map +1 -0
  136. package/lib/plugins/build.js +1 -0
  137. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts +44 -0
  138. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +1 -0
  139. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +294 -0
  140. package/lib/plugins/clappr-nerd-stats/formatter.d.ts +8 -0
  141. package/lib/plugins/clappr-nerd-stats/formatter.d.ts.map +1 -0
  142. package/lib/plugins/clappr-nerd-stats/formatter.js +91 -0
  143. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.d.ts +54 -0
  144. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.d.ts.map +1 -0
  145. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.js +335 -0
  146. package/lib/plugins/clappr-nerd-stats/speedtest/index.d.ts +9 -0
  147. package/lib/plugins/clappr-nerd-stats/speedtest/index.d.ts.map +1 -0
  148. package/lib/plugins/clappr-nerd-stats/speedtest/index.js +154 -0
  149. package/lib/plugins/clappr-nerd-stats/speedtest/types.d.ts +6 -0
  150. package/lib/plugins/clappr-nerd-stats/speedtest/types.d.ts.map +1 -0
  151. package/lib/plugins/clappr-nerd-stats/speedtest/types.js +1 -0
  152. package/lib/plugins/clappr-nerd-stats/types.d.ts +4 -0
  153. package/lib/plugins/clappr-nerd-stats/types.d.ts.map +1 -0
  154. package/lib/plugins/clappr-nerd-stats/types.js +1 -0
  155. package/lib/plugins/clappr-stats/ClapprStats.d.ts +56 -0
  156. package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -0
  157. package/lib/plugins/clappr-stats/ClapprStats.js +332 -0
  158. package/lib/plugins/clappr-stats/types.d.ts +50 -0
  159. package/lib/plugins/clappr-stats/types.d.ts.map +1 -0
  160. package/lib/plugins/clappr-stats/types.js +5 -0
  161. package/lib/plugins/clappr-stats/utils.d.ts +3 -0
  162. package/lib/plugins/clappr-stats/utils.d.ts.map +1 -0
  163. package/lib/plugins/clappr-stats/utils.js +40 -0
  164. package/lib/plugins/click-to-pause/ClickToPause.d.ts +2 -2
  165. package/lib/plugins/click-to-pause/ClickToPause.d.ts.map +1 -1
  166. package/lib/plugins/click-to-pause/ClickToPause.js +4 -6
  167. package/lib/plugins/clips/Clips.d.ts +23 -0
  168. package/lib/plugins/clips/Clips.d.ts.map +1 -0
  169. package/lib/plugins/clips/Clips.js +109 -0
  170. package/lib/plugins/context-menu/ContextMenu.d.ts +36 -0
  171. package/lib/plugins/context-menu/ContextMenu.d.ts.map +1 -0
  172. package/lib/plugins/context-menu/ContextMenu.js +102 -0
  173. package/lib/plugins/disable-controls/DisableControls.d.ts +1 -1
  174. package/lib/plugins/disable-controls/DisableControls.d.ts.map +1 -1
  175. package/lib/plugins/disable-controls/DisableControls.js +3 -5
  176. package/lib/plugins/dvr-controls/DVRControls.d.ts +4 -4
  177. package/lib/plugins/dvr-controls/DVRControls.d.ts.map +1 -1
  178. package/lib/plugins/dvr-controls/DVRControls.js +5 -4
  179. package/lib/plugins/error-screen/ErrorScreen.d.ts +44 -0
  180. package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -0
  181. package/lib/plugins/error-screen/ErrorScreen.js +179 -0
  182. package/lib/plugins/favicon/Favicon.d.ts +24 -0
  183. package/lib/plugins/favicon/Favicon.d.ts.map +1 -0
  184. package/lib/plugins/favicon/Favicon.js +106 -0
  185. package/lib/plugins/google-analytics/GoogleAnalytics.d.ts +30 -0
  186. package/lib/plugins/google-analytics/GoogleAnalytics.d.ts.map +1 -0
  187. package/lib/plugins/google-analytics/GoogleAnalytics.js +114 -0
  188. package/lib/plugins/index.d.ts +38 -0
  189. package/lib/plugins/index.d.ts.map +1 -0
  190. package/lib/plugins/index.js +40 -0
  191. package/lib/plugins/kibo/index.d.ts +23 -0
  192. package/lib/plugins/kibo/index.d.ts.map +1 -0
  193. package/lib/plugins/kibo/index.js +199 -0
  194. package/lib/plugins/level-selector/LevelSelector.d.ts +48 -17
  195. package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
  196. package/lib/plugins/level-selector/LevelSelector.js +169 -155
  197. package/lib/plugins/logo/Logo.d.ts +29 -0
  198. package/lib/plugins/logo/Logo.d.ts.map +1 -0
  199. package/lib/plugins/logo/Logo.js +181 -0
  200. package/lib/plugins/logo/utils/index.d.ts +22 -0
  201. package/lib/plugins/logo/utils/index.d.ts.map +1 -0
  202. package/lib/plugins/logo/utils/index.js +32 -0
  203. package/lib/plugins/media-control/MediaControl.d.ts +20 -25
  204. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  205. package/lib/plugins/media-control/MediaControl.js +136 -106
  206. package/lib/plugins/multi-camera/MultiCamera.d.ts +59 -0
  207. package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -0
  208. package/lib/plugins/multi-camera/MultiCamera.js +353 -0
  209. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +20 -0
  210. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -0
  211. package/lib/plugins/picture-in-picture/PictureInPicture.js +68 -0
  212. package/lib/plugins/playback-rate/PlaybackRate.d.ts +42 -0
  213. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -0
  214. package/lib/plugins/playback-rate/PlaybackRate.js +205 -0
  215. package/lib/plugins/poster/Poster.d.ts +18 -17
  216. package/lib/plugins/poster/Poster.d.ts.map +1 -1
  217. package/lib/plugins/poster/Poster.js +83 -37
  218. package/lib/plugins/seek-time/SeekTime.d.ts +38 -0
  219. package/lib/plugins/seek-time/SeekTime.d.ts.map +1 -0
  220. package/lib/plugins/seek-time/SeekTime.js +153 -0
  221. package/lib/plugins/share/Share.d.ts +38 -0
  222. package/lib/plugins/share/Share.d.ts.map +1 -0
  223. package/lib/plugins/share/Share.js +122 -0
  224. package/lib/plugins/skip-time/SkipTime.d.ts +28 -0
  225. package/lib/plugins/skip-time/SkipTime.d.ts.map +1 -0
  226. package/lib/plugins/skip-time/SkipTime.js +86 -0
  227. package/lib/plugins/source-controller/SourceController.d.ts +41 -0
  228. package/lib/plugins/source-controller/SourceController.d.ts.map +1 -0
  229. package/lib/plugins/source-controller/SourceController.js +199 -0
  230. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts +26 -0
  231. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts.map +1 -0
  232. package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +117 -0
  233. package/lib/plugins/statistics/Statistics.d.ts +52 -0
  234. package/lib/plugins/statistics/Statistics.d.ts.map +1 -0
  235. package/lib/plugins/statistics/Statistics.js +130 -0
  236. package/lib/plugins/subtitles/Subtitles.d.ts +61 -0
  237. package/lib/plugins/subtitles/Subtitles.d.ts.map +1 -0
  238. package/lib/plugins/subtitles/Subtitles.js +354 -0
  239. package/lib/plugins/thumbnails/Thumbnails.d.ts +47 -0
  240. package/lib/plugins/thumbnails/Thumbnails.d.ts.map +1 -0
  241. package/lib/plugins/thumbnails/Thumbnails.js +414 -0
  242. package/lib/plugins/types.d.ts +8 -0
  243. package/lib/plugins/types.d.ts.map +1 -0
  244. package/lib/plugins/types.js +1 -0
  245. package/lib/plugins/utils.d.ts +5 -0
  246. package/lib/plugins/utils.d.ts.map +1 -0
  247. package/lib/plugins/utils.js +68 -0
  248. package/lib/plugins/vast-ads/VastAds.d.ts +72 -0
  249. package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -0
  250. package/lib/plugins/vast-ads/VastAds.js +686 -0
  251. package/lib/plugins/vast-ads/loaderxml.d.ts +32 -0
  252. package/lib/plugins/vast-ads/loaderxml.d.ts.map +1 -0
  253. package/lib/plugins/vast-ads/loaderxml.js +226 -0
  254. package/lib/plugins/vast-ads/roll.d.ts +60 -0
  255. package/lib/plugins/vast-ads/roll.d.ts.map +1 -0
  256. package/lib/plugins/vast-ads/roll.js +415 -0
  257. package/lib/plugins/vast-ads/rollmanager.d.ts +62 -0
  258. package/lib/plugins/vast-ads/rollmanager.d.ts.map +1 -0
  259. package/lib/plugins/vast-ads/rollmanager.js +347 -0
  260. package/lib/plugins/vast-ads/sctemanager.d.ts +18 -0
  261. package/lib/plugins/vast-ads/sctemanager.d.ts.map +1 -0
  262. package/lib/plugins/vast-ads/sctemanager.js +116 -0
  263. package/lib/plugins/vast-ads/types.d.ts +12 -0
  264. package/lib/plugins/vast-ads/types.d.ts.map +1 -0
  265. package/lib/plugins/vast-ads/types.js +1 -0
  266. package/lib/plugins/vast-ads/urlhandler.d.ts +4 -0
  267. package/lib/plugins/vast-ads/urlhandler.d.ts.map +1 -0
  268. package/lib/plugins/vast-ads/urlhandler.js +30 -0
  269. package/lib/plugins/vast-ads/xmlhttprequest.d.ts +6 -0
  270. package/lib/plugins/vast-ads/xmlhttprequest.d.ts.map +1 -0
  271. package/lib/plugins/vast-ads/xmlhttprequest.js +39 -0
  272. package/lib/plugins/vast-ads/xmlmerge.d.ts +12 -0
  273. package/lib/plugins/vast-ads/xmlmerge.d.ts.map +1 -0
  274. package/lib/plugins/vast-ads/xmlmerge.js +82 -0
  275. package/lib/plugins/volume-fade/VolumeFade.d.ts +21 -0
  276. package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -0
  277. package/lib/plugins/volume-fade/VolumeFade.js +90 -0
  278. package/package.json +10 -2
  279. package/rollup.config.js +32 -2
  280. package/src/index.core.ts +15 -0
  281. package/src/index.plugins.ts +42 -0
  282. package/src/index.ts +2 -15
  283. package/src/plugins/audio-selector/AudioSelector.ts +370 -0
  284. package/src/plugins/big-mute-button/BigMuteButton.ts +187 -0
  285. package/src/plugins/bottom-gear/BottomGear.ts +122 -0
  286. package/src/plugins/build.ts +1 -0
  287. package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +369 -0
  288. package/src/plugins/clappr-nerd-stats/formatter.ts +109 -0
  289. package/src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts +414 -0
  290. package/src/plugins/clappr-nerd-stats/speedtest/index.ts +183 -0
  291. package/src/plugins/clappr-nerd-stats/speedtest/types.ts +5 -0
  292. package/src/plugins/clappr-nerd-stats/types.ts +3 -0
  293. package/src/plugins/clappr-stats/ClapprStats.ts +441 -0
  294. package/src/plugins/clappr-stats/types.ts +52 -0
  295. package/src/plugins/clappr-stats/utils.ts +42 -0
  296. package/src/plugins/click-to-pause/ClickToPause.ts +93 -0
  297. package/src/plugins/clips/Clips.ts +152 -0
  298. package/src/plugins/context-menu/ContextMenu.ts +134 -0
  299. package/src/plugins/disable-controls/DisableControls.ts +81 -0
  300. package/src/plugins/dvr-controls/DvrControls.ts +131 -0
  301. package/src/plugins/error-screen/ErrorScreen.ts +241 -0
  302. package/src/plugins/favicon/Favicon.ts +137 -0
  303. package/src/plugins/ga-events/GaEvents.js +395 -0
  304. package/src/plugins/ga-events/ga-tracking.js +46 -0
  305. package/src/plugins/google-analytics/GoogleAnalytics.ts +147 -0
  306. package/src/plugins/index.ts +42 -0
  307. package/src/plugins/kibo/index.ts +244 -0
  308. package/src/plugins/level-selector/LevelSelector.ts +400 -0
  309. package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +72 -0
  310. package/src/plugins/level-selector/__tests__/__snapshots__/LevelSelector.test.ts.snap +11 -0
  311. package/src/plugins/logo/Logo.ts +233 -0
  312. package/src/plugins/logo/utils/index.ts +46 -0
  313. package/src/plugins/media-control/MediaControl.ts +1383 -0
  314. package/src/plugins/multi-camera/MultiCamera copy.xts +414 -0
  315. package/src/plugins/multi-camera/MultiCamera.ts +426 -0
  316. package/src/plugins/picture-in-picture/PictureInPicture.ts +87 -0
  317. package/src/plugins/playback-rate/PlaybackRate.ts +269 -0
  318. package/src/plugins/poster/Poster.ts +298 -0
  319. package/src/plugins/seek-time/SeekTime.ts +191 -0
  320. package/src/plugins/share/Share.ts +148 -0
  321. package/src/plugins/skip-time/SkipTime.ts +109 -0
  322. package/src/plugins/source-controller/SourceController.ts +239 -0
  323. package/src/plugins/source-controller/__tests__/SourceController.test.ts +230 -0
  324. package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +135 -0
  325. package/src/plugins/statistics/Statistics copy.xts +296 -0
  326. package/src/plugins/statistics/Statistics.ts +207 -0
  327. package/src/plugins/subtitles/Subtitles.ts +505 -0
  328. package/src/plugins/thumbnails/Thumbnails.ts +530 -0
  329. package/src/plugins/types.ts +7 -0
  330. package/src/plugins/typings/globals.d.ts +10 -0
  331. package/src/plugins/typings/parse-srt.d.ts +14 -0
  332. package/src/plugins/typings/workers.d.ts +3 -0
  333. package/src/plugins/utils.ts +77 -0
  334. package/src/plugins/vast-ads/VastAds.ts +915 -0
  335. package/src/plugins/vast-ads/loaderxml.ts +260 -0
  336. package/src/plugins/vast-ads/roll.ts +492 -0
  337. package/src/plugins/vast-ads/rollmanager.ts +403 -0
  338. package/src/plugins/vast-ads/sctemanager.ts +134 -0
  339. package/src/plugins/vast-ads/types.ts +14 -0
  340. package/src/plugins/vast-ads/urlhandler.ts +37 -0
  341. package/src/plugins/vast-ads/xmlhttprequest.ts +44 -0
  342. package/src/plugins/vast-ads/xmlmerge.ts +96 -0
  343. package/src/plugins/video360/VRControls.js +104 -0
  344. package/src/plugins/video360/VREffect.js +422 -0
  345. package/src/plugins/video360/Video360.js +979 -0
  346. package/src/plugins/video360/orbit-oriention-controls.js +1002 -0
  347. package/src/plugins/video360/utils.js +49 -0
  348. package/src/plugins/volume-fade/VolumeFade.ts +109 -0
  349. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,915 @@
1
+ import {
2
+ $,
3
+ Browser,
4
+ Container,
5
+ Core,
6
+ Events,
7
+ HTML5Video,
8
+ Log,
9
+ Playback,
10
+ UIContainerPlugin,
11
+ UICorePlugin,
12
+ Utils,
13
+ } from '@clappr/core'
14
+ import { reportError } from '@gcorevideo/utils'
15
+ import assert from 'assert'
16
+ import { TimePosition } from '../../playback.types'
17
+
18
+ import { CLAPPR_VERSION } from '../build.js'
19
+ import { TimerId, ZeptoResult } from '../types.js'
20
+ import RollManager from './rollmanager.js'
21
+ import SCTEManager from './sctemanager.js'
22
+ import { VolumeFadeEvents } from '../volume-fade/VolumeFade.js'
23
+ import { AdRollItem, AdRollType } from './types.js'
24
+
25
+ import '../../../assets/vast-ads/style.scss'
26
+ import volumeIcon from '../../../assets/icons/new/volume-max.svg'
27
+ import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg'
28
+
29
+ const VERSION = '0.0.1'
30
+
31
+ type State = 'play' | 'pause' | 'switch' | ''
32
+
33
+ export class VastAds extends UICorePlugin {
34
+ private _clickToPausePlugin: UIContainerPlugin | null = null
35
+
36
+ private _cloneContainerEvents: Record<string, Function> | null = null
37
+
38
+ private _clonePlaybackEvents: Record<string, Function> | null = null
39
+
40
+ private countMiddleRoll = 0
41
+
42
+ private countRepeatableRoll = 0
43
+
44
+ private _container: Container | null = null
45
+
46
+ private container: Container | null = null
47
+
48
+ private _contentElement: HTMLElement | null = null
49
+
50
+ private _currentPosition = 0
51
+
52
+ private currentState: State = ''
53
+
54
+ private _imaIsloaded = false
55
+
56
+ private _imaLoadResult = false
57
+
58
+ private intervalTimer: TimerId | null = null
59
+
60
+ private _playback: Playback | null = null
61
+
62
+ private _pluginIsReady = false
63
+
64
+ private _posterBigPlayStyle: ZeptoResult | null = null
65
+
66
+ private _posterPlugin: UIContainerPlugin | null = null
67
+
68
+ private _prevVolumeValue = 0
69
+
70
+ private vast: RollManager | null = null
71
+
72
+ private _volume = 80
73
+
74
+ private startTimeRepeatableRoll = 0
75
+
76
+ private startTimeRepeatableRollGap = 0
77
+
78
+ private _scteManager = new SCTEManager()
79
+
80
+ private $skipAd: ZeptoResult | null = null
81
+
82
+ private $muteIcon: ZeptoResult | null = null
83
+
84
+ private $areaClick: ZeptoResult | null = null
85
+
86
+ private _$adContainer: ZeptoResult | null = null
87
+
88
+ private _adContainer: HTMLElement | null = null
89
+
90
+ get name() {
91
+ return 'clappr-vast-ad-plugin'
92
+ }
93
+
94
+ get supportedVersion() {
95
+ return { min: CLAPPR_VERSION }
96
+ }
97
+
98
+ static get version() {
99
+ return VERSION
100
+ }
101
+
102
+ get mediaControl() {
103
+ return this.core.mediaControl
104
+ }
105
+
106
+ override get attributes() {
107
+ return {
108
+ class: this.name,
109
+ 'data-vast-ads': '',
110
+ }
111
+ }
112
+
113
+ constructor(core: Core) {
114
+ super(core)
115
+
116
+ const cfg = this.options.vastAds
117
+
118
+ try {
119
+ const no_lib = 'google' in window && (window.google as any).ima
120
+
121
+ if (!no_lib || !cfg) {
122
+ this.disable()
123
+
124
+ return
125
+ }
126
+ } catch (error) {
127
+ // LogManager.exception(error);
128
+ reportError(error)
129
+ this.disable()
130
+
131
+ return
132
+ }
133
+
134
+ // TODO: Add an option which is an array of plugin name to disable
135
+ try {
136
+ if (!cfg.preroll) {
137
+ this._pluginError('tag option is required')
138
+ this.disable()
139
+
140
+ return
141
+ }
142
+ } catch (error) {
143
+ this._pluginError('tag option is required')
144
+ this.disable()
145
+ // LogManager.message('Advertisement: tag option is required', SentryLogLevel.ERROR);
146
+ reportError(error)
147
+
148
+ return
149
+ }
150
+
151
+ if (cfg.middleroll?.data?.length > 0) {
152
+ cfg.middleroll.data = cfg.middleroll.data
153
+ .filter(
154
+ ({ startTimePercent }: AdRollItem) =>
155
+ startTimePercent >= 10 && startTimePercent <= 90,
156
+ )
157
+ .sort(
158
+ (a: AdRollItem, b: AdRollItem) =>
159
+ a.startTimePercent - b.startTimePercent,
160
+ )
161
+ }
162
+
163
+ if (cfg.repeatableroll?.data?.length > 0) {
164
+ cfg.repeatableroll.data = cfg.repeatableroll.data
165
+ .filter(({ startTime }: AdRollItem) => startTime >= 2)
166
+ .sort((a: AdRollItem, b: AdRollItem) => a.startTime - b.startTime)
167
+ }
168
+
169
+ let lang = (this.core.options.language || Utils.getBrowserLanguage())
170
+ .toLowerCase()
171
+ .replace(/_/g, '-')
172
+
173
+ if (lang.indexOf('_') < 0) {
174
+ lang += '_' + lang
175
+ }
176
+
177
+ if ('google' in window && (window.google as any).ima) {
178
+ ;(window.google as any).ima.settings.setLocale(lang)
179
+ }
180
+ }
181
+
182
+ override bindEvents() {
183
+ const no_lib = 'google' in window && (window.google as any).ima
184
+
185
+ if (!no_lib) {
186
+ return
187
+ }
188
+ if (this._scteManager) {
189
+ // @ts-ignore
190
+ this._scteManager.on('startSCTERoll', () => {
191
+ this.initializeRollManager({
192
+ type: 'scteroll',
193
+ })
194
+ })
195
+
196
+ // @ts-ignore
197
+ this._scteManager.on('stopSCTERoll', () => {
198
+ this._playVideoContent('scteroll')
199
+ })
200
+ }
201
+
202
+ this.listenToOnce(this.core, Events.CORE_READY, this._onCoreReady)
203
+
204
+ this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize)
205
+
206
+ if (this.container) {
207
+ this.listenTo(
208
+ this.container,
209
+ Events.CONTAINER_VOLUME,
210
+ this._onContainerVolume,
211
+ )
212
+ }
213
+ this.listenTo(this.core, VolumeFadeEvents.FADE, this._onVolumeChanged)
214
+ if (this.playback) {
215
+ this.listenTo(this.container, Events.CONTAINER_SEEK, (e: number) => {
216
+ if ((this.container as any).advertisement.type === 'middleroll') {
217
+ this.countMiddleRoll = this.findCloserAdvertisement(
218
+ this.options.vastAds.middleroll,
219
+ 'startTimePercent',
220
+ this.countMiddleRoll,
221
+ e,
222
+ )
223
+ } else {
224
+ this.countRepeatableRoll = this.findCloserAdvertisement(
225
+ this.options.vastAds.repeatableroll,
226
+ 'startTime',
227
+ this.countRepeatableRoll,
228
+ e,
229
+ )
230
+ }
231
+ })
232
+ this.listenTo(this.playback, Events.PLAYBACK_LEVEL_SWITCH_START, () => {
233
+ if (this.currentState === 'pause') {
234
+ return
235
+ }
236
+ this.currentState = 'switch'
237
+ })
238
+
239
+ this.listenTo(
240
+ this.playback,
241
+ Events.PLAYBACK_TIMEUPDATE,
242
+ this.onPlaybackTimeUpdate,
243
+ )
244
+
245
+ this.listenTo(this.playback, Events.PLAYBACK_ENDED, this.onPlaybackEnded)
246
+
247
+ this._pauserollListeners()
248
+ this.listenToOnce(this.playback, Events.PLAYBACK_PLAY, () => {
249
+ if (this._posterBigPlayStyle) {
250
+ this._posterBigPlayStyle.remove()
251
+ this._posterBigPlayStyle = null
252
+ }
253
+ })
254
+ this.listenTo(
255
+ this.playback,
256
+ Events.PLAYBACK_PLAY,
257
+ this.onPlaybackPlay.bind(this),
258
+ )
259
+
260
+ this.listenToOnce(
261
+ this.playback,
262
+ 'playback:preroll:request',
263
+ this.onPlaybackPrerollRequest,
264
+ )
265
+ }
266
+
267
+ if (this.mediaControl) {
268
+ this.listenToOnce(
269
+ this.mediaControl,
270
+ Events.MEDIACONTROL_CONTAINERCHANGED,
271
+ this.containerChanged,
272
+ )
273
+ }
274
+ }
275
+
276
+ private onPlaybackEnded() {
277
+ if (this.playback?.getPlaybackType() !== 'live') {
278
+ this.countMiddleRoll = 0
279
+ this.countRepeatableRoll = 0
280
+ this.initializeRollManager({
281
+ type: 'postroll',
282
+ })
283
+ this._pauserollListeners()
284
+ }
285
+ }
286
+
287
+ private onPlaybackPlay() {
288
+ setTimeout(() => {
289
+ const posterPlugin = this.container?.getPlugin('poster_custom')
290
+
291
+ posterPlugin?.enable()
292
+ posterPlugin?.$el.hide()
293
+ ;(this._posterPlugin as any)?.$playWrapper.show()
294
+ // TODO trigger event or call a method instead
295
+ }, 0)
296
+ }
297
+
298
+ private onPlaybackPrerollRequest() {
299
+ try {
300
+ this.initializeRollManager({
301
+ type: 'preroll',
302
+ })
303
+ } catch (error) {
304
+ // LogManager.exception(error);
305
+ reportError(error)
306
+ }
307
+ }
308
+
309
+ private onPlaybackTimeUpdate(e: TimePosition) {
310
+ if ((this.container as any)?.advertisement.type !== 'idle') {
311
+ return
312
+ }
313
+ const middleroll = this._options.VastAds.middleroll
314
+
315
+ assert(this.playback, 'playback is not defined')
316
+
317
+ if (middleroll && this.playback.getPlaybackType() === 'vod') {
318
+ const currentPercent = Math.floor((e.current / e.total) * 100)
319
+ const middlerollData = middleroll.data[this.countMiddleRoll]
320
+
321
+ if (middlerollData && middlerollData.startTimePercent <= currentPercent) {
322
+ // TODO fixit
323
+ // @ts-ignore
324
+ this._currentPosition = this.playback.getCurrentTime()
325
+ this.initializeRollManager({
326
+ type: 'middleroll',
327
+ count: this.countMiddleRoll,
328
+ })
329
+ }
330
+ }
331
+
332
+ if (
333
+ this._options.VastAds.repeatableroll &&
334
+ this.playback.getPlaybackType() === 'live'
335
+ ) {
336
+ try {
337
+ if (
338
+ !(this.playback.el as HTMLMediaElement).played ||
339
+ !(this.playback.el as HTMLMediaElement).played.length
340
+ ) {
341
+ return
342
+ }
343
+ let startTime =
344
+ (this.playback.el as HTMLMediaElement).played.start(0) ||
345
+ this.startTimeRepeatableRoll
346
+
347
+ if (!this.startTimeRepeatableRoll) {
348
+ if (!startTime) {
349
+ this.startTimeRepeatableRoll = startTime = (
350
+ this.playback.el as HTMLMediaElement
351
+ ).currentTime
352
+ }
353
+ }
354
+
355
+ const currentTime =
356
+ (this.playback.el as HTMLMediaElement).currentTime -
357
+ startTime +
358
+ this.startTimeRepeatableRollGap
359
+ const repeatablerollData =
360
+ this._options.VastAds.repeatableroll.data[this.countRepeatableRoll]
361
+
362
+ if (repeatablerollData && repeatablerollData.startTime <= currentTime) {
363
+ this.startTimeRepeatableRollGap = currentTime
364
+ this.initializeRollManager({
365
+ type: 'repeatableroll',
366
+ })
367
+ }
368
+ } catch (error) {
369
+ // LogManager.exception(error);
370
+ reportError(error)
371
+ }
372
+ }
373
+ }
374
+
375
+ private rebindNextAd() {
376
+ if (Object.keys(this._scteManager).length > 0) {
377
+ this.containerChanged()
378
+ }
379
+ }
380
+
381
+ private initializeRollManager({
382
+ type,
383
+ count,
384
+ }: {
385
+ type: AdRollType
386
+ count?: number
387
+ }) {
388
+ this.destroyRoll()
389
+ assert(this._adContainer, '_adContainer is not defined')
390
+ const vast = new RollManager(
391
+ this.core,
392
+ this.options,
393
+ this.$skipAd,
394
+ this.$muteIcon,
395
+ this.$areaClick,
396
+ this._adContainer,
397
+ type,
398
+ count || 0,
399
+ this._volume,
400
+ this._prevVolumeValue,
401
+ )
402
+
403
+ // @ts-ignore
404
+ vast.on('advertisement_finish', (data: { type: AdRollType }) => {
405
+ this._playVideoContent(data.type, !!Browser.isiOS)
406
+ })
407
+ // @ts-ignore
408
+ vast.on('advertisement_dont_play', (data: { type: AdRollType }) => {
409
+ this._playVideoContent(data.type, true)
410
+ })
411
+ // @ts-ignore
412
+ vast.on('disable_plugin', (data: { type: AdRollType }) => {
413
+ this._playVideoContent(data.type)
414
+ this.disable()
415
+ })
416
+ // @ts-ignore
417
+ vast.on('advertisement_started', () => {
418
+ this.adsPlaying()
419
+ })
420
+ // @ts-ignore
421
+ vast.on('volume', (obj) => {
422
+ this.changeVolume(obj)
423
+ })
424
+ // @ts-ignore
425
+ vast.on('change_counter', (data) => {
426
+ if (data.type === 'middleroll') {
427
+ this.countMiddleRoll = data.value
428
+ }
429
+ if (data.type === 'repeatableroll') {
430
+ this.countRepeatableRoll = data.value
431
+ }
432
+ })
433
+ this.vast = vast
434
+ vast.setupRoll()
435
+ }
436
+
437
+ private changeVolume(obj: { volume: number; mute: boolean }) {
438
+ this._volume = obj.volume
439
+ this.core.options.mute = this.options.mute = obj.mute
440
+ Utils.Config.persist('volume', this._volume)
441
+ }
442
+
443
+ private findCloserAdvertisement(
444
+ roll: { data: AdRollItem[] } | undefined,
445
+ key: 'startTime' | 'startTimePercent',
446
+ counter: number,
447
+ time: number,
448
+ ) {
449
+ if (!roll) {
450
+ return -1
451
+ }
452
+ if (roll.data.length <= counter) {
453
+ return -1
454
+ }
455
+
456
+ let val = 0
457
+
458
+ assert(this.playback, 'playback is not defined')
459
+ if (~key.indexOf('Percent')) {
460
+ val = (time / this.playback.getDuration()) * 100
461
+ } else {
462
+ val = time
463
+ }
464
+
465
+ const getNumber = (arr: AdRollItem[], searchNum: number) =>
466
+ arr.find(
467
+ (it) =>
468
+ Math.abs(it[key] - searchNum) ===
469
+ Math.min(...arr.map((it) => Math.abs(it[key] - searchNum))),
470
+ )
471
+
472
+ const searchEl = getNumber(roll.data, val)
473
+ if (!searchEl) {
474
+ return -1
475
+ }
476
+
477
+ return roll.data.findIndex(
478
+ (el) => el.startTimePercent === searchEl.startTimePercent,
479
+ )
480
+ }
481
+
482
+ private _validateData(roll: {
483
+ data: AdRollItem[]
484
+ oneByOne?: boolean
485
+ }): boolean {
486
+ try {
487
+ if (roll.data.length) {
488
+ if (!Object.prototype.hasOwnProperty.call(roll, 'oneByOne')) {
489
+ roll.oneByOne = false
490
+ }
491
+
492
+ return true
493
+ } else {
494
+ return false
495
+ }
496
+ } catch (error) {
497
+ // LogManager.exception(error);
498
+ reportError(error)
499
+
500
+ return false
501
+ }
502
+ }
503
+
504
+ private playerResize(size: { width: number; height: number }) {
505
+ this.$el.removeClass('w370')
506
+ if (size.width <= 370 || this.options.hideVolumeBar) {
507
+ this.$el.addClass('w370')
508
+ }
509
+ if (this.vast) {
510
+ this.vast.playerResize(size)
511
+ }
512
+ }
513
+
514
+ private _stopPauserollListeners() {
515
+ // @ts-ignore
516
+ this.stopListening(this.playback, Events.PLAYBACK_PLAY)
517
+ // @ts-ignore
518
+ this.stopListening(this.playback, Events.PLAYBACK_PAUSE)
519
+ }
520
+
521
+ private _pauserollListeners() {
522
+ if (!this._validateData(this._options.VastAds.pauseroll)) {
523
+ return
524
+ }
525
+ this._stopPauserollListeners()
526
+ this.currentState = ''
527
+ this.listenTo(this.playback, Events.PLAYBACK_PLAY, () => {
528
+ if (this.currentState === 'pause') {
529
+ this.currentState = 'play'
530
+ setTimeout(() => {
531
+ assert(this.playback, 'playback is not defined')
532
+ this.playback.pause()
533
+ // @ts-ignore
534
+ this._currentPosition = this.playback.getCurrentTime()
535
+ this.initializeRollManager({
536
+ type: 'pauseroll',
537
+ })
538
+ }, 0)
539
+
540
+ return
541
+ }
542
+ // @ts-ignore
543
+ this.stopListening(this.playback, Events.PLAYBACK_PAUSE)
544
+ // @ts-ignore
545
+ this.stopListening(this.playback, Events.PLAYBACK_STOP)
546
+
547
+ const wsPlugin = this.core.getPlugin('ws_plugin')
548
+
549
+ if (
550
+ this.playback?.getPlaybackType() === 'live' &&
551
+ wsPlugin?.state === 'live'
552
+ ) {
553
+ this.listenToOnce(this.playback, Events.PLAYBACK_STOP, () => {
554
+ console.warn('stop stream', this.currentState)
555
+ this.currentState = 'pause'
556
+ })
557
+ } else {
558
+ this.listenToOnce(this.playback, Events.PLAYBACK_PAUSE, () => {
559
+ console.warn('pause stream', this.currentState)
560
+ if (this.currentState === 'switch') {
561
+ return
562
+ }
563
+ this.currentState = 'pause'
564
+ })
565
+ }
566
+ this.currentState = 'play'
567
+ })
568
+ }
569
+
570
+ unBindEvents() {
571
+ // @ts-ignore
572
+ this.stopListening(this.core, Events.CORE_READY)
573
+ // @ts-ignore
574
+ this.stopListening(this.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED)
575
+ // @ts-ignore
576
+ this.stopListening(this.container, Events.CONTAINER_LOADEDMETADATA)
577
+ }
578
+
579
+ private containerChanged() {
580
+ this.container = this.core.activeContainer
581
+ // TODO don't mutate the container
582
+ ;(this.container as any).advertisement = { type: 'idle' }
583
+ this._container = this.container
584
+ this.playback = this.container?.playback
585
+ assert(this.playback, 'playback is not defined')
586
+ this._contentElement = this.playback.el
587
+ this._volume =
588
+ this.core &&
589
+ this.core.mediaControl &&
590
+ this.core.mediaControl.volume !== null &&
591
+ this.core.mediaControl.volume !== undefined &&
592
+ !isNaN(this.core.mediaControl.volume)
593
+ ? this.core.mediaControl.volume
594
+ : 80
595
+ this._prevVolumeValue = this._volume ? this._volume : 80
596
+ this.core.mediaControl.container.$el.append(this.el)
597
+ this.$el.hide()
598
+ // @ts-ignore
599
+ this.stopListening()
600
+ // @ts-ignore
601
+ this._scteManager.off()
602
+ this.bindEvents()
603
+ }
604
+
605
+ private _pluginError(msg: string) {
606
+ console.error(this.name + ': ' + msg)
607
+ }
608
+
609
+ private _onCoreReady() {
610
+ this._container = this.core.activeContainer
611
+
612
+ if (!this._container) {
613
+ this._pluginError('failed to get Clappr current container')
614
+ }
615
+ // Get current playback. (To get playback element)
616
+ this.playback = this.core.activePlayback
617
+ if (!this.playback) {
618
+ this._pluginError('failed to get Clappr playback')
619
+ }
620
+ // Attempt to get poster plugin. (May interfere with media control)
621
+ this._posterPlugin = this._container?.getPlugin('poster_custom')
622
+
623
+ // Attempt to get click-to-pause plugin. (May interfere with advert click handling)
624
+ this._clickToPausePlugin = this._container?.getPlugin(
625
+ 'click_to_pause_custom',
626
+ )
627
+
628
+ assert(this.playback, 'playback is not defined')
629
+ this._contentElement = this.playback.el
630
+
631
+ if (this._pluginIsReady) {
632
+ return
633
+ }
634
+
635
+ this._initPlugin()
636
+ }
637
+
638
+ set playback(value: Playback) {
639
+ this._scteManager.playback = value
640
+ this._playback = value
641
+ }
642
+
643
+ get playback(): Playback | null {
644
+ return this._playback
645
+ }
646
+
647
+ private _onContainerVolume(value: number) {
648
+ if (value === 0) {
649
+ this.options.mute = true
650
+ } else {
651
+ this._prevVolumeValue = value
652
+ this.options.mute = false
653
+ }
654
+ this._volume = value
655
+ }
656
+
657
+ _onVolumeChanged(e: number) {
658
+ if (this._volume === e || e === 0) {
659
+ return
660
+ }
661
+ this.options.mute = e === 0
662
+ this._volume = e
663
+ }
664
+
665
+ _stopListening() {
666
+ try {
667
+ assert(this._container, 'container is not defined')
668
+ if (!this._clonePlaybackEvents) {
669
+ for (const id in this._container._listeningTo) {
670
+ this._clonePlaybackEvents = Object.assign(
671
+ {},
672
+ (this._container._listeningTo as any)[id]._events,
673
+ )
674
+ ;(this._container._listeningTo as any)[id]._events = {}
675
+ }
676
+ }
677
+ if (!this._cloneContainerEvents) {
678
+ this._cloneContainerEvents = Object.assign({}, this._container._events)
679
+ this._container._events = {}
680
+ }
681
+ } catch (error) {
682
+ // LogManager.exception(error);
683
+ reportError(error)
684
+ }
685
+ }
686
+
687
+ _startListening() {
688
+ try {
689
+ assert(this._container, 'container is not defined')
690
+ for (const id in this._container._listeningTo) {
691
+ ;(this._container._listeningTo as any)[id]._events = Object.assign(
692
+ {},
693
+ this._clonePlaybackEvents,
694
+ )
695
+ }
696
+ this._container._events = Object.assign({}, this._cloneContainerEvents)
697
+ this._cloneContainerEvents = null
698
+ this._clonePlaybackEvents = null
699
+ } catch (error) {
700
+ // LogManager.exception(error);
701
+ reportError(error)
702
+ }
703
+ }
704
+
705
+ _initPlugin() {
706
+ assert(this.playback, 'playback is not defined')
707
+ // Ensure browser can play video content. (Avoid to display an ad with nothing after)
708
+ if ((this.playback as any).name === 'no_op') {
709
+ return
710
+ }
711
+
712
+ // Ensure playback is using HTML5 video element if mobile device
713
+ if (this.playback.tagName !== 'video' && Browser.isMobile) {
714
+ this.destroy()
715
+
716
+ return
717
+ }
718
+
719
+ this._pluginIsReady = true
720
+ }
721
+
722
+ private adsPlaying() {
723
+ assert(this.container, 'container is not defined')
724
+ const poster = this.container.getPlugin('poster_custom')
725
+
726
+ poster && poster.disable()
727
+ try {
728
+ const logo = this.container.getPlugin('logo')
729
+
730
+ logo && logo.disable()
731
+ } catch (error) {
732
+ // LogManager.exception(error);
733
+ reportError(error)
734
+ }
735
+
736
+ this.core.mediaControl.disable()
737
+ this.$el.show()
738
+ if ((this.container as any).advertisement.type !== 'scteroll') {
739
+ if (!Browser.isiOS) {
740
+ setTimeout(() => {
741
+ this.playback?.pause()
742
+ }, 0)
743
+ }
744
+ this._stopListening()
745
+ } else {
746
+ assert(
747
+ this.playback instanceof HTML5Video,
748
+ 'playback is not an instance of HTML5Video',
749
+ )
750
+ if (!this.playback.isMuted()) {
751
+ ;(this.container as any).advertisement.isMuted = true
752
+ this.playback.mute()
753
+ }
754
+ }
755
+ // TODO trigger event on the core object
756
+ // Player.player.trigger('advertisementIsPlaying', data);
757
+
758
+ try {
759
+ const spinnerPlugin = this.container?.getPlugin('spinner')
760
+
761
+ spinnerPlugin?.hide()
762
+ spinnerPlugin?.disable()
763
+ } catch (error) {
764
+ // LogManager.exception(error);
765
+ reportError(error)
766
+ }
767
+ }
768
+
769
+ private destroyRoll() {
770
+ if (this.vast) {
771
+ // @ts-ignore
772
+ this.vast.off()
773
+ this.vast.destroyRoll()
774
+ this.vast = null
775
+ }
776
+ }
777
+
778
+ private _playVideoContent(currentRoll: AdRollType, justPlay?: boolean) {
779
+ // const currentRoll = type;
780
+
781
+ this.destroyRoll()
782
+ if (currentRoll === 'preroll') {
783
+ this.options.vastAds[currentRoll] = []
784
+ }
785
+
786
+ this.currentState = ''
787
+ this.$el.hide()
788
+ if (!this.options.disableClickOnPause) {
789
+ this._clickToPausePlugin?.enable()
790
+ }
791
+
792
+ try {
793
+ const logoPlugin = this.container?.getPlugin('logo')
794
+
795
+ logoPlugin?.enable()
796
+ } catch (error) {
797
+ // LogManager.exception(error);
798
+ reportError(error)
799
+ }
800
+
801
+ try {
802
+ const spinnerPlugin = this.container?.getPlugin('spinner')
803
+
804
+ spinnerPlugin?.enable()
805
+ spinnerPlugin?.hide()
806
+ } catch (error) {
807
+ // LogManager.exception(error);
808
+ reportError(error)
809
+ }
810
+
811
+ if (this.intervalTimer !== null) {
812
+ clearInterval(this.intervalTimer)
813
+ this.intervalTimer = null
814
+ }
815
+ // @ts-ignore
816
+ this.stopListening(this.playback, Events.PLAYBACK_PAUSE)
817
+ setTimeout(async () => {
818
+ if (currentRoll === 'scteroll') {
819
+ this.options.mute = this.core.options.mute
820
+ this.core.mediaControl.setMuted(this.core.options.mute)
821
+ this.core.mediaControl.setInitialVolume()
822
+ }
823
+
824
+ // this.adTemplates = null;
825
+ this._posterBigPlayStyle = $(
826
+ '<style>div.play-wrapper { display:none; }</style>',
827
+ )
828
+ this._posterBigPlayStyle.appendTo(this.$el)
829
+ // TODO check that the core event is enough
830
+ // Player.player.trigger('advertisementWasFinished');
831
+ this.core.trigger('core:advertisement:finish')
832
+ assert(this.container, 'container is not defined')
833
+ this.container.trigger('container:advertisement:finish')
834
+ ;(this.container as any).advertisement = { type: 'idle' }
835
+ this.container.enableMediaControl()
836
+ Log.debug('Advertisement', 'advertisement finished and start video')
837
+ const playbackOptions = this.core.options.playback || {}
838
+
839
+ playbackOptions.recycleVideo = Browser.isMobile
840
+
841
+ if (this._clonePlaybackEvents || this._cloneContainerEvents) {
842
+ this._startListening()
843
+ }
844
+
845
+ if (currentRoll === 'preroll' || currentRoll === 'repeatableroll') {
846
+ if (currentRoll === 'repeatableroll') {
847
+ this.startTimeRepeatableRoll = 0
848
+ }
849
+
850
+ if (!justPlay) {
851
+ if (this.core.containers) {
852
+ this.core.containers.forEach(function (container: Container) {
853
+ container.destroy()
854
+ })
855
+ this.core.containers = []
856
+ }
857
+ }
858
+
859
+ setTimeout(() => {
860
+ this.core.configure({
861
+ playback: playbackOptions,
862
+ sources: this.options.source,
863
+ autoPlay: true,
864
+ disableCanAutoPlay: true,
865
+ mute: this.core.options.mute,
866
+ })
867
+ this.core.activeContainer.mediaControlDisabled = false
868
+ }, 0)
869
+
870
+ // TODO figure out where it should go
871
+ // if (currentRoll === 'postroll') {
872
+ // this.playback.stop();
873
+ // }
874
+ }
875
+
876
+ if (currentRoll === 'pauseroll' || currentRoll === 'middleroll') {
877
+ if (Browser.isiOS && this._currentPosition > 0) {
878
+ this.listenToOnce(this.playback, Events.PLAYBACK_PLAY, () => {
879
+ this.playback?.seek(this._currentPosition)
880
+ this._currentPosition = 0
881
+ })
882
+ }
883
+ await this.playback?.play()
884
+ this.options.mute = this.core.options.mute
885
+ this.core.mediaControl.setMuted(this.core.options.mute)
886
+ this.core.mediaControl.setInitialVolume()
887
+ }
888
+ }, 0)
889
+ }
890
+
891
+ override render() {
892
+ this.$skipAd = $("<div class='skip-ad-button control-need-disable'></div>")
893
+ this.$muteIcon = $("<div class='mute-ad-icon control-need-disable'></div>")
894
+ this.$areaClick = $("<div class='area-ad-click enable'></div>")
895
+ this.$muteIcon.append(volumeIcon)
896
+ this.$muteIcon.append(volumeMuteIcon)
897
+ this.$el.append(this.$areaClick)
898
+ this.$el.append(this.$skipAd)
899
+ this.$el.append(this.$muteIcon)
900
+ this.$muteIcon.hide()
901
+ this.$skipAd.hide()
902
+ this.$areaClick.hide()
903
+ this._$adContainer = $('<div />')
904
+ .addClass('preroll-container')
905
+ .attr('data-preroll', '')
906
+ this.$el.append(this._$adContainer)
907
+ this._adContainer = this._$adContainer[0]
908
+
909
+ return this
910
+ }
911
+
912
+ // destroy() {
913
+ // super.destroy();
914
+ // }
915
+ }