@npo/player 1.17.2 → 1.18.1

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 (155) hide show
  1. package/README.md +2 -1
  2. package/lib/js/ads/ster.js +8 -10
  3. package/lib/js/ads/ster.test.js +0 -1
  4. package/lib/js/api/getstreamobject.js +0 -1
  5. package/lib/js/api/getstreamobject.test.js +0 -1
  6. package/lib/js/cdnproviders.js +10 -7
  7. package/lib/js/checks/apple.js +0 -1
  8. package/lib/js/checks/apple.test.js +0 -1
  9. package/lib/js/drm/drm.js +0 -1
  10. package/lib/js/drm/handlers/decideprofile.js +0 -1
  11. package/lib/js/drm/handlers/verifydrm.js +0 -1
  12. package/lib/js/drm/handlers/verifydrm.test.js +0 -1
  13. package/lib/js/fragments/removefragments.js +0 -1
  14. package/lib/js/fragments/setfragments.js +0 -1
  15. package/lib/js/playeractions/customerrors.test.js +0 -1
  16. package/lib/js/playeractions/handlers/customerrors.js +0 -1
  17. package/lib/js/playeractions/handlers/error.js +0 -1
  18. package/lib/js/playeractions/handlers/error.test.js +0 -1
  19. package/lib/js/playeractions/handlers/handleoffsets.js +0 -1
  20. package/lib/js/playeractions/handlers/handleoffsets.test.js +0 -1
  21. package/lib/js/playeractions/handlers/mediasessionactions.js +0 -1
  22. package/lib/js/playeractions/handlers/processplayerconfig.js +0 -1
  23. package/lib/js/playeractions/handlers/processsourceconfig.js +10 -6
  24. package/lib/js/playeractions/handlers/resolvekeypress.js +0 -1
  25. package/lib/js/playeractions/playeractions.js +0 -1
  26. package/lib/js/tracking/handlers/eventbinding.js +1 -3
  27. package/lib/js/tracking/handlers/eventlogging.js +0 -1
  28. package/lib/js/tracking/handlers/playertrackerinit.js +0 -1
  29. package/lib/js/tracking/handlers/playertrackerstart.js +0 -1
  30. package/lib/js/tracking/playertracker.js +0 -1
  31. package/lib/js/ui/components/adbutton.js +0 -1
  32. package/lib/js/ui/components/adlabel.js +0 -1
  33. package/lib/js/ui/components/audio/controlbar.js +0 -1
  34. package/lib/js/ui/components/buttons.d.ts +6 -0
  35. package/lib/js/ui/components/buttons.js +16 -3
  36. package/lib/js/ui/components/controlbar.js +0 -1
  37. package/lib/js/ui/components/ctabar.js +0 -1
  38. package/lib/js/ui/components/nativemobile/addFragments.js +0 -1
  39. package/lib/js/ui/components/nativemobile/buttons.js +0 -1
  40. package/lib/js/ui/components/nativemobile/controlbar.js +0 -1
  41. package/lib/js/ui/components/nativemobile/ctabar.js +0 -1
  42. package/lib/js/ui/components/nativemobile/playnext.js +0 -7
  43. package/lib/js/ui/components/nativemobile/titlebar.js +0 -1
  44. package/lib/js/ui/components/nativemobile/topbar.js +0 -1
  45. package/lib/js/ui/components/playnext.js +3 -3
  46. package/lib/js/ui/components/seekbar.js +0 -1
  47. package/lib/js/ui/components/settingspanel.js +4 -5
  48. package/lib/js/ui/components/shared/playnextscreen.d.ts +2 -2
  49. package/lib/js/ui/components/shared/playnextscreen.js +30 -13
  50. package/lib/js/ui/components/titlebar.js +0 -1
  51. package/lib/js/ui/components/topbar.js +0 -1
  52. package/lib/js/ui/handlers/accessibilityhandler.js +0 -1
  53. package/lib/js/ui/handlers/listboxhandlers.js +0 -1
  54. package/lib/js/ui/handlers/nicamhandler.d.ts +1 -1
  55. package/lib/js/ui/handlers/nicamhandler.js +1 -3
  56. package/lib/js/ui/handlers/nicamhandler.test.js +10 -15
  57. package/lib/js/ui/handlers/playnexthandlers.js +0 -1
  58. package/lib/js/ui/handlers/streamhandler.d.ts +3 -3
  59. package/lib/js/ui/handlers/streamhandler.js +4 -5
  60. package/lib/js/ui/handlers/timecontrolhandlers.js +0 -1
  61. package/lib/js/ui/nativemobileuicontainer.js +0 -1
  62. package/lib/js/ui/nativemobileuifactory.js +1 -2
  63. package/lib/js/ui/uicontainer.js +0 -1
  64. package/lib/js/utilities/localizationconfig.js +0 -1
  65. package/lib/js/utilities/printversion.js +0 -1
  66. package/lib/js/utilities/utilities.js +0 -1
  67. package/lib/js/utilities/utilities.test.js +0 -1
  68. package/lib/npoplayer.d.ts +3 -0
  69. package/lib/npoplayer.js +40 -11
  70. package/lib/npoplayer.test.js +0 -1
  71. package/lib/package.json +1 -1
  72. package/lib/src/js/ui/components/buttons.d.ts +6 -0
  73. package/lib/src/js/ui/components/shared/playnextscreen.d.ts +2 -2
  74. package/lib/src/js/ui/handlers/nicamhandler.d.ts +1 -1
  75. package/lib/src/js/ui/handlers/streamhandler.d.ts +3 -3
  76. package/lib/src/npoplayer.d.ts +3 -0
  77. package/lib/src/types/interfaces.d.ts +8 -1
  78. package/lib/types/classes.js +0 -1
  79. package/lib/types/interfaces.d.ts +8 -1
  80. package/lib/types/interfaces.js +0 -1
  81. package/package.json +1 -1
  82. package/src/scss/components/_playnext.scss +21 -33
  83. package/src/scss/components/_seekbarthumbnail.scss +1 -0
  84. package/src/scss/components/_subtitles.scss +16 -0
  85. package/src/scss/components/_textbuttons.scss +18 -18
  86. package/src/scss/npoplayer.css +17 -12
  87. package/src/scss/variants/_player-large.scss +10 -0
  88. package/src/scss/variants/_player-medium.scss +6 -0
  89. package/src/scss/variants/_player-small.scss +6 -0
  90. package/lib/js/ads/ster.js.map +0 -1
  91. package/lib/js/ads/ster.test.js.map +0 -1
  92. package/lib/js/api/getstreamobject.js.map +0 -1
  93. package/lib/js/api/getstreamobject.test.js.map +0 -1
  94. package/lib/js/cdnproviders.js.map +0 -1
  95. package/lib/js/checks/apple.js.map +0 -1
  96. package/lib/js/checks/apple.test.js.map +0 -1
  97. package/lib/js/drm/drm.js.map +0 -1
  98. package/lib/js/drm/handlers/decideprofile.js.map +0 -1
  99. package/lib/js/drm/handlers/verifydrm.js.map +0 -1
  100. package/lib/js/drm/handlers/verifydrm.test.js.map +0 -1
  101. package/lib/js/fragments/removefragments.js.map +0 -1
  102. package/lib/js/fragments/setfragments.js.map +0 -1
  103. package/lib/js/playeractions/customerrors.test.js.map +0 -1
  104. package/lib/js/playeractions/handlers/customerrors.js.map +0 -1
  105. package/lib/js/playeractions/handlers/error.js.map +0 -1
  106. package/lib/js/playeractions/handlers/error.test.js.map +0 -1
  107. package/lib/js/playeractions/handlers/handleoffsets.js.map +0 -1
  108. package/lib/js/playeractions/handlers/handleoffsets.test.js.map +0 -1
  109. package/lib/js/playeractions/handlers/mediasessionactions.js.map +0 -1
  110. package/lib/js/playeractions/handlers/processplayerconfig.js.map +0 -1
  111. package/lib/js/playeractions/handlers/processsourceconfig.js.map +0 -1
  112. package/lib/js/playeractions/handlers/resolvekeypress.js.map +0 -1
  113. package/lib/js/playeractions/playeractions.js.map +0 -1
  114. package/lib/js/tracking/handlers/eventbinding.js.map +0 -1
  115. package/lib/js/tracking/handlers/eventlogging.js.map +0 -1
  116. package/lib/js/tracking/handlers/playertrackerinit.js.map +0 -1
  117. package/lib/js/tracking/handlers/playertrackerstart.js.map +0 -1
  118. package/lib/js/tracking/playertracker.js.map +0 -1
  119. package/lib/js/ui/components/adbutton.js.map +0 -1
  120. package/lib/js/ui/components/adlabel.js.map +0 -1
  121. package/lib/js/ui/components/audio/controlbar.js.map +0 -1
  122. package/lib/js/ui/components/buttons.js.map +0 -1
  123. package/lib/js/ui/components/controlbar.js.map +0 -1
  124. package/lib/js/ui/components/ctabar.js.map +0 -1
  125. package/lib/js/ui/components/nativemobile/addFragments.js.map +0 -1
  126. package/lib/js/ui/components/nativemobile/buttons.js.map +0 -1
  127. package/lib/js/ui/components/nativemobile/controlbar.js.map +0 -1
  128. package/lib/js/ui/components/nativemobile/ctabar.js.map +0 -1
  129. package/lib/js/ui/components/nativemobile/playnext.js.map +0 -1
  130. package/lib/js/ui/components/nativemobile/titlebar.js.map +0 -1
  131. package/lib/js/ui/components/nativemobile/topbar.js.map +0 -1
  132. package/lib/js/ui/components/playnext.js.map +0 -1
  133. package/lib/js/ui/components/seekbar.js.map +0 -1
  134. package/lib/js/ui/components/settingspanel.js.map +0 -1
  135. package/lib/js/ui/components/shared/playnextscreen.js.map +0 -1
  136. package/lib/js/ui/components/titlebar.js.map +0 -1
  137. package/lib/js/ui/components/topbar.js.map +0 -1
  138. package/lib/js/ui/handlers/accessibilityhandler.js.map +0 -1
  139. package/lib/js/ui/handlers/listboxhandlers.js.map +0 -1
  140. package/lib/js/ui/handlers/nicamhandler.js.map +0 -1
  141. package/lib/js/ui/handlers/nicamhandler.test.js.map +0 -1
  142. package/lib/js/ui/handlers/playnexthandlers.js.map +0 -1
  143. package/lib/js/ui/handlers/streamhandler.js.map +0 -1
  144. package/lib/js/ui/handlers/timecontrolhandlers.js.map +0 -1
  145. package/lib/js/ui/nativemobileuicontainer.js.map +0 -1
  146. package/lib/js/ui/nativemobileuifactory.js.map +0 -1
  147. package/lib/js/ui/uicontainer.js.map +0 -1
  148. package/lib/js/utilities/localizationconfig.js.map +0 -1
  149. package/lib/js/utilities/printversion.js.map +0 -1
  150. package/lib/js/utilities/utilities.js.map +0 -1
  151. package/lib/js/utilities/utilities.test.js.map +0 -1
  152. package/lib/npoplayer.js.map +0 -1
  153. package/lib/npoplayer.test.js.map +0 -1
  154. package/lib/types/classes.js.map +0 -1
  155. package/lib/types/interfaces.js.map +0 -1
