@gcorevideo/player 2.22.21 → 2.22.23
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/clappr-nerd-stats/clappr-nerd-stats.ejs +30 -30
- package/assets/clappr-nerd-stats/clappr-nerd-stats.scss +18 -14
- package/dist/core.js +1 -1
- package/dist/index.css +1433 -1425
- package/dist/index.js +4335 -4299
- package/dist/player.d.ts +32 -10
- package/dist/plugins/index.css +632 -624
- package/dist/plugins/index.js +5366 -5334
- package/docs/api/player.extendedevents.md +45 -0
- package/docs/api/player.md +21 -1
- package/docs/api/player.volumefade._constructor_.md +50 -0
- package/docs/api/player.volumefade.md +40 -1
- package/docs/api/player.volumefadesettings.md +18 -0
- package/lib/index.plugins.d.ts +2 -2
- package/lib/index.plugins.d.ts.map +1 -1
- package/lib/index.plugins.js +2 -2
- package/lib/plugins/audio-selector/AudioTracks.d.ts +67 -0
- package/lib/plugins/audio-selector/AudioTracks.d.ts.map +1 -0
- package/lib/plugins/audio-selector/AudioTracks.js +176 -0
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +6 -0
- package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts +2 -1
- package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/NerdStats.js +19 -3
- package/lib/plugins/clappr-nerd-stats/speedtest/index.js +1 -1
- package/lib/plugins/clappr-nerd-stats/utils.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/utils.js +14 -15
- package/lib/plugins/clappr-stats/ClapprStats.d.ts +1 -0
- package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
- package/lib/plugins/clappr-stats/ClapprStats.js +3 -0
- package/lib/plugins/click-to-pause/ClickToPause.js +6 -7
- package/lib/plugins/media-control/MediaControl.d.ts +2 -1
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +1 -0
- package/lib/plugins/skip-time/SkipTime.d.ts +2 -2
- package/lib/plugins/skip-time/SkipTime.d.ts.map +1 -1
- package/lib/plugins/skip-time/SkipTime.js +6 -5
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +10 -3
- package/lib/plugins/volume-fade/VolumeFade.d.ts +3 -1
- package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
- package/lib/plugins/volume-fade/VolumeFade.js +6 -3
- package/package.json +1 -1
- package/src/index.plugins.ts +2 -2
- package/src/plugins/audio-selector/{AudioSelector.ts → AudioTracks.ts} +6 -3
- package/src/plugins/audio-selector/__tests__/{AudioSelector.test.ts → AudioTracks.test.ts} +24 -24
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioSelector.test.ts.snap +66 -0
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioTracks.test.ts.snap +67 -0
- package/src/plugins/bottom-gear/BottomGear.ts +10 -0
- package/src/plugins/clappr-nerd-stats/NerdStats.ts +26 -7
- package/src/plugins/clappr-nerd-stats/speedtest/index.ts +1 -1
- package/src/plugins/clappr-nerd-stats/utils.ts +20 -13
- package/src/plugins/clappr-stats/ClapprStats.ts +4 -0
- package/src/plugins/click-to-pause/ClickToPause.ts +6 -6
- package/src/plugins/media-control/MediaControl.ts +1 -0
- package/src/plugins/skip-time/SkipTime.ts +45 -38
- package/src/plugins/subtitles/ClosedCaptions.ts +17 -7
- package/src/plugins/volume-fade/VolumeFade.ts +6 -3
- package/temp/player.api.json +100 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -6,38 +6,40 @@ const qualityClasses = [
|
|
|
6
6
|
'speedtest-quality-value-5',
|
|
7
7
|
];
|
|
8
8
|
export const getDownloadQuality = (speedValue) => {
|
|
9
|
+
if (!speedValue) {
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
9
12
|
if (speedValue < 3) {
|
|
10
13
|
return 1;
|
|
11
14
|
}
|
|
12
|
-
|
|
15
|
+
if (speedValue < 7) {
|
|
13
16
|
return 2;
|
|
14
17
|
}
|
|
15
|
-
|
|
18
|
+
if (speedValue < 13) {
|
|
16
19
|
return 3;
|
|
17
20
|
}
|
|
18
|
-
|
|
21
|
+
if (speedValue < 25) {
|
|
19
22
|
return 4;
|
|
20
23
|
}
|
|
21
|
-
|
|
22
|
-
return 5;
|
|
23
|
-
}
|
|
24
|
+
return 5;
|
|
24
25
|
};
|
|
25
26
|
export const getPingQuality = (pingValue) => {
|
|
27
|
+
if (!pingValue) {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
26
30
|
if (pingValue < 20) {
|
|
27
31
|
return 5;
|
|
28
32
|
}
|
|
29
|
-
|
|
33
|
+
if (pingValue < 50) {
|
|
30
34
|
return 4;
|
|
31
35
|
}
|
|
32
|
-
|
|
36
|
+
if (pingValue < 100) {
|
|
33
37
|
return 3;
|
|
34
38
|
}
|
|
35
|
-
|
|
39
|
+
if (pingValue < 150) {
|
|
36
40
|
return 2;
|
|
37
41
|
}
|
|
38
|
-
|
|
39
|
-
return 1;
|
|
40
|
-
}
|
|
42
|
+
return 1;
|
|
41
43
|
};
|
|
42
44
|
export const generateQualityHtml = (quality) => {
|
|
43
45
|
const html = [];
|
|
@@ -54,9 +56,6 @@ export const generateQualityHtml = (quality) => {
|
|
|
54
56
|
};
|
|
55
57
|
export const drawSummary = (customMetrics, vodContainer, liveContainer) => {
|
|
56
58
|
const { connectionSpeed, ping } = customMetrics;
|
|
57
|
-
if (!connectionSpeed || !ping) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
59
|
const downloadQuality = getDownloadQuality(connectionSpeed);
|
|
61
60
|
const pingQuality = getPingQuality(ping);
|
|
62
61
|
const liveQuality = Math.min(downloadQuality, pingQuality);
|
|
@@ -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;AAG1B,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;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;IAmDnB;;OAEG;IACM,OAAO;IAKhB;;;OAGG;IACH,aAAa;IAIb,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;IAKd,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"}
|
|
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;AAG1B,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;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;IAmDnB;;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;IAKd,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"}
|
|
@@ -99,6 +99,9 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
99
99
|
exportMetrics() {
|
|
100
100
|
return structuredClone(this.metrics);
|
|
101
101
|
}
|
|
102
|
+
clearMetrics() {
|
|
103
|
+
this.metrics = newMetrics();
|
|
104
|
+
}
|
|
102
105
|
onBitrate(newBitrate) {
|
|
103
106
|
const bitrate = newBitrate.bitrate;
|
|
104
107
|
const now = this.now();
|
|
@@ -41,14 +41,13 @@ export class ClickToPause extends ContainerPlugin {
|
|
|
41
41
|
});
|
|
42
42
|
if (isLivePlayback && !isDvrEnabled) {
|
|
43
43
|
this.togglePlay(true);
|
|
44
|
+
return;
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
this.timer =
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}, 300);
|
|
51
|
-
}
|
|
46
|
+
this.clearTimer();
|
|
47
|
+
this.timer = setTimeout(() => {
|
|
48
|
+
this.timer = null;
|
|
49
|
+
this.togglePlay(false);
|
|
50
|
+
}, 300);
|
|
52
51
|
}
|
|
53
52
|
settingsUpdate() {
|
|
54
53
|
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
|
|
@@ -33,7 +33,8 @@ export type MediaControlSettings = {
|
|
|
33
33
|
seekEnabled: boolean;
|
|
34
34
|
};
|
|
35
35
|
export declare enum ExtendedEvents {
|
|
36
|
-
MEDIACONTROL_VOLUME = "mediacontrol:volume"
|
|
36
|
+
MEDIACONTROL_VOLUME = "mediacontrol:volume",
|
|
37
|
+
MEDIACONTROL_MENU_COLLAPSE = "mediacontrol:menu:collapse"
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* `PLUGIN` that provides basic playback controls UI and a foundation for developing custom UI.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,YAAY,EAMZ,IAAI,EACL,MAAM,cAAc,CAAA;AASrB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAI5C,OAAO,kDAAkD,CAAA;AAWzD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAC/B,UAAU,GACV,UAAU,GACV,KAAK,GACL,WAAW,GACX,UAAU,GACV,UAAU,GACV,QAAQ,GACR,OAAO,CAAA;AAEX;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,kBAAkB,CAAA;AAErE;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC,aAAa,GACb,IAAI,GACJ,YAAY,GACZ,cAAc,GACd,MAAM,GACN,aAAa,GACb,KAAK,GACL,IAAI,CAAA;AAER;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,uBAAuB,GACvB,wBAAwB,GACxB,wBAAwB,CAAA;AAY5B;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,uBAAuB,EAAE,CAAA;IAC/B,KAAK,EAAE,wBAAwB,EAAE,CAAA;IACjC,OAAO,EAAE,wBAAwB,EAAE,CAAA;IACnC,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAmCD,oBAAY,cAAc;IACxB,mBAAmB,wBAAwB;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,7 @@ const LEFT_ORDER = [
|
|
|
61
61
|
export var ExtendedEvents;
|
|
62
62
|
(function (ExtendedEvents) {
|
|
63
63
|
ExtendedEvents["MEDIACONTROL_VOLUME"] = "mediacontrol:volume";
|
|
64
|
+
ExtendedEvents["MEDIACONTROL_MENU_COLLAPSE"] = "mediacontrol:menu:collapse";
|
|
64
65
|
})(ExtendedEvents || (ExtendedEvents = {}));
|
|
65
66
|
const { Config, Fullscreen, formatTime, extend, removeArrayItem } = Utils;
|
|
66
67
|
function orderByOrderPattern(arr, order) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { UICorePlugin
|
|
1
|
+
import { UICorePlugin } from '@clappr/core';
|
|
2
2
|
import '../../../assets/skip-time/style.scss';
|
|
3
3
|
/**
|
|
4
4
|
* `PLUGIN` that adds skip controls to the media control UI.
|
|
5
5
|
* @beta
|
|
6
6
|
*/
|
|
7
|
-
export declare class SkipTime extends
|
|
7
|
+
export declare class SkipTime extends UICorePlugin {
|
|
8
8
|
get name(): string;
|
|
9
9
|
get supportedVersion(): {
|
|
10
10
|
min: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkipTime.d.ts","sourceRoot":"","sources":["../../../src/plugins/skip-time/SkipTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"SkipTime.d.ts","sourceRoot":"","sources":["../../../src/plugins/skip-time/SkipTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuC,MAAM,cAAc,CAAA;AAKhF,OAAO,sCAAsC,CAAA;AAI7C;;;GAGG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACxC,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,IAAI,SAAS,QAEZ;IAED,IAAI,QAAQ,QAEX;IAED,IAAa,UAAU;;;MAKtB;IAED,OAAO,CAAC,QAAQ,CAAkB;IAElC,IAAa,MAAM;;;;MAMlB;IAEQ,UAAU;IAYnB,OAAO;IAIP,kBAAkB;IA+BlB,WAAW;IAIX,UAAU;IAIV,gBAAgB;IAMP,MAAM;CAWhB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UICorePlugin
|
|
1
|
+
import { UICorePlugin, Browser, Playback, Events, template } from '@clappr/core';
|
|
2
2
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
3
3
|
import pluginHtml from '../../../assets/skip-time/skip-time.ejs';
|
|
4
4
|
import '../../../assets/skip-time/style.scss';
|
|
@@ -6,7 +6,7 @@ import '../../../assets/skip-time/style.scss';
|
|
|
6
6
|
* `PLUGIN` that adds skip controls to the media control UI.
|
|
7
7
|
* @beta
|
|
8
8
|
*/
|
|
9
|
-
export class SkipTime extends
|
|
9
|
+
export class SkipTime extends UICorePlugin {
|
|
10
10
|
get name() {
|
|
11
11
|
return 'skip_time';
|
|
12
12
|
}
|
|
@@ -21,8 +21,8 @@ export class SkipTime extends UICorePluginOriginal {
|
|
|
21
21
|
}
|
|
22
22
|
get attributes() {
|
|
23
23
|
return {
|
|
24
|
-
|
|
25
|
-
'data-skip-time': ''
|
|
24
|
+
class: this.name + '_plugin',
|
|
25
|
+
'data-skip-time': '',
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
position = 'mid';
|
|
@@ -44,7 +44,8 @@ export class SkipTime extends UICorePluginOriginal {
|
|
|
44
44
|
this.position = 'left';
|
|
45
45
|
}
|
|
46
46
|
handleRewindClicks() {
|
|
47
|
-
if (this.core.getPlaybackType() === Playback.LIVE &&
|
|
47
|
+
if (this.core.getPlaybackType() === Playback.LIVE &&
|
|
48
|
+
!this.container.isDvrEnabled()) {
|
|
48
49
|
this.toggleFullscreen();
|
|
49
50
|
return;
|
|
50
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClosedCaptions.d.ts","sourceRoot":"","sources":["../../../src/plugins/subtitles/ClosedCaptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAwB,MAAM,cAAc,CAAA;AAOzE,OAAO,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"ClosedCaptions.d.ts","sourceRoot":"","sources":["../../../src/plugins/subtitles/ClosedCaptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAwB,MAAM,cAAc,CAAA;AAOzE,OAAO,sCAAsC,CAAA;AAgB7C;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,oBAAoB,CAAQ;IAEpC,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,KAAK,CAA6B;IAE1C,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,KAAK,CAA2B;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED,OAAO,KAAK,mBAAmB,GAM9B;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,kBAAkB;IAwC1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,IAAI;IAWJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA0Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,yBAAyB;IAkBjC,OAAO,CAAC,UAAU;CAKnB"}
|
|
@@ -8,6 +8,7 @@ import subtitlesOnIcon from '../../../assets/icons/new/subtitles-on.svg';
|
|
|
8
8
|
import comboboxHTML from '../../../assets/subtitles/combobox.ejs';
|
|
9
9
|
import stringHTML from '../../../assets/subtitles/string.ejs';
|
|
10
10
|
import { isFullscreen } from '../utils/fullscreen.js';
|
|
11
|
+
import { ExtendedEvents } from '../media-control/MediaControl.js';
|
|
11
12
|
const VERSION = '2.19.14';
|
|
12
13
|
const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
|
|
13
14
|
const T = 'plugins.cc';
|
|
@@ -82,7 +83,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
82
83
|
};
|
|
83
84
|
}
|
|
84
85
|
get preselectedLanguage() {
|
|
85
|
-
return this.core.options.cc?.language ??
|
|
86
|
+
return (this.core.options.cc?.language ??
|
|
87
|
+
this.core.options.subtitles?.language ??
|
|
88
|
+
'');
|
|
86
89
|
}
|
|
87
90
|
/**
|
|
88
91
|
* @internal
|
|
@@ -98,6 +101,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
98
101
|
assert(mediaControl, 'media_control plugin is required');
|
|
99
102
|
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
|
|
100
103
|
this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
|
|
104
|
+
this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hideMenu);
|
|
101
105
|
}
|
|
102
106
|
onContainerChanged() {
|
|
103
107
|
trace(`${T} onContainerChanged`);
|
|
@@ -281,12 +285,15 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
281
285
|
}
|
|
282
286
|
}
|
|
283
287
|
hideMenu() {
|
|
284
|
-
;
|
|
288
|
+
trace(`${T} hideMenu`);
|
|
285
289
|
this.$('[data-cc] ul').hide();
|
|
286
290
|
}
|
|
287
291
|
toggleMenu() {
|
|
288
292
|
trace(`${T} toggleMenu`);
|
|
289
|
-
this
|
|
293
|
+
this.core
|
|
294
|
+
.getPlugin('media_control')
|
|
295
|
+
.trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE);
|
|
296
|
+
this.$el.find('[data-cc] ul').toggle();
|
|
290
297
|
}
|
|
291
298
|
itemElement(id) {
|
|
292
299
|
return this.$(`ul li a[data-cc-select="${id}"]`).parent();
|
|
@@ -20,10 +20,12 @@ export type VolumeFadeSettings = {
|
|
|
20
20
|
duration?: number;
|
|
21
21
|
};
|
|
22
22
|
/**
|
|
23
|
-
* `PLUGIN` that
|
|
23
|
+
* `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
|
|
24
24
|
* @beta
|
|
25
25
|
*
|
|
26
26
|
* @remarks
|
|
27
|
+
* When the user moves the mouse over and away from the player, the sound is unmuted and unmuted with a fade effect.
|
|
28
|
+
*
|
|
27
29
|
* Depends on {@link MediaControl} plugin.
|
|
28
30
|
* Configuration options - {@link VolumeFadeSettings}
|
|
29
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VolumeFade.d.ts","sourceRoot":"","sources":["../../../src/plugins/volume-fade/VolumeFade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,IAAI,EAAE,MAAM,cAAc,CAAA;AAMrE;;;GAGG;AACH,oBAAY,gBAAgB;IAC1B,IAAI,qBAAqB;CAC1B;
|
|
1
|
+
{"version":3,"file":"VolumeFade.d.ts","sourceRoot":"","sources":["../../../src/plugins/volume-fade/VolumeFade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,IAAI,EAAE,MAAM,cAAc,CAAA;AAMrE;;;GAGG;AACH,oBAAY,gBAAgB;IAC1B,IAAI,qBAAqB;CAC1B;AAOD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,YAAY,CAAI;IAExB,OAAO,CAAC,QAAQ,CAAI;IAEpB,OAAO,CAAC,OAAO,CAAuB;IAEtC;;OAEG;IACH,IAAI,IAAI,WAEP;gBAEW,IAAI,EAAE,IAAI;IAOtB;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,IAAI;IAqBZ,OAAO,CAAC,QAAQ;CAOjB"}
|
|
@@ -11,11 +11,14 @@ export var VolumeFadeEvents;
|
|
|
11
11
|
})(VolumeFadeEvents || (VolumeFadeEvents = {}));
|
|
12
12
|
const T = 'plugins.volume_fade';
|
|
13
13
|
const DEFAULT_DURATION = 600;
|
|
14
|
+
const DEFAULT_VOLUME_LEVEL = 80;
|
|
14
15
|
/**
|
|
15
|
-
* `PLUGIN` that
|
|
16
|
+
* `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
|
|
16
17
|
* @beta
|
|
17
18
|
*
|
|
18
19
|
* @remarks
|
|
20
|
+
* When the user moves the mouse over and away from the player, the sound is unmuted and unmuted with a fade effect.
|
|
21
|
+
*
|
|
19
22
|
* Depends on {@link MediaControl} plugin.
|
|
20
23
|
* Configuration options - {@link VolumeFadeSettings}
|
|
21
24
|
*/
|
|
@@ -57,10 +60,10 @@ export class VolumeFade extends UICorePlugin {
|
|
|
57
60
|
this.core.activeContainer?.volume &&
|
|
58
61
|
!isNaN(this.core.activeContainer.volume)
|
|
59
62
|
? this.core.activeContainer.volume
|
|
60
|
-
:
|
|
63
|
+
: DEFAULT_VOLUME_LEVEL;
|
|
61
64
|
}
|
|
62
65
|
this.duration = this.options.volumeFade?.duration || DEFAULT_DURATION;
|
|
63
|
-
// TODO check if mute must be respected
|
|
66
|
+
// TODO check if `mute` must be respected
|
|
64
67
|
this.core.activeContainer?.setVolume(this.activeVolume);
|
|
65
68
|
this.core.activePlayback.volume(0);
|
|
66
69
|
}
|
package/package.json
CHANGED
package/src/index.plugins.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '../assets/style/main.scss';
|
|
2
2
|
|
|
3
|
-
export * from "./plugins/audio-selector/
|
|
4
|
-
export { AudioTracks as AudioSelector } from "./plugins/audio-selector/
|
|
3
|
+
export * from "./plugins/audio-selector/AudioTracks.js";
|
|
4
|
+
export { AudioTracks as AudioSelector } from "./plugins/audio-selector/AudioTracks.js";
|
|
5
5
|
export * from "./plugins/big-mute-button/BigMuteButton.js";
|
|
6
6
|
export * from "./plugins/bottom-gear/BottomGear.js";
|
|
7
7
|
export * from "./plugins/clappr-stats/ClapprStats.js";
|
|
@@ -8,12 +8,12 @@ import pluginHtml from '../../../assets/audio-selector/track-selector.ejs'
|
|
|
8
8
|
import '../../../assets/audio-selector/style.scss'
|
|
9
9
|
import audioArrow from '../../../assets/icons/old/quality-arrow.svg'
|
|
10
10
|
import { ZeptoResult } from '../../types.js'
|
|
11
|
-
import { MediaControl } from '../media-control/MediaControl.js'
|
|
12
|
-
|
|
11
|
+
import { ExtendedEvents, MediaControl } from '../media-control/MediaControl.js'
|
|
12
|
+
import { trace } from '@gcorevideo/utils'
|
|
13
13
|
|
|
14
14
|
const VERSION: string = '2.22.4'
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
const T = 'plugins.audiotracks'
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* `PLUGIN` that makes possible to switch audio tracks via the media control UI.
|
|
@@ -91,6 +91,7 @@ export class AudioTracks extends UICorePlugin {
|
|
|
91
91
|
mediaControl.mount('audiotracks', this.$el)
|
|
92
92
|
})
|
|
93
93
|
this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu)
|
|
94
|
+
this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.hideMenu)
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
private onActiveContainerChanged() {
|
|
@@ -162,10 +163,12 @@ export class AudioTracks extends UICorePlugin {
|
|
|
162
163
|
}
|
|
163
164
|
|
|
164
165
|
private hideMenu() {
|
|
166
|
+
trace(`${T} hideMenu`)
|
|
165
167
|
this.$el.find('#audiotracks-select').addClass('hidden')
|
|
166
168
|
}
|
|
167
169
|
|
|
168
170
|
private toggleContextMenu() {
|
|
171
|
+
this.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE)
|
|
169
172
|
this.$el.find('#audiotracks-select').toggleClass('hidden') // TODO use plain CSS display: none
|
|
170
173
|
const open = !this.$el.find('#audiotracks-select').hasClass('hidden') // TODO hold state
|
|
171
174
|
this.$el.find('#audiotracks-button').attr('aria-expanded', open)
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
2
|
import { Events } from '@clappr/core'
|
|
3
3
|
|
|
4
|
-
import { AudioTracks } from '../
|
|
4
|
+
import { AudioTracks } from '../AudioTracks'
|
|
5
5
|
|
|
6
6
|
import { createMockCore, createMockMediaControl } from '../../../testUtils'
|
|
7
7
|
// import { LogTracer, Logger, setTracer } from '@gcorevideo/utils'
|
|
8
8
|
|
|
9
9
|
// Logger.enable('*')
|
|
10
|
-
// setTracer(new LogTracer('
|
|
10
|
+
// setTracer(new LogTracer('AudioTracks.test'))
|
|
11
11
|
|
|
12
12
|
const TRACKS = [
|
|
13
13
|
{ id: '1', label: 'English', language: 'en', track: {} },
|
|
14
14
|
{ id: '2', label: 'Spanish', language: 'es', track: {} },
|
|
15
15
|
]
|
|
16
16
|
|
|
17
|
-
describe('
|
|
17
|
+
describe('AudioTracks', () => {
|
|
18
18
|
let core: any
|
|
19
19
|
let mediaControl: any
|
|
20
|
-
let
|
|
20
|
+
let audioTracks: AudioTracks
|
|
21
21
|
beforeEach(() => {
|
|
22
22
|
core = createMockCore()
|
|
23
23
|
mediaControl = createMockMediaControl(core)
|
|
@@ -25,7 +25,7 @@ describe('AudioSelector', () => {
|
|
|
25
25
|
if (name === 'media_control') return mediaControl
|
|
26
26
|
return null
|
|
27
27
|
})
|
|
28
|
-
|
|
28
|
+
audioTracks = new AudioTracks(core)
|
|
29
29
|
core.emit(Events.CORE_READY)
|
|
30
30
|
core.emit(Events.CORE_ACTIVE_CONTAINER_CHANGED, core.activeContainer)
|
|
31
31
|
})
|
|
@@ -47,7 +47,7 @@ describe('AudioSelector', () => {
|
|
|
47
47
|
it('should attach to the media control', () => {
|
|
48
48
|
expect(mediaControl.mount).toHaveBeenCalledWith(
|
|
49
49
|
'audiotracks',
|
|
50
|
-
|
|
50
|
+
audioTracks.$el,
|
|
51
51
|
)
|
|
52
52
|
})
|
|
53
53
|
})
|
|
@@ -56,31 +56,31 @@ describe('AudioSelector', () => {
|
|
|
56
56
|
emitTracksAvailable(core, TRACKS)
|
|
57
57
|
})
|
|
58
58
|
it('should render button', () => {
|
|
59
|
-
expect(
|
|
59
|
+
expect(audioTracks.$el.find('#audiotracks-button').length).toBe(1)
|
|
60
60
|
})
|
|
61
61
|
it('should render menu hidden', () => {
|
|
62
|
-
expect(
|
|
62
|
+
expect(audioTracks.el.innerHTML).toMatchSnapshot()
|
|
63
63
|
expect(
|
|
64
|
-
|
|
64
|
+
audioTracks.$el.find('#audiotracks-select').hasClass('hidden'),
|
|
65
65
|
).toBe(true)
|
|
66
|
-
const trackItems =
|
|
66
|
+
const trackItems = audioTracks.$el.find('#audiotracks-select li')
|
|
67
67
|
expect(trackItems.length).toBe(2)
|
|
68
68
|
expect(trackItems.eq(0).text().trim()).toBe('English')
|
|
69
69
|
expect(trackItems.eq(1).text().trim()).toBe('Spanish')
|
|
70
70
|
})
|
|
71
71
|
describe('when button is clicked', () => {
|
|
72
72
|
beforeEach(() => {
|
|
73
|
-
|
|
73
|
+
audioTracks.$el.find('#audiotracks-button').click()
|
|
74
74
|
})
|
|
75
75
|
it('should show menu', () => {
|
|
76
|
-
expect(
|
|
76
|
+
expect(audioTracks.$el.html()).toMatchSnapshot()
|
|
77
77
|
expect(
|
|
78
|
-
|
|
78
|
+
audioTracks.$el.find('#audiotracks-select').hasClass('hidden'),
|
|
79
79
|
).toBe(false)
|
|
80
80
|
})
|
|
81
81
|
describe('when audio track is selected', () => {
|
|
82
82
|
beforeEach(() => {
|
|
83
|
-
|
|
83
|
+
audioTracks.$el
|
|
84
84
|
.find('#audiotracks-select [data-audiotracks-select="2"]')
|
|
85
85
|
.click()
|
|
86
86
|
})
|
|
@@ -90,14 +90,14 @@ describe('AudioSelector', () => {
|
|
|
90
90
|
)
|
|
91
91
|
})
|
|
92
92
|
it('should hide the menu', () => {
|
|
93
|
-
expect(
|
|
93
|
+
expect(audioTracks.$el.html()).toMatchSnapshot()
|
|
94
94
|
expect(
|
|
95
|
-
|
|
95
|
+
audioTracks.$el.find('#audiotracks-select').hasClass('hidden'),
|
|
96
96
|
).toBe(true)
|
|
97
97
|
})
|
|
98
98
|
it('should add changing class to the button', () => {
|
|
99
99
|
expect(
|
|
100
|
-
|
|
100
|
+
audioTracks.$el.find('#audiotracks-button').hasClass('changing'),
|
|
101
101
|
).toBe(true)
|
|
102
102
|
})
|
|
103
103
|
describe('when current audio track changes', () => {
|
|
@@ -115,14 +115,14 @@ describe('AudioSelector', () => {
|
|
|
115
115
|
})
|
|
116
116
|
it('should update button class', () => {
|
|
117
117
|
expect(
|
|
118
|
-
|
|
118
|
+
audioTracks.$el
|
|
119
119
|
.find('#audiotracks-button')
|
|
120
120
|
.hasClass('changing'),
|
|
121
121
|
).toBe(false)
|
|
122
122
|
})
|
|
123
123
|
it('should update button label', () => {
|
|
124
124
|
expect(
|
|
125
|
-
|
|
125
|
+
audioTracks.$el
|
|
126
126
|
.find('#audiotracks-button')
|
|
127
127
|
.text()
|
|
128
128
|
.replace(/\/assets.*\.svg/g, '')
|
|
@@ -130,7 +130,7 @@ describe('AudioSelector', () => {
|
|
|
130
130
|
).toBe('Spanish')
|
|
131
131
|
})
|
|
132
132
|
it('should highlight the selected menu item', () => {
|
|
133
|
-
const selectedItem =
|
|
133
|
+
const selectedItem = audioTracks.$el.find(
|
|
134
134
|
'#audiotracks-select .current',
|
|
135
135
|
)
|
|
136
136
|
expect(selectedItem.text().trim()).toBe('Spanish')
|
|
@@ -142,10 +142,10 @@ describe('AudioSelector', () => {
|
|
|
142
142
|
})
|
|
143
143
|
it('should unhighlight any previously highlighted menu item', () => {
|
|
144
144
|
expect(
|
|
145
|
-
|
|
145
|
+
audioTracks.$el.find('#audiotracks-select li.current').length,
|
|
146
146
|
).toBe(1)
|
|
147
147
|
expect(
|
|
148
|
-
|
|
148
|
+
audioTracks.$el.find(
|
|
149
149
|
'#audiotracks-select a.gcore-skin-active[data-audiotracks-select]',
|
|
150
150
|
).length,
|
|
151
151
|
).toBe(1)
|
|
@@ -156,8 +156,8 @@ describe('AudioSelector', () => {
|
|
|
156
156
|
})
|
|
157
157
|
describe('when audio tracks are not available', () => {
|
|
158
158
|
it('should not render the button', () => {
|
|
159
|
-
expect(
|
|
160
|
-
expect(
|
|
159
|
+
expect(audioTracks.$el.find('#audiotracks-button').length).toBe(0)
|
|
160
|
+
expect(audioTracks.$el.find('#audiotracks-select').length).toBe(0)
|
|
161
161
|
})
|
|
162
162
|
})
|
|
163
163
|
})
|
|
@@ -65,3 +65,69 @@ exports[`AudioSelector > given that audio tracks are available > when button is
|
|
|
65
65
|
</ul>
|
|
66
66
|
"
|
|
67
67
|
`;
|
|
68
|
+
|
|
69
|
+
exports[`AudioTracks > given that audio tracks are available > should render menu hidden 1`] = `
|
|
70
|
+
"<button data-audiotracks-button="" class="gcore-skin-button-color" id="audiotracks-button" aria-haspopup="menu" aria-expanded="false">
|
|
71
|
+
<span class="audio-text"></span> <span class="audio-arrow">/assets/icons/old/quality-arrow.svg</span>
|
|
72
|
+
</button>
|
|
73
|
+
<ul class="gcore-skin-bg-color menu hidden" id="audiotracks-select" role="menu">
|
|
74
|
+
|
|
75
|
+
<li class="">
|
|
76
|
+
<a href="#" class="gcore-skin-text-color" data-audiotracks-select="1" role="menuitemradio" aria-checked="false">
|
|
77
|
+
English
|
|
78
|
+
</a>
|
|
79
|
+
</li>
|
|
80
|
+
|
|
81
|
+
<li class="">
|
|
82
|
+
<a href="#" class="gcore-skin-text-color" data-audiotracks-select="2" role="menuitemradio" aria-checked="false">
|
|
83
|
+
Spanish
|
|
84
|
+
</a>
|
|
85
|
+
</li>
|
|
86
|
+
|
|
87
|
+
</ul>
|
|
88
|
+
"
|
|
89
|
+
`;
|
|
90
|
+
|
|
91
|
+
exports[`AudioTracks > given that audio tracks are available > when button is clicked > should show menu 1`] = `
|
|
92
|
+
"<button data-audiotracks-button="" class="gcore-skin-button-color" id="audiotracks-button" aria-haspopup="menu" aria-expanded="true">
|
|
93
|
+
<span class="audio-text"></span> <span class="audio-arrow">/assets/icons/old/quality-arrow.svg</span>
|
|
94
|
+
</button>
|
|
95
|
+
<ul class="gcore-skin-bg-color menu" id="audiotracks-select" role="menu">
|
|
96
|
+
|
|
97
|
+
<li class="">
|
|
98
|
+
<a href="#" class="gcore-skin-text-color" data-audiotracks-select="1" role="menuitemradio" aria-checked="false">
|
|
99
|
+
English
|
|
100
|
+
</a>
|
|
101
|
+
</li>
|
|
102
|
+
|
|
103
|
+
<li class="">
|
|
104
|
+
<a href="#" class="gcore-skin-text-color" data-audiotracks-select="2" role="menuitemradio" aria-checked="false">
|
|
105
|
+
Spanish
|
|
106
|
+
</a>
|
|
107
|
+
</li>
|
|
108
|
+
|
|
109
|
+
</ul>
|
|
110
|
+
"
|
|
111
|
+
`;
|
|
112
|
+
|
|
113
|
+
exports[`AudioTracks > given that audio tracks are available > when button is clicked > when audio track is selected > should hide the menu 1`] = `
|
|
114
|
+
"<button data-audiotracks-button="" class="gcore-skin-button-color changing" id="audiotracks-button" aria-haspopup="menu" aria-expanded="true">
|
|
115
|
+
<span class="audio-text"></span> <span class="audio-arrow">/assets/icons/old/quality-arrow.svg</span>
|
|
116
|
+
</button>
|
|
117
|
+
<ul class="gcore-skin-bg-color menu hidden" id="audiotracks-select" role="menu">
|
|
118
|
+
|
|
119
|
+
<li class="">
|
|
120
|
+
<a href="#" class="gcore-skin-text-color" data-audiotracks-select="1" role="menuitemradio" aria-checked="false">
|
|
121
|
+
English
|
|
122
|
+
</a>
|
|
123
|
+
</li>
|
|
124
|
+
|
|
125
|
+
<li class="">
|
|
126
|
+
<a href="#" class="gcore-skin-text-color" data-audiotracks-select="2" role="menuitemradio" aria-checked="false">
|
|
127
|
+
Spanish
|
|
128
|
+
</a>
|
|
129
|
+
</li>
|
|
130
|
+
|
|
131
|
+
</ul>
|
|
132
|
+
"
|
|
133
|
+
`;
|