@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.
Files changed (45) hide show
  1. package/assets/audio-tracks/template.ejs +5 -4
  2. package/assets/bottom-gear/gear-sub-menu.scss +4 -9
  3. package/assets/bottom-gear/gear.scss +1 -2
  4. package/assets/media-control/container.scss +0 -13
  5. package/assets/media-control/media-control.scss +110 -8
  6. package/assets/media-control/width270.scss +3 -9
  7. package/assets/media-control/width370.scss +6 -40
  8. package/assets/multi-camera/style.scss +0 -5
  9. package/assets/picture-in-picture/style.scss +1 -2
  10. package/assets/subtitles/combobox.ejs +27 -6
  11. package/assets/subtitles/string.ejs +1 -1
  12. package/assets/subtitles/style.scss +16 -69
  13. package/dist/core.js +1 -1
  14. package/dist/index.css +1019 -1117
  15. package/dist/index.embed.js +180 -123
  16. package/dist/index.js +161 -107
  17. package/lib/plugins/audio-selector/AudioTracks.d.ts +4 -3
  18. package/lib/plugins/audio-selector/AudioTracks.d.ts.map +1 -1
  19. package/lib/plugins/audio-selector/AudioTracks.js +41 -23
  20. package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -1
  21. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
  22. package/lib/plugins/bottom-gear/BottomGear.js +3 -4
  23. package/lib/plugins/media-control/MediaControl.d.ts +4 -0
  24. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
  25. package/lib/plugins/media-control/MediaControl.js +8 -1
  26. package/lib/plugins/subtitles/ClosedCaptions.d.ts +7 -4
  27. package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
  28. package/lib/plugins/subtitles/ClosedCaptions.js +64 -34
  29. package/lib/testUtils.d.ts.map +1 -1
  30. package/lib/testUtils.js +2 -0
  31. package/package.json +1 -1
  32. package/src/plugins/audio-selector/AudioTracks.ts +53 -29
  33. package/src/plugins/audio-selector/__tests__/AudioTracks.test.ts +60 -45
  34. package/src/plugins/audio-selector/__tests__/__snapshots__/AudioSelector.test.ts.snap +24 -24
  35. package/src/plugins/audio-selector/__tests__/__snapshots__/AudioTracks.test.ts.snap +21 -18
  36. package/src/plugins/bottom-gear/BottomGear.ts +3 -4
  37. package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +1 -1
  38. package/src/plugins/media-control/MediaControl.ts +11 -1
  39. package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +6 -6
  40. package/src/plugins/subtitles/ClosedCaptions.ts +66 -35
  41. package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +220 -35
  42. package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +8 -19
  43. package/src/testUtils.ts +2 -0
  44. package/tsconfig.tsbuildinfo +1 -1
  45. 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-audiotracks-select]': string;
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;AAO7D,OAAO,yCAAyC,CAAA;AAUhD;;;;;;;;;GASG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,YAAY,CAA0B;IAE9C,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;IAcnB,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACM,MAAM;IAmBf,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IAOlB,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;CAe9B"}
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-audiotracks-select]': 'onTrackSelect',
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
- mediaControl.slot('audiotracks', this.$el);
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?.audiotracksSelect;
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
- trace(`${T} hideMenu`);
133
- this.$el.find('#audiotracks-select').addClass('hidden');
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.core.getPlugin('media_control').trigger(ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, this.name);
138
- this.$el.find('#audiotracks-select').toggleClass('hidden'); // TODO use plain CSS display: none
139
- const open = !this.$el.find('#audiotracks-select').hasClass('hidden'); // TODO hold state
140
- this.$el.find('#audiotracks-button').attr('aria-expanded', open);
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 .audio-text');
159
+ return this.$el.find('#gplayer-audiotracks-button-text');
147
160
  }
148
161
  trackElement(id) {
149
- return this.$('#audiotracks-select a' +
150
- (id !== undefined ? `[data-audiotracks-select="${id}"]` : '')).parent();
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
  }
@@ -156,6 +156,6 @@ export declare class BottomGear extends UICorePlugin {
156
156
  private onCoreReady;
157
157
  private onMediaControlRendered;
158
158
  private mount;
159
- private alignSubmenu;
159
+ private clampPopup;
160
160
  }
161
161
  //# sourceMappingURL=BottomGear.d.ts.map
@@ -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,YAAY;CASrB"}
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.alignSubmenu($subMenu);
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
- alignSubmenu($subMenu) {
276
- const availableHeight = this.core.getPlugin('media_control').getAvailableHeight() -
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":"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"}
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('gplayer-mc-panel-item');
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 template;
61
- private static readonly templateString;
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-select li a': string;
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,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;IAmBnB,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;IA2Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,UAAU;IASlB,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"}
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 template = template(comboboxHTML);
67
- static templateString = template(stringHTML);
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-select li a': 'onItemSelect',
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.render); // TODO mount to media control
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
- if (!this.shouldRender()) {
253
- return this;
254
- }
255
- const mediaControl = this.core.getPlugin('media_control');
256
- this.$el.html(ClosedCaptions.template({ tracks: this.tracks, i18n: this.core.i18n }));
257
- this.$el.find('#cc-select').hide();
258
- this.core.activeContainer.$el.find('#cc-line').remove();
259
- this.$line = $(ClosedCaptions.templateString());
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
- const id = event.target.dataset.ccSelect ?? '-1';
277
- trace(`${T} onItemSelect`, { id });
278
- localStorage.setItem(LOCAL_STORAGE_CC_ID, id);
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
- trace(`${T} hideMenu`);
296
- this.$el.find('#cc-select').hide();
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.$el.find('#cc-select').toggle();
304
- // TODO hold state, add aria-expanded to the button, add active state to the button
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
- return this.$el.find(`#cc-select li a[data-cc-select="${id}"]`).parent();
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-select li');
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
- trace(`${T} highlightCurrentSubtitles`, {
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('span.cc-text').html(icon);
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
  }
@@ -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,gBAqB/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAe7C"}
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.25.6",
3
+ "version": "2.25.8",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",