@npo/player 1.17.1 → 1.18.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 (154) hide show
  1. package/README.md +2 -1
  2. package/lib/js/ads/ster.js +1 -2
  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 +0 -1
  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 +38 -8
  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/_subtitles.scss +16 -0
  84. package/src/scss/components/_textbuttons.scss +18 -18
  85. package/src/scss/npoplayer.css +16 -11
  86. package/src/scss/variants/_player-large.scss +10 -0
  87. package/src/scss/variants/_player-medium.scss +6 -0
  88. package/src/scss/variants/_player-small.scss +6 -0
  89. package/lib/js/ads/ster.js.map +0 -1
  90. package/lib/js/ads/ster.test.js.map +0 -1
  91. package/lib/js/api/getstreamobject.js.map +0 -1
  92. package/lib/js/api/getstreamobject.test.js.map +0 -1
  93. package/lib/js/cdnproviders.js.map +0 -1
  94. package/lib/js/checks/apple.js.map +0 -1
  95. package/lib/js/checks/apple.test.js.map +0 -1
  96. package/lib/js/drm/drm.js.map +0 -1
  97. package/lib/js/drm/handlers/decideprofile.js.map +0 -1
  98. package/lib/js/drm/handlers/verifydrm.js.map +0 -1
  99. package/lib/js/drm/handlers/verifydrm.test.js.map +0 -1
  100. package/lib/js/fragments/removefragments.js.map +0 -1
  101. package/lib/js/fragments/setfragments.js.map +0 -1
  102. package/lib/js/playeractions/customerrors.test.js.map +0 -1
  103. package/lib/js/playeractions/handlers/customerrors.js.map +0 -1
  104. package/lib/js/playeractions/handlers/error.js.map +0 -1
  105. package/lib/js/playeractions/handlers/error.test.js.map +0 -1
  106. package/lib/js/playeractions/handlers/handleoffsets.js.map +0 -1
  107. package/lib/js/playeractions/handlers/handleoffsets.test.js.map +0 -1
  108. package/lib/js/playeractions/handlers/mediasessionactions.js.map +0 -1
  109. package/lib/js/playeractions/handlers/processplayerconfig.js.map +0 -1
  110. package/lib/js/playeractions/handlers/processsourceconfig.js.map +0 -1
  111. package/lib/js/playeractions/handlers/resolvekeypress.js.map +0 -1
  112. package/lib/js/playeractions/playeractions.js.map +0 -1
  113. package/lib/js/tracking/handlers/eventbinding.js.map +0 -1
  114. package/lib/js/tracking/handlers/eventlogging.js.map +0 -1
  115. package/lib/js/tracking/handlers/playertrackerinit.js.map +0 -1
  116. package/lib/js/tracking/handlers/playertrackerstart.js.map +0 -1
  117. package/lib/js/tracking/playertracker.js.map +0 -1
  118. package/lib/js/ui/components/adbutton.js.map +0 -1
  119. package/lib/js/ui/components/adlabel.js.map +0 -1
  120. package/lib/js/ui/components/audio/controlbar.js.map +0 -1
  121. package/lib/js/ui/components/buttons.js.map +0 -1
  122. package/lib/js/ui/components/controlbar.js.map +0 -1
  123. package/lib/js/ui/components/ctabar.js.map +0 -1
  124. package/lib/js/ui/components/nativemobile/addFragments.js.map +0 -1
  125. package/lib/js/ui/components/nativemobile/buttons.js.map +0 -1
  126. package/lib/js/ui/components/nativemobile/controlbar.js.map +0 -1
  127. package/lib/js/ui/components/nativemobile/ctabar.js.map +0 -1
  128. package/lib/js/ui/components/nativemobile/playnext.js.map +0 -1
  129. package/lib/js/ui/components/nativemobile/titlebar.js.map +0 -1
  130. package/lib/js/ui/components/nativemobile/topbar.js.map +0 -1
  131. package/lib/js/ui/components/playnext.js.map +0 -1
  132. package/lib/js/ui/components/seekbar.js.map +0 -1
  133. package/lib/js/ui/components/settingspanel.js.map +0 -1
  134. package/lib/js/ui/components/shared/playnextscreen.js.map +0 -1
  135. package/lib/js/ui/components/titlebar.js.map +0 -1
  136. package/lib/js/ui/components/topbar.js.map +0 -1
  137. package/lib/js/ui/handlers/accessibilityhandler.js.map +0 -1
  138. package/lib/js/ui/handlers/listboxhandlers.js.map +0 -1
  139. package/lib/js/ui/handlers/nicamhandler.js.map +0 -1
  140. package/lib/js/ui/handlers/nicamhandler.test.js.map +0 -1
  141. package/lib/js/ui/handlers/playnexthandlers.js.map +0 -1
  142. package/lib/js/ui/handlers/streamhandler.js.map +0 -1
  143. package/lib/js/ui/handlers/timecontrolhandlers.js.map +0 -1
  144. package/lib/js/ui/nativemobileuicontainer.js.map +0 -1
  145. package/lib/js/ui/nativemobileuifactory.js.map +0 -1
  146. package/lib/js/ui/uicontainer.js.map +0 -1
  147. package/lib/js/utilities/localizationconfig.js.map +0 -1
  148. package/lib/js/utilities/printversion.js.map +0 -1
  149. package/lib/js/utilities/utilities.js.map +0 -1
  150. package/lib/js/utilities/utilities.test.js.map +0 -1
  151. package/lib/npoplayer.js.map +0 -1
  152. package/lib/npoplayer.test.js.map +0 -1
  153. package/lib/types/classes.js.map +0 -1
  154. 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
