@gcorevideo/player 2.28.29 → 2.28.35
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 +1 -1
- package/dist/index.css +400 -400
- package/dist/index.embed.js +92 -74
- package/dist/index.js +150 -134
- package/docs/api/player.closedcaptionspluginsettings.md +1 -0
- package/docs/api/player.md +9 -0
- package/docs/api/player.mediacontrol.md +16 -0
- package/docs/api/player.thumbnails.md +1 -1
- package/lib/Player.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.d.ts +5 -6
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +40 -38
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +6 -2
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +37 -23
- package/lib/plugins/utils/mobile.d.ts +2 -0
- package/lib/plugins/utils/mobile.d.ts.map +1 -0
- package/lib/plugins/utils/mobile.js +4 -0
- package/lib/testUtils.d.ts +1 -0
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +1 -0
- package/package.json +4 -1
- package/src/Player.ts +12 -12
- package/src/plugins/media-control/MediaControl.ts +45 -43
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +63 -35
- package/src/plugins/subtitles/ClosedCaptions.ts +42 -28
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +293 -6
- package/src/plugins/utils/mobile.ts +5 -0
- package/src/testUtils.ts +1 -0
- package/tsconfig.tsbuildinfo +1 -1
package/docs/api/player.md
CHANGED
|
@@ -274,6 +274,22 @@ Mounts a media control element at a specific location
|
|
|
274
274
|
Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
275
275
|
|
|
276
276
|
|
|
277
|
+
</td></tr>
|
|
278
|
+
<tr><td>
|
|
279
|
+
|
|
280
|
+
[setKeepVisible(keepVisible)](./player.mediacontrol.setkeepvisible.md)
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
</td><td>
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
</td><td>
|
|
287
|
+
|
|
288
|
+
Set or reset the keep visibility state
|
|
289
|
+
|
|
290
|
+
Keep visibility state controls whether the media control is hidden automatically after a delay, which is a default behaviour.
|
|
291
|
+
|
|
292
|
+
|
|
277
293
|
</td></tr>
|
|
278
294
|
<tr><td>
|
|
279
295
|
|
|
@@ -15,7 +15,7 @@ export declare class Thumbnails extends UICorePlugin
|
|
|
15
15
|
|
|
16
16
|
## Remarks
|
|
17
17
|
|
|
18
|
-
The plugin needs specially crafted VTT file with a thumbnail sprite sheet to work. The VTT
|
|
18
|
+
The plugin needs specially crafted VTT file with a thumbnail sprite sheet to work. The VTT cues refer to a thumbnail, an area within the sprite sheet, to associate with a time span.
|
|
19
19
|
|
|
20
20
|
Configuration options - [ThumbnailsPluginSettings](./player.thumbnailspluginsettings.md)
|
|
21
21
|
|
package/lib/Player.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAEjB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGjE;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IACjD,CAAC,SAAS,WAAW,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAEjB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGjE;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IACjD,CAAC,SAAS,WAAW,CAAC,IAAI,GACxB,CAAC,MAAM,CAAC,GACR,CAAC,SAAS,WAAW,CAAC,YAAY,GAClC,CAAC,MAAM,CAAC,GACR,CAAC,SAAS,WAAW,CAAC,UAAU,GAChC,CAAC,YAAY,CAAC,GACd,CAAC,SAAS,WAAW,CAAC,MAAM,GAC5B,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACnC,CAAC,SAAS,WAAW,CAAC,UAAU,GAChC,CAAC,OAAO,CAAC,GACT,CAAC,SAAS,WAAW,CAAC,KAAK,GAC3B,CAAC,aAAa,CAAC,GACf,EAAE,CAAA;AAEN;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CACtD,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAC1B,IAAI,CAAA;AAeT;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,CAAA;AAI3D;;;;;;;GAOG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,OAAO,CAAqB;IAEpC,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,MAAM,EAAE,YAAY;IAOhC;;;;OAIG;IACH,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAIlE;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAInE;;;;;;;;;OASG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAIvC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI;IAgB1C;;OAEG;IACH,OAAO;IAQP;;;;;;OAMG;IACH,cAAc,IAAI,MAAM;IAOxB;;;;;;OAMG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;;OAKG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,IAAI,CAAC,YAAY,EAAE,iBAAiB,EAAE;IAyBtC;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,MAAM;IAIN;;OAEG;IACH,KAAK;IAIL;;OAEG;IACH,IAAI;IAIJ;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa;IAI7B;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB;;;OAGG;IACH,SAAS,IAAI,MAAM;IAMnB;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM;IAMxB;;OAEG;IACH,IAAI;IAIJ;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,uBAAuB;IAgBrD;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAOpC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAUnC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAgC;IAE1D,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;YAMJ,MAAM;IAkBpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,MAAM,CAgCb;IAED,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,iBAAiB;CA+B1B"}
|
|
@@ -190,8 +190,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
190
190
|
'touchmove .bar-container[data-seekbar]': string;
|
|
191
191
|
'mouseleave .bar-container[data-seekbar]': string;
|
|
192
192
|
'touchend .bar-container[data-seekbar]': string;
|
|
193
|
-
'mouseenter .media-control-layer[data-controls]': string;
|
|
194
|
-
'mouseleave .media-control-layer[data-controls]': string;
|
|
195
193
|
};
|
|
196
194
|
get currentSeekPos(): number;
|
|
197
195
|
/**
|
|
@@ -249,6 +247,9 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
249
247
|
private mousemoveOnVolumeBar;
|
|
250
248
|
private playerResize;
|
|
251
249
|
private togglePlayPause;
|
|
250
|
+
private play;
|
|
251
|
+
private pause;
|
|
252
|
+
private stop;
|
|
252
253
|
private togglePlayStop;
|
|
253
254
|
private startSeekDrag;
|
|
254
255
|
private startVolumeDrag;
|
|
@@ -274,8 +275,6 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
274
275
|
private renderSeekBar;
|
|
275
276
|
private drawDurationAndPosition;
|
|
276
277
|
private seek;
|
|
277
|
-
private setUserKeepVisible;
|
|
278
|
-
private resetUserKeepVisible;
|
|
279
278
|
private isVisible;
|
|
280
279
|
private show;
|
|
281
280
|
private hide;
|
|
@@ -334,8 +333,7 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
334
333
|
/**
|
|
335
334
|
* Set or reset the keep visibility state
|
|
336
335
|
*
|
|
337
|
-
* Keep visibility state controls whether the media control is hidden automatically after a delay.
|
|
338
|
-
* Keep visibility prevents the the auto-hide behaviour
|
|
336
|
+
* Keep visibility state controls whether the media control is hidden automatically after a delay, which is a default behaviour.
|
|
339
337
|
*
|
|
340
338
|
* @param keepVisible - The state
|
|
341
339
|
*/
|
|
@@ -363,6 +361,7 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
363
361
|
* @internal
|
|
364
362
|
*/
|
|
365
363
|
destroy(): import("@clappr/core").UIObject;
|
|
364
|
+
private cancelTimers;
|
|
366
365
|
private cancelRenderTimer;
|
|
367
366
|
private configure;
|
|
368
367
|
/**
|
|
@@ -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;
|
|
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;AAM5C,OAAO,kDAAkD,CAAA;AA0BzD;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GACnC,UAAU,GACV,YAAY,GACZ,cAAc,GACd,WAAW,GACX,UAAU,GACV,UAAU,GACV,SAAS,GACT,QAAQ,CAAA;AAEZ;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,CAAA;AAEb;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAExC;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,mBAAmB,EAAE,CAAA;IAC3B,KAAK,EAAE,mBAAmB,EAAE,CAAA;IAC5B,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAuBD;;;GAGG;AACH,oBAAY,cAAc;IACxB,mBAAmB,wBAAwB;IAC3C,0BAA0B,+BAA+B;CAC1D;AAID;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAG5C,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,wBAAwB,CAAI;IAGpC,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,0BAA0B,CAAsB;IAExD,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,OAAO,CAAC,6BAA6B,CAAQ;IAE7C,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,YAAY,CAA6C;IAEjE,OAAO,CAAC,cAAc,CAAM;IAE5B,OAAO,CAAC,WAAW,CAAQ;IAE3B,OAAO,CAAC,IAAI,CAAM;IAElB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,aAAa,CAA6C;IAElE,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,QAAQ,CAAyC;IAEzD,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,eAAe,CAAQ;IAE/B,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,cAAc,CAA2B;IAEjD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,mBAAmB,CAA2B;IAEtD,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,OAAO,CAAC,cAAc,CAA2B;IAEjD,OAAO,CAAC,kBAAkB,CAA2B;IAErD,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,WAAW,CAA2B;IAE9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,eAAe;IAItB;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC;;;;;IAQ7D,OAAO,KAAK,QAAQ,GAMnB;IAED;;;OAGG;IACH,IAAI,SAAS,QAEZ;IAED;;;OAGG;IACH,IAAI,QAAQ,QAEX;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;MA0BlB;IAED,IAAI,cAAc,WAEjB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAInB;IAED;;OAEG;IACH,IAAI,KAAK,YAER;gBAEW,IAAI,EAAE,IAAI;IAqBtB;;;OAGG;IACM,oBAAoB;2BAgdZ,MAAM;;;IAzcvB;;OAEG;IACM,UAAU;IAqCnB,OAAO,CAAC,mBAAmB;IAwF3B;;OAEG;IACM,OAAO;IAOhB;;OAEG;IACM,MAAM;IAaf;;;;;OAKG;IACH,kBAAkB;IAMlB;;OAEG;IACH,uBAAuB;IAIvB;;OAEG;IACH,gBAAgB;IAOhB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,cAAc;IAwDtB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ,CAUf;IAED,OAAO,CAAC,UAAU,CAkBjB;IAED,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,UAAU;IAIlB;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,UAAQ;IAgChD,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,wBAAwB;IAqChC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,IAAI;IAiBZ,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,IAAI;IAiCZ,OAAO,CAAC,IAAI;IAkCZ,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,oBAAoB;IA6B5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAS3D;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,WAAW;IAI5D;;;;;;OAMG;IACH,cAAc,CAAC,WAAW,EAAE,OAAO;IAKnC,OAAO,CAAC,cAAc;IAiBtB;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO;IAItD,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACM,OAAO;IAWhB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACM,MAAM;IAoEf,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,MAAM,CAAC,QAAQ;IAIvB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAevB,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,SAAS,CAA0D;CAC5E"}
|
|
@@ -11,6 +11,8 @@ import { Kibo } from '../kibo/index.js';
|
|
|
11
11
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
12
12
|
import { getPageX } from '../utils.js';
|
|
13
13
|
import { fullscreenEnabled, isFullscreen } from '../utils/fullscreen.js';
|
|
14
|
+
import { isMobile } from '../utils/mobile.js';
|
|
15
|
+
import { mediaControlClickaway } from '../../utils/clickaway.js';
|
|
14
16
|
import '../../../assets/media-control/media-control.scss';
|
|
15
17
|
import mediaControlHTML from '../../../assets/media-control/media-control.ejs';
|
|
16
18
|
import playIcon from '../../../assets/icons/new/play.svg';
|
|
@@ -20,7 +22,6 @@ import volumeMaxIcon from '../../../assets/icons/new/volume-max.svg';
|
|
|
20
22
|
import volumeOffIcon from '../../../assets/icons/new/volume-off.svg';
|
|
21
23
|
import fullscreenOffIcon from '../../../assets/icons/new/fullscreen-off.svg';
|
|
22
24
|
import fullscreenOnIcon from '../../../assets/icons/new/fullscreen-on.svg';
|
|
23
|
-
import { mediaControlClickaway } from '../../utils/clickaway.js';
|
|
24
25
|
const STANDARD_MEDIA_CONTROL_ELEMENTS = [
|
|
25
26
|
'duration',
|
|
26
27
|
'fullscreen',
|
|
@@ -231,8 +232,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
231
232
|
'touchmove .bar-container[data-seekbar]': 'mousemoveOnSeekBar',
|
|
232
233
|
'mouseleave .bar-container[data-seekbar]': 'mouseleaveOnSeekBar',
|
|
233
234
|
'touchend .bar-container[data-seekbar]': 'mouseleaveOnSeekBar',
|
|
234
|
-
'mouseenter .media-control-layer[data-controls]': 'setUserKeepVisible',
|
|
235
|
-
'mouseleave .media-control-layer[data-controls]': 'resetUserKeepVisible',
|
|
236
235
|
};
|
|
237
236
|
}
|
|
238
237
|
get currentSeekPos() {
|
|
@@ -314,7 +313,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
314
313
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_PAUSE, this.changeTogglePlay);
|
|
315
314
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_STOP, this.changeTogglePlay);
|
|
316
315
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_DBLCLICK, this.toggleFullscreen);
|
|
317
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_CLICK, () => this.clickaway(this.core.activeContainer.$el[0]));
|
|
318
316
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
319
317
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_PROGRESS, this.updateProgressBar);
|
|
320
318
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_SETTINGSUPDATE, this.updateSettings);
|
|
@@ -328,12 +326,10 @@ export class MediaControl extends UICorePlugin {
|
|
|
328
326
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadata);
|
|
329
327
|
this.listenTo(this.core, Events.CONTAINER_DESTROYED, () => {
|
|
330
328
|
this.cancelRenderTimer();
|
|
329
|
+
this.setKeepVisible(false);
|
|
331
330
|
});
|
|
332
331
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_MOUSE_ENTER, this.show);
|
|
333
332
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_MOUSE_LEAVE, this.delayHide);
|
|
334
|
-
this.listenTo(this.core.activeContainer, Events.CONTAINER_DESTROYED, () => {
|
|
335
|
-
this.clickaway(null);
|
|
336
|
-
});
|
|
337
333
|
}
|
|
338
334
|
/**
|
|
339
335
|
* Hides the media control UI
|
|
@@ -464,7 +460,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
464
460
|
this.$playPauseToggle?.append(playIcon);
|
|
465
461
|
this.$playStopToggle?.append(playIcon);
|
|
466
462
|
this.trigger(Events.MEDIACONTROL_NOTPLAYING);
|
|
467
|
-
if (
|
|
463
|
+
if (isMobile()) {
|
|
468
464
|
this.show();
|
|
469
465
|
}
|
|
470
466
|
}
|
|
@@ -510,14 +506,14 @@ export class MediaControl extends UICorePlugin {
|
|
|
510
506
|
width: this.container.$el.width(),
|
|
511
507
|
height: this.container.$el.height(),
|
|
512
508
|
hideVolumeBar: this.options.hideVolumeBar,
|
|
513
|
-
isMobile:
|
|
509
|
+
isMobile: isMobile(),
|
|
514
510
|
});
|
|
515
511
|
try {
|
|
516
512
|
const skinWidth = this.container.$el.width() || size.width;
|
|
517
513
|
if (skinWidth <= 370 || this.options.hideVolumeBar) {
|
|
518
514
|
this.$el.addClass('w370');
|
|
519
515
|
}
|
|
520
|
-
if (skinWidth <= 270 && !
|
|
516
|
+
if (skinWidth <= 270 && !isMobile()) {
|
|
521
517
|
this.verticalVolume = true;
|
|
522
518
|
this.$el.addClass('w270');
|
|
523
519
|
}
|
|
@@ -530,6 +526,15 @@ export class MediaControl extends UICorePlugin {
|
|
|
530
526
|
this.container.isPlaying() ? this.container.pause() : this.container.play();
|
|
531
527
|
return false;
|
|
532
528
|
}
|
|
529
|
+
play() {
|
|
530
|
+
this.container && this.container.play();
|
|
531
|
+
}
|
|
532
|
+
pause() {
|
|
533
|
+
this.container && this.container.pause();
|
|
534
|
+
}
|
|
535
|
+
stop() {
|
|
536
|
+
this.container && this.container.stop();
|
|
537
|
+
}
|
|
533
538
|
togglePlayStop() {
|
|
534
539
|
this.container.isPlaying()
|
|
535
540
|
? this.container.stop({ ui: true })
|
|
@@ -630,11 +635,11 @@ export class MediaControl extends UICorePlugin {
|
|
|
630
635
|
}
|
|
631
636
|
}
|
|
632
637
|
toggleFullscreen() {
|
|
633
|
-
if (!
|
|
638
|
+
if (!isMobile()) {
|
|
634
639
|
this.trigger(Events.MEDIACONTROL_FULLSCREEN, this.name);
|
|
635
640
|
this.core.activeContainer.fullscreen();
|
|
636
641
|
this.core.toggleFullscreen();
|
|
637
|
-
this.resetUserKeepVisible()
|
|
642
|
+
// this.resetUserKeepVisible()
|
|
638
643
|
}
|
|
639
644
|
}
|
|
640
645
|
onActiveContainerChanged() {
|
|
@@ -755,13 +760,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
755
760
|
this.core.activeContainer && this.core.activeContainer.seekPercentage(pos);
|
|
756
761
|
this.setSeekPercentage(pos);
|
|
757
762
|
}
|
|
758
|
-
setUserKeepVisible(e) {
|
|
759
|
-
this.userKeepVisible = true;
|
|
760
|
-
this.clickaway(this.core.activeContainer.$el[0]);
|
|
761
|
-
}
|
|
762
|
-
resetUserKeepVisible = (e) => {
|
|
763
|
-
this.userKeepVisible = false;
|
|
764
|
-
};
|
|
765
763
|
isVisible() {
|
|
766
764
|
return !this.$el.hasClass('media-control-hide');
|
|
767
765
|
}
|
|
@@ -769,7 +767,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
769
767
|
if (this.disabled || this.options.disableControlPanel) {
|
|
770
768
|
return;
|
|
771
769
|
}
|
|
772
|
-
const timeout = DEFAULT_HIDE_DELAY;
|
|
773
770
|
const mousePointerMoved = event &&
|
|
774
771
|
event.clientX !== this.lastMouseX &&
|
|
775
772
|
event.clientY !== this.lastMouseY;
|
|
@@ -778,26 +775,25 @@ export class MediaControl extends UICorePlugin {
|
|
|
778
775
|
clearTimeout(this.hideId);
|
|
779
776
|
this.hideId = null;
|
|
780
777
|
}
|
|
778
|
+
this.hideId = setTimeout(() => this.hide(), DEFAULT_HIDE_DELAY);
|
|
781
779
|
this.$el.show();
|
|
782
780
|
this.trigger(Events.MEDIACONTROL_SHOW, this.name);
|
|
783
781
|
this.core.activeContainer?.trigger(Events.CONTAINER_MEDIACONTROL_SHOW, this.name);
|
|
784
782
|
this.$el.removeClass('media-control-hide');
|
|
785
|
-
this.hideId = setTimeout(() => this.hide(), timeout);
|
|
786
783
|
if (event) {
|
|
787
784
|
this.lastMouseX = event.clientX;
|
|
788
785
|
this.lastMouseY = event.clientY;
|
|
789
786
|
}
|
|
790
787
|
}
|
|
791
|
-
|
|
792
|
-
this.updateCursorStyle(showing);
|
|
788
|
+
this.updateCursorStyle(true);
|
|
793
789
|
}
|
|
794
790
|
hide(delay = 0) {
|
|
795
791
|
if (!this.isVisible()) {
|
|
796
792
|
return;
|
|
797
793
|
}
|
|
798
|
-
const timeout = delay || 2000;
|
|
799
794
|
if (this.hideId !== null) {
|
|
800
795
|
clearTimeout(this.hideId);
|
|
796
|
+
this.hideId = null;
|
|
801
797
|
}
|
|
802
798
|
if (!this.disabled && this.options.hideMediaControl === false) {
|
|
803
799
|
return;
|
|
@@ -806,7 +802,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
806
802
|
const hasDraggingAction = this.draggingSeekBar || this.draggingVolumeBar;
|
|
807
803
|
if (!this.disabled &&
|
|
808
804
|
(delay || hasKeepVisibleRequested || hasDraggingAction)) {
|
|
809
|
-
this.hideId = setTimeout(() => this.hide(),
|
|
805
|
+
this.hideId = setTimeout(() => this.hide(), delay || 2000);
|
|
810
806
|
}
|
|
811
807
|
else {
|
|
812
808
|
if (!this.options.controlsDontHide || isFullscreen(this.container.el)) {
|
|
@@ -941,19 +937,13 @@ export class MediaControl extends UICorePlugin {
|
|
|
941
937
|
/**
|
|
942
938
|
* Set or reset the keep visibility state
|
|
943
939
|
*
|
|
944
|
-
* Keep visibility state controls whether the media control is hidden automatically after a delay.
|
|
945
|
-
* Keep visibility prevents the the auto-hide behaviour
|
|
940
|
+
* Keep visibility state controls whether the media control is hidden automatically after a delay, which is a default behaviour.
|
|
946
941
|
*
|
|
947
942
|
* @param keepVisible - The state
|
|
948
943
|
*/
|
|
949
944
|
setKeepVisible(keepVisible) {
|
|
950
945
|
this.keepVisible = keepVisible;
|
|
951
|
-
|
|
952
|
-
this.clickaway(this.core.activeContainer.$el[0]);
|
|
953
|
-
}
|
|
954
|
-
else {
|
|
955
|
-
this.clickaway(null);
|
|
956
|
-
}
|
|
946
|
+
this.clickaway(keepVisible ? this.core.activeContainer.$el[0] : null);
|
|
957
947
|
}
|
|
958
948
|
getMountParent(name) {
|
|
959
949
|
switch (name) {
|
|
@@ -1034,7 +1024,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1034
1024
|
});
|
|
1035
1025
|
}
|
|
1036
1026
|
bindKeyEvents() {
|
|
1037
|
-
if (
|
|
1027
|
+
if (isMobile() || this.options.disableKeyboardShortcuts) {
|
|
1038
1028
|
return;
|
|
1039
1029
|
}
|
|
1040
1030
|
this.unbindKeyEvents();
|
|
@@ -1121,6 +1111,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1121
1111
|
* @internal
|
|
1122
1112
|
*/
|
|
1123
1113
|
destroy() {
|
|
1114
|
+
this.cancelTimers();
|
|
1124
1115
|
this.cancelRenderTimer();
|
|
1125
1116
|
$(document).unbind('mouseup', this.stopDrag);
|
|
1126
1117
|
$(document).unbind('mousemove', this.updateDrag);
|
|
@@ -1129,6 +1120,17 @@ export class MediaControl extends UICorePlugin {
|
|
|
1129
1120
|
this.unbindKeyEvents();
|
|
1130
1121
|
return super.destroy();
|
|
1131
1122
|
}
|
|
1123
|
+
cancelTimers() {
|
|
1124
|
+
if (this.hideId !== null) {
|
|
1125
|
+
clearTimeout(this.hideId);
|
|
1126
|
+
this.hideId = null;
|
|
1127
|
+
}
|
|
1128
|
+
if (this.hideVolumeId !== null) {
|
|
1129
|
+
clearTimeout(this.hideVolumeId);
|
|
1130
|
+
this.hideVolumeId = null;
|
|
1131
|
+
}
|
|
1132
|
+
this.cancelRenderTimer();
|
|
1133
|
+
}
|
|
1132
1134
|
cancelRenderTimer() {
|
|
1133
1135
|
if (this.renderTimerId) {
|
|
1134
1136
|
clearTimeout(this.renderTimerId);
|
|
@@ -1158,7 +1160,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1158
1160
|
}
|
|
1159
1161
|
// Video volume cannot be changed with Safari on mobile devices
|
|
1160
1162
|
// Display mute/unmute icon only if Safari version >= 10
|
|
1161
|
-
if (Browser.isSafari &&
|
|
1163
|
+
if (Browser.isSafari && isMobile()) {
|
|
1162
1164
|
if (Browser.version < 10) {
|
|
1163
1165
|
this.$volumeContainer?.css({ display: 'none' });
|
|
1164
1166
|
}
|
|
@@ -1175,7 +1177,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1175
1177
|
setTimeout(() => {
|
|
1176
1178
|
!this.settings.seekEnabled &&
|
|
1177
1179
|
this.$seekBarContainer?.addClass('seek-disabled');
|
|
1178
|
-
!
|
|
1180
|
+
!isMobile() &&
|
|
1179
1181
|
!this.options.disableKeyboardShortcuts &&
|
|
1180
1182
|
this.bindKeyEvents();
|
|
1181
1183
|
this.playerResize({
|
|
@@ -1199,6 +1201,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1199
1201
|
this.container.fullscreen();
|
|
1200
1202
|
// TODO: fix after it full screen will be fixed on iOS
|
|
1201
1203
|
if (Browser.isiOS) {
|
|
1204
|
+
// TODO use isFullscreen utility function
|
|
1202
1205
|
if (this.core.isFullscreen()) {
|
|
1203
1206
|
Fullscreen.cancelFullscreen(this.core.el);
|
|
1204
1207
|
}
|
|
@@ -1209,7 +1212,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
1209
1212
|
else {
|
|
1210
1213
|
this.core.toggleFullscreen();
|
|
1211
1214
|
}
|
|
1212
|
-
this.resetUserKeepVisible();
|
|
1213
1215
|
}
|
|
1214
1216
|
static getPageX(event) {
|
|
1215
1217
|
return getPageX(event);
|
|
@@ -1254,7 +1256,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1254
1256
|
delayHide() {
|
|
1255
1257
|
this.hide(this.options.hideMediaControlDelay || DEFAULT_HIDE_DELAY);
|
|
1256
1258
|
}
|
|
1257
|
-
clickaway = mediaControlClickaway(() => this.
|
|
1259
|
+
clickaway = mediaControlClickaway(() => this.setKeepVisible(false));
|
|
1258
1260
|
}
|
|
1259
1261
|
MediaControl.extend = function (properties) {
|
|
1260
1262
|
return extend(MediaControl, properties);
|
|
@@ -11,6 +11,9 @@ export type ClosedCaptionsPluginSettings = {
|
|
|
11
11
|
language?: string;
|
|
12
12
|
/**
|
|
13
13
|
* Whether to use builtin subtitles.
|
|
14
|
+
*
|
|
15
|
+
* native: video player element renders the subtitles
|
|
16
|
+
* custom: plugin manages the subtitles rendition
|
|
14
17
|
*/
|
|
15
18
|
mode?: 'native' | 'custom';
|
|
16
19
|
};
|
|
@@ -50,9 +53,10 @@ export type ClosedCaptionsPluginSettings = {
|
|
|
50
53
|
* ```
|
|
51
54
|
*/
|
|
52
55
|
export declare class ClosedCaptions extends UICorePlugin {
|
|
53
|
-
private
|
|
56
|
+
private isSelectedApplied;
|
|
54
57
|
private active;
|
|
55
58
|
private open;
|
|
59
|
+
private userSelectedItemId;
|
|
56
60
|
private track;
|
|
57
61
|
private tracks;
|
|
58
62
|
private $line;
|
|
@@ -116,7 +120,7 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
116
120
|
private findById;
|
|
117
121
|
private selectItem;
|
|
118
122
|
private onItemSelect;
|
|
119
|
-
private
|
|
123
|
+
private applySelectedSubtitles;
|
|
120
124
|
private hideMenu;
|
|
121
125
|
private toggleMenu;
|
|
122
126
|
private setKeepVisible;
|
|
@@ -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;AAmB7C;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,kBAAkB,CAAa;IAEvC,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,GAI9B;IAED,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACM,UAAU;IAWnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,kBAAkB;IAiD1B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,IAAI;IAYJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA+Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAKtB,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;IAOb,OAAO,KAAK,kBAAkB,GAO7B;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,YAAY,QAEvB;IAED,OAAO,KAAK,aAAa,QAMxB;IAED,OAAO,CAAC,SAAS,CAA+C;CACjE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Events, UICorePlugin, Browser, template, $ } from '@clappr/core';
|
|
2
|
-
import { reportError
|
|
2
|
+
import { reportError } from '@gcorevideo/utils';
|
|
3
3
|
import assert from 'assert';
|
|
4
4
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
5
5
|
import '../../../assets/subtitles/style.scss';
|
|
@@ -11,7 +11,8 @@ import { isFullscreen } from '../utils/fullscreen.js';
|
|
|
11
11
|
import { ExtendedEvents } from '../media-control/MediaControl.js';
|
|
12
12
|
import { mediaControlClickaway } from '../../utils/clickaway.js';
|
|
13
13
|
const VERSION = '2.19.14';
|
|
14
|
-
|
|
14
|
+
// TODO review
|
|
15
|
+
// const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected'
|
|
15
16
|
const T = 'plugins.cc';
|
|
16
17
|
/**
|
|
17
18
|
* `PLUGIN` that provides a UI to select the subtitles when available.
|
|
@@ -49,9 +50,10 @@ const T = 'plugins.cc';
|
|
|
49
50
|
* ```
|
|
50
51
|
*/
|
|
51
52
|
export class ClosedCaptions extends UICorePlugin {
|
|
52
|
-
|
|
53
|
+
isSelectedApplied = false;
|
|
53
54
|
active = false;
|
|
54
55
|
open = false;
|
|
56
|
+
userSelectedItemId = -1;
|
|
55
57
|
track = null;
|
|
56
58
|
tracks = [];
|
|
57
59
|
$line = null;
|
|
@@ -149,10 +151,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
149
151
|
video.classList.remove('ios-fullscreen');
|
|
150
152
|
}
|
|
151
153
|
});
|
|
152
|
-
this.
|
|
154
|
+
this.isSelectedApplied = false;
|
|
153
155
|
}
|
|
154
156
|
onPlaybackReady() {
|
|
155
|
-
trace(`${T} onPlaybackReady`);
|
|
156
157
|
this.core.activePlayback.oncueenter = (e) => {
|
|
157
158
|
this.setSubtitleText(e.text);
|
|
158
159
|
};
|
|
@@ -173,7 +174,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
173
174
|
this.activateTrack(id);
|
|
174
175
|
}
|
|
175
176
|
activateTrack(id) {
|
|
176
|
-
if (['dash', 'hls'].includes(this.core.activePlayback
|
|
177
|
+
if (this.core.activePlayback && ['dash', 'hls'].includes(this.core.activePlayback.name)) {
|
|
177
178
|
this.core.activePlayback.setTextTrack(id);
|
|
178
179
|
return;
|
|
179
180
|
}
|
|
@@ -211,7 +212,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
211
212
|
try {
|
|
212
213
|
// TODO ensure to apply only once
|
|
213
214
|
this.currentTracks = this.core.activePlayback.closedCaptionsTracks;
|
|
214
|
-
this.
|
|
215
|
+
this.applySelectedSubtitles();
|
|
215
216
|
this.render();
|
|
216
217
|
}
|
|
217
218
|
catch (error) {
|
|
@@ -318,22 +319,36 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
318
319
|
}
|
|
319
320
|
onItemSelect(event) {
|
|
320
321
|
// event.target does not exist for some reason in tests
|
|
321
|
-
const id = (event.target ?? event.currentTarget).dataset?.item ??
|
|
322
|
-
'-1';
|
|
323
|
-
|
|
324
|
-
|
|
322
|
+
const id = Number((event.target ?? event.currentTarget).dataset?.item ??
|
|
323
|
+
'-1');
|
|
324
|
+
// TODO review, make configurable, and emit event in addition
|
|
325
|
+
// localStorage.setItem(LOCAL_STORAGE_CC_ID, id) // TODO store language instead?
|
|
326
|
+
this.userSelectedItemId = id;
|
|
327
|
+
this.selectItem(this.findById(id));
|
|
325
328
|
this.hideMenu();
|
|
326
329
|
return false;
|
|
327
330
|
}
|
|
328
|
-
|
|
329
|
-
if (
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
331
|
+
applySelectedSubtitles() {
|
|
332
|
+
if (this.isSelectedApplied) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
this.isSelectedApplied = true;
|
|
336
|
+
// If user selected a language, activate that
|
|
337
|
+
// Otherwise, if there is no configured language, then let the engine decide
|
|
338
|
+
// To hide the subtitles initially forcefully, set the language to 'none'
|
|
339
|
+
let matcher;
|
|
340
|
+
if (this.userSelectedItemId !== -1) {
|
|
341
|
+
matcher = (track) => track.id === this.userSelectedItemId;
|
|
342
|
+
}
|
|
343
|
+
else if (this.preselectedLanguage) {
|
|
344
|
+
matcher = (track) => this.isPreselectedLanguage(track.track.language);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
return;
|
|
336
348
|
}
|
|
349
|
+
setTimeout(() => {
|
|
350
|
+
this.selectItem(this.tracks.find(matcher) ?? null);
|
|
351
|
+
}, 0);
|
|
337
352
|
}
|
|
338
353
|
hideMenu() {
|
|
339
354
|
this.open = false;
|
|
@@ -367,10 +382,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
367
382
|
return this.$el.find('#gplayer-cc-menu li'); // TODO fix semantically
|
|
368
383
|
}
|
|
369
384
|
selectSubtitles() {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
// this.core.activePlayback.closedCaptionsTrackId = -1
|
|
385
|
+
if (this.currentTrack) {
|
|
386
|
+
this.core.activePlayback.closedCaptionsTrackId = this.currentTrack.id;
|
|
387
|
+
}
|
|
374
388
|
}
|
|
375
389
|
getSubtitleText(track) {
|
|
376
390
|
const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../../../src/plugins/utils/mobile.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,YAEvB"}
|
package/lib/testUtils.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare function createMockCore(options?: Record<string, unknown>, contai
|
|
|
15
15
|
configure: import("vitest").Mock<(...args: any[]) => any>;
|
|
16
16
|
getPlaybackType: import("vitest").Mock<(...args: any[]) => any>;
|
|
17
17
|
getPlugin: import("vitest").Mock<(...args: any[]) => any>;
|
|
18
|
+
isFullscreen: import("vitest").Mock<(...args: any[]) => any>;
|
|
18
19
|
load: import("vitest").Mock<(...args: any[]) => any>;
|
|
19
20
|
trigger: <T extends string | symbol>(event: T, ...args: any[]) => boolean;
|
|
20
21
|
};
|
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
|
|
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;;;;;;;;;;;;;;;;;;EAuB9C;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAChC,IAAI,SAAS,EACb,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCtC;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAAgD;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBAyB/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAe7C"}
|
package/lib/testUtils.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gcorevideo/player",
|
|
3
|
-
"version": "2.28.
|
|
3
|
+
"version": "2.28.35",
|
|
4
4
|
"description": "Gcore JavaScript video player",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -66,5 +66,8 @@
|
|
|
66
66
|
"human-format": "^1.2.1",
|
|
67
67
|
"mousetrap": "^1.6.5",
|
|
68
68
|
"videojs-vtt.js": "^0.15.5"
|
|
69
|
+
},
|
|
70
|
+
"overrides": {
|
|
71
|
+
"ua-parser-js": "^1.0.0"
|
|
69
72
|
}
|
|
70
73
|
}
|
package/src/Player.ts
CHANGED
|
@@ -32,18 +32,18 @@ import { SourceController } from './plugins/source-controller/SourceController.j
|
|
|
32
32
|
*/
|
|
33
33
|
export type PlayerEventParams<E extends PlayerEvent> =
|
|
34
34
|
E extends PlayerEvent.Seek
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
? [number]
|
|
36
|
+
: E extends PlayerEvent.VolumeUpdate
|
|
37
|
+
? [number]
|
|
38
|
+
: E extends PlayerEvent.TimeUpdate
|
|
39
|
+
? [TimePosition]
|
|
40
|
+
: E extends PlayerEvent.Resize
|
|
41
|
+
? [{ width: number; height: number }]
|
|
42
|
+
: E extends PlayerEvent.Fullscreen
|
|
43
|
+
? [boolean]
|
|
44
|
+
: E extends PlayerEvent.Error
|
|
45
|
+
? [PlaybackError]
|
|
46
|
+
: []
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* Type of a listener callback function for a player event.
|