@npo/player 1.10.1 → 1.10.2

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 (114) hide show
  1. package/lib/js/ads/ster.js +107 -0
  2. package/lib/js/ads/ster.js.map +1 -0
  3. package/lib/js/ads/ster.test.js +91 -0
  4. package/lib/js/ads/ster.test.js.map +1 -0
  5. package/lib/js/api/getstreamobject.js +18 -0
  6. package/lib/js/api/getstreamobject.js.map +1 -0
  7. package/lib/js/cdnproviders.js +13 -0
  8. package/lib/js/cdnproviders.js.map +1 -0
  9. package/lib/js/checks/safari.js +10 -0
  10. package/lib/js/checks/safari.js.map +1 -0
  11. package/lib/js/checks/safari.test.js +21 -0
  12. package/lib/js/checks/safari.test.js.map +1 -0
  13. package/lib/js/drm/verifydrm.js +25 -0
  14. package/lib/js/drm/verifydrm.js.map +1 -0
  15. package/lib/js/drm/verifydrm.test.js +18 -0
  16. package/lib/js/drm/verifydrm.test.js.map +1 -0
  17. package/lib/js/fragments/setfragments.js +66 -0
  18. package/lib/js/fragments/setfragments.js.map +1 -0
  19. package/lib/js/playeractions/customerrors.test.js +52 -0
  20. package/lib/js/playeractions/customerrors.test.js.map +1 -0
  21. package/lib/js/playeractions/handlers/customerrors.js +57 -0
  22. package/lib/js/playeractions/handlers/customerrors.js.map +1 -0
  23. package/lib/js/playeractions/handlers/error.js +15 -0
  24. package/lib/js/playeractions/handlers/error.js.map +1 -0
  25. package/lib/js/playeractions/handlers/error.test.js +45 -0
  26. package/lib/js/playeractions/handlers/error.test.js.map +1 -0
  27. package/lib/js/playeractions/handlers/handleoffsets.js +45 -0
  28. package/lib/js/playeractions/handlers/handleoffsets.js.map +1 -0
  29. package/lib/js/playeractions/handlers/handleoffsets.test.js +50 -0
  30. package/lib/js/playeractions/handlers/handleoffsets.test.js.map +1 -0
  31. package/lib/js/playeractions/handlers/processplayerconfig.js +28 -0
  32. package/lib/js/playeractions/handlers/processplayerconfig.js.map +1 -0
  33. package/lib/js/playeractions/handlers/resolvekeypress.js +47 -0
  34. package/lib/js/playeractions/handlers/resolvekeypress.js.map +1 -0
  35. package/lib/js/playeractions/playeractions.js +5 -0
  36. package/lib/js/playeractions/playeractions.js.map +1 -0
  37. package/lib/js/tracking/handlers/eventbinding.js +72 -0
  38. package/lib/js/tracking/handlers/eventbinding.js.map +1 -0
  39. package/lib/js/tracking/handlers/eventlogging.js +32 -0
  40. package/lib/js/tracking/handlers/eventlogging.js.map +1 -0
  41. package/lib/js/tracking/handlers/playertrackerinit.js +20 -0
  42. package/lib/js/tracking/handlers/playertrackerinit.js.map +1 -0
  43. package/lib/js/tracking/handlers/playertrackerstart.js +22 -0
  44. package/lib/js/tracking/handlers/playertrackerstart.js.map +1 -0
  45. package/lib/js/tracking/playertracker.js +5 -0
  46. package/lib/js/tracking/playertracker.js.map +1 -0
  47. package/lib/js/ui/components/adbutton.js +12 -0
  48. package/lib/js/ui/components/adbutton.js.map +1 -0
  49. package/lib/js/ui/components/adlabel.js +8 -0
  50. package/lib/js/ui/components/adlabel.js.map +1 -0
  51. package/lib/js/ui/components/buttons.js +86 -0
  52. package/lib/js/ui/components/buttons.js.map +1 -0
  53. package/lib/js/ui/components/controlbar.js +58 -0
  54. package/lib/js/ui/components/controlbar.js.map +1 -0
  55. package/lib/js/ui/components/ctabar.d.ts +1 -1
  56. package/lib/js/ui/components/ctabar.js +24 -0
  57. package/lib/js/ui/components/ctabar.js.map +1 -0
  58. package/lib/js/ui/components/nativemobile/addFragments.js +8 -0
  59. package/lib/js/ui/components/nativemobile/addFragments.js.map +1 -0
  60. package/lib/js/ui/components/nativemobile/buttons.js +43 -0
  61. package/lib/js/ui/components/nativemobile/buttons.js.map +1 -0
  62. package/lib/js/ui/components/nativemobile/controlbar.js +52 -0
  63. package/lib/js/ui/components/nativemobile/controlbar.js.map +1 -0
  64. package/lib/js/ui/components/nativemobile/ctabar.js +12 -0
  65. package/lib/js/ui/components/nativemobile/ctabar.js.map +1 -0
  66. package/lib/js/ui/components/nativemobile/playnext.js +16 -0
  67. package/lib/js/ui/components/nativemobile/playnext.js.map +1 -0
  68. package/lib/js/ui/components/nativemobile/titlebar.js +8 -0
  69. package/lib/js/ui/components/nativemobile/titlebar.js.map +1 -0
  70. package/lib/js/ui/components/nativemobile/topbar.js +21 -0
  71. package/lib/js/ui/components/nativemobile/topbar.js.map +1 -0
  72. package/lib/js/ui/components/playnext.js +10 -0
  73. package/lib/js/ui/components/playnext.js.map +1 -0
  74. package/lib/js/ui/components/settingspanel.js +129 -0
  75. package/lib/js/ui/components/settingspanel.js.map +1 -0
  76. package/lib/js/ui/components/shared/playnextscreen.js +17 -0
  77. package/lib/js/ui/components/shared/playnextscreen.js.map +1 -0
  78. package/lib/js/ui/components/titlebar.js +9 -0
  79. package/lib/js/ui/components/titlebar.js.map +1 -0
  80. package/lib/js/ui/components/topbar.js +22 -0
  81. package/lib/js/ui/components/topbar.js.map +1 -0
  82. package/lib/js/ui/handlers/listboxhandlers.js +41 -0
  83. package/lib/js/ui/handlers/listboxhandlers.js.map +1 -0
  84. package/lib/js/ui/handlers/nicamhandler.js +15 -0
  85. package/lib/js/ui/handlers/nicamhandler.js.map +1 -0
  86. package/lib/js/ui/handlers/nicamhandler.test.js +34 -0
  87. package/lib/js/ui/handlers/nicamhandler.test.js.map +1 -0
  88. package/lib/js/ui/handlers/playnexthandlers.js +2 -0
  89. package/lib/js/ui/handlers/playnexthandlers.js.map +1 -0
  90. package/lib/js/ui/handlers/timecontrolhandlers.js +22 -0
  91. package/lib/js/ui/handlers/timecontrolhandlers.js.map +1 -0
  92. package/lib/js/ui/nativemobileuicontainer.js +48 -0
  93. package/lib/js/ui/nativemobileuicontainer.js.map +1 -0
  94. package/lib/js/ui/nativemobileuifactory.js +42 -0
  95. package/lib/js/ui/nativemobileuifactory.js.map +1 -0
  96. package/lib/js/ui/uicontainer.js +57 -0
  97. package/lib/js/ui/uicontainer.js.map +1 -0
  98. package/lib/js/utilities/localizationconfig.js +8 -0
  99. package/lib/js/utilities/localizationconfig.js.map +1 -0
  100. package/lib/js/utilities/printversion.js +27 -0
  101. package/lib/js/utilities/printversion.js.map +1 -0
  102. package/lib/js/utilities/utilities.js +52 -0
  103. package/lib/js/utilities/utilities.js.map +1 -0
  104. package/lib/lang/nl.json +72 -0
  105. package/lib/npoplayer.js +465 -2
  106. package/lib/npoplayer.js.map +1 -1
  107. package/lib/npoplayer.test.js +12 -0
  108. package/lib/npoplayer.test.js.map +1 -0
  109. package/lib/package.json +1 -1
  110. package/lib/types/classes.js +4 -0
  111. package/lib/types/classes.js.map +1 -0
  112. package/lib/types/interfaces.js +6 -0
  113. package/lib/types/interfaces.js.map +1 -0
  114. package/package.json +1 -1