package/README.md CHANGED
@@ -8,7 +8,8 @@ The video player library for NPO (Nederlandse Publieke Omroep) and other broadca
8
8
  Extensive and up-to-date documentation is available at https://docs.npoplayer.nl
9
9
 
10
10
  # Changelog
11
- Current version: v1.17.0
11
+ Current version: v1.18.0
12
+
12
13
  The changelog is available at https://docs.npoplayer.nl/implementation/web/changelog/
13
14
 
14
15
  ## License
@@ -12,6 +12,7 @@ export async function handlePreRolls(playerapi, streamObject, npoplayer) {
12
12
  let currentClickListener = null;
13
13
  let adUiSet = false;
14
14
  async function handleSourceLoaded() {
15
+ playerapi.off(PlayerEvent.SourceLoaded, handleSourceLoaded);
15
16
  const advertConfig = {
16
17
  tag: {
17
18
  url: String(prerollUrl),
@@ -24,6 +25,7 @@ export async function handlePreRolls(playerapi, streamObject, npoplayer) {
24
25
  }
25
26
  playerapi.on(PlayerEvent.SourceLoaded, handleSourceLoaded);
26
27
  async function handlePlay() {
28
+ playerapi.off(PlayerEvent.Play, handlePlay);
27
29
  attemptSetAdUi();
28
30
  }
29
31
  playerapi.on(PlayerEvent.Play, handlePlay);
@@ -32,6 +34,7 @@ export async function handlePreRolls(playerapi, streamObject, npoplayer) {
32
34
  if (!activeAdBreak || !activeAdBreak.ads)
33
35
  return false;
34
36
  npoplayer.uiManager?.release();
37
+ npoplayer.uiManager = null;
35
38
  npoplayer.createUIManager(playerapi, NpoPlayerUIVariants.AD);
36
39
  adUiSet = true;
37
40
  let adButton = npoplayer.uiComponents.adbutton;
@@ -54,6 +57,7 @@ export async function handlePreRolls(playerapi, streamObject, npoplayer) {
54
57
  }
55
58
  }
56
59
  function handleAdStarted() {
60
+ playerapi.off(PlayerEvent.AdStarted, handleAdStarted);
57
61
  let activeAdBreak = playerapi.ads.getActiveAdBreak();
58
62
  if (!activeAdBreak || !activeAdBreak.ads) {
59
63
  console.error('No active ad break data found');
@@ -83,6 +87,7 @@ export async function handlePreRolls(playerapi, streamObject, npoplayer) {
83
87
  button.onClick.subscribe(currentClickListener);
84
88
  }
85
89
  function handleAdFinished() {
90
+ playerapi.off(PlayerEvent.AdFinished, handleAdFinished);
86
91
  let activeAdBreak = playerapi.ads.getActiveAdBreak();
87
92
  if (!activeAdBreak || !activeAdBreak.ads) {
88
93
  console.error('No active ad break data found');
@@ -101,23 +106,16 @@ export async function handlePreRolls(playerapi, streamObject, npoplayer) {
101
106
  }
102
107
  playerapi.on(PlayerEvent.AdFinished, handleAdFinished);
103
108
  function handleAdBreakFinished() {
109
+ playerapi.off(PlayerEvent.AdBreakFinished, handleAdBreakFinished);
104
110
  npoplayer.adBreakActive = false;
105
111
  npoplayer.uiComponents.adbutton?.hide();
106
112
  npoplayer.uiComponents.adlabel?.hide();
107
113
  npoplayer.uiManager?.release();
114
+ npoplayer.uiManager = null;
108
115
  npoplayer.createUIManager(playerapi, NpoPlayerUIVariants.DEFAULT);
109
116
  adUiSet = false;
110
- removeListeners();
111
117
  }
112
118
  playerapi.on(PlayerEvent.AdBreakFinished, handleAdBreakFinished);
113
- function removeListeners() {
114
- playerapi.off(PlayerEvent.SourceLoaded, handleSourceLoaded);
115
- playerapi.off(PlayerEvent.Play, handlePlay);
116
- playerapi.off(PlayerEvent.AdStarted, handleAdStarted);
117
- playerapi.off(PlayerEvent.AdFinished, handleAdFinished);
118
- playerapi.off(PlayerEvent.AdBreakFinished, handleAdBreakFinished);
119
- resolve();
120
- }
119
+ resolve();
121
120
  });
122
121
  }
123
- //# sourceMappingURL=ster.js.map
@@ -61,4 +61,3 @@ describe("handlePreRolls", () => {
61
61
  jest.clearAllMocks();
62
62
  });
63
63
  });
64
- //# sourceMappingURL=ster.test.js.map
@@ -36,4 +36,3 @@ export async function getStreamObject(npoplayer, payload) {
36
36
  }
37
37
  }
38
38
  }
39
- //# sourceMappingURL=getstreamobject.js.map
@@ -46,4 +46,3 @@ describe('getStreamObject', () => {
46
46
  expect(doErrorSpy).toHaveBeenCalledWith(expect.stringContaining('SomeError'), 500);
47
47
  });
48
48
  });
