@gcorevideo/player 2.28.3 → 2.28.6

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 (52) hide show
  1. package/dist/core.js +1 -1
  2. package/dist/index.css +507 -507
  3. package/dist/index.js +1 -1
  4. package/package.json +2 -2
  5. package/tsconfig.tsbuildinfo +1 -1
  6. package/coverage/clover.xml +0 -6
  7. package/coverage/coverage-final.json +0 -1
  8. package/coverage/lcov-report/base.css +0 -224
  9. package/coverage/lcov-report/block-navigation.js +0 -87
  10. package/coverage/lcov-report/favicon.png +0 -0
  11. package/coverage/lcov-report/index.html +0 -101
  12. package/coverage/lcov-report/prettify.css +0 -1
  13. package/coverage/lcov-report/prettify.js +0 -2
  14. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/coverage/lcov-report/sorter.js +0 -196
  16. package/coverage/lcov.info +0 -0
  17. package/dist/player.d.ts +0 -3369
  18. package/lib/playback/utils.d.ts +0 -2
  19. package/lib/playback/utils.d.ts.map +0 -1
  20. package/lib/playback/utils.js +0 -1
  21. package/lib/plugins/audio-selector/AudioSelector.d.ts +0 -67
  22. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +0 -1
  23. package/lib/plugins/audio-selector/AudioSelector.js +0 -172
  24. package/lib/plugins/build.d.ts +0 -2
  25. package/lib/plugins/build.d.ts.map +0 -1
  26. package/lib/plugins/build.js +0 -1
  27. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts +0 -83
  28. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +0 -1
  29. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +0 -339
  30. package/lib/plugins/disable-controls/DisableControls.d.ts +0 -15
  31. package/lib/plugins/disable-controls/DisableControls.d.ts.map +0 -1
  32. package/lib/plugins/disable-controls/DisableControls.js +0 -67
  33. package/lib/plugins/index.d.ts +0 -35
  34. package/lib/plugins/index.d.ts.map +0 -1
  35. package/lib/plugins/index.js +0 -37
  36. package/lib/plugins/level-selector/LevelSelector.d.ts +0 -112
  37. package/lib/plugins/level-selector/LevelSelector.d.ts.map +0 -1
  38. package/lib/plugins/level-selector/LevelSelector.js +0 -280
  39. package/lib/plugins/statistics/Statistics.d.ts +0 -87
  40. package/lib/plugins/statistics/Statistics.d.ts.map +0 -1
  41. package/lib/plugins/statistics/Statistics.js +0 -172
  42. package/lib/plugins/subtitles/Subtitles.d.ts +0 -115
  43. package/lib/plugins/subtitles/Subtitles.d.ts.map +0 -1
  44. package/lib/plugins/subtitles/Subtitles.js +0 -345
  45. package/lib/tsdoc-metadata.json +0 -11
  46. package/lib/utils/fullscreen.d.ts +0 -3
  47. package/lib/utils/fullscreen.d.ts.map +0 -1
  48. package/lib/utils/fullscreen.js +0 -2
  49. package/release.txt +0 -395
  50. package/release_notes +0 -297
  51. package/src/plugins/telemetry/Statistics copy.js +0 -296
  52. package/temp/player.api.json +0 -10275
