@gcorevideo/player 2.24.1 → 2.24.3
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/assets/big-mute-button/big-mute-button.ejs +2 -2
- package/assets/bottom-gear/gear-sub-menu.scss +1 -0
- package/dist/core.js +1 -1
- package/dist/index.css +754 -753
- package/dist/index.js +151 -130
- package/dist/player.d.ts +72 -21
- package/docs/api/player.bigmutebutton.md +13 -1
- package/docs/api/player.clapprstatssettings.md +51 -4
- package/docs/api/player.clapprstatssettings.runeach.md +16 -0
- package/docs/api/player.clipspluginsettings.md +1 -1
- package/docs/api/player.clipspluginsettings.text.md +1 -1
- package/docs/api/player.cmcdconfig.exportids.md +4 -0
- package/docs/api/player.cmcdconfig.md +19 -105
- package/docs/api/{player.cmcdconfig.version.md → player.cmcdconfigoptions.contentid.md} +5 -3
- package/docs/api/player.cmcdconfigoptions.md +79 -0
- package/docs/api/{player.cmcdconfigpluginsettings.md → player.cmcdconfigoptions.sessionid.md} +4 -6
- package/docs/api/player.extendedevents.md +9 -0
- package/docs/api/player.md +37 -31
- package/docs/api/player.mediacontrol.getavailableheight.md +24 -0
- package/docs/api/player.mediacontrol.md +14 -0
- package/docs/api/{player.cmcdconfig.name.md → player.posterpluginsettings.custom.md} +4 -3
- package/docs/api/player.posterpluginsettings.md +108 -7
- package/docs/api/player.posterpluginsettings.showfornoop.md +16 -0
- package/docs/api/player.posterpluginsettings.showonvideoend.md +16 -0
- package/docs/api/{player.cmcdconfig.bindevents.md → player.posterpluginsettings.url.md} +4 -7
- package/lib/plugins/big-mute-button/BigMuteButton.d.ts +15 -13
- package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -1
- package/lib/plugins/big-mute-button/BigMuteButton.js +68 -83
- package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -0
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +17 -17
- package/lib/plugins/clappr-stats/ClapprStats.d.ts +6 -2
- package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
- package/lib/plugins/clips/Clips.d.ts +1 -1
- package/lib/plugins/clips/Clips.d.ts.map +1 -1
- package/lib/plugins/clips/Clips.js +2 -1
- package/lib/plugins/cmcd-config/CmcdConfig.d.ts +34 -11
- package/lib/plugins/cmcd-config/CmcdConfig.d.ts.map +1 -1
- package/lib/plugins/cmcd-config/CmcdConfig.js +28 -18
- package/lib/plugins/media-control/MediaControl.d.ts +11 -0
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +19 -5
- package/lib/plugins/poster/Poster.d.ts +7 -3
- package/lib/plugins/poster/Poster.d.ts.map +1 -1
- package/lib/plugins/source-controller/SourceController.d.ts +1 -0
- package/lib/plugins/source-controller/SourceController.d.ts.map +1 -1
- package/lib/plugins/source-controller/SourceController.js +20 -9
- package/lib/testUtils.d.ts +1 -0
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +3 -0
- package/package.json +1 -1
- package/src/plugins/big-mute-button/BigMuteButton.ts +75 -110
- package/src/plugins/big-mute-button/__tests__/BigMuteButton.test.ts +38 -0
- package/src/plugins/big-mute-button/__tests__/__snapshots__/BigMuteButton.test.ts.snap +8 -0
- package/src/plugins/bottom-gear/BottomGear.ts +40 -28
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +34 -7
- package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +5 -2
- package/src/plugins/clappr-stats/ClapprStats.ts +5 -1
- package/src/plugins/clips/Clips.ts +3 -2
- package/src/plugins/cmcd-config/CmcdConfig.ts +33 -27
- package/src/plugins/media-control/MediaControl.ts +23 -6
- package/src/plugins/poster/Poster.ts +6 -2
- package/src/plugins/source-controller/SourceController.ts +25 -9
- package/src/plugins/source-controller/__tests__/SourceController.test.ts +28 -8
- package/src/testUtils.ts +3 -0
- package/temp/player.api.json +229 -154
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.cmcdconfig.supportedversion.md +0 -14
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UICorePlugin, template, Events as ClapprEvents,
|
|
1
|
+
import { UICorePlugin, template, Events as ClapprEvents, $, } from '@clappr/core';
|
|
2
2
|
import { trace } from '@gcorevideo/utils';
|
|
3
3
|
import assert from 'assert';
|
|
4
4
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
@@ -10,6 +10,8 @@ import gearHdIcon from '../../../assets/icons/new/gear-hd.svg';
|
|
|
10
10
|
import { ExtendedEvents } from '../media-control/MediaControl.js';
|
|
11
11
|
const VERSION = '2.19.12';
|
|
12
12
|
const T = 'plugins.bottom_gear';
|
|
13
|
+
const MENU_VMARGIN = 12;
|
|
14
|
+
const MENU_BACKLINK_HEIGHT = 44;
|
|
13
15
|
/**
|
|
14
16
|
* Events triggered by the plugin
|
|
15
17
|
* @beta
|
|
@@ -21,7 +23,6 @@ export var GearEvents;
|
|
|
21
23
|
*/
|
|
22
24
|
GearEvents["RENDERED"] = "rendered";
|
|
23
25
|
})(GearEvents || (GearEvents = {}));
|
|
24
|
-
// TODO disabled if no items added
|
|
25
26
|
/**
|
|
26
27
|
* `PLUGIN` that adds a button to extend the media controls UI with extra options.
|
|
27
28
|
* @beta
|
|
@@ -158,7 +159,7 @@ export class BottomGear extends UICorePlugin {
|
|
|
158
159
|
* ```
|
|
159
160
|
*/
|
|
160
161
|
addItem(name, $subMenu) {
|
|
161
|
-
const $existingItem = this.$el.find(`#gear-options li[data-${name}`);
|
|
162
|
+
const $existingItem = this.$el.find(`#gear-options li[data-${name}]`);
|
|
162
163
|
if ($existingItem.length) {
|
|
163
164
|
trace(`${T} addItem already exists`, { name });
|
|
164
165
|
return $existingItem;
|
|
@@ -173,20 +174,17 @@ export class BottomGear extends UICorePlugin {
|
|
|
173
174
|
.hide()
|
|
174
175
|
.appendTo(this.$el.find('#gear-options-wrapper'));
|
|
175
176
|
$item.on('click', (e) => {
|
|
176
|
-
trace(`${T} addItem submenu clicked`, { name });
|
|
177
177
|
e.stopPropagation();
|
|
178
|
+
this.alignSubmenu($subMenu);
|
|
178
179
|
$subMenu.show();
|
|
179
180
|
this.$el.find('#gear-options').hide();
|
|
180
181
|
});
|
|
181
182
|
}
|
|
182
183
|
this.numItems++;
|
|
183
|
-
|
|
184
|
-
this.$el.show();
|
|
185
|
-
}
|
|
184
|
+
this.$el.show();
|
|
186
185
|
return $item;
|
|
187
186
|
}
|
|
188
187
|
bindContainerEvents(container) {
|
|
189
|
-
trace(`${T} bindContainerEvents`);
|
|
190
188
|
this.listenTo(container, ClapprEvents.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
|
|
191
189
|
this.listenTo(container, ClapprEvents.CONTAINER_CLICK, () => {
|
|
192
190
|
this.collapse();
|
|
@@ -201,7 +199,6 @@ export class BottomGear extends UICorePlugin {
|
|
|
201
199
|
* @internal
|
|
202
200
|
*/
|
|
203
201
|
render() {
|
|
204
|
-
trace(`${T} render`);
|
|
205
202
|
const mediaControl = this.core.getPlugin('media_control');
|
|
206
203
|
if (!mediaControl) {
|
|
207
204
|
return this; // TODO test
|
|
@@ -242,11 +239,11 @@ export class BottomGear extends UICorePlugin {
|
|
|
242
239
|
else {
|
|
243
240
|
this.$el.find('#gear-options-wrapper').show();
|
|
244
241
|
}
|
|
245
|
-
this.$el
|
|
246
|
-
|
|
242
|
+
this.$el
|
|
243
|
+
.find('#gear-button')
|
|
244
|
+
.attr('aria-expanded', (!this.collapsed).toString());
|
|
247
245
|
}
|
|
248
246
|
collapse() {
|
|
249
|
-
trace(`${T} collapse`);
|
|
250
247
|
this.collapsed = true;
|
|
251
248
|
this.$el.find('#gear-options-wrapper').hide();
|
|
252
249
|
this.$el.find('#gear-button').attr('aria-expanded', 'false');
|
|
@@ -254,7 +251,6 @@ export class BottomGear extends UICorePlugin {
|
|
|
254
251
|
this.collapseSubmenus();
|
|
255
252
|
}
|
|
256
253
|
onCoreReady() {
|
|
257
|
-
trace(`${T} onCoreReady`);
|
|
258
254
|
const mediaControl = this.core.getPlugin('media_control');
|
|
259
255
|
assert(mediaControl, 'media_control plugin is required');
|
|
260
256
|
this.listenTo(mediaControl, ClapprEvents.MEDIACONTROL_RENDERED, this.onMediaControlRendered);
|
|
@@ -270,14 +266,18 @@ export class BottomGear extends UICorePlugin {
|
|
|
270
266
|
this.bindContainerEvents(mediaControl.container);
|
|
271
267
|
}
|
|
272
268
|
onMediaControlRendered() {
|
|
273
|
-
trace(`${T} onMediaControlRendered`);
|
|
274
269
|
this.mount();
|
|
275
270
|
}
|
|
276
271
|
mount() {
|
|
277
|
-
trace(`${T} mount`, {
|
|
278
|
-
numItems: this.numItems,
|
|
279
|
-
});
|
|
280
272
|
const mediaControl = this.core.getPlugin('media_control');
|
|
281
273
|
mediaControl.mount('gear', this.$el);
|
|
282
274
|
}
|
|
275
|
+
alignSubmenu($subMenu) {
|
|
276
|
+
const availableHeight = this.core.getPlugin('media_control').getAvailableHeight() -
|
|
277
|
+
MENU_VMARGIN * 2;
|
|
278
|
+
$subMenu.css('max-height', `${availableHeight}px`);
|
|
279
|
+
$subMenu
|
|
280
|
+
.find('.gear-sub-menu')
|
|
281
|
+
.css('max-height', `${availableHeight - MENU_BACKLINK_HEIGHT}px`);
|
|
282
|
+
}
|
|
283
283
|
}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { Container, ContainerPlugin } from '@clappr/core';
|
|
2
2
|
import type { ClapprStatsMetrics } from './types.js';
|
|
3
3
|
export * from './types.js';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Config options for the {@link ClapprStats} plugin
|
|
6
|
+
* @beta
|
|
7
|
+
*/
|
|
8
|
+
export interface ClapprStatsSettings {
|
|
5
9
|
/**
|
|
6
10
|
* The interval in milliseconds of periodic measurements.
|
|
7
11
|
* The plugin will emit a {@link ClapprStatsEvents.REPORT} event with the collected metrics at the specified interval.
|
|
8
12
|
*/
|
|
9
13
|
runEach?: number;
|
|
10
|
-
}
|
|
14
|
+
}
|
|
11
15
|
/**
|
|
12
16
|
* `PLUGIN` that measures data about playback, which can be useful for analyzing performance and UX.
|
|
13
17
|
* @beta
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClapprStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-stats/ClapprStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAwB,MAAM,cAAc,CAAA;AAU/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAMpD,cAAc,YAAY,CAAA;AAM1B,MAAM,
|
|
1
|
+
{"version":3,"file":"ClapprStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-stats/ClapprStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAwB,MAAM,cAAc,CAAA;AAU/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAMpD,cAAc,YAAY,CAAA;AAM1B;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,sBAAsB,CAAI;IAElC,OAAO,CAAC,OAAO,CAAmC;IAElD,OAAO,CAAC,MAAM,CAMb;IAED,OAAO,CAAC,OAAO,CAAQ;IAEvB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,CAAC,GAAG;IASX,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;gBAIA,SAAS,EAAE,SAAS;IAKhC;;OAEG;IACM,UAAU;IAqDnB;;OAEG;IACM,OAAO;IAKhB;;;OAGG;IACH,aAAa;IAIb,YAAY;IAIZ,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,aAAa;CA0BtB"}
|
|
@@ -7,7 +7,7 @@ import '../../../assets/clips/clips.scss';
|
|
|
7
7
|
*/
|
|
8
8
|
export interface ClipsPluginSettings {
|
|
9
9
|
/**
|
|
10
|
-
* The compiled text of the clips description, one clip per line in format
|
|
10
|
+
* The compiled text of the clips description, one clip per line in format:
|
|
11
11
|
* `HH:MM:SS text` or `MM:SS text` or `SS text`
|
|
12
12
|
*/
|
|
13
13
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clips.d.ts","sourceRoot":"","sources":["../../../src/plugins/clips/Clips.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAe,MAAM,cAAc,CAAA;AAI3E,OAAO,EAAgB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,kCAAkC,CAAA;AAOzC;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAKD;;;;;;;;;;;GAWG;AACH,qBAAa,KAAM,SAAQ,YAAY;IACrC,OAAO,CAAC,QAAQ,CAAgC;IAEhD,OAAO,CAAC,KAAK,CAAiB;IAE9B,OAAO,CAAC,YAAY,CAAuB;IAE3C,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAEtD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED,IAAI,OAAO,WAEV;IAED,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACM,UAAU;IAUV,MAAM;IAUN,OAAO;IAQP,OAAO;IAQP,MAAM;IAKf;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"Clips.d.ts","sourceRoot":"","sources":["../../../src/plugins/clips/Clips.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAe,MAAM,cAAc,CAAA;AAI3E,OAAO,EAAgB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,kCAAkC,CAAA;AAOzC;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAKD;;;;;;;;;;;GAWG;AACH,qBAAa,KAAM,SAAQ,YAAY;IACrC,OAAO,CAAC,QAAQ,CAAgC;IAEhD,OAAO,CAAC,KAAK,CAAiB;IAE9B,OAAO,CAAC,YAAY,CAAuB;IAE3C,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAEtD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED,IAAI,OAAO,WAEV;IAED,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACM,UAAU;IAUV,MAAM;IAUN,OAAO;IAQP,OAAO;IAQP,MAAM;IAKf;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAK5C,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,WAAW;CAOpB"}
|
|
@@ -86,7 +86,8 @@ export class Clips extends UICorePlugin {
|
|
|
86
86
|
* @returns The text of the clip at the given time
|
|
87
87
|
*/
|
|
88
88
|
getText(time) {
|
|
89
|
-
return this.clips.find((clip) => clip.start <= time && clip.end >= time)
|
|
89
|
+
return this.clips.find((clip) => clip.start <= time && clip.end >= time)
|
|
90
|
+
?.text;
|
|
90
91
|
}
|
|
91
92
|
onCoreReady() {
|
|
92
93
|
trace(`${T} onCoreReady`);
|
|
@@ -1,45 +1,68 @@
|
|
|
1
1
|
import { Core, CorePlugin } from '@clappr/core';
|
|
2
2
|
/**
|
|
3
|
+
* Config options for the {@link CmcdConfig} plugin
|
|
3
4
|
* @beta
|
|
4
5
|
*/
|
|
5
|
-
export
|
|
6
|
+
export interface CmcdConfigOptions {
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
+
* `sid` value. If ommitted, a random UUID will be generated
|
|
8
9
|
*/
|
|
9
|
-
sessionId
|
|
10
|
+
sessionId?: string;
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
+
* `cid` value.
|
|
12
13
|
* If ommitted, the pathname part of the first source URL will be used
|
|
13
14
|
*/
|
|
14
15
|
contentId?: string;
|
|
15
|
-
}
|
|
16
|
+
}
|
|
16
17
|
/**
|
|
17
|
-
* A `PLUGIN` that configures CMCD for playback
|
|
18
|
+
* A `PLUGIN` that configures {@link https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf | CMCD} for playback
|
|
18
19
|
* @beta
|
|
19
20
|
* @remarks
|
|
20
|
-
* Configuration options
|
|
21
|
-
*
|
|
21
|
+
* Configuration options - {@link CmcdConfigOptions}.
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { CmcdConfig } from '@gcorevideo/player'
|
|
25
|
+
* Player.registerPlugin(CmcdConfig)
|
|
26
|
+
*
|
|
27
|
+
* const player = new Player({
|
|
28
|
+
* source: 'https://example.com/video.mp4',
|
|
29
|
+
* cmcd: {
|
|
30
|
+
* sessionId: '1234567890',
|
|
31
|
+
* contentId: 'f572d396fae9206628714fb2ce00f72e94f2258f',
|
|
32
|
+
* },
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
22
35
|
*/
|
|
23
36
|
export declare class CmcdConfig extends CorePlugin {
|
|
24
37
|
private sid;
|
|
25
38
|
private cid;
|
|
26
39
|
/**
|
|
27
|
-
* @
|
|
40
|
+
* @internal
|
|
28
41
|
*/
|
|
29
42
|
get name(): string;
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
30
46
|
get version(): string;
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
31
50
|
get supportedVersion(): string;
|
|
32
51
|
constructor(core: Core);
|
|
33
52
|
/**
|
|
34
|
-
* @
|
|
53
|
+
* @internal
|
|
35
54
|
*/
|
|
36
55
|
bindEvents(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the current `sid` and `cid` values.
|
|
58
|
+
* Useful when the auto-generated values need to be known.
|
|
59
|
+
* @returns `sid` and `cid` values
|
|
60
|
+
*/
|
|
37
61
|
exportIds(): {
|
|
38
62
|
sid: string;
|
|
39
63
|
cid: string;
|
|
40
64
|
};
|
|
41
65
|
private updateSettings;
|
|
42
|
-
private updateHlsjsSettings;
|
|
43
66
|
private generateContentId;
|
|
44
67
|
}
|
|
45
68
|
//# sourceMappingURL=CmcdConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmcdConfig.d.ts","sourceRoot":"","sources":["../../../src/plugins/cmcd-config/CmcdConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,UAAU,EAAU,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"CmcdConfig.d.ts","sourceRoot":"","sources":["../../../src/plugins/cmcd-config/CmcdConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,UAAU,EAAU,MAAM,cAAc,CAAA;AA4BrE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,GAAG,CAAQ;IAEnB,OAAO,CAAC,GAAG,CAAK;IAEhB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,OAAO,WAEV;IAED;;OAEG;IACH,IAAI,gBAAgB,WAEnB;gBAEW,IAAI,EAAE,IAAI;IAMtB;;OAEG;IACM,UAAU;IAMnB;;;;OAIG;IACH,SAAS,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;YAO3B,cAAc;IA8B5B,OAAO,CAAC,iBAAiB;CAK1B"}
|
|
@@ -24,24 +24,42 @@ const CMCD_KEYS = [
|
|
|
24
24
|
];
|
|
25
25
|
// const T = 'plugins.cmcd'
|
|
26
26
|
/**
|
|
27
|
-
* A `PLUGIN` that configures CMCD for playback
|
|
27
|
+
* A `PLUGIN` that configures {@link https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf | CMCD} for playback
|
|
28
28
|
* @beta
|
|
29
29
|
* @remarks
|
|
30
|
-
* Configuration options
|
|
31
|
-
*
|
|
30
|
+
* Configuration options - {@link CmcdConfigOptions}.
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { CmcdConfig } from '@gcorevideo/player'
|
|
34
|
+
* Player.registerPlugin(CmcdConfig)
|
|
35
|
+
*
|
|
36
|
+
* const player = new Player({
|
|
37
|
+
* source: 'https://example.com/video.mp4',
|
|
38
|
+
* cmcd: {
|
|
39
|
+
* sessionId: '1234567890',
|
|
40
|
+
* contentId: 'f572d396fae9206628714fb2ce00f72e94f2258f',
|
|
41
|
+
* },
|
|
42
|
+
* })
|
|
43
|
+
* ```
|
|
32
44
|
*/
|
|
33
45
|
export class CmcdConfig extends CorePlugin {
|
|
34
46
|
sid;
|
|
35
47
|
cid = '';
|
|
36
48
|
/**
|
|
37
|
-
* @
|
|
49
|
+
* @internal
|
|
38
50
|
*/
|
|
39
51
|
get name() {
|
|
40
52
|
return 'cmcd';
|
|
41
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
42
57
|
get version() {
|
|
43
58
|
return '0.1.0';
|
|
44
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
45
63
|
get supportedVersion() {
|
|
46
64
|
return CLAPPR_VERSION;
|
|
47
65
|
}
|
|
@@ -51,11 +69,16 @@ export class CmcdConfig extends CorePlugin {
|
|
|
51
69
|
this.cid = this.options.cmcd?.contentId ?? this.generateContentId();
|
|
52
70
|
}
|
|
53
71
|
/**
|
|
54
|
-
* @
|
|
72
|
+
* @internal
|
|
55
73
|
*/
|
|
56
74
|
bindEvents() {
|
|
57
75
|
this.listenTo(this.core, Events.CORE_CONTAINERS_CREATED, () => this.updateSettings(this.core.containers[0]));
|
|
58
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns the current `sid` and `cid` values.
|
|
79
|
+
* Useful when the auto-generated values need to be known.
|
|
80
|
+
* @returns `sid` and `cid` values
|
|
81
|
+
*/
|
|
59
82
|
exportIds() {
|
|
60
83
|
return {
|
|
61
84
|
sid: this.sid,
|
|
@@ -91,19 +114,6 @@ export class CmcdConfig extends CorePlugin {
|
|
|
91
114
|
break;
|
|
92
115
|
}
|
|
93
116
|
}
|
|
94
|
-
updateHlsjsSettings(options, { cid, sid }) {
|
|
95
|
-
$.extend(true, options, {
|
|
96
|
-
playback: {
|
|
97
|
-
hlsjsConfig: {
|
|
98
|
-
cmcd: {
|
|
99
|
-
includeKeys: CMCD_KEYS,
|
|
100
|
-
sessionId: sid,
|
|
101
|
-
contentId: cid,
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
117
|
generateContentId() {
|
|
108
118
|
return new URL(this.core.options.source ?? this.core.options.sources[0].source).pathname.slice(0, 64);
|
|
109
119
|
}
|
|
@@ -32,6 +32,10 @@ export type MediaControlSettings = {
|
|
|
32
32
|
default: MediaControlLayerElement[];
|
|
33
33
|
seekEnabled: boolean;
|
|
34
34
|
};
|
|
35
|
+
/**
|
|
36
|
+
* Extended events for the {@link MediaControl} plugin
|
|
37
|
+
* @beta
|
|
38
|
+
*/
|
|
35
39
|
export declare enum ExtendedEvents {
|
|
36
40
|
MEDIACONTROL_VOLUME = "mediacontrol:volume",
|
|
37
41
|
MEDIACONTROL_MENU_COLLAPSE = "mediacontrol:menu:collapse"
|
|
@@ -183,6 +187,13 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
183
187
|
* Reenables the plugin disabled earlier with the {@link MediaControl.disable} method
|
|
184
188
|
*/
|
|
185
189
|
enable(): void;
|
|
190
|
+
/**
|
|
191
|
+
*
|
|
192
|
+
* @returns Vertical space available to render something on top of the container.
|
|
193
|
+
* @remarks
|
|
194
|
+
* This takes into account the container height and excludes the height of the controls bar
|
|
195
|
+
*/
|
|
196
|
+
getAvailableHeight(): number;
|
|
186
197
|
/**
|
|
187
198
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
188
199
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,10 @@ const LEFT_ORDER = [
|
|
|
58
58
|
'duration',
|
|
59
59
|
'dvr',
|
|
60
60
|
];
|
|
61
|
+
/**
|
|
62
|
+
* Extended events for the {@link MediaControl} plugin
|
|
63
|
+
* @beta
|
|
64
|
+
*/
|
|
61
65
|
export var ExtendedEvents;
|
|
62
66
|
(function (ExtendedEvents) {
|
|
63
67
|
ExtendedEvents["MEDIACONTROL_VOLUME"] = "mediacontrol:volume";
|
|
@@ -318,6 +322,15 @@ export class MediaControl extends UICorePlugin {
|
|
|
318
322
|
this.bindKeyEvents();
|
|
319
323
|
this.show();
|
|
320
324
|
}
|
|
325
|
+
/**
|
|
326
|
+
*
|
|
327
|
+
* @returns Vertical space available to render something on top of the container.
|
|
328
|
+
* @remarks
|
|
329
|
+
* This takes into account the container height and excludes the height of the controls bar
|
|
330
|
+
*/
|
|
331
|
+
getAvailableHeight() {
|
|
332
|
+
return (this.core.$el.height() - this.$el.find('.media-control-layer').height());
|
|
333
|
+
}
|
|
321
334
|
/**
|
|
322
335
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
323
336
|
*/
|
|
@@ -329,6 +342,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
329
342
|
onVolumeChanged() {
|
|
330
343
|
this.updateVolumeUI();
|
|
331
344
|
}
|
|
345
|
+
// TODO check if CONTAINER_SETTINGSUPDATE handler is sufficient
|
|
332
346
|
onLoadedMetadata() {
|
|
333
347
|
const video = this.core.activePlayback?.el;
|
|
334
348
|
// video.webkitSupportsFullscreen is deprecated but iOS appears to only use this
|
|
@@ -417,11 +431,11 @@ export class MediaControl extends UICorePlugin {
|
|
|
417
431
|
this.applyButtonStyle(this.$playStopToggle);
|
|
418
432
|
}
|
|
419
433
|
mousemoveOnSeekBar(event) {
|
|
420
|
-
const offset = MediaControl.getPageX(event) -
|
|
421
|
-
|
|
422
|
-
const
|
|
423
|
-
(this.$
|
|
424
|
-
|
|
434
|
+
const offset = MediaControl.getPageX(event) - (this.$seekBarContainer.offset().left ?? 0); // TODO check if the result can be negative
|
|
435
|
+
const hoverOffset = offset - (this.$seekBarHover.width() ?? 0) / 2;
|
|
436
|
+
const pos = offset
|
|
437
|
+
? Math.min(1, Math.max(offset / this.$seekBarContainer.width(), 0))
|
|
438
|
+
: 0;
|
|
425
439
|
if (this.settings.seekEnabled) {
|
|
426
440
|
// TODO test that it works when the element does not exist
|
|
427
441
|
this.$seekBarHover.css({ left: hoverOffset });
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { UIContainerPlugin } from '@clappr/core';
|
|
2
2
|
import '../../../assets/poster/poster.scss';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Config options for the {@link Poster} plugin
|
|
5
|
+
* @beta
|
|
6
|
+
*/
|
|
7
|
+
export interface PosterPluginSettings {
|
|
4
8
|
/**
|
|
5
9
|
* Custom CSS background
|
|
6
10
|
*/
|
|
@@ -14,10 +18,10 @@ export type PosterPluginSettings = {
|
|
|
14
18
|
*/
|
|
15
19
|
url?: string;
|
|
16
20
|
/**
|
|
17
|
-
* Whether to show the poster after playback has ended
|
|
21
|
+
* Whether to show the poster after playback has ended, by default `true`
|
|
18
22
|
*/
|
|
19
23
|
showOnVideoEnd?: boolean;
|
|
20
|
-
}
|
|
24
|
+
}
|
|
21
25
|
/**
|
|
22
26
|
* `PLUGIN` that displays a poster image in the background and a big play button on top when playback is stopped
|
|
23
27
|
* @beta
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Poster.d.ts","sourceRoot":"","sources":["../../../src/plugins/poster/Poster.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,iBAAiB,EAElB,MAAM,cAAc,CAAA;AAMrB,OAAO,oCAAoC,CAAA;AAK3C,MAAM,
|
|
1
|
+
{"version":3,"file":"Poster.d.ts","sourceRoot":"","sources":["../../../src/plugins/poster/Poster.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,iBAAiB,EAElB,MAAM,cAAc,CAAA;AAMrB,OAAO,oCAAoC,CAAA;AAK3C;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAID;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,MAAO,SAAQ,iBAAiB;IAG3C,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,WAAW,CAA2B;IAE9C;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD,OAAO,KAAK,YAAY,GASvB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAuBnB;;OAEG;IACM,MAAM;IAOf;;OAEG;IACM,OAAO;IAOhB,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IAgCf;;OAEG;IACM,OAAO;CAIjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceController.d.ts","sourceRoot":"","sources":["../../../src/plugins/source-controller/SourceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,IAAI,IAAI,UAAU,EACxB,MAAM,cAAc,CAAA;AAwBrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAwC9C,OAAO,CAAC,WAAW,CAA8B;IAEjD,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,IAAI,CAAiB;IAE7B;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;gBACS,IAAI,EAAE,UAAU;IAW5B;;OAEG;IACM,UAAU;IAWnB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,2BAA2B;
|
|
1
|
+
{"version":3,"file":"SourceController.d.ts","sourceRoot":"","sources":["../../../src/plugins/source-controller/SourceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,IAAI,IAAI,UAAU,EACxB,MAAM,cAAc,CAAA;AAwBrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAwC9C,OAAO,CAAC,WAAW,CAA8B;IAEjD,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,IAAI,CAAiB;IAE7B;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;gBACS,IAAI,EAAE,UAAU;IAW5B;;OAEG;IACM,UAAU;IAWnB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,2BAA2B;IAmDnC,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Events as
|
|
1
|
+
import { Events as Events, CorePlugin, } from '@clappr/core';
|
|
2
2
|
import { PlaybackErrorCode } from '../../playback.types.js';
|
|
3
3
|
import { trace } from '@gcorevideo/utils';
|
|
4
4
|
import { SpinnerEvents } from '../spinner-three-bounce/SpinnerThreeBounce.js';
|
|
@@ -108,6 +108,7 @@ export class SourceController extends CorePlugin {
|
|
|
108
108
|
currentSourceIndex = 0;
|
|
109
109
|
sourcesDelay = {};
|
|
110
110
|
active = false;
|
|
111
|
+
autoPlay = false;
|
|
111
112
|
switching = false;
|
|
112
113
|
sync = noSync;
|
|
113
114
|
/**
|
|
@@ -141,8 +142,8 @@ export class SourceController extends CorePlugin {
|
|
|
141
142
|
*/
|
|
142
143
|
bindEvents() {
|
|
143
144
|
super.bindEvents();
|
|
144
|
-
this.listenTo(this.core,
|
|
145
|
-
this.listenTo(this.core,
|
|
145
|
+
this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
|
|
146
|
+
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
146
147
|
}
|
|
147
148
|
onCoreReady() {
|
|
148
149
|
trace(`${T} onCoreReady`);
|
|
@@ -169,7 +170,7 @@ export class SourceController extends CorePlugin {
|
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
172
|
bindContainerEventListeners() {
|
|
172
|
-
this.core.activePlayback.on(
|
|
173
|
+
this.core.activePlayback.on(Events.PLAYBACK_ERROR, (error) => {
|
|
173
174
|
trace(`${T} on PLAYBACK_ERROR`, {
|
|
174
175
|
error: {
|
|
175
176
|
code: error?.code,
|
|
@@ -183,6 +184,7 @@ export class SourceController extends CorePlugin {
|
|
|
183
184
|
if (this.switching) {
|
|
184
185
|
return;
|
|
185
186
|
}
|
|
187
|
+
this.autoPlay = !!this.core.activeContainer.actionsMetadata.playEvent?.autoPlay;
|
|
186
188
|
switch (error.code) {
|
|
187
189
|
case PlaybackErrorCode.MediaSourceUnavailable:
|
|
188
190
|
this.core.activeContainer?.getPlugin('poster')?.disable();
|
|
@@ -192,7 +194,7 @@ export class SourceController extends CorePlugin {
|
|
|
192
194
|
break;
|
|
193
195
|
}
|
|
194
196
|
});
|
|
195
|
-
this.core.activePlayback.on(
|
|
197
|
+
this.core.activePlayback.on(Events.PLAYBACK_PLAY, () => {
|
|
196
198
|
trace(`${T} on PLAYBACK_PLAY`, {
|
|
197
199
|
currentSource: this.sourcesList[this.currentSourceIndex],
|
|
198
200
|
retrying: this.active,
|
|
@@ -203,6 +205,12 @@ export class SourceController extends CorePlugin {
|
|
|
203
205
|
this.core.activeContainer?.getPlugin('spinner')?.hide();
|
|
204
206
|
}
|
|
205
207
|
});
|
|
208
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAY, (_, { autoPlay }) => {
|
|
209
|
+
trace(`${T} onContainerPlay`, {
|
|
210
|
+
autoPlay,
|
|
211
|
+
});
|
|
212
|
+
this.autoPlay = !!autoPlay;
|
|
213
|
+
});
|
|
206
214
|
}
|
|
207
215
|
reset() {
|
|
208
216
|
this.active = false;
|
|
@@ -220,17 +228,20 @@ export class SourceController extends CorePlugin {
|
|
|
220
228
|
trace(`${T} retryPlayback syncing...`, {
|
|
221
229
|
nextSource,
|
|
222
230
|
});
|
|
223
|
-
const rnd = RETRY_DELAY_BLUR * Math.random();
|
|
231
|
+
const rnd = Math.round(RETRY_DELAY_BLUR * Math.random());
|
|
224
232
|
this.sync(() => {
|
|
225
|
-
trace(`${T} retryPlayback loading...`);
|
|
226
233
|
this.switching = false;
|
|
227
234
|
this.core.load(nextSource.source, nextSource.mimeType);
|
|
228
235
|
trace(`${T} retryPlayback loaded`, {
|
|
229
236
|
nextSource,
|
|
230
237
|
});
|
|
231
238
|
setTimeout(() => {
|
|
232
|
-
|
|
233
|
-
|
|
239
|
+
trace(`${T} retryPlayback playing`, {
|
|
240
|
+
autoPlay: this.autoPlay,
|
|
241
|
+
});
|
|
242
|
+
this.core.activeContainer.play({
|
|
243
|
+
autoPlay: this.autoPlay,
|
|
244
|
+
});
|
|
234
245
|
}, rnd);
|
|
235
246
|
});
|
|
236
247
|
});
|
package/lib/testUtils.d.ts
CHANGED
|
@@ -66,6 +66,7 @@ export declare function createMockPlayback(name?: string, options?: Record<strin
|
|
|
66
66
|
trigger: <T extends string | symbol>(event: T, ...args: any[]) => boolean;
|
|
67
67
|
};
|
|
68
68
|
export declare function createMockContainer(options?: Record<string, unknown>, playback?: any): Events<string | symbol, any> & {
|
|
69
|
+
actionsMetadata: {};
|
|
69
70
|
el: any;
|
|
70
71
|
playback: any;
|
|
71
72
|
options: {
|
package/lib/testUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,MAAM,MAAM,eAAe,CAAA;AAGlC,wBAAgB,cAAc,CAC5B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,GAAE,GAAkC;;;;;;;;;;;;;;;;;EAsB9C;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCtF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAAgD
|
|
1
|
+
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,MAAM,MAAM,eAAe,CAAA;AAGlC,wBAAgB,cAAc,CAC5B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,GAAE,GAAkC;;;;;;;;;;;;;;;;;EAsB9C;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCtF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAAgD;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBAmB/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAe7C"}
|
package/lib/testUtils.js
CHANGED
|
@@ -76,6 +76,7 @@ export function createMockContainer(options = {}, playback = createMockPlayback(
|
|
|
76
76
|
const el = playback.el;
|
|
77
77
|
const emitter = new Events();
|
|
78
78
|
return Object.assign(emitter, {
|
|
79
|
+
actionsMetadata: {},
|
|
79
80
|
el,
|
|
80
81
|
playback,
|
|
81
82
|
options: {
|
|
@@ -112,6 +113,8 @@ export function createMockMediaControl(core) {
|
|
|
112
113
|
// @ts-ignore
|
|
113
114
|
mediaControl.container = core.activeContainer;
|
|
114
115
|
// @ts-ignore
|
|
116
|
+
mediaControl.getAvailableHeight = vi.fn().mockReturnValue(300);
|
|
117
|
+
// @ts-ignore
|
|
115
118
|
mediaControl.toggleElement = vi.fn();
|
|
116
119
|
vi.spyOn(mediaControl, 'trigger');
|
|
117
120
|
core.$el.append(mediaControl.$el);
|