49
- //# sourceMappingURL=getstreamobject.test.js.map
@@ -1,13 +1,16 @@
1
1
  export const npoCdnProviders = new Map();
2
- npoCdnProviders.set('nep.global.ssl.fastly.net', 'NEP');
2
+ npoCdnProviders.set('nep.global.ssl.fastly.net', 'NEP-FASTLY');
3
+ npoCdnProviders.set('npo-fsly.cdn.streamgate.io', 'NEP-FASTLY');
3
4
  npoCdnProviders.set('cdn.streamgate.nl', 'NEP');
4
- npoCdnProviders.set('npo-fsly.cdn.streamgate.io', 'FASTLY');
5
+ npoCdnProviders.set('pr.lswcdn.net', 'NEP-LSW');
5
6
  npoCdnProviders.set('cdn.eurovisioncdn.net', 'EUROVISION');
6
7
  npoCdnProviders.set('npo.prd.cdn.bcms.kpn.com', 'KPN');
7
8
  npoCdnProviders.set('cdn.bcms.kpn.com', 'KPN');
8
9
  npoCdnProviders.set('Akamai', 'AKEMAI');
9
- npoCdnProviders.set('icecast.omroep.nl', 'NPO');
10
- npoCdnProviders.set('content.omroep.nl', 'NPO');
11
- npoCdnProviders.set('podcast.npo.nl', 'NPO');
12
- npoCdnProviders.set('video.omroep.nl', 'NPO');
13
- //# sourceMappingURL=cdnproviders.js.map
10
+ npoCdnProviders.set('icecast.omroep.nl', 'OMROEP-ICECAST');
11
+ npoCdnProviders.set('content.omroep.nl', 'OMROEP-CONTENT');
12
+ npoCdnProviders.set('podcast.npo.nl', 'OMROEP-PODCAST');
13
+ npoCdnProviders.set('video.omroep.nl', 'OMROEP-VIDEO');
14
+ npoCdnProviders.set('download.omroep.nl', 'OMROEP-DOWNLOAD');
15
+ npoCdnProviders.set('download.nos.nl', 'NOS');
16
+ npoCdnProviders.set('entry.cdn.npoaudio.nl', 'NPOAUDIO');
@@ -17,4 +17,3 @@ export function isSafari(isFairPlayDrmSupported) {
17
17
  !navigator.userAgent.includes('Android');
18
18
  return isSafariUserAgent || isFairPlayDrmSupported;
19
19
  }
