@gcorevideo/player 2.28.24 → 2.28.25
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 +8 -1
- package/dist/index.css +358 -358
- package/dist/index.embed.js +24 -2
- package/dist/index.js +29 -3
- package/lib/playback/dash-playback/DashPlayback.d.ts +4 -0
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +7 -0
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +2 -0
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +21 -2
- package/package.json +1 -1
- package/src/playback/BasePlayback.ts +1 -1
- package/src/playback/dash-playback/DashPlayback.ts +8 -0
- package/src/plugins/subtitles/ClosedCaptions.ts +24 -2
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +2 -2
- package/tsconfig.tsbuildinfo +1 -1
package/dist/index.embed.js
CHANGED
|
@@ -13186,6 +13186,13 @@ class DashPlayback extends BasePlayback {
|
|
|
13186
13186
|
this.trigger(Events$1.PLAYBACK_AUDIO_AVAILABLE, tracks.map(toClapprTrack$1));
|
|
13187
13187
|
}
|
|
13188
13188
|
}
|
|
13189
|
+
/**
|
|
13190
|
+
* @override
|
|
13191
|
+
*/
|
|
13192
|
+
_handleTextTrackChange() {
|
|
13193
|
+
super._handleTextTrackChange();
|
|
13194
|
+
this._dash?.setTextTrack(this.closedCaptionsTrackId);
|
|
13195
|
+
}
|
|
13189
13196
|
}
|
|
13190
13197
|
DashPlayback.canPlay = function (resource, mimeType) {
|
|
13191
13198
|
if (!isDashSource(resource, mimeType)) {
|
|
@@ -58491,6 +58498,12 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58491
58498
|
return (this.core.options.cc?.language ??
|
|
58492
58499
|
this.core.options.subtitles?.language);
|
|
58493
58500
|
}
|
|
58501
|
+
isPreselectedLanguage(language) {
|
|
58502
|
+
if (!this.preselectedLanguage) {
|
|
58503
|
+
return false;
|
|
58504
|
+
}
|
|
58505
|
+
return language.startsWith(this.preselectedLanguage);
|
|
58506
|
+
}
|
|
58494
58507
|
/**
|
|
58495
58508
|
* @internal
|
|
58496
58509
|
*/
|
|
@@ -58550,12 +58563,15 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58550
58563
|
this.applyTracks();
|
|
58551
58564
|
this.mount();
|
|
58552
58565
|
}
|
|
58553
|
-
onSubtitleChanged({ id:
|
|
58566
|
+
onSubtitleChanged({ id: changedId }) {
|
|
58554
58567
|
// ignoring the subtitle selected by the playback engine or user agent
|
|
58555
58568
|
const id = this.track?.id ?? -1;
|
|
58556
58569
|
if (id === -1) {
|
|
58557
58570
|
this.clearSubtitleText();
|
|
58558
58571
|
}
|
|
58572
|
+
this.activateTrack(id);
|
|
58573
|
+
}
|
|
58574
|
+
activateTrack(id) {
|
|
58559
58575
|
for (const track of this.tracks) {
|
|
58560
58576
|
if (track.id === id) {
|
|
58561
58577
|
if (this.useNativeSubtitles) {
|
|
@@ -58702,7 +58718,10 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58702
58718
|
selectItem(item) {
|
|
58703
58719
|
this.clearSubtitleText();
|
|
58704
58720
|
this.track = item;
|
|
58721
|
+
const trackId = item?.id ?? -1;
|
|
58722
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
58705
58723
|
this.updateSelection();
|
|
58724
|
+
this.activateTrack(trackId);
|
|
58706
58725
|
}
|
|
58707
58726
|
onItemSelect(event) {
|
|
58708
58727
|
// event.target does not exist for some reason in tests
|
|
@@ -58719,7 +58738,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58719
58738
|
// if the language is undefined, then let the engine decide
|
|
58720
58739
|
// to hide the subtitles forcefully, set the language to 'none'
|
|
58721
58740
|
setTimeout(() => {
|
|
58722
|
-
this.selectItem(this.tracks.find((t) => t.track.language
|
|
58741
|
+
this.selectItem(this.tracks.find((t) => this.isPreselectedLanguage(t.track.language)) ?? null);
|
|
58723
58742
|
}, 0);
|
|
58724
58743
|
}
|
|
58725
58744
|
}
|
|
@@ -58821,6 +58840,9 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58821
58840
|
}
|
|
58822
58841
|
}
|
|
58823
58842
|
get useNativeSubtitles() {
|
|
58843
|
+
if (this.core.activePlayback?.name === 'dash') {
|
|
58844
|
+
return true;
|
|
58845
|
+
}
|
|
58824
58846
|
const mode = this.core.options.cc?.mode ?? this.core.options.subtitles?.mode ?? 'custom';
|
|
58825
58847
|
// TODO or Safari? or iOS?
|
|
58826
58848
|
return mode === 'native';
|
package/dist/index.js
CHANGED
|
@@ -13339,6 +13339,13 @@ class DashPlayback extends BasePlayback {
|
|
|
13339
13339
|
this.trigger(Events$1.PLAYBACK_AUDIO_AVAILABLE, tracks.map(toClapprTrack$1));
|
|
13340
13340
|
}
|
|
13341
13341
|
}
|
|
13342
|
+
/**
|
|
13343
|
+
* @override
|
|
13344
|
+
*/
|
|
13345
|
+
_handleTextTrackChange() {
|
|
13346
|
+
super._handleTextTrackChange();
|
|
13347
|
+
this._dash?.setTextTrack(this.closedCaptionsTrackId);
|
|
13348
|
+
}
|
|
13342
13349
|
}
|
|
13343
13350
|
DashPlayback.canPlay = function (resource, mimeType) {
|
|
13344
13351
|
if (!isDashSource(resource, mimeType)) {
|
|
@@ -51411,7 +51418,7 @@ class Player {
|
|
|
51411
51418
|
}
|
|
51412
51419
|
}
|
|
51413
51420
|
|
|
51414
|
-
var version$1 = "2.28.
|
|
51421
|
+
var version$1 = "2.28.25";
|
|
51415
51422
|
|
|
51416
51423
|
var packages = {
|
|
51417
51424
|
"node_modules/@clappr/core": {
|
|
@@ -59852,6 +59859,12 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
59852
59859
|
return (this.core.options.cc?.language ??
|
|
59853
59860
|
this.core.options.subtitles?.language);
|
|
59854
59861
|
}
|
|
59862
|
+
isPreselectedLanguage(language) {
|
|
59863
|
+
if (!this.preselectedLanguage) {
|
|
59864
|
+
return false;
|
|
59865
|
+
}
|
|
59866
|
+
return language.startsWith(this.preselectedLanguage);
|
|
59867
|
+
}
|
|
59855
59868
|
/**
|
|
59856
59869
|
* @internal
|
|
59857
59870
|
*/
|
|
@@ -59911,12 +59924,19 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
59911
59924
|
this.applyTracks();
|
|
59912
59925
|
this.mount();
|
|
59913
59926
|
}
|
|
59914
|
-
onSubtitleChanged({ id:
|
|
59927
|
+
onSubtitleChanged({ id: changedId }) {
|
|
59915
59928
|
// ignoring the subtitle selected by the playback engine or user agent
|
|
59916
59929
|
const id = this.track?.id ?? -1;
|
|
59930
|
+
trace(`${T$3} onSubtitleChanged`, {
|
|
59931
|
+
changedId,
|
|
59932
|
+
id,
|
|
59933
|
+
});
|
|
59917
59934
|
if (id === -1) {
|
|
59918
59935
|
this.clearSubtitleText();
|
|
59919
59936
|
}
|
|
59937
|
+
this.activateTrack(id);
|
|
59938
|
+
}
|
|
59939
|
+
activateTrack(id) {
|
|
59920
59940
|
for (const track of this.tracks) {
|
|
59921
59941
|
if (track.id === id) {
|
|
59922
59942
|
if (this.useNativeSubtitles) {
|
|
@@ -60066,7 +60086,10 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
60066
60086
|
selectItem(item) {
|
|
60067
60087
|
this.clearSubtitleText();
|
|
60068
60088
|
this.track = item;
|
|
60089
|
+
const trackId = item?.id ?? -1;
|
|
60090
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
60069
60091
|
this.updateSelection();
|
|
60092
|
+
this.activateTrack(trackId);
|
|
60070
60093
|
}
|
|
60071
60094
|
onItemSelect(event) {
|
|
60072
60095
|
// event.target does not exist for some reason in tests
|
|
@@ -60083,7 +60106,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
60083
60106
|
// if the language is undefined, then let the engine decide
|
|
60084
60107
|
// to hide the subtitles forcefully, set the language to 'none'
|
|
60085
60108
|
setTimeout(() => {
|
|
60086
|
-
this.selectItem(this.tracks.find((t) => t.track.language
|
|
60109
|
+
this.selectItem(this.tracks.find((t) => this.isPreselectedLanguage(t.track.language)) ?? null);
|
|
60087
60110
|
}, 0);
|
|
60088
60111
|
}
|
|
60089
60112
|
}
|
|
@@ -60185,6 +60208,9 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
60185
60208
|
}
|
|
60186
60209
|
}
|
|
60187
60210
|
get useNativeSubtitles() {
|
|
60211
|
+
if (this.core.activePlayback?.name === 'dash') {
|
|
60212
|
+
return true;
|
|
60213
|
+
}
|
|
60188
60214
|
const mode = this.core.options.cc?.mode ?? this.core.options.subtitles?.mode ?? 'custom';
|
|
60189
60215
|
// TODO or Safari? or iOS?
|
|
60190
60216
|
return mode === 'native';
|
|
@@ -78,6 +78,10 @@ export default class DashPlayback extends BasePlayback {
|
|
|
78
78
|
switchAudioTrack(id: string): void;
|
|
79
79
|
load(srcUrl: string): void;
|
|
80
80
|
private checkAudioTracks;
|
|
81
|
+
/**
|
|
82
|
+
* @override
|
|
83
|
+
*/
|
|
84
|
+
_handleTextTrackChange(): void;
|
|
81
85
|
}
|
|
82
86
|
export {};
|
|
83
87
|
//# sourceMappingURL=DashPlayback.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"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"}
|
|
@@ -493,6 +493,13 @@ export default class DashPlayback extends BasePlayback {
|
|
|
493
493
|
this.trigger(Events.PLAYBACK_AUDIO_AVAILABLE, tracks.map(toClapprTrack));
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
|
+
/**
|
|
497
|
+
* @override
|
|
498
|
+
*/
|
|
499
|
+
_handleTextTrackChange() {
|
|
500
|
+
super._handleTextTrackChange();
|
|
501
|
+
this._dash?.setTextTrack(this.closedCaptionsTrackId);
|
|
502
|
+
}
|
|
496
503
|
}
|
|
497
504
|
DashPlayback.canPlay = function (resource, mimeType) {
|
|
498
505
|
if (!isDashSource(resource, mimeType)) {
|
|
@@ -86,6 +86,7 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
86
86
|
'click #gplayer-cc-button': string;
|
|
87
87
|
};
|
|
88
88
|
private get preselectedLanguage();
|
|
89
|
+
private isPreselectedLanguage;
|
|
89
90
|
/**
|
|
90
91
|
* @internal
|
|
91
92
|
*/
|
|
@@ -94,6 +95,7 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
94
95
|
private onContainerChanged;
|
|
95
96
|
private onSubtitleAvailable;
|
|
96
97
|
private onSubtitleChanged;
|
|
98
|
+
private activateTrack;
|
|
97
99
|
private applyTracks;
|
|
98
100
|
private onContainerResize;
|
|
99
101
|
/**
|
|
@@ -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;AAiB7C;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;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,GAK9B;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,kBAAkB;IAqD1B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,iBAAiB;
|
|
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;AAiB7C;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;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,GAK9B;IAED,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,kBAAkB;IAqD1B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,WAAW;IA8BnB,OAAO,CAAC,iBAAiB;IAqBzB;;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;IAWlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAQvB,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;IAOb,OAAO,KAAK,kBAAkB,GAO7B;IAED,OAAO,CAAC,SAAS,CAA+C;CACjE"}
|
|
@@ -96,6 +96,12 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
96
96
|
return (this.core.options.cc?.language ??
|
|
97
97
|
this.core.options.subtitles?.language);
|
|
98
98
|
}
|
|
99
|
+
isPreselectedLanguage(language) {
|
|
100
|
+
if (!this.preselectedLanguage) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
return language.startsWith(this.preselectedLanguage);
|
|
104
|
+
}
|
|
99
105
|
/**
|
|
100
106
|
* @internal
|
|
101
107
|
*/
|
|
@@ -155,12 +161,19 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
155
161
|
this.applyTracks();
|
|
156
162
|
this.mount();
|
|
157
163
|
}
|
|
158
|
-
onSubtitleChanged({ id:
|
|
164
|
+
onSubtitleChanged({ id: changedId }) {
|
|
159
165
|
// ignoring the subtitle selected by the playback engine or user agent
|
|
160
166
|
const id = this.track?.id ?? -1;
|
|
167
|
+
trace(`${T} onSubtitleChanged`, {
|
|
168
|
+
changedId,
|
|
169
|
+
id,
|
|
170
|
+
});
|
|
161
171
|
if (id === -1) {
|
|
162
172
|
this.clearSubtitleText();
|
|
163
173
|
}
|
|
174
|
+
this.activateTrack(id);
|
|
175
|
+
}
|
|
176
|
+
activateTrack(id) {
|
|
164
177
|
for (const track of this.tracks) {
|
|
165
178
|
if (track.id === id) {
|
|
166
179
|
if (this.useNativeSubtitles) {
|
|
@@ -310,7 +323,10 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
310
323
|
selectItem(item) {
|
|
311
324
|
this.clearSubtitleText();
|
|
312
325
|
this.track = item;
|
|
326
|
+
const trackId = item?.id ?? -1;
|
|
327
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
313
328
|
this.updateSelection();
|
|
329
|
+
this.activateTrack(trackId);
|
|
314
330
|
}
|
|
315
331
|
onItemSelect(event) {
|
|
316
332
|
// event.target does not exist for some reason in tests
|
|
@@ -327,7 +343,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
327
343
|
// if the language is undefined, then let the engine decide
|
|
328
344
|
// to hide the subtitles forcefully, set the language to 'none'
|
|
329
345
|
setTimeout(() => {
|
|
330
|
-
this.selectItem(this.tracks.find((t) => t.track.language
|
|
346
|
+
this.selectItem(this.tracks.find((t) => this.isPreselectedLanguage(t.track.language)) ?? null);
|
|
331
347
|
}, 0);
|
|
332
348
|
}
|
|
333
349
|
}
|
|
@@ -429,6 +445,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
429
445
|
}
|
|
430
446
|
}
|
|
431
447
|
get useNativeSubtitles() {
|
|
448
|
+
if (this.core.activePlayback?.name === 'dash') {
|
|
449
|
+
return true;
|
|
450
|
+
}
|
|
432
451
|
const mode = this.core.options.cc?.mode ?? this.core.options.subtitles?.mode ?? 'custom';
|
|
433
452
|
// TODO or Safari? or iOS?
|
|
434
453
|
return mode === 'native';
|
package/package.json
CHANGED
|
@@ -42,7 +42,7 @@ export class BasePlayback extends HTML5Video {
|
|
|
42
42
|
* @param rate - The playback rate to set.
|
|
43
43
|
*/
|
|
44
44
|
setPlaybackRate(rate: number) {
|
|
45
|
-
;(this.el as HTMLMediaElement).playbackRate = rate
|
|
45
|
+
; (this.el as HTMLMediaElement).playbackRate = rate
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
override _onPlaying() {
|
|
@@ -684,6 +684,14 @@ export default class DashPlayback extends BasePlayback {
|
|
|
684
684
|
this.trigger(Events.PLAYBACK_AUDIO_AVAILABLE, tracks.map(toClapprTrack))
|
|
685
685
|
}
|
|
686
686
|
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* @override
|
|
690
|
+
*/
|
|
691
|
+
_handleTextTrackChange() {
|
|
692
|
+
super._handleTextTrackChange()
|
|
693
|
+
this._dash?.setTextTrack(this.closedCaptionsTrackId)
|
|
694
|
+
}
|
|
687
695
|
}
|
|
688
696
|
|
|
689
697
|
DashPlayback.canPlay = function (resource, mimeType) {
|
|
@@ -137,6 +137,13 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
137
137
|
)
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
private isPreselectedLanguage(language: string): boolean {
|
|
141
|
+
if (!this.preselectedLanguage) {
|
|
142
|
+
return false
|
|
143
|
+
}
|
|
144
|
+
return language.startsWith(this.preselectedLanguage)
|
|
145
|
+
}
|
|
146
|
+
|
|
140
147
|
/**
|
|
141
148
|
* @internal
|
|
142
149
|
*/
|
|
@@ -228,12 +235,20 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
228
235
|
this.mount()
|
|
229
236
|
}
|
|
230
237
|
|
|
231
|
-
private onSubtitleChanged({ id:
|
|
238
|
+
private onSubtitleChanged({ id: changedId }: { id: number }) {
|
|
232
239
|
// ignoring the subtitle selected by the playback engine or user agent
|
|
233
240
|
const id = this.track?.id ?? -1
|
|
241
|
+
trace(`${T} onSubtitleChanged`, {
|
|
242
|
+
changedId,
|
|
243
|
+
id,
|
|
244
|
+
})
|
|
234
245
|
if (id === -1) {
|
|
235
246
|
this.clearSubtitleText()
|
|
236
247
|
}
|
|
248
|
+
this.activateTrack(id)
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private activateTrack(id: number) {
|
|
237
252
|
for (const track of this.tracks) {
|
|
238
253
|
if (track.id === id) {
|
|
239
254
|
if (this.useNativeSubtitles) {
|
|
@@ -404,8 +419,12 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
404
419
|
private selectItem(item: TextTrackItem | null) {
|
|
405
420
|
this.clearSubtitleText()
|
|
406
421
|
this.track = item
|
|
422
|
+
const trackId = item?.id ?? -1
|
|
423
|
+
this.core.activePlayback.closedCaptionsTrackId = trackId
|
|
407
424
|
|
|
408
425
|
this.updateSelection()
|
|
426
|
+
|
|
427
|
+
this.activateTrack(trackId)
|
|
409
428
|
}
|
|
410
429
|
|
|
411
430
|
private onItemSelect(event: MouseEvent) {
|
|
@@ -428,7 +447,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
428
447
|
setTimeout(() => {
|
|
429
448
|
this.selectItem(
|
|
430
449
|
this.tracks.find(
|
|
431
|
-
(t) => t.track.language
|
|
450
|
+
(t) => this.isPreselectedLanguage(t.track.language),
|
|
432
451
|
) ?? null,
|
|
433
452
|
)
|
|
434
453
|
}, 0)
|
|
@@ -551,6 +570,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
551
570
|
}
|
|
552
571
|
|
|
553
572
|
private get useNativeSubtitles() {
|
|
573
|
+
if (this.core.activePlayback?.name === 'dash') {
|
|
574
|
+
return true
|
|
575
|
+
}
|
|
554
576
|
const mode = this.core.options.cc?.mode ?? this.core.options.subtitles?.mode ?? 'custom'
|
|
555
577
|
// TODO or Safari? or iOS?
|
|
556
578
|
return mode === 'native'
|
|
@@ -235,10 +235,10 @@ describe('ClosedCaptions', () => {
|
|
|
235
235
|
it('should deactivate subtitle track', () => {
|
|
236
236
|
expect(core.activePlayback.closedCaptionsTrackId).toEqual(-1)
|
|
237
237
|
expect(core.activePlayback.closedCaptionsTracks[0].track.mode).toBe(
|
|
238
|
-
'
|
|
238
|
+
'disabled',
|
|
239
239
|
)
|
|
240
240
|
expect(core.activePlayback.closedCaptionsTracks[1].track.mode).toBe(
|
|
241
|
-
'
|
|
241
|
+
'disabled',
|
|
242
242
|
)
|
|
243
243
|
})
|
|
244
244
|
it('should select menu item', () => {
|