@@ -0,0 +1,43 @@
1
+ import { Button, SettingsToggleButton } from 'bitmovin-player-ui';
2
+ import { sendCustomMessage } from '../../nativemobileuicontainer';
3
+ import { CustomMessages } from '../../../../types/interfaces';
4
+ export function createPlayNextButton(player) {
5
+ const playNextButton = new Button({
6
+ cssClass: 'ui-hugeplaynextbacktogglebutton ui-playNextButton bmpui-ui-button',
7
+ text: 'De volgende aflevering wordt zo afgespeeld...',
8
+ hidden: false
9
+ });
10
+ if (player != null) {
11
+ playNextButton.onClick.subscribe(() => {
12
+ const result = sendCustomMessage(CustomMessages.DO_PLAY_NEXT);
13
+ if (result.defaultActionRequired === true) {
14
+ console.log('do something');
15
+ }
16
+ else {
17
+ console.log('do something else');
18
+ }
19
+ });
20
+ }
21
+ return playNextButton;
22
+ }
23
+ export function createWatchFromStartButton() {
24
+ return new Button({
25
+ cssClass: 'ui-textbutton ui-watchfromstartbutton bmpui-ui-button',
26
+ text: 'Kijk vanaf het begin',
27
+ hidden: true
28
+ });
29
+ }
30
+ export function createSettingsButton(player, settingsPanel) {
31
+ const customSettingsToggleButton = new SettingsToggleButton({ settingsPanel });
32
+ if (player != null) {
33
+ customSettingsToggleButton.onToggleOn.subscribe(() => {
34
+ const result = sendCustomMessage(CustomMessages.TOGGLE_SETTINGS_PANEL);
35
+ if (result.defaultActionRequired === false) {
36
+ settingsPanel.hide();
37
+ customSettingsToggleButton.off();
38
+ }
39
+ });
40
+ }
41
+ return customSettingsToggleButton;
42
+ }
43
+ //# sourceMappingURL=buttons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../../../../../src/js/ui/components/nativemobile/buttons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAiB,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAA8B,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE1F,MAAM,UAAU,oBAAoB,CAChC,MAAwB;IAExB,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC;QAC9B,QAAQ,EACJ,mEAAmE;QACvE,IAAI,EAAE,+CAA+C;QACrD,MAAM,EAAE,KAAK;KAChB,CAAC,CAAA;IAEF,IAAI,MAAM,IAAI,IAAI,EAAE;QAChB,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE;YAClC,MAAM,MAAM,GAA+B,iBAAiB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YACzF,IAAI,MAAM,CAAC,qBAAqB,KAAK,IAAI,EAAE;gBACvC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;aAC9B;iBAAM;gBACH,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;aACnC;QACL,CAAC,CAAC,CAAA;KACL;IAED,OAAO,cAAc,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,0BAA0B;IACtC,OAAO,IAAI,MAAM,CAAC;QACd,QAAQ,EAAE,uDAAuD;QACjE,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,IAAI;KACf,CAAC,CAAA;AACN,CAAC;AAED,MAAM,UAAU,oBAAoB,CAChC,MAAwB,EACxB,aAA4B;IAE5B,MAAM,0BAA0B,GAAG,IAAI,oBAAoB,CAAC,EAAE,aAAa,EAAE,CAAC,CAAA;IAE9E,IAAI,MAAM,IAAI,IAAI,EAAE;QAChB,0BAA0B,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YACjD,MAAM,MAAM,GAA+B,iBAAiB,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;YAClG,IAAI,MAAM,CAAC,qBAAqB,KAAK,KAAK,EAAE;gBACxC,aAAa,CAAC,IAAI,EAAE,CAAA;gBACpB,0BAA0B,CAAC,GAAG,EAAE,CAAA;aACnC;QACL,CAAC,CAAC,CAAA;KACL;IAED,OAAO,0BAA0B,CAAC;AACtC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { PlayerEvent } from 'bitmovin-player';
2
+ import { ControlBar, Container, PlaybackTimeLabel, PlaybackTimeLabelMode, SeekBar, SeekBarLabel, PlaybackToggleButton, VolumeToggleButton, VolumeSlider, Spacer, PictureInPictureToggleButton, AirPlayToggleButton, SettingsToggleButton, FullscreenToggleButton, CastToggleButton } from 'bitmovin-player-ui';
3
+ import { createForwardButton, createRewindButton } from '../buttons';
4
+ import { airPlaySupported } from '../../../utilities/utilities';
5
+ export function createControlBar(player, settingsPanel) {
6
+ const rewindButton = createRewindButton(player);
7
+ const forwardButton = createForwardButton(player);
8
+ const chromeCastButton = new CastToggleButton({
9
+ hidden: true
10
+ });
11
+ player?.on(PlayerEvent.CastAvailable, () => {
12
+ if (player?.isCastAvailable())
13
+ chromeCastButton.show();
14
+ });
15
+ return new ControlBar({
16
+ components: [
17
+ settingsPanel,
18
+ new Container({
19
+ components: [
20
+ new PlaybackTimeLabel({
21
+ timeLabelMode: PlaybackTimeLabelMode.CurrentTime,
22
+ hideInLivePlayback: true,
23
+ cssClasses: ['current-time']
24
+ }),
25
+ new SeekBar({ label: new SeekBarLabel() }),
26
+ new PlaybackTimeLabel({
27
+ timeLabelMode: PlaybackTimeLabelMode.TotalTime,
28
+ cssClasses: ['total-time']
29
+ })
30
+ ],
31
+ cssClasses: ['controlbar-top']
32
+ }),
33
+ new Container({
34
+ components: [
35
+ new PlaybackToggleButton(),
36
+ new VolumeToggleButton(),
37
+ new VolumeSlider(),
38
+ rewindButton,
39
+ forwardButton,
40
+ new Spacer(),
41
+ ...(document.pictureInPictureEnabled && /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? [new PictureInPictureToggleButton()] : []),
42
+ ...(airPlaySupported() ? [new AirPlayToggleButton()] : []),
43
+ chromeCastButton,
44
+ new SettingsToggleButton({ settingsPanel }),
45
+ new FullscreenToggleButton()
46
+ ],
47
+ cssClasses: ['controlbar-bottom']
48
+ })
49
+ ]
50
+ });
51
+ }
52
+ //# sourceMappingURL=controlbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controlbar.js","sourceRoot":"","sources":["../../../../../../src/js/ui/components/nativemobile/controlbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EACH,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,OAAO,EACP,YAAY,EAEZ,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,4BAA4B,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EACnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,MAAM,UAAU,gBAAgB,CAC5B,MAAiB,EACjB,aAA4B;IAE5B,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAEjD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;QAC1C,MAAM,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,GAAG,EAAE;QACvC,IAAG,MAAM,EAAE,eAAe,EAAE;YAAE,gBAAgB,CAAC,IAAI,EAAE,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,UAAU,CAAC;QAClB,UAAU,EAAE;YACR,aAAa;YACb,IAAI,SAAS,CAAC;gBACV,UAAU,EAAE;oBACR,IAAI,iBAAiB,CAAC;wBAClB,aAAa,EAAE,qBAAqB,CAAC,WAAW;wBAChD,kBAAkB,EAAE,IAAI;wBACxB,UAAU,EAAE,CAAC,cAAc,CAAC;qBAC/B,CAAC;oBACF,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,EAAE,CAAC;oBAC1C,IAAI,iBAAiB,CAAC;wBAClB,aAAa,EAAE,qBAAqB,CAAC,SAAS;wBAC9C,UAAU,EAAE,CAAC,YAAY,CAAC;qBAC7B,CAAC;iBACL;gBACD,UAAU,EAAE,CAAC,gBAAgB,CAAC;aACjC,CAAC;YACF,IAAI,SAAS,CAAC;gBACV,UAAU,EAAE;oBACR,IAAI,oBAAoB,EAAE;oBAC1B,IAAI,kBAAkB,EAAE;oBACxB,IAAI,YAAY,EAAE;oBAClB,YAAY;oBACZ,aAAa;oBACb,IAAI,MAAM,EAAE;oBACZ,GAAG,CAAC,QAAQ,CAAC,uBAAuB,IAAI,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,4BAA4B,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/I,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,gBAAgB;oBAChB,IAAI,oBAAoB,CAAC,EAAE,aAAa,EAAE,CAAC;oBAC3C,IAAI,sBAAsB,EAAE;iBAC/B;gBACD,UAAU,EAAE,CAAC,mBAAmB,CAAC;aACpC,CAAC;SACL;KACJ,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Container } from 'bitmovin-player-ui';
2
+ import { createWatchFromStartButton } from '../nativemobile/buttons';
3
+ import { createGoBackLiveButton } from '../buttons';
4
+ export function createCTABar(player) {
5
+ const goBackLiveButton = createGoBackLiveButton(player);
6
+ const watchFromStartButton = createWatchFromStartButton();
7
+ return new Container({
8
+ components: [watchFromStartButton, goBackLiveButton],
9
+ cssClasses: ['controlbar-textbuttons']
10
+ });
11
+ }
12
+ //# sourceMappingURL=ctabar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctabar.js","sourceRoot":"","sources":["../../../../../../src/js/ui/components/nativemobile/ctabar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAGnD,MAAM,UAAU,YAAY,CAAE,MAAwB;IAClD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACvD,MAAM,oBAAoB,GAAG,0BAA0B,EAAE,CAAA;IAEzD,OAAO,IAAI,SAAS,CAAC;QACjB,UAAU,EAAE,CAAC,oBAAoB,EAAE,gBAAgB,CAAC;QACpD,UAAU,EAAE,CAAC,wBAAwB,CAAC;KACzC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Container } from 'bitmovin-player-ui';
2
+ import { createPlayNextButton } from './buttons';
3
+ import { showPlayNextScreen } from '../shared/playnextscreen';
4
+ export function createPlayNextScreen(player) {
5
+ const playNextButton = createPlayNextButton(player);
6
+ if (window.bitmovin.customMessageHandler) {
7
+ window.bitmovin.customMessageHandler.on('showPlayNextScreen', () => {
8
+ showPlayNextScreen(window.bitmovin.customMessageHandler.sendAsynchronous('doPlayNext'));
9
+ });
10
+ }
11
+ return new Container({
12
+ components: [playNextButton],
13
+ cssClasses: ['overlay-playnext']
14
+ });
15
+ }
16
+ //# sourceMappingURL=playnext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playnext.js","sourceRoot":"","sources":["../../../../../../src/js/ui/components/nativemobile/playnext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAK7D,MAAM,UAAU,oBAAoB,CAChC,MAAwB;IACxB,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAEnD,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE;QACtC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC/D,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAA;KACL;IAED,OAAO,IAAI,SAAS,CAAC;QACjB,UAAU,EAAE,CAAC,cAAc,CAAC;QAC5B,UAAU,EAAE,CAAC,kBAAkB,CAAC;KACnC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Label, TitleBar } from 'bitmovin-player-ui';
2
+ export function createTitleBar() {
3
+ const nicam = new Label({ text: '', cssClass: 'nicam' });
4
+ const titleBar = new TitleBar({ cssClasses: ['metadata'] });
5
+ titleBar.addComponent(nicam);
6
+ return titleBar;
7
+ }
8
+ //# sourceMappingURL=titlebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"titlebar.js","sourceRoot":"","sources":["../../../../../../src/js/ui/components/nativemobile/titlebar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,UAAU,cAAc;IAC1B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAC3D,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAE5B,OAAO,QAAQ,CAAA;AACnB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Container, TitleBar, PictureInPictureToggleButton, AirPlayToggleButton, CastToggleButton, FullscreenToggleButton, VolumeToggleButton } from 'bitmovin-player-ui';
2
+ import { createSettingsButton } from './buttons';
3
+ export function createTopBar(player, settingsPanel) {
4
+ return new TitleBar({
5
+ components: [
6
+ new Container({
7
+ components: [
8
+ new CastToggleButton(),
9
+ new AirPlayToggleButton(),
10
+ createSettingsButton(player, settingsPanel),
11
+ new PictureInPictureToggleButton(),
12
+ new FullscreenToggleButton(),
13
+ new VolumeToggleButton()
14
+ ],
15
+ cssClasses: ['controlbar-top', 'controlbar-small']
16
+ })
17
+ ],
18
+ cssClasses: ['titlebar-small']
19
+ });
20
+ }
21
+ //# sourceMappingURL=topbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topbar.js","sourceRoot":"","sources":["../../../../../../src/js/ui/components/nativemobile/topbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,SAAS,EACT,QAAQ,EACR,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAGhD,MAAM,UAAU,YAAY,CAAE,MAAwB,EAAE,aAA4B;IAChF,OAAO,IAAI,QAAQ,CAAC;QAChB,UAAU,EAAE;YACR,IAAI,SAAS,CAAC;gBACV,UAAU,EAAE;oBACR,IAAI,gBAAgB,EAAE;oBACtB,IAAI,mBAAmB,EAAE;oBACzB,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC;oBAC3C,IAAI,4BAA4B,EAAE;oBAClC,IAAI,sBAAsB,EAAE;oBAC5B,IAAI,kBAAkB,EAAE;iBAC3B;gBACD,UAAU,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;aACrD,CAAC;SACL;QACD,UAAU,EAAE,CAAC,gBAAgB,CAAC;KACjC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Container } from 'bitmovin-player-ui';
2
+ import { createPlayNextButton } from '../components/buttons';
3
+ export function createPlayNextScreen(player, npoplayer) {
4
+ const playNextButton = createPlayNextButton(player, npoplayer);
5
+ return new Container({
6
+ components: [playNextButton],
7
+ cssClasses: ['overlay-playnext']
8
+ });
9
+ }
10
+ //# sourceMappingURL=playnext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playnext.js","sourceRoot":"","sources":["../../../../../src/js/ui/components/playnext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAI5D,MAAM,UAAU,oBAAoB,CAChC,MAAwB,EACxB,SAAoB;IAEpB,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAE9D,OAAO,IAAI,SAAS,CAAC;QACjB,UAAU,EAAE,CAAC,cAAc,CAAC;QAC5B,UAAU,EAAE,CAAC,kBAAkB,CAAC;KACnC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,129 @@
1
+ import { SubtitleListBox, ListBox, SettingsPanel, SettingsPanelPage, SettingsPanelPageOpenButton, SettingsPanelPageBackButton, Button, Label, SettingsPanelItem, AudioQualitySelectBox, AudioTrackSelectBox } from 'bitmovin-player-ui';
2
+ import { localize } from '../../utilities/utilities';
3
+ import { handleSubtitleListBoxItemSelected, handleSpeedListBoxItemSelected, handleQualityListBoxItemSelected } from '../handlers/listboxhandlers';
4
+ export function createSettingsPanel(npoplayer) {
5
+ const player = ('player' in npoplayer) ? npoplayer.player : npoplayer;
6
+ const subtitleListBox = new SubtitleListBox();
7
+ const speedListBox = new ListBox({
8
+ items: [
9
+ { key: '0.25', label: '0.25x' },
10
+ { key: '0.5', label: '0.5x' },
11
+ { key: '1', label: '1x' },
12
+ { key: '1.5', label: '1.5x' },
13
+ { key: '2', label: '2x' }
14
+ ]
15
+ });
16
+ const qualityListBox = new ListBox();
17
+ const settingsLabel = localize('settings');
18
+ const videoqualityLabel = localize('settings.video.quality');
19
+ const speedLabel = localize('speed');
20
+ const subtitlesLabel = localize('settings.subtitles');
21
+ const audioqualityLabel = localize('settings.audio.quality');
22
+ const audiotrackLabel = localize('settings.audio.track');
23
+ const autoLabel = localize('auto');
24
+ const settingTriggerClass = 'settings-trigger';
25
+ const settingsBackButtonClass = 'settings-back-button';
26
+ const listboxPanelClass = 'listbox-panel';
27
+ const listboxPagerButtonClass = 'listbox-pager-button';
28
+ const subtitlePanelPage = new SettingsPanelPage({
29
+ components: [
30
+ new Button({ cssClass: settingTriggerClass }),
31
+ new SettingsPanelItem('', subtitleListBox)
32
+ ],
33
+ cssClasses: [listboxPanelClass]
34
+ });
35
+ const speedPanelPage = new SettingsPanelPage({
36
+ components: [
37
+ new Button({ cssClass: settingTriggerClass }),
38
+ new SettingsPanelItem('', speedListBox)
39
+ ],
40
+ cssClasses: [listboxPanelClass]
41
+ });
42
+ const qualityPanelPage = new SettingsPanelPage({
43
+ components: [
44
+ new Button({ cssClass: settingTriggerClass }),
45
+ new SettingsPanelItem('', qualityListBox)
46
+ ],
47
+ cssClasses: [listboxPanelClass]
48
+ });
49
+ const settingsTriggerButton = new Button({ cssClass: settingTriggerClass });
50
+ const mainSettingsPage = new SettingsPanelPage({
51
+ components: [
52
+ settingsTriggerButton,
53
+ new Label({ text: settingsLabel, cssClass: 'setting-header' }),
54
+ new SettingsPanelItem(audioqualityLabel, new AudioQualitySelectBox()),
55
+ new SettingsPanelItem(audiotrackLabel, new AudioTrackSelectBox())
56
+ ],
57
+ cssClasses: ['main-panel']
58
+ });
59
+ mainSettingsPage.onActive.subscribeOnce(() => {
60
+ qualityListBox.addItem('auto', autoLabel);
61
+ player?.getAvailableVideoQualities().forEach(quality => {
62
+ qualityListBox.addItem(quality.id, quality.label ?? 'test');
63
+ });
64
+ qualityListBox.selectItem('auto');
65
+ });
66
+ const settingsPanel = new SettingsPanel({
67
+ components: [
68
+ mainSettingsPage,
69
+ subtitlePanelPage,
70
+ speedPanelPage,
71
+ qualityPanelPage
72
+ ],
73
+ hidden: true,
74
+ pageTransitionAnimation: false
75
+ });
76
+ const subtitleSettingsOpenButton = new SettingsPanelPageOpenButton({
77
+ targetPage: subtitlePanelPage,
78
+ container: settingsPanel,
79
+ text: 'Nederlands',
80
+ cssClasses: [listboxPagerButtonClass]
81
+ });
82
+ const speedSettingsOpenButton = new SettingsPanelPageOpenButton({
83
+ targetPage: speedPanelPage,
84
+ container: settingsPanel,
85
+ text: '1x',
86
+ cssClasses: [listboxPagerButtonClass]
87
+ });
88
+ const qualitySettingsOpenButton = new SettingsPanelPageOpenButton({
89
+ targetPage: qualityPanelPage,
90
+ container: settingsPanel,
91
+ text: 'automatisch',
92
+ cssClasses: [listboxPagerButtonClass]
93
+ });
94
+ const subtitlesPanelItem = new SettingsPanelItem(subtitlesLabel, subtitleSettingsOpenButton, { hidden: false });
95
+ const speedPanelItem = new SettingsPanelItem(speedLabel, speedSettingsOpenButton);
96
+ const qualityPanelItem = new SettingsPanelItem(videoqualityLabel, qualitySettingsOpenButton, { hidden: false });
97
+ mainSettingsPage.addComponent(subtitlesPanelItem);
98
+ mainSettingsPage.addComponent(speedPanelItem);
99
+ mainSettingsPage.addComponent(qualityPanelItem);
100
+ subtitlePanelPage.addComponent(new SettingsPanelPageBackButton({
101
+ targetPage: mainSettingsPage,
102
+ container: settingsPanel,
103
+ text: 'Ondertiteling',
104
+ cssClasses: [settingsBackButtonClass]
105
+ }));
106
+ speedPanelPage.addComponent(new SettingsPanelPageBackButton({
107
+ targetPage: mainSettingsPage,
108
+ container: settingsPanel,
109
+ text: 'Snelheid',
110
+ cssClasses: [settingsBackButtonClass]
111
+ }));
112
+ qualityPanelPage.addComponent(new SettingsPanelPageBackButton({
113
+ targetPage: mainSettingsPage,
114
+ container: settingsPanel,
115
+ text: 'Kwaliteit',
116
+ cssClasses: [settingsBackButtonClass]
117
+ }));
118
+ if (('uiComponents' in npoplayer)) {
119
+ npoplayer.uiComponents.subtitlesButton = subtitlesPanelItem;
120
+ npoplayer.uiComponents.qualityButton = qualityPanelItem;
121
+ }
122
+ subtitleListBox.onItemSelected.subscribe(handleSubtitleListBoxItemSelected(subtitleSettingsOpenButton, settingsPanel, mainSettingsPage));
123
+ speedListBox.selectItem('1');
124
+ speedListBox.onItemSelected.subscribe(handleSpeedListBoxItemSelected(player, speedSettingsOpenButton, settingsPanel, mainSettingsPage));
125
+ qualityListBox.selectItem('auto');
126
+ qualityListBox.onItemSelected.subscribe(handleQualityListBoxItemSelected(player, qualitySettingsOpenButton, settingsPanel, mainSettingsPage));
127
+ return settingsPanel;
128
+ }
129
+ //# sourceMappingURL=settingspanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingspanel.js","sourceRoot":"","sources":["../../../../../src/js/ui/components/settingspanel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
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> ');
6
+ playnextOverlay?.classList.add('show');
7
+ window.setTimeout(() => {
8
+ if (playnextOverlay?.classList.contains('show') ?? false) {
9
+ playNextFunction();
10
+ }
11
+ }, 15000);
12
+ }
13
+ export function hidePlayNextScreen() {
14
+ document.querySelector('.playnextcountdown')?.remove();
15
+ document.querySelector('.bmpui-overlay-playnext')?.classList.remove('show');
16
+ }
17
+ //# sourceMappingURL=playnextscreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playnextscreen.js","sourceRoot":"","sources":["../../../../../../src/js/ui/components/shared/playnextscreen.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAE,gBAA4B;IAC5D,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAC1C,yBAAyB,CAC5B,CAAA;IACD,QAAQ;SACH,aAAa,CACV,yFAAyF,CAC5F;QACD,EAAE,kBAAkB,CAChB,WAAW,EACX,giBAAgiB,CACniB,CAAA;IACL,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;QAEnB,IAAI,eAAe,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE;YACtD,gBAAgB,EAAE,CAAC;SACtB;IACL,CAAC,EAAE,KAAK,CAAC,CAAA;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IACtD,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC/E,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Label, TitleBar } from 'bitmovin-player-ui';
2
+ export function createTitleBar(npoplayer) {
3
+ const nicam = new Label({ text: '', cssClass: 'nicam' });
4
+ const titleBar = new TitleBar({ cssClasses: ['metadata'] });
5
+ titleBar.addComponent(nicam);
6
+ npoplayer.uiComponents.nicam = nicam;
7
+ return titleBar;
8
+ }
9
+ //# sourceMappingURL=titlebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"titlebar.js","sourceRoot":"","sources":["../../../../../src/js/ui/components/titlebar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAGpD,MAAM,UAAU,cAAc,CAAE,SAAoB;IAChD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAC3D,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC5B,SAAS,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAA;IAEpC,OAAO,QAAQ,CAAA;AACnB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Container, TitleBar, PictureInPictureToggleButton, AirPlayToggleButton, CastToggleButton, SettingsToggleButton, FullscreenToggleButton, VolumeControlButton } from 'bitmovin-player-ui';
2
+ export function createTopBar(settingsPanel) {
3
+ return new TitleBar({
4
+ components: [
5
+ new Container({
6
+ components: [
7
+ new PictureInPictureToggleButton(),
8
+ new AirPlayToggleButton(),
9
+ new CastToggleButton(),
10
+ new SettingsToggleButton({ settingsPanel }),
11
+ new FullscreenToggleButton(),
12
+ new VolumeControlButton({
13
+ vertical: true,
14
+ }),
15
+ ],
16
+ cssClasses: ['controlbar-top', 'controlbar-small']
17
+ })
18
+ ],
19
+ cssClasses: ['titlebar-small']
20
+ });
21
+ }
22
+ //# sourceMappingURL=topbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topbar.js","sourceRoot":"","sources":["../../../../../src/js/ui/components/topbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,SAAS,EACT,QAAQ,EACR,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACtB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,UAAU,YAAY,CAAE,aAA4B;IACtD,OAAO,IAAI,QAAQ,CAAC;QAChB,UAAU,EAAE;YACR,IAAI,SAAS,CAAC;gBACV,UAAU,EAAE;oBACR,IAAI,4BAA4B,EAAE;oBAClC,IAAI,mBAAmB,EAAE;oBACzB,IAAI,gBAAgB,EAAE;oBACtB,IAAI,oBAAoB,CAAC,EAAE,aAAa,EAAE,CAAC;oBAC3C,IAAI,sBAAsB,EAAE;oBAC5B,IAAI,mBAAmB,CAAC;wBACpB,QAAQ,EAAE,IAAI;qBACjB,CAAC;iBACL;gBACD,UAAU,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;aACrD,CAAC;SACL;QACD,UAAU,EAAE,CAAC,gBAAgB,CAAC;KACjC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,41 @@
1
+ function closeSettingsPanel(settingsPanel, mainSettingsPage) {
2
+ setTimeout(() => {
3
+ if (settingsPanel.getActivePage() !== mainSettingsPage)
4
+ settingsPanel.setActivePage(mainSettingsPage);
5
+ }, 100);
6
+ }
7
+ export function handleSubtitleListBoxItemSelected(subtitleSettingsOpenButton, settingsPanel, mainSettingsPage) {
8
+ return (e) => {
9
+ e.getItems().forEach((item) => {
10
+ if (item.key === e.getSelectedItem()) {
11
+ subtitleSettingsOpenButton.setText(item.label);
12
+ }
13
+ });
14
+ closeSettingsPanel(settingsPanel, mainSettingsPage);
15
+ };
16
+ }
17
+ export function handleSpeedListBoxItemSelected(player, speedSettingsOpenButton, settingsPanel, mainSettingsPage) {
18
+ return (source, args) => {
19
+ source.getItems().forEach((item) => {
20
+ if (item.key === args) {
21
+ player?.setPlaybackSpeed(parseFloat(item.key));
22
+ speedSettingsOpenButton.setText(item.label);
23
+ source.selectItem(item.key);
24
+ }
25
+ });
26
+ closeSettingsPanel(settingsPanel, mainSettingsPage);
27
+ };
28
+ }
29
+ export function handleQualityListBoxItemSelected(player, qualitySettingsOpenButton, settingsPanel, mainSettingsPage) {
30
+ return (source, args) => {
31
+ source.getItems().forEach((item) => {
32
+ if (item.key === args) {
33
+ player?.setVideoQuality(item.key);
34
+ qualitySettingsOpenButton.setText(item.label);
35
+ source.selectItem(item.key);
36
+ }
37
+ });
38
+ closeSettingsPanel(settingsPanel, mainSettingsPage);
39
+ };
40
+ }
41
+ //# sourceMappingURL=listboxhandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listboxhandlers.js","sourceRoot":"","sources":["../../../../../src/js/ui/handlers/listboxhandlers.ts"],"names":[],"mappings":"AAQA,SAAS,kBAAkB,CAAC,aAA4B,EAAE,gBAAmC;IACzF,UAAU,CAAC,GAAG,EAAE;QACZ,IAAG,aAAa,CAAC,aAAa,EAAE,KAAK,gBAAgB;YAAE,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAA;IACxG,CAAC,EAAE,GAAG,CAAC,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC7C,0BAAuD,EACvD,aAA4B,EAC5B,gBAAmC;IAEnC,OAAO,CAAC,CAAM,EAAE,EAAE;QACd,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;YAC/B,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,eAAe,EAAE,EAAE;gBAClC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aACjD;QACL,CAAC,CAAC,CAAA;QACF,kBAAkB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACxD,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC1C,MAAwB,EACxB,uBAAoD,EACpD,aAA4B,EAC5B,gBAAmC;IAEnC,OAAO,CAAC,MAAW,EAAE,IAAS,EAAE,EAAE;QAC9B,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;gBACnB,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC9C,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC3C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aAC9B;QACL,CAAC,CAAC,CAAA;QACF,kBAAkB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACxD,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC5C,MAAwB,EACxB,yBAAsD,EACtD,aAA4B,EAC5B,gBAAmC;IAEnC,OAAO,CAAC,MAAW,EAAE,IAAS,EAAE,EAAE;QAC9B,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;gBACnB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACjC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC7C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aAC9B;QACL,CAAC,CAAC,CAAA;QACF,kBAAkB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACxD,CAAC,CAAA;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ export function processNicam(streamObject, containerId) {
2
+ const nicamElement = document.querySelector(`#${containerId} .bmpui-nicam`);
3
+ if (nicamElement) {
4
+ nicamElement.innerHTML = '';
5
+ streamObject.metadata.ageRating && addNicamIcon(streamObject.metadata.ageRating, nicamElement);
6
+ streamObject.metadata.nicam?.forEach((character) => addNicamIcon(character, nicamElement));
7
+ }
8
+ }
9
+ function addNicamIcon(character, nicamElement) {
10
+ const iconClass = `nicam-icon-${character.toLowerCase()}`;
11
+ const span = document.createElement('span');
12
+ span.classList.add('nicam-icon', iconClass);
13
+ nicamElement.appendChild(span);
14
+ }
15
+ //# sourceMappingURL=nicamhandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nicamhandler.js","sourceRoot":"","sources":["../../../../../src/js/ui/handlers/nicamhandler.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,YAAY,CAAC,YAA0B,EAAE,WAAmB;IACxE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,WAAW,eAAe,CAAC,CAAA;IAC3E,IAAI,YAAY,EAAE;QACd,YAAY,CAAC,SAAS,GAAG,EAAE,CAAA;QAC3B,YAAY,CAAC,QAAQ,CAAC,SAAS,IAAI,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAC9F,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,SAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;KACrG;AACL,CAAC;AASD,SAAS,YAAY,CAAC,SAAiB,EAAE,YAAqB;IAC1D,MAAM,SAAS,GAAG,cAAc,SAAS,CAAC,WAAW,EAAE,EAAE,CAAA;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAC3C,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AAClC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { processNicam } from './nicamhandler';
2
+ describe("NICAM Processing", () => {
3
+ let mockElement;
4
+ let mockStreamObject;
5
+ let containerId = 'testId';
6
+ beforeEach(() => {
7
+ mockElement = { innerHTML: '', appendChild: jest.fn() };
8
+ document.querySelector = jest.fn().mockReturnValue(mockElement);
9
+ mockStreamObject = {
10
+ metadata: {
11
+ ageRating: '12',
12
+ nicam: ["GEWELD", "ANGST", "GROF_TAALGEBRUIK"]
13
+ }
14
+ };
15
+ });
16
+ it("processes NICAM and age rating", () => {
17
+ processNicam(mockStreamObject, containerId);
18
+ expect(document.querySelector).toHaveBeenCalledWith(`#${containerId} .bmpui-nicam`);
19
+ expect(mockElement.innerHTML).toBe("");
20
+ expect(mockElement.appendChild).toHaveBeenCalledTimes(4);
21
+ });
22
+ it("does nothing if no NICAM element found", () => {
23
+ document.querySelector = jest.fn().mockReturnValue(null);
24
+ processNicam(mockStreamObject, containerId);
25
+ expect(document.querySelector).toHaveBeenCalledWith(`#${containerId} .bmpui-nicam`);
26
+ });
27
+ it("does nothing if no metadata", () => {
28
+ mockStreamObject.metadata = {};
29
+ processNicam(mockStreamObject, containerId);
30
+ expect(document.querySelector).toHaveBeenCalledWith(`#${containerId} .bmpui-nicam`);
31
+ expect(mockElement.appendChild).not.toHaveBeenCalled();
32
+ });
33
+ });
34
+ //# sourceMappingURL=nicamhandler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nicamhandler.test.js","sourceRoot":"","sources":["../../../../../src/js/ui/handlers/nicamhandler.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,IAAI,WAAgB,CAAC;IACrB,IAAI,gBAAkC,CAAC;IACvC,IAAI,WAAW,GAAG,QAAQ,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACZ,WAAW,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;QACxD,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAChE,gBAAgB,GAAG;YACf,QAAQ,EAAE;gBACN,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC;aACjD;SACJ,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,YAAY,CAAC,gBAAuB,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,IAAI,WAAW,eAAe,CAAC,CAAC;QACpF,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACzD,YAAY,CAAC,gBAAuB,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,IAAI,WAAW,eAAe,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,gBAAgB,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC/B,YAAY,CAAC,gBAAuB,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,IAAI,WAAW,eAAe,CAAC,CAAC;QACpF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=playnexthandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playnexthandlers.js","sourceRoot":"","sources":["../../../../../src/js/ui/handlers/playnexthandlers.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ const interval = 10;
2
+ export function rewind(player) {
3
+ if (player != null) {
4
+ if (player.isLive()) {
5
+ player.timeShift(player.getTimeShift() - interval);
6
+ }
7
+ else {
8
+ player.seek(Math.max(0, player.getCurrentTime() - interval));
9
+ }
10
+ }
11
+ }
12
+ export function forward(player) {
13
+ if (player != null) {
14
+ if (player.isLive()) {
15
+ player.timeShift(Math.min(0, player.getTimeShift() + interval));
16
+ }
17
+ else {
18
+ player.seek(Math.min(player.getDuration(), player.getCurrentTime() + interval));
19
+ }
20
+ }
21
+ }
22
+ //# sourceMappingURL=timecontrolhandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timecontrolhandlers.js","sourceRoot":"","sources":["../../../../../src/js/ui/handlers/timecontrolhandlers.ts"],"names":[],"mappings":"AAIA,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEnB,MAAM,UAAU,MAAM,CAAE,MAAwB;IAC5C,IAAI,MAAM,IAAI,IAAI,EAAE;QAChB,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;YACjB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,CAAA;SACrD;aAAM;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAA;SAC/D;KACJ;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CAAE,MAAwB;IAC7C,IAAI,MAAM,IAAI,IAAI,EAAE;QAChB,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;YACjB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAA;SAClE;aAAM;YACH,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,GAAG,CACJ,MAAM,CAAC,WAAW,EAAE,EACpB,MAAM,CAAC,cAAc,EAAE,GAAG,QAAQ,CACrC,CACJ,CAAA;SACJ;KACJ;AACL,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { BufferingOverlay, CastStatusOverlay, ErrorMessageOverlay, PlaybackToggleOverlay, SubtitleOverlay, UIContainer, } from 'bitmovin-player-ui';
2
+ import { createPlayNextScreen } from './components/nativemobile/playnext';
3
+ import { createCTABar } from './components/nativemobile/ctabar';
4
+ import { createControlBar } from './components/nativemobile/controlbar';
5
+ import { createTopBar } from './components/nativemobile/topbar';
6
+ import { createSettingsPanel } from './components/settingspanel';
7
+ import { createMiddleButtons } from './components/buttons';
8
+ import { createTitleBar } from './components/nativemobile/titlebar';
9
+ export function sendCustomMessage(message) {
10
+ if (window.bitmovin.customMessageHandler) {
11
+ return JSON.parse(window.bitmovin.customMessageHandler.sendSynchronous(message)) || {};
12
+ }
13
+ return {};
14
+ }
15
+ export function getCustomMessage(message) {
16
+ if (window.bitmovin.customMessageHandler) {
17
+ window.bitmovin.customMessageHandler.on(message, (data) => {
18
+ return JSON.parse(data || '{}');
19
+ });
20
+ }
21
+ return {};
22
+ }
23
+ export function nativeMobileUIContainer(player) {
24
+ const middleButtons = createMiddleButtons(player);
25
+ const playNextScreen = createPlayNextScreen(player);
26
+ const settingsPanel = createSettingsPanel(player);
27
+ const ctaBar = createCTABar(player);
28
+ const topBar = createTopBar(player, settingsPanel);
29
+ const controlBar = createControlBar(player, settingsPanel);
30
+ const errorMessageOverlay = new ErrorMessageOverlay();
31
+ return new UIContainer({
32
+ components: [
33
+ new SubtitleOverlay(),
34
+ new BufferingOverlay(),
35
+ new PlaybackToggleOverlay(),
36
+ new CastStatusOverlay(),
37
+ playNextScreen,
38
+ middleButtons,
39
+ controlBar,
40
+ ctaBar,
41
+ topBar,
42
+ createTitleBar(),
43
+ errorMessageOverlay
44
+ ],
45
+ cssClasses: ['npo-player', 'native-mobile'],
46
+ });
47
+ }
48
+ //# sourceMappingURL=nativemobileuicontainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativemobileuicontainer.js","sourceRoot":"","sources":["../../../../src/js/ui/nativemobileuicontainer.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAKpE,MAAM,UAAU,iBAAiB,CAAC,OAAuB;IACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;KACzF;IACD,OAAO,EAAE,CAAA;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE;QACtC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAa,EAAE,EAAE;YAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAA;KACL;IAED,OAAO,EAAE,CAAA;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAE,MAAiB;IACtD,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACjD,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACnD,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC1D,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAA;IAErD,OAAO,IAAI,WAAW,CAAC;QACnB,UAAU,EAAE;YACR,IAAI,eAAe,EAAE;YACrB,IAAI,gBAAgB,EAAE;YACtB,IAAI,qBAAqB,EAAE;YAC3B,IAAI,iBAAiB,EAAE;YACvB,cAAc;YACd,aAAa;YACb,UAAU;YACV,MAAM;YACN,MAAM;YACN,cAAc,EAAE;YAChB,mBAAmB;SACtB;QACD,UAAU,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;KAC9C,CAAC,CAAC;AACP,CAAC"}