@@ -1,172 +0,0 @@
1
- // An example implementation of client side performancestatistics
2
- import { ContainerPlugin, Events, Playback } from '@clappr/core';
3
- import { reportError, trace } from '@gcorevideo/utils';
4
- import assert from 'assert';
5
- import { CLAPPR_VERSION } from '../../build.js';
6
- // const CUSTOM_EVENTS_CONTAINER_START = 'container:start'
7
- const WATCH_CUTOFF = 5;
8
- const HEATMAP_INTERVAL = 10;
9
- const T = 'plugins.statistics';
10
- /**
11
- * Collects and reports the performance statistics.
12
- * @beta
13
- * @example
14
- * ```ts
15
- * import { Statistics } from '@gcorevideo/player'
16
- *
17
- * Player.registerPlugin(Statistics)
18
- *
19
- * const player = new Player({
20
- * statistics: {
21
- * send: (data) => {
22
- * fetch('/stats', {
23
- * method: 'POST',
24
- * body: JSON.stringify(data),
25
- * headers: { 'content-type': 'application/json' },
26
- * })
27
- * }
28
- * },
29
- * ...
30
- * })
31
- * ```
32
- */
33
- export class Statistics extends ContainerPlugin {
34
- /**
35
- * The name of the plugin.
36
- */
37
- get name() {
38
- return 'statistics';
39
- }
40
- /**
41
- * The supported version of the plugin.
42
- */
43
- get supportedVersion() {
44
- return { min: CLAPPR_VERSION };
45
- }
46
- started = false;
47
- timeStart = 0;
48
- heatmapSent = false;
49
- heatmapLastTime = 0;
50
- watchSent = false;
51
- bufTracking = false;
52
- lags = 0;
53
- /**
54
- * The time when buffering last started.
55
- */
56
- bufLastStarted = 0;
57
- /**
58
- * The accumulated buffering duration.
59
- */
60
- bufAccDuration = 0;
61
- constructor(container) {
62
- super(container);
63
- assert(this.options.statistics &&
64
- typeof this.options.statistics.send === 'function', 'Statistics plugin requires statistics options');
65
- }
66
- /**
67
- * @internal
68
- */
69
- bindEvents() {
70
- // TODO remove this
71
- // this.listenToOnce(
72
- // this.container,
73
- // CUSTOM_EVENTS_CONTAINER_START,
74
- // this.onStart,
75
- // )
76
- this.listenToOnce(this.container, Events.CONTAINER_READY, this.onReady);
77
- this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERING, this.onBuffering);
78
- this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERFULL, this.onBufferFull);
79
- this.listenTo(this.container.playback, Events.PLAYBACK_TIMEUPDATE, this.onTimeUpdateLive);
80
- this.listenTo(this.container.playback, Events.PLAYBACK_LEVEL_SWITCH_START, this.startLevelSwitch);
81
- this.listenTo(this.container.playback, Events.PLAYBACK_LEVEL_SWITCH_END, this.endLevelSwitch);
82
- }
83
- startLevelSwitch() {
84
- this.bufTracking = false;
85
- }
86
- endLevelSwitch() {
87
- this.bufTracking = true;
88
- }
89
- onBuffering() {
90
- if (this.bufTracking) {
91
- this.bufLastStarted = performance.now();
92
- }
93
- }
94
- onBufferFull() {
95
- if (this.bufTracking && this.bufLastStarted) {
96
- this.bufAccDuration += performance.now() - this.bufLastStarted;
97
- this.lags++;
98
- }
99
- this.bufTracking = true;
100
- }
101
- onReady() {
102
- this.sendInit();
103
- trace(`${T} onReady`, {
104
- autoPlay: this.options.autoPlay,
105
- });
106
- if (this.options.autoPlay) {
107
- this.onStart();
108
- }
109
- else {
110
- this.listenToOnce(this.container.playback, Events.PLAYBACK_PLAY_INTENT, this.onStart);
111
- }
112
- }
113
- sendInit() {
114
- this.sendMessage('init');
115
- }
116
- sendMessage(state) {
117
- this.send(state, {
118
- // embed_url: this.options.referer,
119
- // user_agent: Browser.userAgent
120
- });
121
- }
122
- send(event, data = {}) {
123
- ;
124
- this.options.statistics.send({
125
- event,
126
- type: this.container.getPlaybackType(),
127
- ...data,
128
- });
129
- }
130
- sendHeatmap(time) {
131
- const res = {
132
- buffering: Math.round(this.bufAccDuration),
133
- lags: this.lags,
134
- };
135
- this.bufAccDuration = 0;
136
- this.lags = 0;
137
- if (this.container.getPlaybackType() === Playback.VOD) {
138
- res.timestamp = time;
139
- }
140
- this.send('heatmap', res);
141
- this.heatmapSent = true;
142
- this.heatmapLastTime = time;
143
- }
144
- onTimeUpdateLive({ current }) {
145
- // TODO check the `current` values for the live streams
146
- if (!this.timeStart) {
147
- this.timeStart = current;
148
- }
149
- try {
150
- const elapsed = current - this.timeStart;
151
- const heatmapElapsed = current - this.heatmapLastTime;
152
- // TODO check if the heatmap is only needed for the live streams
153
- if (!this.heatmapSent || heatmapElapsed >= HEATMAP_INTERVAL) {
154
- this.sendHeatmap(current);
155
- }
156
- if (!this.watchSent && elapsed >= WATCH_CUTOFF) {
157
- this.watchSent = true;
158
- this.sendMessage('watch');
159
- }
160
- }
161
- catch (error) {
162
- reportError(error);
163
- }
164
- }
165
- onStart() {
166
- if (this.started) {
167
- return;
168
- }
169
- this.started = true;
170
- this.sendMessage('start');
171
- }
172
- }
@@ -1,115 +0,0 @@
1
- import { UICorePlugin } from '@clappr/core';
2
- import '../../../assets/subtitles/style.scss';
3
- export type ClosedCaptionsPluginSettings = {
4
- /**
5
- * Initially selected subtitles language
6
- */
7
- language?: string;
8
- };
9
- /**
10
- * @deprecated Use {@link ClosedCaptionsPluginSettings} instead.
11
- */
12
- export type SubtitlesPluginSettings = ClosedCaptionsPluginSettings;
13
- /**
14
- * `PLUGIN` that provides a UI to select the subtitles when available.
15
- * @beta
16
- *
17
- * @remarks
18
- * Depends on:
19
- *
20
- * - {@link MediaControl}
21
- *
22
- * Configuration options - {@link ClosedCaptionsPluginSettings}
23
- * @example
24
- * ```ts
25
- * import { ClosedCaptions } from '@gcorevideo/player'
26
- *
27
- * Player.registerPlugin(ClosedCaptions)
28
- *
29
- * new Player({
30
- * ...
31
- * cc: {
32
- * language: 'en',
33
- * },
34
- * })
35
- * ```
36
- */
37
- export declare class Subtitles extends UICorePlugin {
38
- private isPreselectedApplied;
39
- private isShowing;
40
- private track;
41
- private tracks;
42
- private $line;
43
- /**
44
- * @internal
45
- */
46
- get name(): string;
47
- /**
48
- * @internal
49
- */
50
- get supportedVersion(): {
51
- min: string;
52
- };
53
- /**
54
- * @internal
55
- */
56
- static get version(): string;
57
- private static readonly template;
58
- private static readonly templateString;
59
- /**
60
- * @internal
61
- */
62
- get attributes(): {
63
- class: string;
64
- };
65
- /**
66
- * @internal
67
- */
68
- get events(): {
69
- 'click [data-cc-select]': string;
70
- 'click [data-cc-button]': string;
71
- };
72
- private get preselectedLanguage();
73
- /**
74
- * @internal
75
- */
76
- bindEvents(): void;
77
- private onCoreReady;
78
- private onContainerChanged;
79
- private onSubtitleAvailable;
80
- private onSubtitleChanged;
81
- private applyTracks;
82
- private onStartAd;
83
- private onFinishAd;
84
- private playerResize;
85
- /**
86
- * Hides the subtitles menu and the subtitles.
87
- */
88
- hide(): void;
89
- /**
90
- * Shows the subtitles menu and the subtitles.
91
- */
92
- show(): void;
93
- private shouldRender;
94
- private resizeFont;
95
- /**
96
- * @internal
97
- */
98
- render(): this;
99
- private findById;
100
- private selectItem;
101
- private onItemSelect;
102
- private applyPreselectedSubtitles;
103
- private hideMenu;
104
- private toggleMenu;
105
- private itemElement;
106
- private allItemElements;
107
- private selectSubtitles;
108
- private getSubtitleText;
109
- private setSubtitleText;
110
- private clearSubtitleText;
111
- private updateSelection;
112
- private highlightCurrentSubtitles;
113
- private renderIcon;
114
- }
115
- //# sourceMappingURL=Subtitles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Subtitles.d.ts","sourceRoot":"","sources":["../../../src/plugins/subtitles/Subtitles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAwB,MAAM,cAAc,CAAA;AAOzE,OAAO,sCAAsC,CAAA;AAe7C,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,oBAAoB,CAAQ;IAEpC,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,KAAK,CAA6B;IAE1C,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,KAAK,CAA2B;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED,OAAO,KAAK,mBAAmB,GAE9B;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,kBAAkB;IAwC1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,IAAI;IAWJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA0Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;IAMnB,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;IAgBjC,OAAO,CAAC,UAAU;CAKnB"}
@@ -1,345 +0,0 @@
1
- import { Events, UICorePlugin, Browser, template, $ } from '@clappr/core';
2
- import { reportError, trace } from '@gcorevideo/utils';
3
- import assert from 'assert';
4
- import { CLAPPR_VERSION } from '../../build.js';
5
- import '../../../assets/subtitles/style.scss';
6
- import subtitlesOffIcon from '../../../assets/icons/new/subtitles-off.svg';
7
- import subtitlesOnIcon from '../../../assets/icons/new/subtitles-on.svg';
8
- import comboboxHTML from '../../../assets/subtitles/combobox.ejs';
9
- import stringHTML from '../../../assets/subtitles/string.ejs';
10
- import { isFullscreen } from '../utils.js';
11
- const VERSION = '2.19.14';
12
- const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
13
- const T = 'plugins.cc';
14
- /**
15
- * `PLUGIN` that provides a UI to select the subtitles when available.
16
- * @beta
17
- *
18
- * @remarks
19
- * Depends on:
20
- *
21
- * - {@link MediaControl}
22
- *
23
- * Configuration options - {@link ClosedCaptionsPluginSettings}
24
- * @example
25
- * ```ts
26
- * import { ClosedCaptions } from '@gcorevideo/player'
27
- *
28
- * Player.registerPlugin(ClosedCaptions)
29
- *
30
- * new Player({
31
- * ...
32
- * cc: {
33
- * language: 'en',
34
- * },
35
- * })
36
- * ```
37
- */
38
- export class Subtitles extends UICorePlugin {
39
- isPreselectedApplied = false;
40
- isShowing = false;
41
- track = null;
42
- tracks = [];
43
- $line = null;
44
- /**
45
- * @internal
46
- */
47
- get name() {
48
- return 'subtitles'; // TODO rename to 'cc'
49
- }
50
- /**
51
- * @internal
52
- */
53
- get supportedVersion() {
54
- return { min: CLAPPR_VERSION };
55
- }
56
- /**
57
- * @internal
58
- */
59
- static get version() {
60
- return VERSION;
61
- }
62
- static template = template(comboboxHTML);
63
- static templateString = template(stringHTML);
64
- /**
65
- * @internal
66
- */
67
- get attributes() {
68
- return {
69
- class: 'media-control-cc',
70
- };
71
- }
72
- /**
73
- * @internal
74
- */
75
- get events() {
76
- return {
77
- 'click [data-cc-select]': 'onItemSelect',
78
- 'click [data-cc-button]': 'toggleMenu',
79
- };
80
- }
81
- get preselectedLanguage() {
82
- return this.core.options.cc?.language ?? this.core.options.subtitles?.language ?? '';
83
- }
84
- /**
85
- * @internal
86
- */
87
- bindEvents() {
88
- this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
89
- this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize);
90
- this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);
91
- }
92
- onCoreReady() {
93
- trace(`${T} onCoreReady`);
94
- const mediaControl = this.core.getPlugin('media_control');
95
- assert(mediaControl, 'media_control plugin is required');
96
- this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
97
- this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, this.hideMenu);
98
- }
99
- onContainerChanged() {
100
- trace(`${T} onContainerChanged`);
101
- this.listenTo(this.core.activeContainer, Events.CONTAINER_FULLSCREEN, this.playerResize);
102
- this.listenTo(this.core.activeContainer, 'container:advertisement:start', this.onStartAd);
103
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);
104
- this.listenTo(this.core.activePlayback, Events.PLAYBACK_SUBTITLE_CHANGED, this.onSubtitleChanged);
105
- // fix for iOS
106
- const video = this.core.activePlayback.el;
107
- assert(video, 'video element is required');
108
- video.addEventListener('webkitbeginfullscreen', () => {
109
- if (Browser.isiOS) {
110
- video.classList.add('ios-fullscreen');
111
- }
112
- });
113
- video.addEventListener('webkitendfullscreen', () => {
114
- if (Browser.isiOS) {
115
- video.classList.remove('ios-fullscreen');
116
- }
117
- });
118
- }
119
- onSubtitleAvailable() {
120
- trace(`${T} onSubtitleAvailable`);
121
- this.applyTracks();
122
- }
123
- onSubtitleChanged({ id }) {
124
- trace(`${T} onSubtitleChanged`, { id });
125
- if (id === -1) {
126
- this.clearSubtitleText();
127
- }
128
- for (const track of this.tracks) {
129
- if (track.id === id) {
130
- track.track.mode = 'showing';
131
- this.setSubtitleText(this.getSubtitleText(track.track));
132
- track.track.oncuechange = (e) => {
133
- try {
134
- if (track.track.activeCues?.length) {
135
- const html = track.track.activeCues[0].getCueAsHTML();
136
- this.setSubtitleText(html);
137
- }
138
- else {
139
- this.clearSubtitleText();
140
- }
141
- }
142
- catch (error) {
143
- reportError(error);
144
- }
145
- };
146
- }
147
- else {
148
- track.track.oncuechange = null;
149
- track.track.mode = 'hidden';
150
- }
151
- }
152
- }
153
- applyTracks() {
154
- try {
155
- this.tracks = this.core.activePlayback.closedCaptionsTracks;
156
- this.applyPreselectedSubtitles();
157
- this.render();
158
- }
159
- catch (error) {
160
- reportError(error);
161
- }
162
- }
163
- onStartAd() {
164
- if (this.isShowing && this.core.activeContainer) {
165
- this.hide();
166
- this.listenTo(this.core.activeContainer, 'container:advertisement:finish', this.onFinishAd);
167
- }
168
- }
169
- onFinishAd() {
170
- this.show();
171
- this.stopListening(this.core.activeContainer, 'container:advertisement:finish', this.onFinishAd);
172
- }
173
- playerResize() {
174
- trace(`${T} playerResize`);
175
- const shouldShow = this.core.activeContainer &&
176
- isFullscreen(this.core.activeContainer.el) &&
177
- this.track &&
178
- this.track.track.mode &&
179
- Browser.isiOS &&
180
- this.isShowing;
181
- if (shouldShow) {
182
- this.show();
183
- }
184
- try {
185
- this.resizeFont();
186
- }
187
- catch (error) {
188
- reportError(error);
189
- }
190
- }
191
- /**
192
- * Hides the subtitles menu and the subtitles.
193
- */
194
- hide() {
195
- this.isShowing = false;
196
- this.renderIcon();
197
- this.$line.hide();
198
- if (this.tracks) {
199
- for (const t of this.tracks) {
200
- t.track.mode = 'hidden';
201
- }
202
- }
203
- }
204
- /**
205
- * Shows the subtitles menu and the subtitles.
206
- */
207
- show() {
208
- this.isShowing = true;
209
- this.renderIcon();
210
- if (this.core.activeContainer &&
211
- isFullscreen(this.core.activeContainer.el) &&
212
- this.track &&
213
- this.track.track.mode &&
214
- Browser.isiOS) {
215
- this.$line.hide();
216
- this.track.track.mode = 'showing';
217
- }
218
- else {
219
- this.$line.show();
220
- }
221
- }
222
- shouldRender() {
223
- return this.tracks?.length > 0;
224
- }
225
- resizeFont() {
226
- if (!this.$line) {
227
- return;
228
- }
229
- const skinWidth = this.core.activeContainer.$el.width();
230
- this.$line.find('p').css('font-size', skinWidth * 0.03);
231
- }
232
- /**
233
- * @internal
234
- */
235
- render() {
236
- if (!this.core.activeContainer) {
237
- return this;
238
- }
239
- if (!this.shouldRender()) {
240
- return this;
241
- }
242
- const mediaControl = this.core.getPlugin('media_control');
243
- this.$el.html(Subtitles.template({ tracks: this.tracks }));
244
- this.core.activeContainer.$el.find('#cc-line').remove();
245
- this.$line = $(Subtitles.templateString());
246
- this.resizeFont();
247
- this.core.activeContainer.$el.append(this.$line);
248
- mediaControl.putElement('cc', this.el);
249
- this.updateSelection();
250
- this.renderIcon();
251
- return this;
252
- }
253
- findById(id) {
254
- return this.tracks.find((track) => track.id === id) ?? null;
255
- }
256
- selectItem(item) {
257
- this.clearSubtitleText();
258
- this.track = item;
259
- this.hideMenu();
260
- this.updateSelection();
261
- }
262
- onItemSelect(event) {
263
- const id = event.target.dataset.ccSelect ?? '-1';
264
- trace(`${T} onItemSelect`, { id });
265
- localStorage.setItem(LOCAL_STORAGE_CC_ID, id);
266
- this.selectItem(this.findById(Number(id)));
267
- return false;
268
- }
269
- applyPreselectedSubtitles() {
270
- if (!this.isPreselectedApplied) {
271
- this.isPreselectedApplied = true;
272
- if (!this.preselectedLanguage) {
273
- return;
274
- }
275
- setTimeout(() => {
276
- this.selectItem(this.tracks.find((t) => t.track.language === this.preselectedLanguage) ?? null);
277
- }, 300); // TODO why delay?
278
- }
279
- }
280
- hideMenu() {
281
- ;
282
- this.$('[data-cc] ul').hide();
283
- }
284
- toggleMenu() {
285
- trace(`${T} toggleMenu`);
286
- this.$('[data-cc] ul').toggle();
287
- }
288
- itemElement(id) {
289
- return this.$(`ul li a[data-cc-select="${id}"]`).parent();
290
- }
291
- allItemElements() {
292
- return this.$('[data-cc] li');
293
- }
294
- selectSubtitles() {
295
- const trackId = this.track ? this.track.id : -1;
296
- this.core.activePlayback.closedCaptionsTrackId = trackId;
297
- }
298
- getSubtitleText(track) {
299
- const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
300
- const cues = track.cues;
301
- const lines = [];
302
- if (cues && cues.length) {
303
- for (const cue of cues) {
304
- if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
305
- lines.push(cue.getCueAsHTML().textContent);
306
- }
307
- }
308
- }
309
- return lines.join('\n');
310
- }
311
- setSubtitleText(text) {
312
- this.$line.find('p').html(text);
313
- }
314
- clearSubtitleText() {
315
- this.setSubtitleText('');
316
- }
317
- updateSelection() {
318
- if (!this.track) {
319
- this.hide();
320
- }
321
- else {
322
- this.show();
323
- }
324
- this.selectSubtitles();
325
- this.highlightCurrentSubtitles();
326
- }
327
- highlightCurrentSubtitles() {
328
- this.allItemElements()
329
- .removeClass('current')
330
- .find('a')
331
- .removeClass('gcore-skin-active');
332
- trace(`${T} highlightCurrentSubtitles`, {
333
- track: this.track?.id,
334
- });
335
- const currentLevelElement = this.itemElement(this.track ? this.track.id : -1);
336
- currentLevelElement
337
- .addClass('current')
338
- .find('a')
339
- .addClass('gcore-skin-active');
340
- }
341
- renderIcon() {
342
- const icon = this.isShowing ? subtitlesOnIcon : subtitlesOffIcon;
343
- this.$el.find('span.cc-text').html(icon);
344
- }
345
- }
@@ -1,11 +0,0 @@
1
- // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
- // It should be published with your NPM package. It should not be tracked by Git.
3
- {
4
- "tsdocVersion": "0.12",
5
- "toolPackages": [
6
- {
7
- "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.52.9"
9
- }
10
- ]
11
- }
@@ -1,3 +0,0 @@
1
- import { Utils } from '@clappr/core';
2
- export declare const fullscreenEnabled: typeof Utils.Fullscreen.fullscreenEnabled;
3
- //# sourceMappingURL=fullscreen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../src/utils/fullscreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEpC,eAAO,MAAM,iBAAiB,2CAAqC,CAAA"}
@@ -1,2 +0,0 @@
1
- import { Utils } from '@clappr/core';
2
- export const fullscreenEnabled = Utils.Fullscreen.fullscreenEnabled;