@@ -116,8 +116,7 @@ export async function handlePreRolls(playerapi, streamObject, npoplayer) {
116
116
  playerapi.off(PlayerEvent.AdStarted, handleAdStarted);
117
117
  playerapi.off(PlayerEvent.AdFinished, handleAdFinished);
118
118
  playerapi.off(PlayerEvent.AdBreakFinished, handleAdBreakFinished);
119
- resolve();
120
119
  }
120
+ resolve();
121
121
  });
122
122
  }
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
@@ -157,4 +157,3 @@ export function createSettingsPanel(npoplayer) {
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
@@ -1,40 +1,35 @@
1
1
  import { processNicam } from './nicamhandler';
2
- describe("NICAM Processing", () => {
2
+ describe('NICAM Processing', () => {
3
3
  let mockElement;
4
4
  let mockStreamObject;
5
5
  let mockStreamOptions;
6
- let containerId = 'testId';
7
6
  beforeEach(() => {
8
7
  mockElement = { innerHTML: '', appendChild: jest.fn() };
9
8
  document.querySelector = jest.fn().mockReturnValue(mockElement);
10
9
  mockStreamObject = {
11
10
  metadata: {
12
11
  ageRating: '12',
13
- nicam: ["GEWELD", "ANGST", "GROF_TAALGEBRUIK"]
12
+ nicam: ['GEWELD', 'ANGST', 'GROF_TAALGEBRUIK']
14
13
  }
15
14
  };
16
15
  mockStreamOptions = {
17
16
  ageRating: '12',
18
- nicam: ["DRUGS_EN_ALCOHOL"]
17
+ nicam: ['DRUGS_EN_ALCOHOL']
19
18
  };
20
19
  });
21
- it("processes NICAM and age rating with streamOptions taking priority", () => {
22
- processNicam(mockStreamObject, containerId, mockStreamOptions);
23
- expect(document.querySelector).toHaveBeenCalledWith(`#${containerId} .bmpui-nicam`);
24
- expect(mockElement.innerHTML).toBe("");
20
+ it('processes NICAM and age rating with streamOptions taking priority', () => {
21
+ processNicam(mockStreamObject, mockElement, mockStreamOptions);
22
+ expect(mockElement.innerHTML).toBe('');
25
23
  expect(mockElement.appendChild).toHaveBeenCalledTimes(2);
26
24
  });
27
- it("does nothing if no NICAM element found", () => {
25
+ it('does nothing if no NICAM element found', () => {
28
26
  document.querySelector = jest.fn().mockReturnValue(null);
29
- processNicam(mockStreamObject, containerId, mockStreamOptions);
30
- expect(document.querySelector).toHaveBeenCalledWith(`#${containerId} .bmpui-nicam`);
27
+ processNicam(mockStreamObject, mockElement, mockStreamOptions);
31
28
  });
32
- it("does nothing if no metadata and no streamOptions", () => {
29
+ it('does nothing if no metadata and no streamOptions', () => {
33
30
  mockStreamObject.metadata = {};
34
31
  mockStreamOptions = {};
35
- processNicam(mockStreamObject, containerId, mockStreamOptions);
36
- expect(document.querySelector).toHaveBeenCalledWith(`#${containerId} .bmpui-nicam`);
32
+ processNicam(mockStreamObject, mockElement, mockStreamOptions);
37
33
  expect(mockElement.appendChild).not.toHaveBeenCalled();
38
34
  });
39
35
  });
40
- //# sourceMappingURL=nicamhandler.test.js.map
@@ -1,2 +1 @@
1
1
  "use strict";
2
- //# sourceMappingURL=playnexthandlers.js.map
@@ -1,4 +1,4 @@
1
- import { type StreamObject, type StreamOptions } from "../../../types/interfaces";
2
- import { PlayerAPI, SourceConfig } from "bitmovin-player";
3
- import { UIManager } from "bitmovin-player-ui";
1
+ import { type StreamObject, type StreamOptions } from '../../../types/interfaces';
2
+ import { PlayerAPI, SourceConfig } from 'bitmovin-player';
3
+ import { UIManager } from 'bitmovin-player-ui';
4
4
  export declare function processStream(streamObject: StreamObject | undefined, container: HTMLElement, streamOptions: StreamOptions | null, player: PlayerAPI, uiManager: UIManager, sourceConfig: SourceConfig): void;
@@ -1,7 +1,7 @@
1
- import { processNicam } from "./nicamhandler";
1
+ import { processNicam } from './nicamhandler';
2
2
  import * as playerAction from '../../playeractions/playeractions';
3
- import { PlayerEvent } from "bitmovin-player";
4
- import { setFragments } from "../../fragments/setfragments";
3
+ import { PlayerEvent } from 'bitmovin-player';
4
+ import { setFragments } from '../../fragments/setfragments';
5
5
  export function processStream(streamObject, container, streamOptions, player, uiManager, sourceConfig) {
6
6
  if (!streamObject)
7
7
  return;
@@ -21,7 +21,7 @@ export function processStream(streamObject, container, streamOptions, player, ui
21
21
  element.textContent = sourceConfig.title || '';
22
22
  }
23
23
  }
24
- processNicam(streamObject, container.id, streamOptions);
24
+ processNicam(streamObject, container.querySelector('.bmpui-nicam'), streamOptions);
25
25
  if (streamOptions?.startOffset != null)
26
26
  playerAction.handleStartOffset(player, streamOptions.startOffset);
27
27
  const isLiveStream = streamObject.stream.isLiveStream && streamObject.stream.hasDvrWindow;
@@ -38,4 +38,3 @@ export function processStream(streamObject, container, streamOptions, player, ui
38
38
  });
39
39
  }
40
40
  }
41
- //# sourceMappingURL=streamhandler.js.map
@@ -15,4 +15,3 @@ export function forward(player) {
15
15
  player.seek(Math.min(player.getDuration(), player.getCurrentTime() + interval));
16
16
  }
17
17
  }
18
- //# sourceMappingURL=timecontrolhandlers.js.map
@@ -48,4 +48,3 @@ export function nativeMobileUIContainer(player) {
48
48
  cssClasses: ['npo-player', 'native-mobile'],
49
49
  });
50
50
  }
51
- //# sourceMappingURL=nativemobileuicontainer.js.map