@gcorevideo/player 2.25.6 → 2.25.8
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/audio-tracks/template.ejs +5 -4
- package/assets/bottom-gear/gear-sub-menu.scss +4 -9
- package/assets/bottom-gear/gear.scss +1 -2
- package/assets/media-control/container.scss +0 -13
- package/assets/media-control/media-control.scss +110 -8
- package/assets/media-control/width270.scss +3 -9
- package/assets/media-control/width370.scss +6 -40
- package/assets/multi-camera/style.scss +0 -5
- package/assets/picture-in-picture/style.scss +1 -2
- package/assets/subtitles/combobox.ejs +27 -6
- package/assets/subtitles/string.ejs +1 -1
- package/assets/subtitles/style.scss +16 -69
- package/dist/core.js +1 -1
- package/dist/index.css +1019 -1117
- package/dist/index.embed.js +180 -123
- package/dist/index.js +161 -107
- package/lib/plugins/audio-selector/AudioTracks.d.ts +4 -3
- package/lib/plugins/audio-selector/AudioTracks.d.ts.map +1 -1
- package/lib/plugins/audio-selector/AudioTracks.js +41 -23
- package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -1
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +3 -4
- package/lib/plugins/media-control/MediaControl.d.ts +4 -0
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +8 -1
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +7 -4
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +64 -34
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +2 -0
- package/package.json +1 -1
- package/src/plugins/audio-selector/AudioTracks.ts +53 -29
- package/src/plugins/audio-selector/__tests__/AudioTracks.test.ts +60 -45
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioSelector.test.ts.snap +24 -24
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioTracks.test.ts.snap +21 -18
- package/src/plugins/bottom-gear/BottomGear.ts +3 -4
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
- package/src/plugins/media-control/MediaControl.ts +11 -1
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +6 -6
- package/src/plugins/subtitles/ClosedCaptions.ts +66 -35
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +220 -35
- package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +8 -19
- package/src/testUtils.ts +2 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/assets/audio-tracks/style.scss +0 -111
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { UICorePlugin } from '@clappr/core';
|
|
2
|
-
import '../../../assets/audio-tracks/style.scss';
|
|
3
2
|
/**
|
|
4
3
|
* `PLUGIN` that makes possible to switch audio tracks via the media control UI.
|
|
5
4
|
* @beta
|
|
@@ -12,6 +11,7 @@ import '../../../assets/audio-tracks/style.scss';
|
|
|
12
11
|
*/
|
|
13
12
|
export declare class AudioTracks extends UICorePlugin {
|
|
14
13
|
private currentTrack;
|
|
14
|
+
private open;
|
|
15
15
|
private tracks;
|
|
16
16
|
/**
|
|
17
17
|
* @internal
|
|
@@ -38,8 +38,8 @@ export declare class AudioTracks extends UICorePlugin {
|
|
|
38
38
|
* @internal
|
|
39
39
|
*/
|
|
40
40
|
get events(): {
|
|
41
|
-
'click [data-
|
|
42
|
-
'click #audiotracks-button': string;
|
|
41
|
+
'click #gplayer-audiotracks-menu [data-item]': string;
|
|
42
|
+
'click #gplayer-audiotracks-button': string;
|
|
43
43
|
};
|
|
44
44
|
/**
|
|
45
45
|
* @internal
|
|
@@ -63,5 +63,6 @@ export declare class AudioTracks extends UICorePlugin {
|
|
|
63
63
|
private startTrackSwitching;
|
|
64
64
|
private updateText;
|
|
65
65
|
private highlightCurrentTrack;
|
|
66
|
+
private mount;
|
|
66
67
|
}
|
|
67
68
|
//# sourceMappingURL=AudioTracks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioTracks.d.ts","sourceRoot":"","sources":["../../../src/plugins/audio-selector/AudioTracks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAY,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"AudioTracks.d.ts","sourceRoot":"","sources":["../../../src/plugins/audio-selector/AudioTracks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAY,MAAM,cAAc,CAAA;AAgB7D;;;;;;;;;GASG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,YAAY,CAA0B;IAE9C,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,MAAM,CAAmB;IAEjC;;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,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,wBAAwB;IA6BhC,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACM,MAAM;IAgBf,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,KAAK;CAKd"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { Events, UICorePlugin, template } from '@clappr/core';
|
|
2
2
|
import assert from 'assert';
|
|
3
|
+
// import { trace } from '@gcorevideo/utils'
|
|
3
4
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
4
5
|
import pluginHtml from '../../../assets/audio-tracks/template.ejs';
|
|
5
|
-
import '../../../assets/audio-tracks/style.scss';
|
|
6
6
|
import audioArrow from '../../../assets/icons/old/quality-arrow.svg';
|
|
7
7
|
import { ExtendedEvents } from '../media-control/MediaControl.js';
|
|
8
|
-
import { trace } from '@gcorevideo/utils';
|
|
9
8
|
const VERSION = '2.22.4';
|
|
10
|
-
const T = 'plugins.audiotracks'
|
|
9
|
+
// const T = 'plugins.audiotracks'
|
|
11
10
|
/**
|
|
12
11
|
* `PLUGIN` that makes possible to switch audio tracks via the media control UI.
|
|
13
12
|
* @beta
|
|
@@ -20,6 +19,7 @@ const T = 'plugins.audiotracks';
|
|
|
20
19
|
*/
|
|
21
20
|
export class AudioTracks extends UICorePlugin {
|
|
22
21
|
currentTrack = null;
|
|
22
|
+
open = false;
|
|
23
23
|
tracks = [];
|
|
24
24
|
/**
|
|
25
25
|
* @internal
|
|
@@ -45,7 +45,7 @@ export class AudioTracks extends UICorePlugin {
|
|
|
45
45
|
*/
|
|
46
46
|
get attributes() {
|
|
47
47
|
return {
|
|
48
|
-
class: 'media-control-audiotracks',
|
|
48
|
+
class: 'media-control-audiotracks media-control-dd__wrap',
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
@@ -53,8 +53,8 @@ export class AudioTracks extends UICorePlugin {
|
|
|
53
53
|
*/
|
|
54
54
|
get events() {
|
|
55
55
|
return {
|
|
56
|
-
'click [data-
|
|
57
|
-
'click #audiotracks-button': 'toggleMenu',
|
|
56
|
+
'click #gplayer-audiotracks-menu [data-item]': 'onTrackSelect',
|
|
57
|
+
'click #gplayer-audiotracks-button': 'toggleMenu',
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
@@ -68,8 +68,9 @@ export class AudioTracks extends UICorePlugin {
|
|
|
68
68
|
const mediaControl = this.core.getPlugin('media_control');
|
|
69
69
|
assert(mediaControl, 'media_control plugin is required');
|
|
70
70
|
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, () => {
|
|
71
|
-
|
|
71
|
+
this.mount();
|
|
72
72
|
});
|
|
73
|
+
// TODO when tracks change, re-render and re-attach
|
|
73
74
|
this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
|
|
74
75
|
this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
|
|
75
76
|
if (from !== this.name) {
|
|
@@ -84,6 +85,7 @@ export class AudioTracks extends UICorePlugin {
|
|
|
84
85
|
tracks.find((track) => track.kind === 'main') ?? null; // TODO test
|
|
85
86
|
this.tracks = tracks;
|
|
86
87
|
this.render();
|
|
88
|
+
this.mount();
|
|
87
89
|
});
|
|
88
90
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_AUDIO_CHANGED, (track) => {
|
|
89
91
|
this.currentTrack = track;
|
|
@@ -91,6 +93,10 @@ export class AudioTracks extends UICorePlugin {
|
|
|
91
93
|
this.buttonElement().removeClass('changing');
|
|
92
94
|
this.updateText();
|
|
93
95
|
});
|
|
96
|
+
// TODO test
|
|
97
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_CLICK, () => {
|
|
98
|
+
this.hideMenu();
|
|
99
|
+
});
|
|
94
100
|
}
|
|
95
101
|
shouldRender() {
|
|
96
102
|
// Render is called from the parent class constructor so tracks aren't available
|
|
@@ -101,21 +107,19 @@ export class AudioTracks extends UICorePlugin {
|
|
|
101
107
|
* @internal
|
|
102
108
|
*/
|
|
103
109
|
render() {
|
|
104
|
-
if (!this.shouldRender()) {
|
|
105
|
-
return this;
|
|
106
|
-
}
|
|
107
110
|
this.$el.html(AudioTracks.template({
|
|
108
|
-
tracks: this.tracks,
|
|
111
|
+
tracks: this.tracks ?? [],
|
|
109
112
|
title: this.getTitle(),
|
|
110
113
|
icon: audioArrow,
|
|
111
114
|
current: this.currentTrack?.id,
|
|
112
115
|
}));
|
|
116
|
+
this.$el.find('#gplayer-audiotracks-menu').hide();
|
|
113
117
|
this.updateText();
|
|
114
118
|
this.highlightCurrentTrack();
|
|
115
119
|
return this;
|
|
116
120
|
}
|
|
117
121
|
onTrackSelect(event) {
|
|
118
|
-
const id = event.currentTarget?.dataset?.
|
|
122
|
+
const id = event.currentTarget?.dataset?.item;
|
|
119
123
|
if (id) {
|
|
120
124
|
this.selectAudioTrack(id);
|
|
121
125
|
}
|
|
@@ -129,25 +133,34 @@ export class AudioTracks extends UICorePlugin {
|
|
|
129
133
|
this.updateText();
|
|
130
134
|
}
|
|
131
135
|
hideMenu() {
|
|
132
|
-
|
|
133
|
-
this.$el.find('#audiotracks-
|
|
134
|
-
this.$el.find('#audiotracks-button').attr('aria-expanded', 'false');
|
|
136
|
+
this.open = false;
|
|
137
|
+
this.$el.find('#gplayer-audiotracks-menu').hide();
|
|
138
|
+
this.$el.find('#gplayer-audiotracks-button').attr('aria-expanded', 'false');
|
|
135
139
|
}
|
|
136
140
|
toggleMenu() {
|
|
137
|
-
this.
|
|
138
|
-
this
|
|
139
|
-
|
|
140
|
-
|
|
141
|
+
this.open = !this.open;
|
|
142
|
+
this.core
|
|
143
|
+
.getPlugin('media_control')
|
|
144
|
+
.trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
|
|
145
|
+
if (this.open) {
|
|
146
|
+
this.$el.find('#gplayer-audiotracks-menu').show();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.$el.find('#gplayer-audiotracks-menu').hide();
|
|
150
|
+
}
|
|
151
|
+
this.$el
|
|
152
|
+
.find('#gplayer-audiotracks-button')
|
|
153
|
+
.attr('aria-expanded', this.open);
|
|
141
154
|
}
|
|
142
155
|
buttonElement() {
|
|
143
|
-
return this.$('button');
|
|
156
|
+
return this.$('#gplayer-audiotracks-button');
|
|
144
157
|
}
|
|
145
158
|
buttonElementText() {
|
|
146
|
-
return this.$('button
|
|
159
|
+
return this.$el.find('#gplayer-audiotracks-button-text');
|
|
147
160
|
}
|
|
148
161
|
trackElement(id) {
|
|
149
|
-
return this.$('#audiotracks-
|
|
150
|
-
(id !== undefined ? `[data-
|
|
162
|
+
return this.$('#gplayer-audiotracks-menu a' +
|
|
163
|
+
(id !== undefined ? `[data-item="${id}"]` : '')).parent();
|
|
151
164
|
}
|
|
152
165
|
getTitle() {
|
|
153
166
|
if (!this.currentTrack) {
|
|
@@ -178,4 +191,9 @@ export class AudioTracks extends UICorePlugin {
|
|
|
178
191
|
.attr('aria-checked', 'true');
|
|
179
192
|
}
|
|
180
193
|
}
|
|
194
|
+
mount() {
|
|
195
|
+
if (this.shouldRender()) {
|
|
196
|
+
this.core.getPlugin('media_control')?.slot('audiotracks', this.$el);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
181
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAKb,MAAM,cAAc,CAAA;AAOrB,OAAO,uCAAuC,CAAA;AAC9C,OAAO,gDAAgD,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAU5C;;;GAGG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,QAAQ,aAAa;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,EAAE,CAAQ;IAElB,OAAO,CAAC,QAAQ,CAAI;IAEpB,OAAO,CAAC,SAAS,CAAO;IAExB;;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,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAInB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW;IA2B1D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAqBf;;;;OAIG;IACH,OAAO;IAIP,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAKb,MAAM,cAAc,CAAA;AAOrB,OAAO,uCAAuC,CAAA;AAC9C,OAAO,gDAAgD,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAU5C;;;GAGG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,QAAQ,aAAa;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,EAAE,CAAQ;IAElB,OAAO,CAAC,QAAQ,CAAI;IAEpB,OAAO,CAAC,SAAS,CAAO;IAExB;;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,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACM,UAAU;IAInB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW;IA2B1D,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACM,MAAM;IAqBf;;;;OAIG;IACH,OAAO;IAIP,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,UAAU;CAQnB"}
|
|
@@ -175,7 +175,7 @@ export class BottomGear extends UICorePlugin {
|
|
|
175
175
|
.appendTo(this.$el.find('#gear-options-wrapper'));
|
|
176
176
|
$item.on('click', (e) => {
|
|
177
177
|
e.stopPropagation();
|
|
178
|
-
this.
|
|
178
|
+
this.clampPopup($subMenu);
|
|
179
179
|
$subMenu.show();
|
|
180
180
|
this.$el.find('#gear-options').hide();
|
|
181
181
|
});
|
|
@@ -272,9 +272,8 @@ export class BottomGear extends UICorePlugin {
|
|
|
272
272
|
const mediaControl = this.core.getPlugin('media_control');
|
|
273
273
|
mediaControl.slot('gear', this.$el);
|
|
274
274
|
}
|
|
275
|
-
|
|
276
|
-
const availableHeight = this.core.getPlugin('media_control').
|
|
277
|
-
MENU_VMARGIN * 2;
|
|
275
|
+
clampPopup($subMenu) {
|
|
276
|
+
const availableHeight = this.core.getPlugin('media_control').getAvailablePopupHeight();
|
|
278
277
|
$subMenu.css('max-height', `${availableHeight}px`);
|
|
279
278
|
$subMenu
|
|
280
279
|
.find('.gear-sub-menu')
|
|
@@ -233,6 +233,10 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
233
233
|
* This takes into account the container height and excludes the height of the controls bar
|
|
234
234
|
*/
|
|
235
235
|
getAvailableHeight(): number;
|
|
236
|
+
/**
|
|
237
|
+
* @returns Vertical space available to render a popup menu
|
|
238
|
+
*/
|
|
239
|
+
getAvailablePopupHeight(): number;
|
|
236
240
|
/**
|
|
237
241
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
238
242
|
*/
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ const STANDARD_MEDIA_CONTROL_ELEMENTS = [
|
|
|
30
30
|
'seekbar',
|
|
31
31
|
'volume',
|
|
32
32
|
];
|
|
33
|
+
const MENU_VMARGIN = 12;
|
|
33
34
|
// TODO export
|
|
34
35
|
const DEFAULT_SETTINGS = {
|
|
35
36
|
default: ['seekbar'],
|
|
@@ -356,6 +357,12 @@ export class MediaControl extends UICorePlugin {
|
|
|
356
357
|
getAvailableHeight() {
|
|
357
358
|
return (this.core.$el.height() - this.$el.find('.media-control-layer').height());
|
|
358
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* @returns Vertical space available to render a popup menu
|
|
362
|
+
*/
|
|
363
|
+
getAvailablePopupHeight() {
|
|
364
|
+
return this.getAvailableHeight() - MENU_VMARGIN * 2;
|
|
365
|
+
}
|
|
359
366
|
/**
|
|
360
367
|
* Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
361
368
|
*/
|
|
@@ -888,7 +895,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
888
895
|
const panel = this.getElementLocation(name);
|
|
889
896
|
if (panel) {
|
|
890
897
|
element.attr(`data-${name}`, '');
|
|
891
|
-
element.addClass('
|
|
898
|
+
element.addClass('media-control-item');
|
|
892
899
|
mountTo(panel, element);
|
|
893
900
|
}
|
|
894
901
|
}
|
|
@@ -40,6 +40,7 @@ export type ClosedCaptionsPluginSettings = {
|
|
|
40
40
|
export declare class ClosedCaptions extends UICorePlugin {
|
|
41
41
|
private isPreselectedApplied;
|
|
42
42
|
private active;
|
|
43
|
+
private open;
|
|
43
44
|
private track;
|
|
44
45
|
private tracks;
|
|
45
46
|
private $line;
|
|
@@ -57,8 +58,8 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
57
58
|
* @internal
|
|
58
59
|
*/
|
|
59
60
|
static get version(): string;
|
|
60
|
-
private static readonly
|
|
61
|
-
private static readonly
|
|
61
|
+
private static readonly templateControl;
|
|
62
|
+
private static readonly templateLine;
|
|
62
63
|
/**
|
|
63
64
|
* @internal
|
|
64
65
|
*/
|
|
@@ -69,8 +70,8 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
69
70
|
* @internal
|
|
70
71
|
*/
|
|
71
72
|
get events(): {
|
|
72
|
-
'click #cc-
|
|
73
|
-
'click #cc-button': string;
|
|
73
|
+
'click #gplayer-cc-menu [data-item]': string;
|
|
74
|
+
'click #gplayer-cc-button': string;
|
|
74
75
|
};
|
|
75
76
|
private get preselectedLanguage();
|
|
76
77
|
/**
|
|
@@ -114,5 +115,7 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
114
115
|
private updateSelection;
|
|
115
116
|
private highlightCurrentSubtitles;
|
|
116
117
|
private renderIcon;
|
|
118
|
+
private clampPopup;
|
|
119
|
+
private mount;
|
|
117
120
|
}
|
|
118
121
|
//# sourceMappingURL=ClosedCaptions.d.ts.map
|
|
@@ -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;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,MAAM,CAAQ;IAEtB,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,
|
|
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,MAAM,CAAQ;IAEtB,OAAO,CAAC,IAAI,CAAQ;IAEpB,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,eAAe,CAAyB;IAEhE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuB;IAE3D;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED,OAAO,KAAK,mBAAmB,GAM9B;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACH,IAAI;IAcJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA4Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,KAAK;CAMd"}
|
|
@@ -42,6 +42,7 @@ const T = 'plugins.cc';
|
|
|
42
42
|
export class ClosedCaptions extends UICorePlugin {
|
|
43
43
|
isPreselectedApplied = false;
|
|
44
44
|
active = false;
|
|
45
|
+
open = false;
|
|
45
46
|
track = null;
|
|
46
47
|
tracks = [];
|
|
47
48
|
$line = null;
|
|
@@ -63,14 +64,14 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
63
64
|
static get version() {
|
|
64
65
|
return VERSION;
|
|
65
66
|
}
|
|
66
|
-
static
|
|
67
|
-
static
|
|
67
|
+
static templateControl = template(comboboxHTML);
|
|
68
|
+
static templateLine = template(stringHTML);
|
|
68
69
|
/**
|
|
69
70
|
* @internal
|
|
70
71
|
*/
|
|
71
72
|
get attributes() {
|
|
72
73
|
return {
|
|
73
|
-
class: 'media-control-cc',
|
|
74
|
+
class: 'media-control-cc media-control-dd__wrap',
|
|
74
75
|
};
|
|
75
76
|
}
|
|
76
77
|
/**
|
|
@@ -78,8 +79,8 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
78
79
|
*/
|
|
79
80
|
get events() {
|
|
80
81
|
return {
|
|
81
|
-
'click #cc-
|
|
82
|
-
'click #cc-button': 'toggleMenu',
|
|
82
|
+
'click #gplayer-cc-menu [data-item]': 'onItemSelect',
|
|
83
|
+
'click #gplayer-cc-button': 'toggleMenu',
|
|
83
84
|
};
|
|
84
85
|
}
|
|
85
86
|
get preselectedLanguage() {
|
|
@@ -96,10 +97,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
96
97
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);
|
|
97
98
|
}
|
|
98
99
|
onCoreReady() {
|
|
99
|
-
trace(`${T} onCoreReady`);
|
|
100
100
|
const mediaControl = this.core.getPlugin('media_control');
|
|
101
101
|
assert(mediaControl, 'media_control plugin is required');
|
|
102
|
-
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.
|
|
102
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.mount);
|
|
103
103
|
this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, () => {
|
|
104
104
|
this.hideMenu();
|
|
105
105
|
});
|
|
@@ -110,11 +110,14 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
112
|
onContainerChanged() {
|
|
113
|
-
trace(`${T} onContainerChanged`);
|
|
114
113
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_FULLSCREEN, this.playerResize);
|
|
115
114
|
this.listenTo(this.core.activeContainer, 'container:advertisement:start', this.onStartAd);
|
|
116
115
|
this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);
|
|
117
116
|
this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_CHANGED, this.onSubtitleChanged);
|
|
117
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_CLICK, () => {
|
|
118
|
+
// TODO test
|
|
119
|
+
this.hideMenu();
|
|
120
|
+
});
|
|
118
121
|
// fix for iOS
|
|
119
122
|
const video = this.core.activePlayback.el;
|
|
120
123
|
assert(video, 'video element is required');
|
|
@@ -132,6 +135,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
132
135
|
onSubtitleAvailable() {
|
|
133
136
|
trace(`${T} onSubtitleAvailable`);
|
|
134
137
|
this.applyTracks();
|
|
138
|
+
this.mount();
|
|
135
139
|
}
|
|
136
140
|
onSubtitleChanged({ id }) {
|
|
137
141
|
trace(`${T} onSubtitleChanged`, { id });
|
|
@@ -196,6 +200,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
196
200
|
}
|
|
197
201
|
try {
|
|
198
202
|
this.resizeFont();
|
|
203
|
+
this.clampPopup();
|
|
199
204
|
}
|
|
200
205
|
catch (error) {
|
|
201
206
|
reportError(error);
|
|
@@ -206,7 +211,10 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
206
211
|
*/
|
|
207
212
|
hide() {
|
|
208
213
|
this.active = false;
|
|
214
|
+
this.open = false;
|
|
209
215
|
this.renderIcon();
|
|
216
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
217
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
210
218
|
this.$line.hide();
|
|
211
219
|
if (this.tracks) {
|
|
212
220
|
for (const t of this.tracks) {
|
|
@@ -249,17 +257,18 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
249
257
|
if (!this.core.activeContainer) {
|
|
250
258
|
return this;
|
|
251
259
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
this.$el.find('#cc-
|
|
258
|
-
this.
|
|
259
|
-
this.$line
|
|
260
|
+
this.$el.html(ClosedCaptions.templateControl({
|
|
261
|
+
tracks: this.tracks ?? [],
|
|
262
|
+
i18n: this.core.i18n,
|
|
263
|
+
current: this.track?.id ?? -1,
|
|
264
|
+
}));
|
|
265
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
266
|
+
this.open = false;
|
|
267
|
+
this.core.activeContainer.$el.find('#gplayer-cc-line').remove();
|
|
268
|
+
this.$line = $(ClosedCaptions.templateLine());
|
|
260
269
|
this.resizeFont();
|
|
270
|
+
this.clampPopup();
|
|
261
271
|
this.core.activeContainer.$el.append(this.$line);
|
|
262
|
-
mediaControl.slot('cc', this.$el);
|
|
263
272
|
this.updateSelection();
|
|
264
273
|
this.renderIcon();
|
|
265
274
|
return this;
|
|
@@ -273,9 +282,10 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
273
282
|
this.updateSelection();
|
|
274
283
|
}
|
|
275
284
|
onItemSelect(event) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
285
|
+
// event.target does not exist for some reason in tests
|
|
286
|
+
const id = (event.target ?? event.currentTarget).dataset?.item ??
|
|
287
|
+
'-1';
|
|
288
|
+
localStorage.setItem(LOCAL_STORAGE_CC_ID, id); // TODO store language instead
|
|
279
289
|
this.selectItem(this.findById(Number(id)));
|
|
280
290
|
this.hideMenu();
|
|
281
291
|
return false;
|
|
@@ -292,26 +302,33 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
292
302
|
}
|
|
293
303
|
}
|
|
294
304
|
hideMenu() {
|
|
295
|
-
|
|
296
|
-
this.$el.find('#cc-
|
|
305
|
+
this.open = false;
|
|
306
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
307
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
297
308
|
}
|
|
298
309
|
toggleMenu() {
|
|
299
|
-
trace(`${T} toggleMenu`, { display: this.$el.find('#cc-select').css('display') });
|
|
300
310
|
this.core
|
|
301
311
|
.getPlugin('media_control')
|
|
302
312
|
.trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
|
|
303
|
-
this
|
|
304
|
-
|
|
313
|
+
this.open = !this.open;
|
|
314
|
+
if (this.open) {
|
|
315
|
+
this.$el.find('#gplayer-cc-menu').show();
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
this.$el.find('#gplayer-cc-menu').hide();
|
|
319
|
+
}
|
|
320
|
+
this.$el.find('#gplayer-cc-button').attr('aria-expanded', this.open);
|
|
305
321
|
}
|
|
306
322
|
itemElement(id) {
|
|
307
|
-
|
|
323
|
+
// TODO fix semantically
|
|
324
|
+
return this.$el.find(`#gplayer-cc-menu [data-item="${id}"]`).parent();
|
|
308
325
|
}
|
|
309
326
|
allItemElements() {
|
|
310
|
-
return this.$('#cc-
|
|
327
|
+
return this.$el.find('#gplayer-cc-menu li'); // TODO fix semantically
|
|
311
328
|
}
|
|
312
329
|
selectSubtitles() {
|
|
313
330
|
const trackId = this.track ? this.track.id : -1;
|
|
314
|
-
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
331
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId; // TODO test
|
|
315
332
|
}
|
|
316
333
|
getSubtitleText(track) {
|
|
317
334
|
const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
|
|
@@ -321,6 +338,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
321
338
|
for (const cue of cues) {
|
|
322
339
|
if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
|
|
323
340
|
lines.push(cue.getCueAsHTML().textContent);
|
|
341
|
+
// TODO break?
|
|
324
342
|
}
|
|
325
343
|
}
|
|
326
344
|
}
|
|
@@ -346,18 +364,30 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
346
364
|
this.allItemElements()
|
|
347
365
|
.removeClass('current')
|
|
348
366
|
.find('a')
|
|
349
|
-
.removeClass('gcore-skin-active')
|
|
350
|
-
|
|
351
|
-
track: this.track?.id,
|
|
352
|
-
});
|
|
367
|
+
.removeClass('gcore-skin-active')
|
|
368
|
+
.attr('aria-checked', 'false');
|
|
353
369
|
const currentLevelElement = this.itemElement(this.track ? this.track.id : -1);
|
|
354
370
|
currentLevelElement
|
|
355
371
|
.addClass('current')
|
|
356
372
|
.find('a')
|
|
357
|
-
.addClass('gcore-skin-active')
|
|
373
|
+
.addClass('gcore-skin-active')
|
|
374
|
+
.attr('aria-checked', 'true');
|
|
358
375
|
}
|
|
359
376
|
renderIcon() {
|
|
377
|
+
// render both icons at once
|
|
360
378
|
const icon = this.active ? subtitlesOnIcon : subtitlesOffIcon;
|
|
361
|
-
this.$el.find('
|
|
379
|
+
this.$el.find('#gplayer-cc-button').html(icon);
|
|
380
|
+
}
|
|
381
|
+
clampPopup() {
|
|
382
|
+
const availableHeight = this.core
|
|
383
|
+
.getPlugin('media_control')
|
|
384
|
+
.getAvailablePopupHeight();
|
|
385
|
+
this.$el.find('#gplayer-cc-menu').css('max-height', `${availableHeight}px`);
|
|
386
|
+
}
|
|
387
|
+
mount() {
|
|
388
|
+
if (this.shouldRender()) {
|
|
389
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
390
|
+
mediaControl.slot('cc', this.$el);
|
|
391
|
+
}
|
|
362
392
|
}
|
|
363
393
|
}
|
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,CAChC,IAAI,SAAS,EACb,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCtC;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAAgD;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,
|
|
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,CAChC,IAAI,SAAS,EACb,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCtC;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAAgD;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBAuB/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAe7C"}
|
package/lib/testUtils.js
CHANGED
|
@@ -117,6 +117,8 @@ export function createMockMediaControl(core) {
|
|
|
117
117
|
// @ts-ignore
|
|
118
118
|
mediaControl.getAvailableHeight = vi.fn().mockReturnValue(300);
|
|
119
119
|
// @ts-ignore
|
|
120
|
+
mediaControl.getAvailablePopupHeight = vi.fn().mockReturnValue(286);
|
|
121
|
+
// @ts-ignore
|
|
120
122
|
mediaControl.toggleElement = vi.fn();
|
|
121
123
|
vi.spyOn(mediaControl, 'trigger');
|
|
122
124
|
core.$el.append(mediaControl.$el);
|