20
- //# sourceMappingURL=apple.js.map
@@ -18,4 +18,3 @@ describe('Test Safari check', () => {
18
18
  expect(isSafari(isFairPlayDrmSupported)).toBeFalsy();
19
19
  });
20
20
  });
21
- //# sourceMappingURL=apple.test.js.map
package/lib/js/drm/drm.js CHANGED
@@ -1,3 +1,2 @@
1
1
  export { verifyDRM } from './handlers/verifydrm';
2
2
  export { decideProfile } from './handlers/decideprofile';
3
- //# sourceMappingURL=drm.js.map
@@ -49,4 +49,3 @@ export async function decideProfile(player, preferredDRM = '') {
49
49
  return { profileName: bestWithDRM, drm: bestDRM };
50
50
  return { profileName: bestWithoutDRM, drm: bestDRM };
51
51
  }
52
- //# sourceMappingURL=decideprofile.js.map
@@ -22,4 +22,3 @@ export async function verifyDRM(npoplayer, player, payload) {
22
22
  void player.load(npoplayer.sourceConfig);
23
23
  }
24
24
  }
25
- //# sourceMappingURL=verifydrm.js.map
@@ -15,4 +15,3 @@ describe("Test DRM verification", () => {
15
15
  expect(load).toBeCalled();
16
16
  });
17
17
  });
18
- //# sourceMappingURL=verifydrm.test.js.map
@@ -7,4 +7,3 @@ export async function removeFragments(player, uiManager) {
7
7
  player.off(PlayerEvent.TimeChanged, checkFunction());
8
8
  player.off(PlayerEvent.Seek, seekFunction());
9
9
  }
10
- //# sourceMappingURL=removefragments.js.map
@@ -70,4 +70,3 @@ export async function setFragments(player, uiManager, fragments) {
70
70
  addMarkers();
71
71
  setTitle();
72
72
  }
