@npo/player 1.24.6 → 1.25.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.
- package/README.md +1 -1
- package/lib/js/api/getstreamobject.test.js +2 -2
- package/lib/js/playeractions/handlers/processplayerconfig.js +14 -0
- package/lib/js/playeractions/handlers/processplayerconfig.test.d.ts +1 -0
- package/lib/js/playeractions/handlers/processplayerconfig.test.js +116 -0
- package/lib/js/playeractions/handlers/processsourceconfig.d.ts +2 -1
- package/lib/js/playeractions/handlers/processsourceconfig.js +16 -5
- package/lib/js/settings/localization.d.ts +76 -1
- package/lib/js/settings/localization.js +2 -2
- package/lib/js/tracking/handlers/eventbinding.js +25 -17
- package/lib/js/tracking/handlers/eventlogging.js +3 -8
- package/lib/js/tracking/handlers/playertrackerinit.d.ts +2 -2
- package/lib/js/tracking/handlers/playertrackerinit.js +8 -6
- package/lib/js/tracking/handlers/playertrackerinit.test.d.ts +1 -0
- package/lib/js/tracking/handlers/playertrackerinit.test.js +74 -0
- package/lib/js/utilities/utilities.element.d.ts +6 -0
- package/lib/js/utilities/utilities.element.js +10 -0
- package/lib/js/utilities/utilities.element.test.js +18 -5
- package/lib/npoplayer.d.ts +13 -3
- package/lib/npoplayer.js +43 -28
- package/lib/npoplayer.test.js +12 -4
- package/lib/package.json +2 -2
- package/lib/services/cdnProviders/cdnProviders.js +4 -2
- package/lib/services/nicamHandlers/nicamhandler.d.ts +6 -0
- package/lib/{ui/handlers → services/nicamHandlers}/nicamhandler.js +14 -6
- package/lib/services/nicamHandlers/nicamhandler.test.js +69 -0
- package/lib/services/npoPlayerAPI/npoPlayerAPI.d.ts +1 -0
- package/lib/services/npoPlayerAPI/npoPlayerAPI.js +6 -3
- package/lib/services/segmentHandlers/setSegmentMarkers.js +1 -1
- package/lib/services/services.d.ts +3 -0
- package/lib/services/services.js +7 -0
- package/lib/services/streamoptionsHandlers/steamOptionsHandler.d.ts +6 -0
- package/lib/services/streamoptionsHandlers/steamOptionsHandler.js +78 -0
- package/lib/services/streamoptionsHandlers/streamOptionsHandler.test.js +187 -0
- package/lib/src/js/playeractions/handlers/processplayerconfig.test.d.ts +1 -0
- package/lib/src/js/playeractions/handlers/processsourceconfig.d.ts +2 -1
- package/lib/src/js/settings/localization.d.ts +76 -1
- package/lib/src/js/tracking/handlers/playertrackerinit.d.ts +2 -2
- package/lib/src/js/tracking/handlers/playertrackerinit.test.d.ts +1 -0
- package/lib/src/js/utilities/utilities.element.d.ts +6 -0
- package/lib/src/npoplayer.d.ts +13 -3
- package/lib/src/services/nicamHandlers/nicamhandler.d.ts +6 -0
- package/lib/src/services/nicamHandlers/nicamhandler.test.d.ts +1 -0
- package/lib/src/services/npoPlayerAPI/npoPlayerAPI.d.ts +1 -0
- package/lib/src/services/services.d.ts +3 -0
- package/lib/src/services/streamoptionsHandlers/steamOptionsHandler.d.ts +6 -0
- package/lib/src/services/streamoptionsHandlers/streamOptionsHandler.test.d.ts +1 -0
- package/lib/src/types/interfaces.d.ts +2 -1
- package/lib/src/ui/components/buttons.d.ts +6 -3
- package/lib/src/ui/components/controlbar.d.ts +2 -2
- package/lib/src/ui/components/nativemobile/buttons.d.ts +8 -0
- package/lib/src/ui/components/playnext.d.ts +1 -0
- package/lib/src/ui/components/topbar.d.ts +2 -2
- package/lib/src/ui/components/verticalvideo/controlbar.d.ts +2 -2
- package/lib/src/ui/handlers/timecontrolhandlers.d.ts +3 -3
- package/lib/src/ui/uicontainer.d.ts +2 -3
- package/lib/tests/mocks/mockNpoplayer.js +3 -0
- package/lib/tests/mocks/playerContextMock.js +1 -0
- package/lib/types/interfaces.d.ts +2 -1
- package/lib/ui/components/buttons.d.ts +6 -3
- package/lib/ui/components/buttons.js +17 -17
- package/lib/ui/components/controlbar.d.ts +2 -2
- package/lib/ui/components/controlbar.js +15 -10
- package/lib/ui/components/nativemobile/buttons.d.ts +8 -0
- package/lib/ui/components/nativemobile/buttons.js +41 -1
- package/lib/ui/components/nativemobile/controlbar.js +1 -2
- package/lib/ui/components/playnext.d.ts +1 -0
- package/lib/ui/components/topbar.d.ts +2 -2
- package/lib/ui/components/topbar.js +14 -9
- package/lib/ui/components/verticalvideo/controlbar.d.ts +2 -2
- package/lib/ui/components/verticalvideo/controlbar.js +4 -4
- package/lib/ui/handlers/timecontrolhandlers.d.ts +3 -3
- package/lib/ui/nativemobileuifactory.js +20 -24
- package/lib/ui/nativemobileuifactory.test.js +0 -5
- package/lib/ui/uicontainer.d.ts +2 -3
- package/lib/ui/uicontainer.js +7 -5
- package/package.json +2 -2
- package/src/style/components/_icons.scss +5 -0
- package/src/style/npoplayer.css +2 -1
- package/lib/src/ui/handlers/nicamhandler.d.ts +0 -6
- package/lib/src/ui/handlers/streamhandler.d.ts +0 -2
- package/lib/ui/handlers/nicamhandler.d.ts +0 -6
- package/lib/ui/handlers/nicamhandler.test.js +0 -36
- package/lib/ui/handlers/streamhandler.d.ts +0 -2
- package/lib/ui/handlers/streamhandler.js +0 -60
- /package/lib/{src/ui/handlers → services/nicamHandlers}/nicamhandler.test.d.ts +0 -0
- /package/lib/{ui/handlers/nicamhandler.test.d.ts → services/streamoptionsHandlers/streamOptionsHandler.test.d.ts} +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { handleStreamOptions, initializeFragment, handleStartOffset, updateStreamClasses, setupAutoplay } from './steamOptionsHandler';
|
|
2
|
+
import '@testing-library/jest-dom';
|
|
3
|
+
import { createMockNpoPlayer, createPlayerContextMock, createMockNpoPlayerAPI } from '../../../tests/mocks/playerContextMock';
|
|
4
|
+
import * as playerAction from '../../js/playeractions/playeractions';
|
|
5
|
+
import { updateClassFromElementByQuery } from '../../js/utilities/utilities.element';
|
|
6
|
+
import { handleLiveStreamControls } from '../liveStreamHandlers/handleLiveStreamControls';
|
|
7
|
+
import { initSegment } from '../segmentHandlers/initSegment';
|
|
8
|
+
import { NpoPlayerEvent } from '../../types/events';
|
|
9
|
+
import { removeEventListeners } from '../eventListenerHandlers/removeEventListeners';
|
|
10
|
+
jest.mock('../segmentHandlers/initSegment');
|
|
11
|
+
jest.mock('../eventListenerHandlers/removeEventListeners');
|
|
12
|
+
jest.mock('../../js/playeractions/playeractions');
|
|
13
|
+
jest.mock('../liveStreamHandlers/handleLiveStreamControls');
|
|
14
|
+
jest.mock('../../js/utilities/utilities.element', () => ({
|
|
15
|
+
updateClassFromElementByQuery: jest.fn()
|
|
16
|
+
}));
|
|
17
|
+
describe('handleStreamOptions', () => {
|
|
18
|
+
let mockElement;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
mockElement = { innerHTML: '', appendChild: jest.fn() };
|
|
21
|
+
document.querySelector = jest.fn().mockReturnValue(mockElement);
|
|
22
|
+
});
|
|
23
|
+
it('correctly calls all of the functions when the conditions are met', () => {
|
|
24
|
+
const mockNpoPlayerAPI = createMockNpoPlayerAPI({
|
|
25
|
+
on: jest.fn(),
|
|
26
|
+
off: jest.fn()
|
|
27
|
+
});
|
|
28
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
29
|
+
playerconfig: {
|
|
30
|
+
playback: {
|
|
31
|
+
muted: false,
|
|
32
|
+
autoplay: true
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
streamObject: {
|
|
36
|
+
stream: {
|
|
37
|
+
isLiveStream: true
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
const playerContextMock = createPlayerContextMock({
|
|
42
|
+
player: mockNpoPlayerAPI,
|
|
43
|
+
npoplayer: npoplayerMock
|
|
44
|
+
});
|
|
45
|
+
handleStreamOptions(playerContextMock);
|
|
46
|
+
expect(initializeFragment(playerContextMock)).toHaveBeenCalled;
|
|
47
|
+
expect(handleStartOffset(playerContextMock)).toHaveBeenCalled;
|
|
48
|
+
expect(updateStreamClasses(playerContextMock)).toHaveBeenCalled;
|
|
49
|
+
expect(setupAutoplay(playerContextMock)).toHaveBeenCalled;
|
|
50
|
+
});
|
|
51
|
+
it('should return early if uiManager is missing', () => {
|
|
52
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
53
|
+
UIManager: null
|
|
54
|
+
});
|
|
55
|
+
const playerContextMock = createPlayerContextMock({
|
|
56
|
+
npoplayer: npoplayerMock
|
|
57
|
+
});
|
|
58
|
+
handleStreamOptions(playerContextMock);
|
|
59
|
+
expect(removeEventListeners).not.toHaveBeenCalled();
|
|
60
|
+
});
|
|
61
|
+
it('should return early if streamObject is missing', () => {
|
|
62
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
63
|
+
streamObject: null
|
|
64
|
+
});
|
|
65
|
+
const playerContextMock = createPlayerContextMock({
|
|
66
|
+
npoplayer: npoplayerMock
|
|
67
|
+
});
|
|
68
|
+
handleStreamOptions(playerContextMock);
|
|
69
|
+
expect(removeEventListeners).not.toHaveBeenCalled();
|
|
70
|
+
});
|
|
71
|
+
it('should return early if autoplay is false', () => {
|
|
72
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
73
|
+
playerconfig: {
|
|
74
|
+
playback: {
|
|
75
|
+
muted: false,
|
|
76
|
+
autoplay: true
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
streamOptions: {
|
|
80
|
+
autoplay: false
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
const playerContextMock = createPlayerContextMock({
|
|
84
|
+
npoplayer: npoplayerMock
|
|
85
|
+
});
|
|
86
|
+
const setupAutoplayMock = jest.fn();
|
|
87
|
+
handleStreamOptions(playerContextMock);
|
|
88
|
+
expect(setupAutoplayMock).not.toHaveBeenCalled();
|
|
89
|
+
});
|
|
90
|
+
describe('updateStreamClasses', () => {
|
|
91
|
+
it('should add "livestream-no-dvr" class when isLiveStream is true and hasDvrWindow is false', () => {
|
|
92
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
93
|
+
streamObject: {
|
|
94
|
+
stream: {
|
|
95
|
+
isLiveStream: true,
|
|
96
|
+
hasDvrWindow: false
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
const playerContextMock = createPlayerContextMock({
|
|
101
|
+
npoplayer: npoplayerMock
|
|
102
|
+
});
|
|
103
|
+
updateStreamClasses(playerContextMock);
|
|
104
|
+
expect(updateClassFromElementByQuery).toHaveBeenCalledWith(expect.objectContaining({
|
|
105
|
+
className: 'livestream-no-dvr',
|
|
106
|
+
condition: true
|
|
107
|
+
}));
|
|
108
|
+
});
|
|
109
|
+
it('should add "audio-only" class when avType is "aod" or "audio"', () => {
|
|
110
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
111
|
+
streamObject: {
|
|
112
|
+
stream: {
|
|
113
|
+
avType: 'aod'
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
const playerContextMock = createPlayerContextMock({
|
|
118
|
+
npoplayer: npoplayerMock
|
|
119
|
+
});
|
|
120
|
+
updateStreamClasses(playerContextMock);
|
|
121
|
+
expect(updateClassFromElementByQuery).toHaveBeenCalledWith(expect.objectContaining({
|
|
122
|
+
className: 'audio-only',
|
|
123
|
+
condition: true
|
|
124
|
+
}));
|
|
125
|
+
});
|
|
126
|
+
it('should call handleLiveStreamControls when isLiveStream is true and hasDvrWindow is true', () => {
|
|
127
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
128
|
+
streamObject: {
|
|
129
|
+
stream: {
|
|
130
|
+
isLiveStream: true,
|
|
131
|
+
hasDvrWindow: true
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
const playerContextMock = createPlayerContextMock({
|
|
136
|
+
npoplayer: npoplayerMock
|
|
137
|
+
});
|
|
138
|
+
updateStreamClasses(playerContextMock);
|
|
139
|
+
expect(handleLiveStreamControls).toHaveBeenCalledWith(playerContextMock);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('initializeFragment', () => {
|
|
143
|
+
it('should call initSegment with correct parameters', () => {
|
|
144
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
145
|
+
streamObject: { segment: 'segment' },
|
|
146
|
+
streamOptions: { fragments: { sections: [{ duration: 10, time: 0 }] } }
|
|
147
|
+
});
|
|
148
|
+
const playerContextMock = createPlayerContextMock({
|
|
149
|
+
npoplayer: npoplayerMock
|
|
150
|
+
});
|
|
151
|
+
initializeFragment(playerContextMock);
|
|
152
|
+
expect(initSegment).toHaveBeenCalledWith(playerContextMock, {
|
|
153
|
+
segment: 'segment',
|
|
154
|
+
fragment: { sections: [{ duration: 10, time: 0 }] }
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('handleStartOffset', () => {
|
|
159
|
+
it('should call handleStartOffset with correct parameters', () => {
|
|
160
|
+
const npoplayerMock = createMockNpoPlayer({
|
|
161
|
+
streamOptions: { startOffset: 10 }
|
|
162
|
+
});
|
|
163
|
+
const playerContextMock = createPlayerContextMock({
|
|
164
|
+
npoplayer: npoplayerMock
|
|
165
|
+
});
|
|
166
|
+
handleStartOffset(playerContextMock);
|
|
167
|
+
expect(playerAction.handleStartOffset).toHaveBeenCalledWith(playerContextMock, 10);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('setupAutoplay', () => {
|
|
171
|
+
it('should setup autoplay correctly', async () => {
|
|
172
|
+
const mockNpoPlayerAPI = createMockNpoPlayerAPI({
|
|
173
|
+
on: jest.fn(),
|
|
174
|
+
off: jest.fn(),
|
|
175
|
+
play: jest.fn().mockResolvedValue(undefined)
|
|
176
|
+
});
|
|
177
|
+
const playerContextMock = createPlayerContextMock({
|
|
178
|
+
player: mockNpoPlayerAPI
|
|
179
|
+
});
|
|
180
|
+
setupAutoplay(playerContextMock);
|
|
181
|
+
expect(playerContextMock.player.on).toHaveBeenCalledWith(NpoPlayerEvent.SourceLoaded, expect.any(Function));
|
|
182
|
+
const handleAutoPlay = playerContextMock.player.on.mock.calls[0][1];
|
|
183
|
+
await handleAutoPlay();
|
|
184
|
+
expect(playerContextMock.player.play).toHaveBeenCalled();
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { StreamObject, StreamOptions } from 'types/interfaces';
|
|
2
2
|
import { SourceConfig } from 'bitmovin-player';
|
|
3
3
|
import { NpoPlayerServices } from '../../../services/services';
|
|
4
|
-
|
|
4
|
+
import { NPOTag } from '@npotag/tag';
|
|
5
|
+
export declare function processSourceConfig(npoPlayerServices: NpoPlayerServices, source: string, _sourceConfig: SourceConfig | undefined, _streamObject: StreamObject, drm: string | undefined, streamOptions: StreamOptions, version: string, npoTagInstance: NPOTag | undefined): Promise<SourceConfig>;
|
|
@@ -1,6 +1,81 @@
|
|
|
1
1
|
export declare const localizationConfig: {
|
|
2
2
|
language: string;
|
|
3
3
|
vocabularies: {
|
|
4
|
-
nl:
|
|
4
|
+
nl: {
|
|
5
|
+
"settings.video.quality": string;
|
|
6
|
+
"settings.audio.quality": string;
|
|
7
|
+
"settings.audio.track": string;
|
|
8
|
+
"settings.audio.mute": string;
|
|
9
|
+
"settings.audio.unmute": string;
|
|
10
|
+
"settings.audio.volume": string;
|
|
11
|
+
"settings.subtitles.window.color": string;
|
|
12
|
+
"settings.subtitles.window.opacity": string;
|
|
13
|
+
"settings.subtitles": string;
|
|
14
|
+
"settings.subtitles.font.color": string;
|
|
15
|
+
"settings.subtitles.font.opacity": string;
|
|
16
|
+
"settings.subtitles.background.color": string;
|
|
17
|
+
"settings.subtitles.background.opacity": string;
|
|
18
|
+
"colors.white": string;
|
|
19
|
+
"colors.black": string;
|
|
20
|
+
"colors.red": string;
|
|
21
|
+
"colors.green": string;
|
|
22
|
+
"colors.blue": string;
|
|
23
|
+
"colors.cyan": string;
|
|
24
|
+
"colors.yellow": string;
|
|
25
|
+
"colors.magenta": string;
|
|
26
|
+
percent: string;
|
|
27
|
+
"settings.subtitles.font.size": string;
|
|
28
|
+
"settings.subtitles.characterEdge": string;
|
|
29
|
+
"settings.subtitles.characterEdge.raised": string;
|
|
30
|
+
"settings.subtitles.characterEdge.depressed": string;
|
|
31
|
+
"settings.subtitles.characterEdge.uniform": string;
|
|
32
|
+
"settings.subtitles.characterEdge.dropshadowed": string;
|
|
33
|
+
"settings.subtitles.font.family": string;
|
|
34
|
+
"settings.subtitles.font.family.monospacedserif": string;
|
|
35
|
+
"settings.subtitles.font.family.proportionalserif": string;
|
|
36
|
+
"settings.subtitles.font.family.monospacedsansserif": string;
|
|
37
|
+
"settings.subtitles.font.family.proportionalsansserif": string;
|
|
38
|
+
"settings.subtitles.font.family.casual": string;
|
|
39
|
+
"settings.subtitles.font.family.cursive": string;
|
|
40
|
+
"settings.subtitles.font.family.smallcapital": string;
|
|
41
|
+
"settings.time.hours": string;
|
|
42
|
+
"settings.time.minutes": string;
|
|
43
|
+
"settings.time.seconds": string;
|
|
44
|
+
"ads.remainingTime": string;
|
|
45
|
+
settings: string;
|
|
46
|
+
fullscreen: string;
|
|
47
|
+
speed: string;
|
|
48
|
+
playPause: string;
|
|
49
|
+
play: string;
|
|
50
|
+
pause: string;
|
|
51
|
+
open: string;
|
|
52
|
+
close: string;
|
|
53
|
+
pictureInPicture: string;
|
|
54
|
+
appleAirplay: string;
|
|
55
|
+
googleCast: string;
|
|
56
|
+
vr: string;
|
|
57
|
+
off: string;
|
|
58
|
+
auto: string;
|
|
59
|
+
back: string;
|
|
60
|
+
reset: string;
|
|
61
|
+
replay: string;
|
|
62
|
+
normal: string;
|
|
63
|
+
default: string;
|
|
64
|
+
live: string;
|
|
65
|
+
"subtitle.example": string;
|
|
66
|
+
"subtitle.select": string;
|
|
67
|
+
playingOn: string;
|
|
68
|
+
connectingTo: string;
|
|
69
|
+
watermarkLink: string;
|
|
70
|
+
controlBar: string;
|
|
71
|
+
player: string;
|
|
72
|
+
videoPlayer: string;
|
|
73
|
+
audioPlayer: string;
|
|
74
|
+
seekBar: string;
|
|
75
|
+
"seekBar.value": string;
|
|
76
|
+
"seekBar.timeshift": string;
|
|
77
|
+
"seekBar.durationText": string;
|
|
78
|
+
"segment.unplayableTitle": string;
|
|
79
|
+
};
|
|
5
80
|
};
|
|
6
81
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type NPOTag } from '@npotag/tag';
|
|
1
|
+
import { type NPOTag, type PageTracker } from '@npotag/tag';
|
|
2
2
|
import { type InitialisationProps } from '@npotag/tag/dist/types/src/npoTag';
|
|
3
3
|
import type NpoPlayer from '../../../npoplayer';
|
|
4
|
-
export declare function initPlayerTracker(
|
|
4
|
+
export declare function initPlayerTracker(npoPlayer: NpoPlayer, _npoTag?: InitialisationProps, _npoTagInstance?: NPOTag, _npoTagPageTracker?: PageTracker): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -4,7 +4,13 @@ interface ElementByQuery {
|
|
|
4
4
|
}
|
|
5
5
|
interface RemoveClassFromElementByQuery extends ElementByQuery {
|
|
6
6
|
className: string;
|
|
7
|
+
condition: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface UpdateClassFromElementByQuery extends ElementByQuery {
|
|
10
|
+
className: string;
|
|
11
|
+
condition: boolean;
|
|
7
12
|
}
|
|
8
13
|
export declare function getElementByQuery({ container, query }: ElementByQuery): Element | null;
|
|
9
14
|
export declare function removeClassFromElementByQuery(params: RemoveClassFromElementByQuery): void;
|
|
15
|
+
export declare function updateClassFromElementByQuery(params: UpdateClassFromElementByQuery): void;
|
|
10
16
|
export {};
|
package/lib/src/npoplayer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NpoPlayerServices } from './services/services';
|
|
2
|
-
import { type StreamTracker, type NPOTag } from '@npotag/tag';
|
|
2
|
+
import { type StreamTracker, type NPOTag, type PageTracker } from '@npotag/tag';
|
|
3
3
|
import { type InitialisationProps } from '@npotag/tag/dist/types/src/npoTag';
|
|
4
4
|
import { type PlayerAPI, type PlayerConfig, type SourceConfig } from 'bitmovin-player';
|
|
5
5
|
import { UIManager } from 'bitmovin-player-ui';
|
|
@@ -7,12 +7,15 @@ import { LogEmitter } from './types/classes';
|
|
|
7
7
|
import { type DRMProfile, type ApiPayload, type NPOTagObject, type StreamObject, type StreamOptions, type UIComponents, type TimeLineMarker, type LocalStorageData, type PlayerContext, type EventListeners, NpoPlayerUIVariants } from './types/interfaces';
|
|
8
8
|
export { type PlayerConfig, type InitialisationProps, type NPOTagObject, type StreamOptions, NpoPlayerUIVariants };
|
|
9
9
|
export default class NpoPlayer {
|
|
10
|
-
playerConfig: PlayerConfig;
|
|
10
|
+
playerConfig: PlayerConfig | undefined;
|
|
11
11
|
sourceConfig: SourceConfig;
|
|
12
12
|
streamObject: StreamObject;
|
|
13
13
|
player: PlayerAPI | undefined;
|
|
14
14
|
uiManager: UIManager | undefined;
|
|
15
15
|
npoTag: NPOTagObject | undefined;
|
|
16
|
+
npoTagInitialisation: InitialisationProps | undefined;
|
|
17
|
+
npoTagInstance: NPOTag | undefined;
|
|
18
|
+
npoTagPageTracker: PageTracker | undefined;
|
|
16
19
|
streamTracker: StreamTracker | undefined;
|
|
17
20
|
logEmitter: LogEmitter;
|
|
18
21
|
uiComponents: UIComponents;
|
|
@@ -31,7 +34,14 @@ export default class NpoPlayer {
|
|
|
31
34
|
eventListeners: EventListeners | undefined;
|
|
32
35
|
mockNpoPlayer: any;
|
|
33
36
|
userPreferences: LocalStorageData;
|
|
34
|
-
constructor(
|
|
37
|
+
constructor(container: HTMLElement | {
|
|
38
|
+
container: HTMLElement;
|
|
39
|
+
playerConfig: PlayerConfig;
|
|
40
|
+
npoTag?: InitialisationProps | undefined;
|
|
41
|
+
npoTagInstance?: NPOTag | undefined;
|
|
42
|
+
variant?: NpoPlayerUIVariants;
|
|
43
|
+
npoTagPageTracker?: PageTracker | undefined;
|
|
44
|
+
}, playerConfig?: PlayerConfig | undefined, npoTag?: InitialisationProps | undefined, npoTagInstance?: NPOTag | undefined, variant?: NpoPlayerUIVariants, npoTagPageTracker?: PageTracker | undefined);
|
|
35
45
|
initPlayer(_container: HTMLElement, playerConfig: PlayerConfig): void;
|
|
36
46
|
loadStream(source: string, options?: StreamOptions): Promise<void>;
|
|
37
47
|
doError(input: any, status?: number): void;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UIManager } from 'bitmovin-player-ui';
|
|
2
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
3
|
+
export declare function processNicam(playerContext: PlayerContext, nicamElement: HTMLElement | undefined): void;
|
|
4
|
+
export declare function addNicamIcon(character: string, nicamElement: Element): void;
|
|
5
|
+
export declare function showNicamAfterUiDelay(playerContext: PlayerContext, uiManager: UIManager | undefined): void;
|
|
6
|
+
export declare function setupNicamKijkwijzerIcons(playerContext: PlayerContext): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom';
|
|
@@ -25,6 +25,7 @@ export declare class NpoPlayerAPI {
|
|
|
25
25
|
getSupportedTech(): Technology[];
|
|
26
26
|
off(eventType: NpoPlayerEvent, callback: NpoPlayerEventCallback): void;
|
|
27
27
|
on(eventType: NpoPlayerEvent, callback: NpoPlayerEventCallback): void;
|
|
28
|
+
isCastAvailable(): boolean;
|
|
28
29
|
seek(time: number): void;
|
|
29
30
|
timeShift(time: number): void;
|
|
30
31
|
getContainer(): HTMLElement;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ApiPayload, Fragment, PlayerContext, Profile, Segment, TimeLineMarker, LocalStorageData, LocalStorageValues, NpoPlayerUIVariants } from '../types/interfaces';
|
|
2
2
|
import { AVType } from '@npotag/tag/dist/types/src/streamTracker';
|
|
3
|
+
import { UIManager } from 'bitmovin-player-ui';
|
|
3
4
|
export declare class NpoPlayerServices {
|
|
4
5
|
getAVType(avType: string): AVType;
|
|
5
6
|
keyboardHandler(playerContext: PlayerContext, e: KeyboardEvent): void;
|
|
@@ -13,4 +14,6 @@ export declare class NpoPlayerServices {
|
|
|
13
14
|
setAccessibilityAttributes(playerContext: PlayerContext): void;
|
|
14
15
|
schedulePreRolls(playerContext: PlayerContext): Promise<void>;
|
|
15
16
|
handleVerticalVideoControls(playerContext: PlayerContext, variant: NpoPlayerUIVariants): void;
|
|
17
|
+
showNicamAfterUiDelay(playerContext: PlayerContext | undefined, uiManager: UIManager | undefined): void;
|
|
18
|
+
setupNicamKijkwijzerIcons(playerContext: PlayerContext): void;
|
|
16
19
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
2
|
+
export declare function handleStreamOptions(playerContext: PlayerContext): void;
|
|
3
|
+
export declare function initializeFragment(playerContext: PlayerContext): void;
|
|
4
|
+
export declare function handleStartOffset(playerContext: PlayerContext): void;
|
|
5
|
+
export declare function updateStreamClasses(playerContext: PlayerContext): void;
|
|
6
|
+
export declare function setupAutoplay(playerContext: PlayerContext): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom';
|
|
@@ -4,7 +4,7 @@ import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/bu
|
|
|
4
4
|
import NpoPlayer from '../npoplayer';
|
|
5
5
|
import { NpoPlayerAPI } from '../services/npoPlayerAPI/npoPlayerAPI';
|
|
6
6
|
import { NpoPlayerEventCallback } from './events';
|
|
7
|
-
import { SourceConfig } from 'bitmovin-player';
|
|
7
|
+
import { GoogleCastRemoteControlConfig, SourceConfig } from 'bitmovin-player';
|
|
8
8
|
export { Technology } from 'bitmovin-player';
|
|
9
9
|
export interface Profile {
|
|
10
10
|
profileName: string;
|
|
@@ -200,3 +200,4 @@ export declare enum LocalStorageValues {
|
|
|
200
200
|
SUBTITLES_ENABLED = "subtitles_enabled"
|
|
201
201
|
}
|
|
202
202
|
export type LocalStorageData = Partial<Record<LocalStorageValues, string | number>>;
|
|
203
|
+
export type NPOGoogleCastRemoteControlConfig = GoogleCastRemoteControlConfig;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type PlayerAPI } from 'bitmovin-player';
|
|
2
2
|
import { Button, ControlBar } from 'bitmovin-player-ui';
|
|
3
3
|
import type NpoPlayer from '../../npoplayer';
|
|
4
|
-
|
|
5
|
-
export declare function
|
|
4
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
5
|
+
export declare function createMiddleButtons(playerContext: PlayerContext): ControlBar;
|
|
6
|
+
export declare function createRewindButton(playerContext: PlayerContext): Button<{
|
|
6
7
|
cssClass: string;
|
|
7
8
|
ariaLabel: string;
|
|
8
9
|
}>;
|
|
9
|
-
export declare function createForwardButton(
|
|
10
|
+
export declare function createForwardButton(playerContext: PlayerContext): Button<{
|
|
10
11
|
cssClass: string;
|
|
11
12
|
ariaLabel: string;
|
|
12
13
|
}>;
|
|
@@ -15,12 +16,14 @@ export declare function createPlayNextButton(player: PlayerAPI, npoplayer: NpoPl
|
|
|
15
16
|
text: string;
|
|
16
17
|
ariaLabel: string;
|
|
17
18
|
hidden: false;
|
|
19
|
+
acceptsTouchWithUiHidden: true;
|
|
18
20
|
}>;
|
|
19
21
|
export declare function createCancelPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
|
|
20
22
|
cssClass: string;
|
|
21
23
|
text: string;
|
|
22
24
|
ariaLabel: string;
|
|
23
25
|
hidden: false;
|
|
26
|
+
acceptsTouchWithUiHidden: true;
|
|
24
27
|
}>;
|
|
25
28
|
export declare function createskipIntroButton(player: PlayerAPI): Button<{
|
|
26
29
|
cssClass: string;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ControlBar } from 'bitmovin-player-ui';
|
|
2
|
-
import
|
|
3
|
-
export declare function createControlBar(
|
|
2
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
3
|
+
export declare function createControlBar(playerContext: PlayerContext): ControlBar;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { AirPlayToggleButton, Button, CastToggleButton, ControlBar, FullscreenToggleButton, PictureInPictureToggleButton, PlaybackToggleButton, SettingsPanel, SettingsToggleButton, VolumeToggleButton } from 'bitmovin-player-ui';
|
|
2
2
|
import { PlayerAPI } from 'bitmovin-player';
|
|
3
|
+
export declare function createForwardButton(player: PlayerAPI | undefined): Button<{
|
|
4
|
+
cssClass: string;
|
|
5
|
+
ariaLabel: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function createRewindButton(player: PlayerAPI | undefined): Button<{
|
|
8
|
+
cssClass: string;
|
|
9
|
+
ariaLabel: string;
|
|
10
|
+
}>;
|
|
3
11
|
export declare function createMiddleButtons(player: PlayerAPI): ControlBar;
|
|
4
12
|
export declare function createWatchFromStartButton(): Button<{
|
|
5
13
|
cssClass: string;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { TitleBar } from 'bitmovin-player-ui';
|
|
2
|
-
import
|
|
3
|
-
export declare function createTopBar(
|
|
2
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
3
|
+
export declare function createTopBar(playerContext: PlayerContext): TitleBar;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ControlBar } from 'bitmovin-player-ui';
|
|
2
|
-
import
|
|
3
|
-
export declare function createVerticalVideoControlBar(
|
|
2
|
+
import { PlayerContext } from 'types/interfaces';
|
|
3
|
+
export declare function createVerticalVideoControlBar(playerContext: PlayerContext): ControlBar;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function rewind(player:
|
|
3
|
-
export declare function forward(player:
|
|
1
|
+
import { NpoPlayerAPI } from '../../services/npoPlayerAPI/npoPlayerAPI';
|
|
2
|
+
export declare function rewind(player: NpoPlayerAPI): void;
|
|
3
|
+
export declare function forward(player: NpoPlayerAPI): void;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import NpoPlayer from '../npoplayer';
|
|
2
1
|
import { UIContainer } from 'bitmovin-player-ui';
|
|
3
2
|
import { PlayerAPI } from 'bitmovin-player';
|
|
4
|
-
import { NpoPlayerUIVariants } from '../types/interfaces';
|
|
5
|
-
export declare function createUIContainer(
|
|
3
|
+
import { NpoPlayerUIVariants, PlayerContext } from '../types/interfaces';
|
|
4
|
+
export declare function createUIContainer(playerContext: PlayerContext, player: PlayerAPI, variant: NpoPlayerUIVariants): UIContainer;
|
|
@@ -30,6 +30,9 @@ export const mockNpoPlayer = {
|
|
|
30
30
|
uiManager: undefined,
|
|
31
31
|
canceledPlayNextScreen: false,
|
|
32
32
|
npoTag: undefined,
|
|
33
|
+
npoTagInitialisation: undefined,
|
|
34
|
+
npoTagInstance: undefined,
|
|
35
|
+
npoTagPageTracker: undefined,
|
|
33
36
|
logEmitter: {},
|
|
34
37
|
uiComponents: {
|
|
35
38
|
settingsPanels: [settingsPanelMock, settingsPanelMock]
|
|
@@ -4,7 +4,7 @@ import { ButtonConfig } from 'bitmovin-player-ui/dist/js/framework/components/bu
|
|
|
4
4
|
import NpoPlayer from '../npoplayer';
|
|
5
5
|
import { NpoPlayerAPI } from '../services/npoPlayerAPI/npoPlayerAPI';
|
|
6
6
|
import { NpoPlayerEventCallback } from './events';
|
|
7
|
-
import { SourceConfig } from 'bitmovin-player';
|
|
7
|
+
import { GoogleCastRemoteControlConfig, SourceConfig } from 'bitmovin-player';
|
|
8
8
|
export { Technology } from 'bitmovin-player';
|
|
9
9
|
export interface Profile {
|
|
10
10
|
profileName: string;
|
|
@@ -200,3 +200,4 @@ export declare enum LocalStorageValues {
|
|
|
200
200
|
SUBTITLES_ENABLED = "subtitles_enabled"
|
|
201
201
|
}
|
|
202
202
|
export type LocalStorageData = Partial<Record<LocalStorageValues, string | number>>;
|
|
203
|
+
export type NPOGoogleCastRemoteControlConfig = GoogleCastRemoteControlConfig;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type PlayerAPI } from 'bitmovin-player';
|
|
2
2
|
import { Button, ControlBar } from 'bitmovin-player-ui';
|
|
3
3
|
import type NpoPlayer from '../../npoplayer';
|
|
4
|
-
|
|
5
|
-
export declare function
|
|
4
|
+
import { PlayerContext } from '../../types/interfaces';
|
|
5
|
+
export declare function createMiddleButtons(playerContext: PlayerContext): ControlBar;
|
|
6
|
+
export declare function createRewindButton(playerContext: PlayerContext): Button<{
|
|
6
7
|
cssClass: string;
|
|
7
8
|
ariaLabel: string;
|
|
8
9
|
}>;
|
|
9
|
-
export declare function createForwardButton(
|
|
10
|
+
export declare function createForwardButton(playerContext: PlayerContext): Button<{
|
|
10
11
|
cssClass: string;
|
|
11
12
|
ariaLabel: string;
|
|
12
13
|
}>;
|
|
@@ -15,12 +16,14 @@ export declare function createPlayNextButton(player: PlayerAPI, npoplayer: NpoPl
|
|
|
15
16
|
text: string;
|
|
16
17
|
ariaLabel: string;
|
|
17
18
|
hidden: false;
|
|
19
|
+
acceptsTouchWithUiHidden: true;
|
|
18
20
|
}>;
|
|
19
21
|
export declare function createCancelPlayNextButton(player: PlayerAPI, npoplayer: NpoPlayer): Button<{
|
|
20
22
|
cssClass: string;
|
|
21
23
|
text: string;
|
|
22
24
|
ariaLabel: string;
|
|
23
25
|
hidden: false;
|
|
26
|
+
acceptsTouchWithUiHidden: true;
|
|
24
27
|
}>;
|
|
25
28
|
export declare function createskipIntroButton(player: PlayerAPI): Button<{
|
|
26
29
|
cssClass: string;
|
|
@@ -1,38 +1,36 @@
|
|
|
1
1
|
import { Button, PlaybackToggleButton, ControlBar } from 'bitmovin-player-ui';
|
|
2
2
|
import { rewind, forward } from '../handlers/timecontrolhandlers';
|
|
3
|
-
export function createMiddleButtons(
|
|
3
|
+
export function createMiddleButtons(playerContext) {
|
|
4
4
|
const bigPlayToggleButton = new PlaybackToggleButton({
|
|
5
5
|
cssClass: 'ui-playbacktogglebutton'
|
|
6
6
|
});
|
|
7
|
-
const bigRewindButton = createRewindButton(
|
|
8
|
-
const bigForwardButton = createForwardButton(
|
|
7
|
+
const bigRewindButton = createRewindButton(playerContext);
|
|
8
|
+
const bigForwardButton = createForwardButton(playerContext);
|
|
9
9
|
return new ControlBar({
|
|
10
10
|
components: [bigRewindButton, bigPlayToggleButton, bigForwardButton],
|
|
11
11
|
cssClasses: ['controlbar-middle']
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
-
export function createRewindButton(
|
|
14
|
+
export function createRewindButton(playerContext) {
|
|
15
|
+
const { player } = playerContext;
|
|
15
16
|
const rewindButton = new Button({
|
|
16
17
|
cssClass: 'ui-rewindbutton bmpui-ui-button',
|
|
17
18
|
ariaLabel: 'Spoel 10 seconden terug'
|
|
18
19
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
});
|
|
23
|
-
}
|
|
20
|
+
rewindButton.onClick.subscribe(() => {
|
|
21
|
+
rewind(player);
|
|
22
|
+
});
|
|
24
23
|
return rewindButton;
|
|
25
24
|
}
|
|
26
|
-
export function createForwardButton(
|
|
25
|
+
export function createForwardButton(playerContext) {
|
|
26
|
+
const { player } = playerContext;
|
|
27
27
|
const forwardButton = new Button({
|
|
28
28
|
cssClass: 'ui-forwardbutton bmpui-ui-button',
|
|
29
29
|
ariaLabel: 'Spoel 10 seconden vooruit'
|
|
30
30
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
});
|
|
35
|
-
}
|
|
31
|
+
forwardButton.onClick.subscribe(() => {
|
|
32
|
+
forward(player);
|
|
33
|
+
});
|
|
36
34
|
return forwardButton;
|
|
37
35
|
}
|
|
38
36
|
export function createPlayNextButton(player, npoplayer) {
|
|
@@ -40,7 +38,8 @@ export function createPlayNextButton(player, npoplayer) {
|
|
|
40
38
|
cssClass: 'ui-textbutton ui-playNextButton bmpui-ui-button',
|
|
41
39
|
text: '<span class="bmpui-ui-textbutton-icon bmpui-ui-textbutton-icon-play"></span> Volgende aflevering',
|
|
42
40
|
ariaLabel: 'Volgende aflevering',
|
|
43
|
-
hidden: false
|
|
41
|
+
hidden: false,
|
|
42
|
+
acceptsTouchWithUiHidden: true
|
|
44
43
|
});
|
|
45
44
|
playNextButton.onClick.subscribe(() => {
|
|
46
45
|
if (player != undefined) {
|
|
@@ -54,7 +53,8 @@ export function createCancelPlayNextButton(player, npoplayer) {
|
|
|
54
53
|
cssClass: 'ui-textbutton ui-cancelPlayNextButton bmpui-ui-button',
|
|
55
54
|
text: 'Annuleer',
|
|
56
55
|
ariaLabel: 'Annuleer',
|
|
57
|
-
hidden: false
|
|
56
|
+
hidden: false,
|
|
57
|
+
acceptsTouchWithUiHidden: true
|
|
58
58
|
});
|
|
59
59
|
cancelPlayNextButton.onClick.subscribe(() => {
|
|
60
60
|
if (player != undefined) {
|