@gcorevideo/player 2.19.12 → 2.19.13
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/dist/core.js +16 -11
- package/dist/index.css +689 -689
- package/dist/index.js +301 -150
- package/dist/player.d.ts +208 -45
- package/dist/plugins/index.css +563 -563
- package/dist/plugins/index.js +3227 -3079
- package/docs/api/player.bottomgear.md +3 -289
- package/docs/api/player.dvrcontrols._constructor_.md +3 -0
- package/docs/api/player.dvrcontrols.md +10 -201
- package/docs/api/player.levelselector.md +8 -140
- package/docs/api/player.md +8 -4
- package/docs/api/player.mediacontrol.disable.md +2 -0
- package/docs/api/player.mediacontrol.disabledcontrolbutton.md +1 -1
- package/docs/api/player.mediacontrol.enable.md +2 -0
- package/docs/api/player.mediacontrol.enablecontrolbutton.md +1 -1
- package/docs/api/player.mediacontrol.getelement.md +19 -1
- package/docs/api/player.mediacontrol.md +17 -281
- package/docs/api/player.mediacontrol.volume.md +2 -2
- package/docs/api/player.mediacontrolelement.md +2 -1
- package/docs/api/player.poster.disable.md +5 -0
- package/docs/api/player.poster.enable.md +5 -0
- package/docs/api/player.poster.md +25 -183
- package/lib/Player.d.ts +1 -0
- package/lib/Player.d.ts.map +1 -1
- package/lib/Player.js +15 -10
- package/lib/plugins/audio-selector/AudioSelector.js +2 -2
- package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -1
- package/lib/plugins/big-mute-button/BigMuteButton.js +2 -1
- package/lib/plugins/bottom-gear/BottomGear.d.ts +28 -7
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +44 -31
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +3 -2
- package/lib/plugins/clappr-stats/ClapprStats.js +1 -1
- package/lib/plugins/click-to-pause/ClickToPause.js +1 -1
- package/lib/plugins/clips/Clips.js +2 -2
- package/lib/plugins/context-menu/ContextMenu.js +1 -1
- package/lib/plugins/disable-controls/DisableControls.js +1 -1
- package/lib/plugins/dvr-controls/DvrControls.d.ts +30 -4
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +39 -11
- package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
- package/lib/plugins/error-screen/ErrorScreen.js +2 -1
- package/lib/plugins/favicon/Favicon.js +1 -1
- package/lib/plugins/google-analytics/GoogleAnalytics.js +1 -1
- package/lib/plugins/level-selector/LevelSelector.d.ts +25 -6
- package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
- package/lib/plugins/level-selector/LevelSelector.js +33 -12
- package/lib/plugins/logo/Logo.js +1 -1
- package/lib/plugins/media-control/MediaControl.d.ts +66 -22
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +71 -34
- package/lib/plugins/multi-camera/MultiCamera.js +3 -3
- package/lib/plugins/picture-in-picture/PictureInPicture.js +3 -3
- package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +3 -3
- package/lib/plugins/poster/Poster.d.ts +57 -3
- package/lib/plugins/poster/Poster.d.ts.map +1 -1
- package/lib/plugins/poster/Poster.js +57 -9
- package/lib/plugins/seek-time/SeekTime.js +2 -2
- package/lib/plugins/share/Share.js +2 -2
- package/lib/plugins/skip-time/SkipTime.js +1 -1
- package/lib/plugins/source-controller/SourceController.js +1 -1
- package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +1 -1
- package/lib/plugins/statistics/Statistics.js +1 -1
- package/lib/plugins/subtitles/Subtitles.js +3 -3
- package/lib/plugins/thumbnails/Thumbnails.js +3 -3
- package/lib/plugins/types.d.ts +1 -7
- package/lib/plugins/types.d.ts.map +1 -1
- package/lib/plugins/vast-ads/VastAds.d.ts +1 -0
- package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -1
- package/lib/plugins/vast-ads/VastAds.js +6 -3
- package/package.json +2 -1
- package/src/Player.ts +15 -9
- package/src/__tests__/Player.test.ts +15 -76
- package/src/plugins/audio-selector/AudioSelector.ts +2 -2
- package/src/plugins/big-mute-button/BigMuteButton.ts +2 -1
- package/src/plugins/bottom-gear/BottomGear.ts +50 -39
- package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +3 -2
- package/src/plugins/clappr-stats/ClapprStats.ts +1 -1
- package/src/plugins/click-to-pause/ClickToPause.ts +1 -1
- package/src/plugins/clips/Clips.ts +2 -2
- package/src/plugins/context-menu/ContextMenu.ts +1 -1
- package/src/plugins/disable-controls/DisableControls.ts +1 -1
- package/src/plugins/dvr-controls/DvrControls.ts +42 -14
- package/src/plugins/error-screen/ErrorScreen.ts +2 -1
- package/src/plugins/favicon/Favicon.ts +1 -1
- package/src/plugins/google-analytics/GoogleAnalytics.ts +1 -1
- package/src/plugins/level-selector/LevelSelector.ts +34 -14
- package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +22 -2
- package/src/plugins/logo/Logo.ts +1 -1
- package/src/plugins/media-control/MediaControl.ts +82 -44
- package/src/plugins/multi-camera/MultiCamera.ts +3 -3
- package/src/plugins/picture-in-picture/PictureInPicture.ts +3 -3
- package/src/plugins/playback-rate/PlaybackRate.ts +3 -4
- package/src/plugins/poster/Poster.ts +59 -12
- package/src/plugins/seek-time/SeekTime.ts +2 -2
- package/src/plugins/share/Share.ts +2 -2
- package/src/plugins/skip-time/SkipTime.ts +1 -1
- package/src/plugins/source-controller/SourceController.ts +1 -1
- package/src/plugins/source-controller/__tests__/SourceController.test.ts +5 -0
- package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +1 -1
- package/src/plugins/statistics/Statistics.ts +1 -1
- package/src/plugins/subtitles/Subtitles.ts +3 -3
- package/src/plugins/thumbnails/Thumbnails.ts +3 -3
- package/src/plugins/types.ts +1 -0
- package/src/plugins/vast-ads/VastAds.ts +6 -6
- package/temp/player.api.json +3300 -5029
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.bottomgear.attributes.md +0 -17
- package/docs/api/player.bottomgear.bindevents.md +0 -18
- package/docs/api/player.bottomgear.container.md +0 -14
- package/docs/api/player.bottomgear.events.md +0 -16
- package/docs/api/player.bottomgear.hide.md +0 -18
- package/docs/api/player.bottomgear.name.md +0 -14
- package/docs/api/player.bottomgear.refresh.md +0 -18
- package/docs/api/player.bottomgear.reload.md +0 -18
- package/docs/api/player.bottomgear.render.md +0 -18
- package/docs/api/player.bottomgear.supportedversion.md +0 -16
- package/docs/api/player.bottomgear.template.md +0 -14
- package/docs/api/player.bottomgear.togglegearmenu.md +0 -18
- package/docs/api/player.bottomgear.unbindevents.md +0 -18
- package/docs/api/player.bottomgear.version.md +0 -14
- package/docs/api/player.dvrcontrols.attributes.md +0 -14
- package/docs/api/player.dvrcontrols.bindevents.md +0 -15
- package/docs/api/player.dvrcontrols.click.md +0 -15
- package/docs/api/player.dvrcontrols.events.md +0 -13
- package/docs/api/player.dvrcontrols.name.md +0 -11
- package/docs/api/player.dvrcontrols.render.md +0 -15
- package/docs/api/player.dvrcontrols.settingsupdate.md +0 -15
- package/docs/api/player.dvrcontrols.shouldrender.md +0 -15
- package/docs/api/player.dvrcontrols.supportedversion.md +0 -13
- package/docs/api/player.dvrcontrols.template.md +0 -11
- package/docs/api/player.levelselector.attributes.md +0 -17
- package/docs/api/player.levelselector.bindevents.md +0 -18
- package/docs/api/player.levelselector.name.md +0 -14
- package/docs/api/player.levelselector.render.md +0 -18
- package/docs/api/player.levelselector.supportedversion.md +0 -16
- package/docs/api/player.levelselector.version.md +0 -14
- package/docs/api/player.mediacontrol.attributes.md +0 -17
- package/docs/api/player.mediacontrol.bindcontainerevents.md +0 -18
- package/docs/api/player.mediacontrol.bindevents.md +0 -18
- package/docs/api/player.mediacontrol.container.md +0 -14
- package/docs/api/player.mediacontrol.destroy.md +0 -18
- package/docs/api/player.mediacontrol.disabled.md +0 -14
- package/docs/api/player.mediacontrol.events.md +0 -40
- package/docs/api/player.mediacontrol.getexternalinterface.md +0 -21
- package/docs/api/player.mediacontrol.name.md +0 -14
- package/docs/api/player.mediacontrol.pause.md +0 -20
- package/docs/api/player.mediacontrol.play.md +0 -20
- package/docs/api/player.mediacontrol.playback.md +0 -14
- package/docs/api/player.mediacontrol.render.md +0 -18
- package/docs/api/player.mediacontrol.setmuted.md +0 -52
- package/docs/api/player.mediacontrol.stop.md +0 -20
- package/docs/api/player.mediacontrol.supportedversion.md +0 -16
- package/docs/api/player.poster.attributes.md +0 -14
- package/docs/api/player.poster.bindevents.md +0 -15
- package/docs/api/player.poster.destroy.md +0 -15
- package/docs/api/player.poster.events.md +0 -13
- package/docs/api/player.poster.name.md +0 -11
- package/docs/api/player.poster.render.md +0 -15
- package/docs/api/player.poster.shouldrender.md +0 -11
- package/docs/api/player.poster.showonvideoend.md +0 -11
- package/docs/api/player.poster.supportedversion.md +0 -13
- package/docs/api/player.poster.template.md +0 -11
- package/src/plugins/build.ts +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { UICorePlugin, Events, template, $ } from '@clappr/core';
|
|
2
2
|
import { reportError, trace } from '@gcorevideo/utils';
|
|
3
3
|
import parseSRT from 'parse-srt';
|
|
4
|
-
import { CLAPPR_VERSION } from '
|
|
4
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
5
5
|
import pluginHtml from '../../../assets/thumbnails/scrub-thumbnails.ejs';
|
|
6
6
|
import '../../../assets/thumbnails/style.scss';
|
|
7
7
|
import { getPageX } from '../utils.js';
|
|
8
|
-
const T = 'plugins.
|
|
8
|
+
const T = 'plugins.media_control_thumbnails';
|
|
9
9
|
export class Thumbnails extends UICorePlugin {
|
|
10
10
|
_$spotlight = null;
|
|
11
11
|
_$backdrop = null;
|
|
@@ -21,7 +21,7 @@ export class Thumbnails extends UICorePlugin {
|
|
|
21
21
|
_oldContainer = null;
|
|
22
22
|
_thumbs = [];
|
|
23
23
|
get name() {
|
|
24
|
-
return '
|
|
24
|
+
return 'media_control_thumbnails';
|
|
25
25
|
}
|
|
26
26
|
get supportedVersion() {
|
|
27
27
|
return { min: CLAPPR_VERSION };
|
package/lib/plugins/types.d.ts
CHANGED
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export type ZeptoResult = ReturnType<typeof $>;
|
|
3
|
-
export type TimePosition = {
|
|
4
|
-
current: number;
|
|
5
|
-
total: number;
|
|
6
|
-
};
|
|
7
|
-
export type TimerId = ReturnType<typeof setTimeout>;
|
|
1
|
+
export type TemplateFunction = (data: Record<string, unknown>) => string;
|
|
8
2
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VastAds.d.ts","sourceRoot":"","sources":["../../../src/plugins/vast-ads/VastAds.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,IAAI,EAIJ,QAAQ,EAER,YAAY,EAEb,MAAM,cAAc,CAAA;AAYrB,OAAO,qCAAqC,CAAA;AAQ5C,qBAAa,OAAQ,SAAQ,YAAY;IACvC,OAAO,CAAC,mBAAmB,CAAiC;IAE5D,OAAO,CAAC,qBAAqB,CAAwC;IAErE,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,eAAe,CAAI;IAE3B,OAAO,CAAC,mBAAmB,CAAI;IAE/B,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,SAAS,CAAwB;IAEzC,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,aAAa,CAAiC;IAEtD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,uBAAuB,CAAI;IAEnC,OAAO,CAAC,0BAA0B,CAAI;IAEtC,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,YAAY,CAA2B;IAE/C,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,MAAM,KAAK,OAAO,WAEjB;IAED,IAAI,YAAY,QAEf;IAED,IAAa,UAAU;;;MAKtB;gBAEW,IAAI,EAAE,IAAI;IAqEb,UAAU;IA8FnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,oBAAoB;IAkE5B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,qBAAqB;IAwD7B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,mBAAmB;IAiD3B,YAAY;IASZ,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IA6BpB,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAG3B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,OAAO,CAAC,kBAAkB;IAU1B,gBAAgB,CAAC,CAAC,EAAE,MAAM;IAQ1B,cAAc;IAsBd,eAAe;IAkBf,WAAW;IAiBX,OAAO,CAAC,UAAU;IA+ClB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAiHhB,MAAM;
|
|
1
|
+
{"version":3,"file":"VastAds.d.ts","sourceRoot":"","sources":["../../../src/plugins/vast-ads/VastAds.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,IAAI,EAIJ,QAAQ,EAER,YAAY,EAEb,MAAM,cAAc,CAAA;AAYrB,OAAO,qCAAqC,CAAA;AAQ5C,qBAAa,OAAQ,SAAQ,YAAY;IACvC,OAAO,CAAC,mBAAmB,CAAiC;IAE5D,OAAO,CAAC,qBAAqB,CAAwC;IAErE,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,eAAe,CAAI;IAE3B,OAAO,CAAC,mBAAmB,CAAI;IAE/B,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,SAAS,CAAwB;IAEzC,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,aAAa,CAAiC;IAEtD,OAAO,CAAC,gBAAgB,CAAI;IAE5B,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,uBAAuB,CAAI;IAEnC,OAAO,CAAC,0BAA0B,CAAI;IAEtC,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,YAAY,CAA2B;IAE/C,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,MAAM,KAAK,OAAO,WAEjB;IAED,IAAI,YAAY,QAEf;IAED,IAAa,UAAU;;;MAKtB;gBAEW,IAAI,EAAE,IAAI;IAqEb,UAAU;IA8FnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,oBAAoB;IAkE5B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,qBAAqB;IAwD7B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,mBAAmB;IAiD3B,YAAY;IASZ,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IA6BpB,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAG3B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,OAAO,CAAC,kBAAkB;IAU1B,gBAAgB,CAAC,CAAC,EAAE,MAAM;IAQ1B,cAAc;IAsBd,eAAe;IAkBf,WAAW;IAiBX,OAAO,CAAC,UAAU;IA+ClB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAiHhB,MAAM;IAqBf,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $, Browser, Events, HTML5Video, Log, UICorePlugin, Utils, } from '@clappr/core';
|
|
2
2
|
import { reportError } from '@gcorevideo/utils';
|
|
3
3
|
import assert from 'assert';
|
|
4
|
-
import { CLAPPR_VERSION } from '
|
|
4
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
5
5
|
import RollManager from './rollmanager.js';
|
|
6
6
|
import SCTEManager from './sctemanager.js';
|
|
7
7
|
import { VolumeFadeEvents } from '../volume-fade/VolumeFade.js';
|
|
@@ -604,7 +604,7 @@ export class VastAds extends UICorePlugin {
|
|
|
604
604
|
setTimeout(async () => {
|
|
605
605
|
if (currentRoll === 'scteroll') {
|
|
606
606
|
this.options.mute = this.core.options.mute;
|
|
607
|
-
this.
|
|
607
|
+
this.setMuted(this.core.options.mute);
|
|
608
608
|
this.core.mediaControl.setInitialVolume();
|
|
609
609
|
}
|
|
610
610
|
// this.adTemplates = null;
|
|
@@ -659,7 +659,7 @@ export class VastAds extends UICorePlugin {
|
|
|
659
659
|
}
|
|
660
660
|
await this.playback?.play();
|
|
661
661
|
this.options.mute = this.core.options.mute;
|
|
662
|
-
this.
|
|
662
|
+
this.setMuted(this.core.options.mute);
|
|
663
663
|
this.core.mediaControl.setInitialVolume();
|
|
664
664
|
}
|
|
665
665
|
}, 0);
|
|
@@ -683,4 +683,7 @@ export class VastAds extends UICorePlugin {
|
|
|
683
683
|
this._adContainer = this._$adContainer[0];
|
|
684
684
|
return this;
|
|
685
685
|
}
|
|
686
|
+
setMuted(muted) {
|
|
687
|
+
this.core.activeContainer.options.mute = muted;
|
|
688
|
+
}
|
|
686
689
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gcorevideo/player",
|
|
3
|
-
"version": "2.19.
|
|
3
|
+
"version": "2.19.13",
|
|
4
4
|
"description": "Gcore JavaScript video player",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"@rollup/plugin-json": "^6.1.0",
|
|
37
37
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
|
38
38
|
"@sinonjs/fake-timers": "^14.0.0",
|
|
39
|
+
"@types/assert": "^1.5.11",
|
|
39
40
|
"@types/human-format": "^1.0.3",
|
|
40
41
|
"@types/mousetrap": "^1.6.15",
|
|
41
42
|
"@types/node": "^22.10.1",
|
package/src/Player.ts
CHANGED
|
@@ -353,6 +353,8 @@ export class Player {
|
|
|
353
353
|
|
|
354
354
|
private initPlayer(coreOptions: CoreOptions): void {
|
|
355
355
|
trace(`${T} initPlayer`, {
|
|
356
|
+
autoPlay: coreOptions.autoPlay,
|
|
357
|
+
sources: coreOptions.sources,
|
|
356
358
|
// TODO selected options
|
|
357
359
|
})
|
|
358
360
|
|
|
@@ -372,12 +374,7 @@ export class Player {
|
|
|
372
374
|
null,
|
|
373
375
|
)
|
|
374
376
|
if (this.config.autoPlay) {
|
|
375
|
-
|
|
376
|
-
setTimeout(() => {
|
|
377
|
-
this.player?.play({
|
|
378
|
-
autoPlay: true,
|
|
379
|
-
})
|
|
380
|
-
}, 0)
|
|
377
|
+
this.triggerAutoPlay()
|
|
381
378
|
}
|
|
382
379
|
try {
|
|
383
380
|
this.emitter.emit(PlayerEvent.Ready)
|
|
@@ -386,6 +383,15 @@ export class Player {
|
|
|
386
383
|
}
|
|
387
384
|
}
|
|
388
385
|
|
|
386
|
+
private triggerAutoPlay() {
|
|
387
|
+
trace(`${T} triggerAutoPlay`)
|
|
388
|
+
setTimeout(() => {
|
|
389
|
+
this.player?.play({
|
|
390
|
+
autoPlay: true,
|
|
391
|
+
})
|
|
392
|
+
}, 0)
|
|
393
|
+
}
|
|
394
|
+
|
|
389
395
|
private safeTriggerEvent<E extends PlayerEvent>(event: E, ...args: PlayerEventParams<E>) {
|
|
390
396
|
try {
|
|
391
397
|
this.emitter.emit(event, ...args)
|
|
@@ -456,10 +462,10 @@ export class Player {
|
|
|
456
462
|
},
|
|
457
463
|
parent: rootNode,
|
|
458
464
|
width: rootNode.clientWidth,
|
|
459
|
-
source: source ? source.source : undefined,
|
|
460
|
-
mimeType: source ? source.mimeType : undefined,
|
|
461
465
|
}, this.config, {
|
|
462
|
-
autoPlay: false,
|
|
466
|
+
autoPlay: false,
|
|
467
|
+
mimeType: source ? source.mimeType : undefined,
|
|
468
|
+
source: source ? source.source : undefined,
|
|
463
469
|
sources,
|
|
464
470
|
})
|
|
465
471
|
return coreOptions
|
|
@@ -146,86 +146,25 @@ describe('Player', () => {
|
|
|
146
146
|
expect(PlayerClappr).toHaveBeenCalledWith(
|
|
147
147
|
expect.objectContaining({
|
|
148
148
|
source,
|
|
149
|
+
// TODO sources
|
|
149
150
|
}),
|
|
150
151
|
)
|
|
151
152
|
})
|
|
152
153
|
},
|
|
153
154
|
)
|
|
154
155
|
})
|
|
156
|
+
describe('autoPlay', () => {
|
|
157
|
+
describe('initially', () => {
|
|
158
|
+
it('should reset to false', () => {
|
|
159
|
+
const player = new Player({autoPlay: true, sources: []})
|
|
160
|
+
const node = document.createElement('div')
|
|
161
|
+
player.attachTo(node)
|
|
162
|
+
expect(PlayerClappr).toHaveBeenCalledWith(
|
|
163
|
+
expect.objectContaining({
|
|
164
|
+
autoPlay: false,
|
|
165
|
+
}),
|
|
166
|
+
)
|
|
167
|
+
})
|
|
168
|
+
})
|
|
169
|
+
})
|
|
155
170
|
})
|
|
156
|
-
|
|
157
|
-
class MockPlayback extends EventLite {
|
|
158
|
-
constructor(
|
|
159
|
-
protected options: any,
|
|
160
|
-
readonly i18n: any,
|
|
161
|
-
protected playerError?: any,
|
|
162
|
-
) {
|
|
163
|
-
super()
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
get name() {
|
|
167
|
-
return 'mock'
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
consent() {}
|
|
171
|
-
|
|
172
|
-
play() {}
|
|
173
|
-
|
|
174
|
-
pause() {}
|
|
175
|
-
|
|
176
|
-
stop() {}
|
|
177
|
-
|
|
178
|
-
destroy() {}
|
|
179
|
-
|
|
180
|
-
seek() {}
|
|
181
|
-
|
|
182
|
-
seekPercentage() {}
|
|
183
|
-
|
|
184
|
-
getDuration() {
|
|
185
|
-
return 100
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
enterPiP() {}
|
|
189
|
-
|
|
190
|
-
exitPiP() {}
|
|
191
|
-
|
|
192
|
-
getPlaybackType() {
|
|
193
|
-
return 'live'
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
getStartTimeOffset() {
|
|
197
|
-
return 0
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
getCurrentTime() {
|
|
201
|
-
return 0
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
isHighDefinitionInUse() {
|
|
205
|
-
return false
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
mute() {}
|
|
209
|
-
|
|
210
|
-
unmute() {}
|
|
211
|
-
|
|
212
|
-
volume() {}
|
|
213
|
-
|
|
214
|
-
configure() {}
|
|
215
|
-
|
|
216
|
-
attemptAutoPlay() {
|
|
217
|
-
return true
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
canAutoPlay() {
|
|
221
|
-
return true
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
onResize() {
|
|
225
|
-
return true
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
trigger(event: string, ...args: any[]) {
|
|
229
|
-
this.emit(event, ...args)
|
|
230
|
-
}
|
|
231
|
-
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
Events as HlsEvents,
|
|
7
7
|
} from 'hls.js';
|
|
8
8
|
|
|
9
|
-
import { CLAPPR_VERSION } from '
|
|
9
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
10
10
|
|
|
11
11
|
import pluginHtml from '../../../assets/audio-selector/track-selector.ejs';
|
|
12
12
|
import '../../../assets/audio-selector/style.scss';
|
|
@@ -49,7 +49,7 @@ export class AudioSelector extends UICorePlugin {
|
|
|
49
49
|
private tracks: AudioTrackItem[] = [];
|
|
50
50
|
|
|
51
51
|
get name() {
|
|
52
|
-
return '
|
|
52
|
+
return 'media_control_audio_selector';
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
get supportedVersion() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Events, template, UICorePlugin, Utils } from '@clappr/core';
|
|
2
2
|
import { trace } from '@gcorevideo/utils';
|
|
3
3
|
|
|
4
|
-
import { CLAPPR_VERSION } from '
|
|
4
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
5
5
|
import { ZeptoResult } from "../../utils/types.js";
|
|
6
6
|
|
|
7
7
|
import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg';
|
|
@@ -183,6 +183,7 @@ export class BigMuteButton extends UICorePlugin {
|
|
|
183
183
|
const localVolume = Utils.Config.restore('volume');
|
|
184
184
|
const volume = !isNaN(localVolume) ? localVolume : 100;
|
|
185
185
|
|
|
186
|
+
// TODO use container.setVolume() instead
|
|
186
187
|
this.core.mediaControl.setVolume(volume === 0 ? 100 : volume);
|
|
187
188
|
|
|
188
189
|
this.destroyBigMuteBtn(e);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { UICorePlugin, template, Events } from '@clappr/core';
|
|
2
2
|
import { trace } from '@gcorevideo/utils';
|
|
3
|
+
import assert from 'assert';
|
|
3
4
|
|
|
4
|
-
import { CLAPPR_VERSION } from '
|
|
5
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
5
6
|
|
|
6
7
|
import pluginHtml from '../../../assets/bottom-gear/bottomgear.ejs';
|
|
7
8
|
import '../../../assets/bottom-gear/gear.scss';
|
|
@@ -9,30 +10,45 @@ import '../../../assets/bottom-gear/gear-sub-menu.scss';
|
|
|
9
10
|
import gearIcon from '../../../assets/icons/new/gear.svg';
|
|
10
11
|
import gearHdIcon from '../../../assets/icons/new/gear-hd.svg';
|
|
11
12
|
|
|
12
|
-
const VERSION = '
|
|
13
|
+
const VERSION = '2.19.12';
|
|
14
|
+
|
|
15
|
+
const T = 'plugins.media_control_gear';
|
|
13
16
|
|
|
14
17
|
/**
|
|
18
|
+
* Adds the gear button that triggers extra options menu on the right side of the {@link MediaControl | media control} UI
|
|
15
19
|
* @beta
|
|
20
|
+
* @remarks
|
|
21
|
+
* The plugins provides a base for attaching custom settings UI in the gear menu
|
|
16
22
|
*/
|
|
17
23
|
export class BottomGear extends UICorePlugin {
|
|
18
24
|
private isHd = false;
|
|
19
25
|
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
20
29
|
get name() {
|
|
21
|
-
return '
|
|
30
|
+
return 'media_control_gear';
|
|
22
31
|
}
|
|
23
32
|
|
|
33
|
+
/**
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
24
36
|
get supportedVersion() {
|
|
25
37
|
return { min: CLAPPR_VERSION };
|
|
26
38
|
}
|
|
27
39
|
|
|
40
|
+
/**
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
28
43
|
static get version() {
|
|
29
44
|
return VERSION;
|
|
30
45
|
}
|
|
31
46
|
|
|
32
|
-
|
|
33
|
-
return template(pluginHtml);
|
|
34
|
-
}
|
|
47
|
+
private static readonly template = template(pluginHtml)
|
|
35
48
|
|
|
49
|
+
/**
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
36
52
|
override get attributes() {
|
|
37
53
|
return {
|
|
38
54
|
'class': this.name,
|
|
@@ -40,47 +56,37 @@ export class BottomGear extends UICorePlugin {
|
|
|
40
56
|
};
|
|
41
57
|
}
|
|
42
58
|
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
43
62
|
override get events() {
|
|
44
63
|
return {
|
|
45
64
|
'click .button-gear': 'toggleGearMenu',
|
|
46
65
|
};
|
|
47
66
|
}
|
|
48
67
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
68
|
+
/**
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
53
71
|
override bindEvents() {
|
|
72
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
73
|
+
assert(mediaControl, 'media_control plugin is required');
|
|
74
|
+
|
|
54
75
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
55
|
-
this.listenTo(this.core, 'gear:refresh', this.refresh);
|
|
56
|
-
this.listenTo(
|
|
57
|
-
this.listenTo(
|
|
58
|
-
this.listenTo(
|
|
76
|
+
this.listenTo(this.core, 'gear:refresh', this.refresh); // TODO use direct plugin method call
|
|
77
|
+
// this.listenTo(mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
|
|
78
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
|
|
79
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hide); // TODO mediacontrol show as well
|
|
59
80
|
this.bindContainerEvents();
|
|
60
81
|
}
|
|
61
82
|
|
|
62
|
-
unBindEvents() {
|
|
63
|
-
this.stopListening(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
64
|
-
this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
|
|
65
|
-
this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
|
|
66
|
-
this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hide);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
83
|
private onActiveContainerChanged() {
|
|
70
|
-
this.bindEvents();
|
|
71
84
|
this.bindContainerEvents();
|
|
72
85
|
}
|
|
73
86
|
|
|
74
87
|
private bindContainerEvents() {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
this.listenTo(this.container, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
reload() {
|
|
82
|
-
this.unBindEvents();
|
|
83
|
-
this.bindEvents();
|
|
88
|
+
trace(`${T} bindContainerEvents`);
|
|
89
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
|
|
84
90
|
}
|
|
85
91
|
|
|
86
92
|
private highDefinitionUpdate(isHd: boolean) {
|
|
@@ -93,33 +99,38 @@ export class BottomGear extends UICorePlugin {
|
|
|
93
99
|
}
|
|
94
100
|
}
|
|
95
101
|
|
|
102
|
+
/**
|
|
103
|
+
* @internal
|
|
104
|
+
*/
|
|
96
105
|
override render() {
|
|
106
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
107
|
+
assert(mediaControl, 'media_control plugin is required');
|
|
108
|
+
|
|
109
|
+
// TODO use options.mediaControl.gear.items
|
|
97
110
|
const items = [
|
|
98
111
|
'quality',
|
|
99
112
|
'rate',
|
|
100
113
|
'nerd',
|
|
101
114
|
];
|
|
102
|
-
|
|
103
115
|
const icon = this.isHd ? gearHdIcon : gearIcon;
|
|
116
|
+
this.$el.html(BottomGear.template({ icon, items }));
|
|
104
117
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
this.core.mediaControl.$bottomGear?.html(this.el);
|
|
108
|
-
this.core.trigger('gear:rendered');
|
|
118
|
+
mediaControl.getElement('bottomGear')?.html(this.el);
|
|
119
|
+
this.core.trigger('gear:rendered'); // TODO trigger on mediaControl instead
|
|
109
120
|
|
|
110
121
|
return this;
|
|
111
122
|
}
|
|
112
123
|
|
|
113
|
-
refresh() {
|
|
124
|
+
private refresh() {
|
|
114
125
|
this.render();
|
|
115
126
|
this.$el.find('.gear-wrapper').show();
|
|
116
127
|
}
|
|
117
128
|
|
|
118
|
-
toggleGearMenu() {
|
|
129
|
+
private toggleGearMenu() {
|
|
119
130
|
this.$el.find('.gear-wrapper').toggle();
|
|
120
131
|
}
|
|
121
132
|
|
|
122
|
-
hide() {
|
|
133
|
+
private hide() {
|
|
123
134
|
this.$el.find('.gear-wrapper').hide();
|
|
124
135
|
}
|
|
125
136
|
}
|
|
@@ -2,7 +2,7 @@ import { UICorePlugin, Events, template, Core, Container } from '@clappr/core';
|
|
|
2
2
|
import { reportError } from '@gcorevideo/utils';
|
|
3
3
|
import Mousetrap from 'mousetrap';
|
|
4
4
|
|
|
5
|
-
import { CLAPPR_VERSION } from '
|
|
5
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
6
6
|
import { ClapprStatsEvents, Metrics as BaseMetrics } from '../clappr-stats/types.js';
|
|
7
7
|
import { newMetrics as newBaseMetrics } from '../clappr-stats/utils.js';
|
|
8
8
|
import Formatter from './formatter.js';
|
|
@@ -125,7 +125,7 @@ export class ClapprNerdStats extends UICorePlugin {
|
|
|
125
125
|
private iconPosition: IconPosition;
|
|
126
126
|
|
|
127
127
|
get name() {
|
|
128
|
-
return '
|
|
128
|
+
return 'media_control_nerd_stats';
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
get supportedVersion() {
|
|
@@ -181,6 +181,7 @@ export class ClapprNerdStats extends UICorePlugin {
|
|
|
181
181
|
|
|
182
182
|
override bindEvents() {
|
|
183
183
|
this.listenToOnce(this.core, Events.CORE_READY, this.init);
|
|
184
|
+
// TODO trigger on mediaControl instead
|
|
184
185
|
this.listenTo(this.core, 'gear:rendered', this.addToBottomGear);
|
|
185
186
|
}
|
|
186
187
|
|
|
@@ -2,7 +2,7 @@ import { Container, ContainerPlugin, Events as CoreEvents, Log } from '@clappr/c
|
|
|
2
2
|
import type { QualityLevel, TimePosition, TimeProgress } from '../../playback.types.js';
|
|
3
3
|
import assert from 'assert';
|
|
4
4
|
|
|
5
|
-
import { CLAPPR_VERSION } from '
|
|
5
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
6
6
|
import { TimerId } from '../../utils/types.js';
|
|
7
7
|
import type { Metrics, MetricsUpdateFn } from './types.js';
|
|
8
8
|
import { ClapprStatsEvents } from './types.js';
|
|
@@ -29,7 +29,7 @@ export class ClipsPlugin extends UICorePlugin {
|
|
|
29
29
|
private svgMask: ZeptoResult | null = null;
|
|
30
30
|
|
|
31
31
|
get name() {
|
|
32
|
-
return '
|
|
32
|
+
return 'media_control_clips';
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
override get attributes() {
|
|
@@ -154,7 +154,7 @@ export class ClipsPlugin extends UICorePlugin {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
private setSVGMask(svg: string) {
|
|
157
|
-
this.core.mediaControl.setSVGMask(svg);
|
|
157
|
+
// this.core.mediaControl.setSVGMask(svg);
|
|
158
158
|
if (this.svgMask) {
|
|
159
159
|
this.svgMask.remove()
|
|
160
160
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UICorePlugin, Events, template, $, Core, Container } from '@clappr/core';
|
|
2
2
|
|
|
3
|
-
import { CLAPPR_VERSION } from '
|
|
3
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
4
4
|
|
|
5
5
|
import '../../../assets/context-menu/context_menu.scss';
|
|
6
6
|
import templateHtml from '../../../assets/context-menu/context_menu.ejs';
|
|
@@ -1,29 +1,48 @@
|
|
|
1
1
|
import { Core, Events, Playback, UICorePlugin, template } from '@clappr/core';
|
|
2
|
+
import assert from 'assert';
|
|
2
3
|
|
|
3
|
-
import { CLAPPR_VERSION } from '
|
|
4
|
+
import { CLAPPR_VERSION } from '../../build.js';
|
|
4
5
|
|
|
5
6
|
import dvrHTML from '../../../assets/dvr-controls/index.ejs';
|
|
6
7
|
import '../../../assets/dvr-controls/dvr_controls.scss';
|
|
7
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Adds the DVR controls to the media control UI
|
|
11
|
+
* @beta
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* The plugin is rendered in the {@link MediaControl | media control} UI.
|
|
15
|
+
* It renders the live stream indicator and the DVR seek bar if DVR is enabled.
|
|
16
|
+
*/
|
|
8
17
|
export class DvrControls extends UICorePlugin {
|
|
9
|
-
|
|
10
|
-
return template(dvrHTML);
|
|
11
|
-
}
|
|
18
|
+
private static readonly template = template(dvrHTML);
|
|
12
19
|
|
|
20
|
+
/**
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
13
23
|
get name() {
|
|
14
|
-
return '
|
|
24
|
+
return 'media_control_dvr';
|
|
15
25
|
}
|
|
16
26
|
|
|
27
|
+
/**
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
17
30
|
get supportedVersion() {
|
|
18
31
|
return { min: CLAPPR_VERSION };
|
|
19
32
|
}
|
|
20
33
|
|
|
34
|
+
/**
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
21
37
|
override get events() {
|
|
22
38
|
return {
|
|
23
39
|
'click .live-button': 'click'
|
|
24
40
|
};
|
|
25
41
|
}
|
|
26
42
|
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
27
46
|
override get attributes() {
|
|
28
47
|
return {
|
|
29
48
|
'class': 'dvr-controls',
|
|
@@ -36,6 +55,9 @@ export class DvrControls extends UICorePlugin {
|
|
|
36
55
|
this.settingsUpdate();
|
|
37
56
|
}
|
|
38
57
|
|
|
58
|
+
/**
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
39
61
|
override bindEvents() {
|
|
40
62
|
this.bindCoreEvents();
|
|
41
63
|
this.bindContainerEvents();
|
|
@@ -86,9 +108,9 @@ export class DvrControls extends UICorePlugin {
|
|
|
86
108
|
}
|
|
87
109
|
}
|
|
88
110
|
|
|
89
|
-
click() {
|
|
90
|
-
const mediaControl = this.core.
|
|
91
|
-
const container =
|
|
111
|
+
private click() {
|
|
112
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
113
|
+
const container = this.core.activeContainer;
|
|
92
114
|
|
|
93
115
|
if (!container.isPlaying()) {
|
|
94
116
|
container.play();
|
|
@@ -99,9 +121,9 @@ export class DvrControls extends UICorePlugin {
|
|
|
99
121
|
}
|
|
100
122
|
}
|
|
101
123
|
|
|
102
|
-
settingsUpdate() {
|
|
124
|
+
private settingsUpdate() {
|
|
103
125
|
// @ts-ignore
|
|
104
|
-
this.stopListening();
|
|
126
|
+
this.stopListening(); // TODO sort out
|
|
105
127
|
this.core.mediaControl.$el.removeClass('live');
|
|
106
128
|
if (this.shouldRender()) {
|
|
107
129
|
this.render();
|
|
@@ -110,20 +132,26 @@ export class DvrControls extends UICorePlugin {
|
|
|
110
132
|
this.bindEvents();
|
|
111
133
|
}
|
|
112
134
|
|
|
113
|
-
shouldRender() {
|
|
135
|
+
private shouldRender() {
|
|
114
136
|
const useDvrControls = this.core.options.useDvrControls === undefined || !!this.core.options.useDvrControls;
|
|
115
137
|
|
|
116
138
|
return useDvrControls && this.core.getPlaybackType() === Playback.LIVE;
|
|
117
139
|
}
|
|
118
140
|
|
|
141
|
+
/**
|
|
142
|
+
* @internal
|
|
143
|
+
*/
|
|
119
144
|
override render() {
|
|
120
|
-
this.$el.html(
|
|
145
|
+
this.$el.html(DvrControls.template({
|
|
121
146
|
live: this.core.i18n.t('live'),
|
|
122
147
|
backToLive: this.core.i18n.t('back_to_live')
|
|
123
148
|
}));
|
|
124
149
|
if (this.shouldRender()) {
|
|
125
|
-
this.core.mediaControl
|
|
126
|
-
|
|
150
|
+
const mediaControl = this.core.mediaControl;
|
|
151
|
+
assert(mediaControl, 'media_control plugin is required');
|
|
152
|
+
// TODO don't tap into the $el directly
|
|
153
|
+
mediaControl.$el.addClass('live');
|
|
154
|
+
mediaControl.$('.media-control-left-panel[data-media-control]').append(this.$el);
|
|
127
155
|
}
|
|
128
156
|
|
|
129
157
|
return this;
|