73
- //# sourceMappingURL=setfragments.js.map
@@ -49,4 +49,3 @@ describe("Test custom error messages", () => {
49
49
  expect(customSpecificErrorMessageOverlayConfig[2006]).toBe("Oeps, er is iets mis met de DRM");
50
50
  });
51
51
  });
52
- //# sourceMappingURL=customerrors.test.js.map
@@ -54,4 +54,3 @@ export const customSpecificErrorMessageOverlayConfig = {
54
54
  3004: "",
55
55
  4000: "",
56
56
  };
57
- //# sourceMappingURL=customerrors.js.map
@@ -12,4 +12,3 @@ export function handlePlayerError(player, uiComponents, input) {
12
12
  uiComponents.errorMessageOverlay.show();
13
13
  uiComponents.errorMessageOverlay.errorLabel.setText(message ?? 'De video kan niet worden geladen');
14
14
  }
15
- //# sourceMappingURL=error.js.map
@@ -42,4 +42,3 @@ describe("Test DRM verification", () => {
42
42
  expect(show).not.toBeCalled();
43
43
  });
44
44
  });
45
- //# sourceMappingURL=error.test.js.map
@@ -45,4 +45,3 @@ export function handleLiveOffsetLogic(npoplayer, player, options) {
45
45
  shiftToProgramStart(player, options.liveProgramTime);
46
46
  }
47
47
  }
48
- //# sourceMappingURL=handleoffsets.js.map
@@ -47,4 +47,3 @@ describe("Test programStart shift", () => {
47
47
  expect(timeShift).toBeCalled();
48
48
  });
49
49
  });
50
- //# sourceMappingURL=handleoffsets.test.js.map
@@ -104,4 +104,3 @@ export function setupMediaSessionActionHandlers(player, sourceConfig, _streamObj
104
104
  }
105
105
  }
106
106
  }
107
- //# sourceMappingURL=mediasessionactions.js.map
@@ -40,4 +40,3 @@ export function processPlayerConfig(npoplayer, playerConfig) {
40
40
  processedConfig.advertising = {};
41
41
  return processedConfig;
42
42
  }
43
- //# sourceMappingURL=processplayerconfig.js.map
@@ -120,11 +120,16 @@ export function processSourceConfig(_sourceConfig = {}, _streamObject, drm = nul
120
120
  sourceConfig = setDrm(sourceConfig, drm, _streamObject);
121
121
  const streamSource = _streamObject.stream.streamURL;
122
122
  let cdnString = streamSource;
123
- npoCdnProviders.forEach(function (value, key) {
124
- if (streamSource.includes(key)) {
125
- cdnString = value;
126
- }
127
- });
123
+ if (streamSource.startsWith('file:///')) {
124
+ cdnString = 'OFFLINE';
125
+ }
126
+ else {
127
+ npoCdnProviders.forEach(function (value, key) {
128
+ if (streamSource.includes(key)) {
129
+ cdnString = value;
130
+ }
131
+ });
132
+ }
128
133
  if (sourceConfig.analytics == null)
129
134
  sourceConfig.analytics = {};
130
135
  sourceConfig.analytics.cdnProvider = cdnString;
@@ -157,4 +162,3 @@ export function processSourceConfig(_sourceConfig = {}, _streamObject, drm = nul
157
162
  }
158
163
  return sourceConfig;
159
164
  }
160
- //# sourceMappingURL=processsourceconfig.js.map
@@ -50,4 +50,3 @@ export function resolveKeyPress(player, npoplayer, e) {
50
50
  }
51
51
  }
52
52
  }
53
- //# sourceMappingURL=resolvekeypress.js.map
@@ -3,4 +3,3 @@ export { handleStartOffset, handleLiveOffsetLogic, shiftToProgramStart } from ".
3
3
  export { handlePlayerError } from "./handlers/error";
4
4
  export { processPlayerConfig } from "./handlers/processplayerconfig";
5
5
  export { processSourceConfig } from "./handlers/processsourceconfig";
6
- //# sourceMappingURL=playeractions.js.map
@@ -63,7 +63,7 @@ export function bindPlayerEvents(npoplayer, player) {
63
63
  }
64
64
  };
65
65
  const stopBeforeUnload = () => {
66
- logEvent(npoplayer, 'stop', {});
66
+ logEvent(npoplayer, 'stop');
67
67
  };
68
68
  for (const [key, value] of logEventHandlers) {
69
69
  player.off(key, value);
@@ -79,7 +79,6 @@ export function bindPlayerEvents(npoplayer, player) {
79
79
  { event: PlayerEvent.PlaybackFinished, name: 'complete' },
80
80
  { event: PlayerEvent.TimeChanged, name: 'time' },
81
81
  { event: PlayerEvent.SourceUnloaded, name: 'stop' },
82
- { event: PlayerEvent.Destroy, name: 'stop' },
83
82
  ];
84
83
  playerEvents.forEach(({ event, name, handler }) => {
85
84
  handler = handler || logEventHandler(name);
@@ -99,4 +98,3 @@ export function bindPlayerEvents(npoplayer, player) {
99
98
  logEventHandlers.set('beforeunload', stopBeforeUnload);
100
99
  window.addEventListener('beforeunload', stopBeforeUnload);
101
100
  }
102
- //# sourceMappingURL=eventbinding.js.map
@@ -29,4 +29,3 @@ export function logEvent(npoplayer, event, data) {
29
29
  npoplayer.logEmitter.emit('logEvent', event);
30
30
  streamTrackerHandler(streamOptions);
31
31
  }
32
- //# sourceMappingURL=eventlogging.js.map
@@ -19,4 +19,3 @@ export function initPlayerTracker(npoplayer, _npotag, _npotaginstance) {
19
19
  npoplayer.npoTag.pageTracker = newPageTracker(npoplayer.npoTag.npoTagInstance);
20
20
  }
21
21
  }
22
- //# sourceMappingURL=playertrackerinit.js.map
@@ -26,4 +26,3 @@ export function startPlayerTracker(playerInstance, duration, version, source) {
26
26
  bindPlayerEvents(playerInstance, playerInstance.player);
27
27
  }
28
28
  }
29
- //# sourceMappingURL=playertrackerstart.js.map
@@ -2,4 +2,3 @@ export { initPlayerTracker } from './handlers/playertrackerinit';
2
2
  export { startPlayerTracker } from './handlers/playertrackerstart';
3
3
  export { bindPlayerEvents } from './handlers/eventbinding';
4
4
  export { logEvent } from './handlers/eventlogging';
5
- //# sourceMappingURL=playertracker.js.map
@@ -9,4 +9,3 @@ export function createAdButton(npoplayer) {
9
9
  npoplayer.uiComponents.adbutton = adButton;
10
10
  return adButton;
11
11
  }
12
- //# sourceMappingURL=adbutton.js.map
@@ -5,4 +5,3 @@ export function createAdLabel(npoplayer) {
5
5
  npoplayer.uiComponents.adlabel = adLabel;
6
6
  return adLabel;
7
7
  }
8
- //# sourceMappingURL=adlabel.js.map
@@ -20,4 +20,3 @@ export function createAudioControlBar(npoplayer) {
20
20
  npoplayer.uiComponents.controlbar = controlbar;
21
21
  return controlbar;
22
22
  }
23
- //# sourceMappingURL=controlbar.js.map
@@ -16,6 +16,12 @@ export declare function createPlayNextButton(player: PlayerAPI, npoplayer: NpoPl
16
16
  ariaLabel: string;
17
17
  hidden: false;
18
18
  }>;
19
+ export declare function createCancelPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
20
+ cssClass: string;
21
+ text: string;
22
+ ariaLabel: string;
23
+ hidden: false;
24
+ }>;
19
25
  export declare function createskipIntroButton(player: PlayerAPI): Button<{
20
26
  cssClass: string;
21
27
  text: string;
@@ -37,8 +37,8 @@ export function createForwardButton(player) {
37
37
  }
38
38
  export function createPlayNextButton(player, npoplayer) {
39
39
  const playNextButton = new Button({
40
- cssClass: 'ui-hugeplaynextbacktogglebutton ui-playNextButton bmpui-ui-button',
41
- text: 'De volgende aflevering wordt zo afgespeeld...',
40
+ cssClass: 'ui-textbutton ui-playNextButton bmpui-ui-button',
41
+ text: 'Volgende aflevering over <span class="countdown"></span>…',
42
42
  ariaLabel: 'Speel volgende aflevering af',
43
43
  hidden: false
44
44
  });
@@ -49,6 +49,20 @@ export function createPlayNextButton(player, npoplayer) {
49
49
  });
50
50
  return playNextButton;
51
51
  }
52
+ export function createCancelPlayNextButton(player, npoplayer) {
53
+ const cancelPlayNextButton = new Button({
54
+ cssClass: 'ui-textbutton ui-cancelPlayNextButton bmpui-ui-button',
55
+ text: 'Annuleer',
56
+ ariaLabel: 'Annuleer',
57
+ hidden: false
58
+ });
59
+ cancelPlayNextButton.onClick.subscribe(() => {
60
+ if (player != null) {
61
+ npoplayer.cancelPlayNextScreen();
62
+ }
63
+ });
64
+ return cancelPlayNextButton;
65
+ }
52
66
  export function createskipIntroButton(player) {
53
67
  const skipIntroButton = new Button({
54
68
  cssClass: 'ui-textbutton ui-skipintrobutton bmpui-ui-button bmpui-hidden',
@@ -93,4 +107,3 @@ export function createWatchFromStartButton(player, npoplayer) {
93
107
  npoplayer.uiComponents.watchFromStartButton = watchFromStartButton;
94
108
  return watchFromStartButton;
95
109
  }
96
- //# sourceMappingURL=buttons.js.map
@@ -40,4 +40,3 @@ export function createControlBar(npoplayer, settingsPanel) {
40
40
  npoplayer.uiComponents.controlbar = controlbar;
41
41
  return controlbar;
42
42
  }
43
- //# sourceMappingURL=controlbar.js.map
@@ -23,4 +23,3 @@ export function createCTABar(player, npoplayer, variant) {
23
23
  cssClasses: ['controlbar-textbuttons']
24
24
  });
25
25
  }
26
- //# sourceMappingURL=ctabar.js.map
@@ -5,4 +5,3 @@ export const addFragments = async (player, uiManager, section) => {
5
5
  };
6
6
  setFragments(player, uiManager, fragments);
7
7
  };
8
- //# sourceMappingURL=addFragments.js.map
@@ -208,4 +208,3 @@ export function createFullscreenToggleButton(player) {
208
208
  });
209
209
  return customFullscreenToggleButton;
210
210
  }
211
- //# sourceMappingURL=buttons.js.map
@@ -41,4 +41,3 @@ export function createControlBar(player, settingsPanel) {
41
41
  ]
42
42
  });
43
43
  }
44
- //# sourceMappingURL=controlbar.js.map
@@ -8,4 +8,3 @@ export function createCTABar(player) {
8
8
  cssClasses: ['controlbar-textbuttons']
9
9
  });
10
10
  }
11
- //# sourceMappingURL=ctabar.js.map
@@ -1,16 +1,9 @@
1
1
  import { Container } from 'bitmovin-player-ui';
2
2
  import { createPlayNextButton } from './buttons';
3
- import { showPlayNextScreen } from '../shared/playnextscreen';
4
3
  export function createPlayNextScreen() {
5
4
  const playNextButton = createPlayNextButton();
6
- if (window.bitmovin.customMessageHandler) {
7
- window.bitmovin.customMessageHandler.on('showPlayNextScreen', () => {
8
- showPlayNextScreen(window.bitmovin.customMessageHandler.sendAsynchronous('doPlayNext'));
9
- });
10
- }
11
5
  return new Container({
12
6
  components: [playNextButton],
13
7
  cssClasses: ['overlay-playnext']
14
8
  });
15
9
  }
16
- //# sourceMappingURL=playnext.js.map
@@ -5,4 +5,3 @@ export function createTitleBar() {
5
5
  titleBar.addComponent(nicam);
6
6
  return titleBar;
7
7
  }
8
- //# sourceMappingURL=titlebar.js.map
@@ -18,4 +18,3 @@ export function createTopBar(player, settingsPanel) {
18
18
  cssClasses: ['titlebar-small']
19
19
  });
20
20
  }
21
- //# sourceMappingURL=topbar.js.map
@@ -1,10 +1,10 @@
1
1
  import { Container } from 'bitmovin-player-ui';
2
- import { createPlayNextButton } from '../components/buttons';
2
+ import { createPlayNextButton, createCancelPlayNextButton } from '../components/buttons';
3
3
  export function createPlayNextScreen(player, npoplayer) {
4
4
  const playNextButton = createPlayNextButton(player, npoplayer);
5
+ const cancelButton = createCancelPlayNextButton(player, npoplayer);
5
6
  return new Container({
6
- components: [playNextButton],
7
+ components: [cancelButton, playNextButton],
7
8
  cssClasses: ['overlay-playnext']
8
9
  });
9
10
  }
10
- //# sourceMappingURL=playnext.js.map
@@ -18,4 +18,3 @@ export function createSeekBar(npoplayer) {
18
18
  cssClasses: ['controlbar-top']
19
19
  });
20
20
  }
21
- //# sourceMappingURL=seekbar.js.map
@@ -131,6 +131,8 @@ export function createSettingsPanel(npoplayer) {
131
131
  npoplayer.uiComponents.settingsPanel = settingsPanel;
132
132
  }
133
133
  const checkSubtitles = () => {
134
+ player?.off(PlayerEvent.SourceLoaded, checkSubtitles);
135
+ player?.off(PlayerEvent.AdBreakFinished, checkSubtitles);
134
136
  const subtitles = player?.subtitles?.list();
135
137
  if (subtitles != null && subtitles.length > 0) {
136
138
  subtitlesPanelItem.show();
@@ -140,6 +142,8 @@ export function createSettingsPanel(npoplayer) {
140
142
  }
141
143
  };
142
144
  const checkQuality = () => {
145
+ player?.off(PlayerEvent.SourceLoaded, checkQuality);
146
+ player?.off(PlayerEvent.AdBreakFinished, checkQuality);
143
147
  if (player?.getAvailableVideoQualities() !== undefined && player?.getAvailableVideoQualities().length > 0) {
144
148
  qualityPanelItem.show();
145
149
  }
@@ -147,14 +151,9 @@ export function createSettingsPanel(npoplayer) {
147
151
  qualityPanelItem.hide();
148
152
  }
149
153
  };
150
- player?.off(PlayerEvent.SourceLoaded, checkSubtitles);
151
154
  player?.on(PlayerEvent.SourceLoaded, checkSubtitles);
152
- player?.off(PlayerEvent.SourceLoaded, checkQuality);
153
155
  player?.on(PlayerEvent.SourceLoaded, checkQuality);
154
- player?.off(PlayerEvent.AdBreakFinished, checkSubtitles);
155
156
  player?.on(PlayerEvent.AdBreakFinished, checkSubtitles);
156
- player?.off(PlayerEvent.AdBreakFinished, checkQuality);
157
157
  player?.on(PlayerEvent.AdBreakFinished, checkQuality);
158
158
  return settingsPanel;
159
159
  }
160
- //# sourceMappingURL=settingspanel.js.map
@@ -1,2 +1,2 @@
1
- export declare function showPlayNextScreen(playNextFunction: () => void): void;
2
- export declare function hidePlayNextScreen(): void;
1
+ export declare function showPlayNextScreen(overlayDuration: number, containerEl: HTMLElement, proceedCallBack?: () => void): void;
2
+ export declare function hidePlayNextScreen(containerEl: HTMLElement): void;
@@ -1,17 +1,34 @@
1
- export function showPlayNextScreen(playNextFunction) {
2
- const playnextOverlay = document.querySelector('.bmpui-overlay-playnext');
3
- document
4
- .querySelector('.bmpui-overlay-playnext .bmpui-container-wrapper .bmpui-ui-hugeplaynextbacktogglebutton')
5
- ?.insertAdjacentHTML('beforeend', '<svg class="playnextcountdown" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 37 37" class="ui-circular-chart"><path shape-rendering="geometricPrecision" class="ui-circle-bg" fill="none" stroke="white" stroke-width="2" opacity="50%" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /><path shape-rendering="geometricPrecision" class="ui-circle" fill="none" stroke="white" stroke-width="2" stroke-dasharray="100, 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831" /></svg> ');
1
+ let countdownInterval = null;
2
+ export function showPlayNextScreen(overlayDuration, containerEl, proceedCallBack) {
3
+ const playnextOverlay = containerEl.querySelector('.bmpui-overlay-playnext');
4
+ const countdownLabel = playnextOverlay?.querySelector('.countdown');
5
+ if (countdownLabel) {
6
+ countdownLabel.innerHTML = overlayDuration.toString();
7
+ }
6
8
  playnextOverlay?.classList.add('show');
7
- window.setTimeout(() => {
8
- if (playnextOverlay?.classList.contains('show') ?? false) {
9
- playNextFunction();
9
+ const playNextButton = playnextOverlay?.querySelector('.ui-playNextButton');
10
+ if (playNextButton) {
11
+ playNextButton.focus();
12
+ }
13
+ let countdown = overlayDuration - 1;
14
+ countdownInterval = window.setInterval(() => {
15
+ if (playnextOverlay?.classList.contains('show') && countdownLabel) {
16
+ countdownLabel.innerHTML = countdown.toString();
17
+ countdown -= 1;
10
18
  }
11
- }, 15000);
19
+ if (countdown < 0) {
20
+ clearInterval(countdownInterval);
21
+ if (playnextOverlay?.classList.contains('show')) {
22
+ proceedCallBack?.();
23
+ playnextOverlay?.classList.remove('show');
24
+ }
25
+ }
26
+ }, 1000);
12
27
  }
13
- export function hidePlayNextScreen() {
14
- document.querySelector('.playnextcountdown')?.remove();
15
- document.querySelector('.bmpui-overlay-playnext')?.classList.remove('show');
28
+ export function hidePlayNextScreen(containerEl) {
29
+ containerEl.querySelector('.bmpui-overlay-playnext')?.classList.remove('show');
30
+ if (countdownInterval !== null) {
31
+ clearInterval(countdownInterval);
32
+ countdownInterval = null;
33
+ }
16
34
  }
17
- //# sourceMappingURL=playnextscreen.js.map
@@ -6,4 +6,3 @@ export function createTitleBar(npoplayer) {
6
6
  npoplayer.uiComponents.nicam = nicam;
7
7
  return titleBar;
8
8
  }
9
- //# sourceMappingURL=titlebar.js.map
@@ -27,4 +27,3 @@ export function createTopBar(player, settingsPanel) {
27
27
  cssClasses: ['titlebar-small']
28
28
  });
29
29
  }
30
- //# sourceMappingURL=topbar.js.map
@@ -7,4 +7,3 @@ export function addAccessibilityAttributes(container, metadata) {
7
7
  menuitem.removeAttribute('aria-pressed');
8
8
  });
9
9
  }
10
- //# sourceMappingURL=accessibilityhandler.js.map
@@ -38,4 +38,3 @@ export function handleQualityListBoxItemSelected(player, qualitySettingsOpenButt
38
38
  closeSettingsPanel(settingsPanel, mainSettingsPage);
39
39
  };
40
40
  }
41
- //# sourceMappingURL=listboxhandlers.js.map
@@ -1,3 +1,3 @@
1
1
  import { StreamObject, StreamOptions } from 'types/interfaces';
2
- export declare function processNicam(streamObject: StreamObject, containerId: string, streamOptions: StreamOptions | null): void;
2
+ export declare function processNicam(streamObject: StreamObject, nicamElement: HTMLElement | null, streamOptions: StreamOptions | null): void;
3
3
  export declare function addNicamIcon(character: string, nicamElement: Element): void;
@@ -1,5 +1,4 @@
1
- export function processNicam(streamObject, containerId, streamOptions) {
2
- const nicamElement = document.querySelector(`#${containerId} .bmpui-nicam`);
1
+ export function processNicam(streamObject, nicamElement, streamOptions) {
3
2
  const effectiveMetadata = streamOptions ? { ...streamObject.metadata, ...streamOptions } : streamObject.metadata;
4
3
  if (nicamElement) {
5
4
  nicamElement.innerHTML = '';
@@ -25,4 +24,3 @@ export function addNicamIcon(character, nicamElement) {
25
24
  span.classList.add('nicam-icon', iconClass);
26
25
  nicamElement.appendChild(span);
27
26
  }
28
- //# sourceMappingURL=nicamhandler.js.map