@gcorevideo/player 2.22.0 → 2.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/bottom-gear/bottomgear copy.ejs +10 -0
- package/assets/bottom-gear/bottomgear.ejs +4 -8
- package/assets/bottom-gear/gear-sub-menu.scss +0 -1
- package/assets/bottom-gear/gear.scss +0 -1
- package/assets/clappr-nerd-stats/button.ejs +3 -3
- package/assets/level-selector/button.ejs +2 -4
- package/assets/level-selector/list.ejs +14 -10
- package/assets/level-selector/style.scss +9 -4
- package/assets/playback-rate/list.ejs +5 -5
- package/dist/core.js +1 -2
- package/dist/index.css +1104 -1103
- package/dist/index.js +3849 -3767
- package/dist/player.d.ts +10 -17
- package/dist/plugins/index.css +1541 -1540
- package/dist/plugins/index.js +3949 -3868
- package/docs/api/player.mediacontrol.md +8 -36
- package/docs/api/player.mediacontrol.toggleelement.md +72 -0
- package/docs/api/player.mediacontrolelement.md +1 -1
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +0 -1
- package/lib/plugins/bottom-gear/BottomGear.d.ts +65 -14
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +113 -37
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts +2 -3
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +18 -15
- package/lib/plugins/dvr-controls/DvrControls.js +1 -1
- package/lib/plugins/level-selector/LevelSelector.d.ts +8 -11
- package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
- package/lib/plugins/level-selector/LevelSelector.js +66 -102
- package/lib/plugins/media-control/MediaControl.d.ts +7 -5
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +37 -19
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
- package/lib/plugins/picture-in-picture/PictureInPicture.js +7 -2
- package/lib/plugins/playback-rate/PlaybackRate.d.ts +42 -14
- package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +101 -83
- package/lib/plugins/subtitles/ClosedCaptions.js +1 -1
- package/lib/testUtils.d.ts +1 -0
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +13 -0
- package/package.json +1 -1
- package/src/playback/dash-playback/DashPlayback.ts +0 -1
- package/src/plugins/bottom-gear/BottomGear.ts +162 -72
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +21 -5
- package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +5 -12
- package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +27 -25
- package/src/plugins/dvr-controls/DvrControls.ts +1 -1
- package/src/plugins/dvr-controls/__tests__/DvrControls.test.ts +1 -1
- package/src/plugins/level-selector/LevelSelector.ts +80 -120
- package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +69 -79
- package/src/plugins/level-selector/__tests__/__snapshots__/LevelSelector.test.ts.snap +38 -71
- package/src/plugins/media-control/MediaControl.ts +51 -25
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +4 -4
- package/src/plugins/picture-in-picture/PictureInPicture.ts +7 -2
- package/src/plugins/playback-rate/PlaybackRate.ts +136 -108
- package/src/plugins/playback-rate/__tests__/PlaybackRate.test.ts +84 -37
- package/src/plugins/playback-rate/__tests__/__snapshots__/PlaybackRate.test.ts.snap +55 -6
- package/src/plugins/subtitles/ClosedCaptions.ts +1 -1
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +1 -1
- package/src/testUtils.ts +14 -0
- package/src/typings/vitest.d.ts +1 -0
- package/temp/player.api.json +66 -94
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.mediacontrol.getcenterpanel.md +0 -18
- package/docs/api/player.mediacontrol.getleftpanel.md +0 -22
- package/docs/api/player.mediacontrol.getrightpanel.md +0 -22
|
@@ -48,7 +48,8 @@ export declare class LevelSelector extends UICorePlugin {
|
|
|
48
48
|
private levelLabels;
|
|
49
49
|
private removeAuto;
|
|
50
50
|
private isHd;
|
|
51
|
-
private
|
|
51
|
+
private currentText;
|
|
52
|
+
private selectedLevelId;
|
|
52
53
|
private static readonly buttonTemplate;
|
|
53
54
|
private static readonly listTemplate;
|
|
54
55
|
/**
|
|
@@ -72,11 +73,8 @@ export declare class LevelSelector extends UICorePlugin {
|
|
|
72
73
|
class: string;
|
|
73
74
|
'data-level-selector': string;
|
|
74
75
|
};
|
|
75
|
-
private currentText;
|
|
76
|
-
private selectedLevelId;
|
|
77
76
|
get events(): {
|
|
78
77
|
'click .gear-sub-menu_btn': string;
|
|
79
|
-
'click .gear-option': string;
|
|
80
78
|
'click .go-back': string;
|
|
81
79
|
};
|
|
82
80
|
/**
|
|
@@ -85,30 +83,29 @@ export declare class LevelSelector extends UICorePlugin {
|
|
|
85
83
|
bindEvents(): void;
|
|
86
84
|
private onCoreReady;
|
|
87
85
|
private onGearRendered;
|
|
88
|
-
private
|
|
86
|
+
private onActiveContainerChange;
|
|
87
|
+
private updateHd;
|
|
89
88
|
private onStop;
|
|
90
89
|
private shouldRender;
|
|
91
90
|
/**
|
|
92
91
|
* @internal
|
|
93
92
|
*/
|
|
94
93
|
render(): this;
|
|
95
|
-
private renderButton;
|
|
96
94
|
private renderDropdown;
|
|
95
|
+
private updateButton;
|
|
97
96
|
private get maxLevel();
|
|
98
|
-
private
|
|
97
|
+
private onLevelsAvailable;
|
|
99
98
|
private makeLevelsLabels;
|
|
100
|
-
private
|
|
99
|
+
private onSelect;
|
|
101
100
|
private goBack;
|
|
102
101
|
private setLevel;
|
|
103
|
-
private onShowLevelSelectMenu;
|
|
104
102
|
private allLevelElements;
|
|
105
103
|
private levelElement;
|
|
106
104
|
private onLevelSwitchStart;
|
|
107
105
|
private onLevelSwitchEnd;
|
|
108
106
|
private updateText;
|
|
109
107
|
private getLevelLabel;
|
|
110
|
-
private
|
|
108
|
+
private onBitrate;
|
|
111
109
|
private highlightCurrentLevel;
|
|
112
|
-
private deferRender;
|
|
113
110
|
}
|
|
114
111
|
//# sourceMappingURL=LevelSelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LevelSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/LevelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAA;AAgB7D,OAAO,2CAA2C,CAAA;AAMlD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"LevelSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/LevelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAA;AAgB7D,OAAO,2CAA2C,CAAA;AAMlD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,eAAe,CAAK;IAE5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAChB;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuC;IAE3E;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,IAAa,MAAM;;;MAKlB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACM,MAAM;IAUf,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;IAcpB,OAAO,KAAK,QAAQ,GASnB;IAED,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,qBAAqB;CAkB9B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Events, template, UICorePlugin } from '@clappr/core';
|
|
2
|
-
import {
|
|
2
|
+
import { trace } from '@gcorevideo/utils';
|
|
3
3
|
import assert from 'assert';
|
|
4
4
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
5
|
+
import { GearEvents } from '../bottom-gear/BottomGear.js';
|
|
5
6
|
import buttonHtml from '../../../assets/level-selector/button.ejs';
|
|
6
7
|
import listHtml from '../../../assets/level-selector/list.ejs';
|
|
7
8
|
import hdIcon from '../../../assets/icons/new/hd.svg';
|
|
@@ -9,7 +10,6 @@ import arrowRightIcon from '../../../assets/icons/new/arrow-right.svg';
|
|
|
9
10
|
import arrowLeftIcon from '../../../assets/icons/new/arrow-left.svg';
|
|
10
11
|
import checkIcon from '../../../assets/icons/new/check.svg';
|
|
11
12
|
import '../../../assets/level-selector/style.scss';
|
|
12
|
-
import { MediaControlEvents } from '../media-control/MediaControl.js';
|
|
13
13
|
const T = 'plugins.level_selector';
|
|
14
14
|
const VERSION = '2.19.4';
|
|
15
15
|
/**
|
|
@@ -42,7 +42,8 @@ export class LevelSelector extends UICorePlugin {
|
|
|
42
42
|
levelLabels = [];
|
|
43
43
|
removeAuto = false;
|
|
44
44
|
isHd = false;
|
|
45
|
-
|
|
45
|
+
currentText = '';
|
|
46
|
+
selectedLevelId = -1;
|
|
46
47
|
static buttonTemplate = template(buttonHtml);
|
|
47
48
|
static listTemplate = template(listHtml);
|
|
48
49
|
/**
|
|
@@ -72,12 +73,9 @@ export class LevelSelector extends UICorePlugin {
|
|
|
72
73
|
'data-level-selector': '',
|
|
73
74
|
};
|
|
74
75
|
}
|
|
75
|
-
currentText = 'Auto';
|
|
76
|
-
selectedLevelId = -1;
|
|
77
76
|
get events() {
|
|
78
77
|
return {
|
|
79
|
-
'click .gear-sub-menu_btn': '
|
|
80
|
-
'click .gear-option': 'onShowLevelSelectMenu',
|
|
78
|
+
'click .gear-sub-menu_btn': 'onSelect',
|
|
81
79
|
'click .go-back': 'goBack',
|
|
82
80
|
};
|
|
83
81
|
}
|
|
@@ -85,42 +83,48 @@ export class LevelSelector extends UICorePlugin {
|
|
|
85
83
|
* @internal
|
|
86
84
|
*/
|
|
87
85
|
bindEvents() {
|
|
88
|
-
this.
|
|
89
|
-
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.
|
|
86
|
+
this.listenToOnce(this.core, Events.CORE_READY, this.onCoreReady);
|
|
87
|
+
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChange);
|
|
90
88
|
}
|
|
91
89
|
onCoreReady() {
|
|
92
90
|
trace(`${T} onCoreReady`);
|
|
93
|
-
const
|
|
94
|
-
assert(
|
|
95
|
-
this.
|
|
91
|
+
const gear = this.core.getPlugin('bottom_gear');
|
|
92
|
+
assert(gear, 'bottom_gear plugin is required');
|
|
93
|
+
this.currentText = this.core.i18n.t('auto');
|
|
94
|
+
this.listenTo(gear, GearEvents.RENDERED, this.onGearRendered);
|
|
96
95
|
}
|
|
97
96
|
onGearRendered() {
|
|
98
97
|
trace(`${T} onGearRendered`);
|
|
99
|
-
this.
|
|
98
|
+
this.render();
|
|
100
99
|
}
|
|
101
|
-
|
|
100
|
+
onActiveContainerChange() {
|
|
102
101
|
this.removeAuto = false;
|
|
103
102
|
this.isHd = false;
|
|
104
103
|
const activePlayback = this.core.activePlayback;
|
|
105
|
-
this.listenTo(activePlayback, Events.PLAYBACK_LEVELS_AVAILABLE, this.
|
|
104
|
+
this.listenTo(activePlayback, Events.PLAYBACK_LEVELS_AVAILABLE, this.onLevelsAvailable);
|
|
106
105
|
this.listenTo(activePlayback, Events.PLAYBACK_LEVEL_SWITCH_START, this.onLevelSwitchStart);
|
|
107
106
|
this.listenTo(activePlayback, Events.PLAYBACK_LEVEL_SWITCH_END, this.onLevelSwitchEnd);
|
|
108
|
-
this.listenTo(activePlayback, Events.PLAYBACK_BITRATE, this.
|
|
107
|
+
this.listenTo(activePlayback, Events.PLAYBACK_BITRATE, this.onBitrate);
|
|
109
108
|
this.listenTo(activePlayback, Events.PLAYBACK_STOP, this.onStop);
|
|
110
109
|
this.listenTo(activePlayback, Events.PLAYBACK_HIGHDEFINITIONUPDATE, (isHd) => {
|
|
111
110
|
this.isHd = isHd;
|
|
112
|
-
this.
|
|
111
|
+
this.updateHd();
|
|
113
112
|
});
|
|
114
113
|
if (activePlayback.levels?.length > 0) {
|
|
115
|
-
this.
|
|
114
|
+
this.onLevelsAvailable(activePlayback.levels);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
updateHd() {
|
|
118
|
+
if (this.isHd) {
|
|
119
|
+
this.$el.find('.gear-option_hd-icon').removeClass('hidden');
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.$el.find('.gear-option_hd-icon').addClass('hidden');
|
|
116
123
|
}
|
|
117
124
|
}
|
|
118
125
|
onStop() {
|
|
119
126
|
trace(`${T} onStop`);
|
|
120
127
|
this.listenToOnce(this.core.activePlayback, Events.PLAYBACK_PLAY, () => {
|
|
121
|
-
trace(`${T} on PLAYBACK_PLAY after stop`, {
|
|
122
|
-
selectedLevelId: this.selectedLevelId,
|
|
123
|
-
});
|
|
124
128
|
if (this.core.activePlayback.getPlaybackType() === 'live') {
|
|
125
129
|
if (this.selectedLevelId !== -1) {
|
|
126
130
|
this.core.activePlayback.currentLevel = this.selectedLevelId;
|
|
@@ -147,47 +151,42 @@ export class LevelSelector extends UICorePlugin {
|
|
|
147
151
|
if (!this.shouldRender()) {
|
|
148
152
|
return this;
|
|
149
153
|
}
|
|
150
|
-
this.
|
|
154
|
+
this.renderDropdown();
|
|
155
|
+
this.updateButton();
|
|
151
156
|
return this;
|
|
152
157
|
}
|
|
153
|
-
renderButton() {
|
|
154
|
-
if (!this.isOpen) {
|
|
155
|
-
const html = LevelSelector.buttonTemplate({
|
|
156
|
-
arrowRightIcon,
|
|
157
|
-
currentText: this.currentText,
|
|
158
|
-
isHd: this.isHd,
|
|
159
|
-
hdIcon,
|
|
160
|
-
});
|
|
161
|
-
this.$el.html(html);
|
|
162
|
-
const gear = this.core.getPlugin('bottom_gear');
|
|
163
|
-
if (!gear) {
|
|
164
|
-
trace(`${T} renderButton: bottom_gear plugin not found`);
|
|
165
|
-
}
|
|
166
|
-
gear?.getElement('quality')?.html(this.el);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
158
|
renderDropdown() {
|
|
170
|
-
|
|
159
|
+
this.$el.html(LevelSelector.listTemplate({
|
|
171
160
|
arrowLeftIcon,
|
|
172
161
|
checkIcon,
|
|
162
|
+
current: this.selectedLevelId,
|
|
173
163
|
labels: this.levelLabels,
|
|
174
164
|
levels: this.levels,
|
|
175
165
|
maxLevel: this.maxLevel,
|
|
176
166
|
removeAuto: this.removeAuto,
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
167
|
+
i18n: this.core.i18n,
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
updateButton() {
|
|
171
|
+
;
|
|
172
|
+
this.core.getPlugin('bottom_gear')
|
|
173
|
+
?.addItem('quality', this.$el)
|
|
174
|
+
.html(LevelSelector.buttonTemplate({
|
|
175
|
+
arrowRightIcon,
|
|
176
|
+
currentText: this.currentText,
|
|
177
|
+
isHd: this.isHd,
|
|
178
|
+
hdIcon,
|
|
179
|
+
i18n: this.core.i18n,
|
|
180
|
+
}));
|
|
182
181
|
}
|
|
183
182
|
get maxLevel() {
|
|
184
183
|
const maxRes = this.core.options.levelSelector?.restrictResolution;
|
|
185
184
|
return maxRes
|
|
186
|
-
? this.levels.
|
|
187
|
-
maxRes)
|
|
185
|
+
? this.levels.find((level) => (level.height > level.width ? level.width : level.height) ===
|
|
186
|
+
maxRes)?.level ?? -1
|
|
188
187
|
: -1;
|
|
189
188
|
}
|
|
190
|
-
|
|
189
|
+
onLevelsAvailable(levels) {
|
|
191
190
|
const maxResolution = this.core.options.levelSelector?.restrictResolution;
|
|
192
191
|
this.levels = levels;
|
|
193
192
|
this.makeLevelsLabels();
|
|
@@ -199,86 +198,60 @@ export class LevelSelector extends UICorePlugin {
|
|
|
199
198
|
.pop();
|
|
200
199
|
this.setLevel(initialLevel?.level ?? 0);
|
|
201
200
|
}
|
|
202
|
-
this.
|
|
201
|
+
this.render();
|
|
203
202
|
}
|
|
204
203
|
makeLevelsLabels() {
|
|
205
204
|
const labels = this.core.options.levelSelector?.labels ?? {};
|
|
206
205
|
this.levelLabels = [];
|
|
207
|
-
for (
|
|
208
|
-
const level = this.levels[i];
|
|
206
|
+
for (const level of this.levels) {
|
|
209
207
|
const ll = level.width > level.height ? level.height : level.width;
|
|
210
208
|
const label = labels[ll] || `${ll}p`;
|
|
211
209
|
this.levelLabels.push(label);
|
|
212
210
|
}
|
|
213
211
|
}
|
|
214
|
-
|
|
212
|
+
onSelect(event) {
|
|
215
213
|
const selectedLevel = parseInt(event.currentTarget?.dataset?.id ?? '-1', 10);
|
|
216
214
|
this.setLevel(selectedLevel);
|
|
217
215
|
event.stopPropagation();
|
|
216
|
+
event.preventDefault();
|
|
218
217
|
return false;
|
|
219
218
|
}
|
|
220
219
|
goBack() {
|
|
221
220
|
trace(`${T} goBack`);
|
|
222
|
-
this.
|
|
223
|
-
setTimeout(() => {
|
|
224
|
-
this.core.getPlugin('bottom_gear').refresh();
|
|
225
|
-
}, 0);
|
|
221
|
+
this.core.getPlugin('bottom_gear').refresh();
|
|
226
222
|
}
|
|
227
223
|
setLevel(index) {
|
|
228
|
-
trace(`${T} setIndexLevel`, { index });
|
|
229
224
|
this.selectedLevelId = index;
|
|
230
|
-
if (!this.core.activePlayback) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
if (this.core.activePlayback.currentLevel === this.selectedLevelId) {
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
225
|
this.core.activePlayback.currentLevel = this.selectedLevelId;
|
|
237
|
-
try {
|
|
238
|
-
this.highlightCurrentLevel();
|
|
239
|
-
}
|
|
240
|
-
catch (error) {
|
|
241
|
-
reportError(error);
|
|
242
|
-
}
|
|
243
|
-
this.deferRender();
|
|
244
|
-
}
|
|
245
|
-
onShowLevelSelectMenu() {
|
|
246
|
-
trace(`${T} onShowLevelSelectMenu`);
|
|
247
|
-
this.isOpen = true;
|
|
248
|
-
this.renderDropdown();
|
|
249
226
|
this.highlightCurrentLevel();
|
|
250
227
|
}
|
|
251
228
|
allLevelElements() {
|
|
252
|
-
return this.$('
|
|
229
|
+
return this.$('#level-selector-menu li');
|
|
253
230
|
}
|
|
254
231
|
levelElement(id = -1) {
|
|
255
|
-
return this.$(
|
|
232
|
+
return this.$(`#level-selector-menu a[data-id="${id}"]`).parent();
|
|
256
233
|
}
|
|
257
234
|
onLevelSwitchStart() {
|
|
258
|
-
this.core.activePlayback.trigger('playback:level:select:start');
|
|
259
235
|
this.levelElement(this.selectedLevelId).addClass('changing');
|
|
260
236
|
}
|
|
261
237
|
onLevelSwitchEnd() {
|
|
262
238
|
this.levelElement(this.selectedLevelId).removeClass('changing');
|
|
263
239
|
}
|
|
264
240
|
updateText(level) {
|
|
265
|
-
if (level === undefined || isNaN(level)) {
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
241
|
this.currentText = this.getLevelLabel(level);
|
|
269
|
-
this.
|
|
242
|
+
this.updateButton();
|
|
270
243
|
}
|
|
271
244
|
getLevelLabel(id) {
|
|
272
|
-
if (id
|
|
273
|
-
return '
|
|
245
|
+
if (id < 0) {
|
|
246
|
+
return this.core.i18n.t('auto');
|
|
274
247
|
}
|
|
275
248
|
const index = this.levels.findIndex((l) => l.level === id);
|
|
276
249
|
if (index < 0) {
|
|
277
|
-
return '
|
|
250
|
+
return this.core.i18n.t('auto');
|
|
278
251
|
}
|
|
279
252
|
return this.levelLabels[index] ?? formatLevelLabel(this.levels[index]);
|
|
280
253
|
}
|
|
281
|
-
|
|
254
|
+
onBitrate(info) {
|
|
282
255
|
trace(`${T} updateCurrentLevel`, { info });
|
|
283
256
|
this.highlightCurrentLevel();
|
|
284
257
|
}
|
|
@@ -286,28 +259,19 @@ export class LevelSelector extends UICorePlugin {
|
|
|
286
259
|
trace(`${T} highlightCurrentLevel`, {
|
|
287
260
|
selectedLevelId: this.selectedLevelId,
|
|
288
261
|
});
|
|
289
|
-
this.allLevelElements()
|
|
290
|
-
|
|
262
|
+
this.allLevelElements()
|
|
263
|
+
.removeClass('current')
|
|
264
|
+
.find('a')
|
|
265
|
+
.removeClass('gcore-skin-active');
|
|
291
266
|
const currentLevelElement = this.levelElement(this.selectedLevelId);
|
|
292
|
-
currentLevelElement
|
|
293
|
-
|
|
267
|
+
currentLevelElement
|
|
268
|
+
.addClass('current')
|
|
269
|
+
.find('a')
|
|
270
|
+
.addClass('gcore-skin-active');
|
|
294
271
|
this.updateText(this.selectedLevelId);
|
|
295
272
|
}
|
|
296
|
-
deferRender = debounce(() => this.render(), 0);
|
|
297
273
|
}
|
|
298
274
|
function formatLevelLabel(level) {
|
|
299
275
|
const h = level.width > level.height ? level.height : level.width;
|
|
300
276
|
return `${h}p`;
|
|
301
277
|
}
|
|
302
|
-
function debounce(fn, wait) {
|
|
303
|
-
let timerId = null;
|
|
304
|
-
return function () {
|
|
305
|
-
if (timerId !== null) {
|
|
306
|
-
clearTimeout(timerId);
|
|
307
|
-
}
|
|
308
|
-
timerId = setTimeout(() => {
|
|
309
|
-
timerId = null;
|
|
310
|
-
fn();
|
|
311
|
-
}, wait);
|
|
312
|
-
};
|
|
313
|
-
}
|
|
@@ -5,10 +5,11 @@ import '../../../assets/media-control/media-control.scss';
|
|
|
5
5
|
* Media control elements, mount points for additional plugins
|
|
6
6
|
* @beta
|
|
7
7
|
*/
|
|
8
|
-
export type MediaControlElement = 'audiotracks' | 'cc' | 'clipText' | 'dvr' | 'duration' | 'gear' | 'pip' | 'playbackRate' | 'position' | 'seekBarContainer';
|
|
8
|
+
export type MediaControlElement = 'audiotracks' | 'cc' | 'clipText' | 'dvr' | 'duration' | 'fullscreen' | 'gear' | 'multicamera' | 'pip' | 'playbackRate' | 'position' | 'seekBarContainer' | 'vr' | 'volume';
|
|
9
9
|
/**
|
|
10
10
|
* Custom events emitted by the plugins to communicate with one another
|
|
11
11
|
* @beta
|
|
12
|
+
* @deprecated
|
|
12
13
|
*/
|
|
13
14
|
export declare enum MediaControlEvents {
|
|
14
15
|
/**
|
|
@@ -23,6 +24,8 @@ export declare enum MediaControlEvents {
|
|
|
23
24
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
24
25
|
*/
|
|
25
26
|
export declare class MediaControl extends UICorePlugin {
|
|
27
|
+
private customAreaElements;
|
|
28
|
+
private customAreaHandler?;
|
|
26
29
|
private buttonsColor;
|
|
27
30
|
private currentDurationValue;
|
|
28
31
|
private currentPositionValue;
|
|
@@ -47,13 +50,11 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
47
50
|
private userDisabled;
|
|
48
51
|
private userKeepVisible;
|
|
49
52
|
private verticalVolume;
|
|
50
|
-
private $audioTracksSelector;
|
|
51
53
|
private $clipText;
|
|
52
54
|
private $clipTextContainer;
|
|
53
55
|
private $duration;
|
|
54
56
|
private $fullscreenToggle;
|
|
55
57
|
private $multiCameraSelector;
|
|
56
|
-
private $pip;
|
|
57
58
|
private $playPauseToggle;
|
|
58
59
|
private $playStopToggle;
|
|
59
60
|
private $playbackRate;
|
|
@@ -226,13 +227,14 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
226
227
|
* ```
|
|
227
228
|
*/
|
|
228
229
|
getElement(name: MediaControlElement): ZeptoResult | null;
|
|
229
|
-
putElement(name: MediaControlElement, element:
|
|
230
|
+
putElement(name: MediaControlElement, element: ZeptoResult): void;
|
|
231
|
+
handleCustomArea(handler: (name: string, content: HTMLElement) => void): void;
|
|
230
232
|
/**
|
|
231
233
|
* Toggle the visibility of a media control element
|
|
232
234
|
* @param name - The name of the media control element
|
|
233
235
|
* @param show - Whether to show or hide the element
|
|
234
236
|
*/
|
|
235
|
-
toggleElement(
|
|
237
|
+
toggleElement(area: MediaControlElement, show: boolean): void;
|
|
236
238
|
private getRightPanel;
|
|
237
239
|
private getLeftPanel;
|
|
238
240
|
private getCenterPanel;
|
|
@@ -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;AAG5C,OAAO,kDAAkD,CAAA;AAWzD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,aAAa,GACb,IAAI,GACJ,UAAU,GACV,KAAK,GACL,UAAU,GACV,MAAM,GACN,KAAK,GACL,cAAc,GACd,UAAU,GACV,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,13 +21,23 @@ import fullscreenOffIcon from '../../../assets/icons/new/fullscreen-off.svg';
|
|
|
21
21
|
import fullscreenOnIcon from '../../../assets/icons/new/fullscreen-on.svg';
|
|
22
22
|
const DEFAULT_SETTINGS = {
|
|
23
23
|
left: [],
|
|
24
|
-
right: [
|
|
24
|
+
right: [
|
|
25
|
+
'fullscreen',
|
|
26
|
+
'pip',
|
|
27
|
+
'gear',
|
|
28
|
+
'cc',
|
|
29
|
+
'multicamera',
|
|
30
|
+
// 'playbackrate',
|
|
31
|
+
'vr',
|
|
32
|
+
'audiotracks',
|
|
33
|
+
],
|
|
25
34
|
default: [],
|
|
26
35
|
seekEnabled: true,
|
|
27
36
|
};
|
|
28
37
|
/**
|
|
29
38
|
* Custom events emitted by the plugins to communicate with one another
|
|
30
39
|
* @beta
|
|
40
|
+
* @deprecated
|
|
31
41
|
*/
|
|
32
42
|
export var MediaControlEvents;
|
|
33
43
|
(function (MediaControlEvents) {
|
|
@@ -40,7 +50,6 @@ const T = 'plugins.media_control';
|
|
|
40
50
|
const LEFT_ORDER = [
|
|
41
51
|
'playpause',
|
|
42
52
|
'playstop',
|
|
43
|
-
// 'live',
|
|
44
53
|
'dvr',
|
|
45
54
|
'volume',
|
|
46
55
|
'position',
|
|
@@ -61,6 +70,8 @@ function orderByOrderPattern(arr, order) {
|
|
|
61
70
|
*/
|
|
62
71
|
export class MediaControl extends UICorePlugin {
|
|
63
72
|
// private advertisementPlaying = false
|
|
73
|
+
customAreaElements = {};
|
|
74
|
+
customAreaHandler;
|
|
64
75
|
buttonsColor = null;
|
|
65
76
|
currentDurationValue = 0;
|
|
66
77
|
currentPositionValue = 0;
|
|
@@ -85,13 +96,11 @@ export class MediaControl extends UICorePlugin {
|
|
|
85
96
|
userDisabled = false;
|
|
86
97
|
userKeepVisible = false;
|
|
87
98
|
verticalVolume = false;
|
|
88
|
-
$audioTracksSelector = null;
|
|
89
99
|
$clipText = null;
|
|
90
100
|
$clipTextContainer = null;
|
|
91
101
|
$duration = null;
|
|
92
102
|
$fullscreenToggle = null;
|
|
93
103
|
$multiCameraSelector = null;
|
|
94
|
-
$pip = null;
|
|
95
104
|
$playPauseToggle = null;
|
|
96
105
|
$playStopToggle = null;
|
|
97
106
|
$playbackRate = null;
|
|
@@ -580,11 +589,13 @@ export class MediaControl extends UICorePlugin {
|
|
|
580
589
|
if (!this.$volumeBarContainer) {
|
|
581
590
|
return;
|
|
582
591
|
}
|
|
592
|
+
if (this.hideVolumeId) {
|
|
593
|
+
clearTimeout(this.hideVolumeId);
|
|
594
|
+
}
|
|
583
595
|
if (this.draggingVolumeBar) {
|
|
584
596
|
this.hideVolumeId = setTimeout(() => this.hideVolumeBar(), timeout);
|
|
585
597
|
}
|
|
586
598
|
else {
|
|
587
|
-
this.hideVolumeId && clearTimeout(this.hideVolumeId);
|
|
588
599
|
this.hideVolumeId = setTimeout(() => this.$volumeBarContainer?.addClass('volume-bar-hide'), timeout);
|
|
589
600
|
}
|
|
590
601
|
}
|
|
@@ -736,16 +747,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
736
747
|
newSettings.left.push('dvr');
|
|
737
748
|
}
|
|
738
749
|
// actual order of the items appear rendered is controlled by CSS
|
|
739
|
-
newSettings.right =
|
|
740
|
-
'fullscreen',
|
|
741
|
-
'pip',
|
|
742
|
-
'gear',
|
|
743
|
-
'cc',
|
|
744
|
-
'multicamera',
|
|
745
|
-
'playbackrate',
|
|
746
|
-
'vr',
|
|
747
|
-
'audiotracks',
|
|
748
|
-
];
|
|
750
|
+
newSettings.right = DEFAULT_SETTINGS.right;
|
|
749
751
|
if ((!this.fullScreenOnVideoTagSupported &&
|
|
750
752
|
!Fullscreen.fullscreenEnabled()) ||
|
|
751
753
|
this.options.fullscreenDisable) {
|
|
@@ -830,10 +832,10 @@ export class MediaControl extends UICorePlugin {
|
|
|
830
832
|
trace(`${T} putElement`, { name, panel: !!panel });
|
|
831
833
|
if (panel) {
|
|
832
834
|
const current = panel.find(`[data-${name}]`);
|
|
833
|
-
element.
|
|
835
|
+
element.attr(`data-${name}`, '');
|
|
834
836
|
// TODO test
|
|
835
837
|
if (current.length) {
|
|
836
|
-
if (current[0] === element) {
|
|
838
|
+
if (current[0] === element[0]) {
|
|
837
839
|
return;
|
|
838
840
|
}
|
|
839
841
|
current.replaceWith(element);
|
|
@@ -841,15 +843,23 @@ export class MediaControl extends UICorePlugin {
|
|
|
841
843
|
else {
|
|
842
844
|
panel.append(element);
|
|
843
845
|
}
|
|
846
|
+
return;
|
|
844
847
|
}
|
|
845
848
|
}
|
|
849
|
+
handleCustomArea(handler) {
|
|
850
|
+
this.customAreaHandler = handler;
|
|
851
|
+
Object.entries(this.customAreaElements).forEach(([name, element]) => {
|
|
852
|
+
handler(name, element);
|
|
853
|
+
});
|
|
854
|
+
this.customAreaElements = {};
|
|
855
|
+
}
|
|
846
856
|
/**
|
|
847
857
|
* Toggle the visibility of a media control element
|
|
848
858
|
* @param name - The name of the media control element
|
|
849
859
|
* @param show - Whether to show or hide the element
|
|
850
860
|
*/
|
|
851
|
-
toggleElement(
|
|
852
|
-
this.$el.find(`[data-${
|
|
861
|
+
toggleElement(area, show) {
|
|
862
|
+
this.$el.find(`[data-${area}]`).toggle(show);
|
|
853
863
|
}
|
|
854
864
|
getRightPanel() {
|
|
855
865
|
return this.$el.find('.media-control-right-panel');
|
|
@@ -1007,6 +1017,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1007
1017
|
* @internal
|
|
1008
1018
|
*/
|
|
1009
1019
|
render() {
|
|
1020
|
+
trace(`${T} render`);
|
|
1010
1021
|
const timeout = this.options.hideMediaControlDelay || 2000;
|
|
1011
1022
|
const html = MediaControl.template({ settings: this.settings ?? {} });
|
|
1012
1023
|
this.$el.html(html);
|
|
@@ -1055,6 +1066,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1055
1066
|
this.core.$el.append(this.el);
|
|
1056
1067
|
this.rendered = true;
|
|
1057
1068
|
this.updateVolumeUI();
|
|
1069
|
+
// TODO setTimeout
|
|
1058
1070
|
this.trigger(Events.MEDIACONTROL_RENDERED);
|
|
1059
1071
|
return this;
|
|
1060
1072
|
}
|
|
@@ -1127,6 +1139,12 @@ export class MediaControl extends UICorePlugin {
|
|
|
1127
1139
|
return isFinite(this.core.activePlayback.getDuration());
|
|
1128
1140
|
}
|
|
1129
1141
|
getElementLocation(name) {
|
|
1142
|
+
trace(`${T} getElementLocation`, {
|
|
1143
|
+
name,
|
|
1144
|
+
right: this.settings.right,
|
|
1145
|
+
left: this.settings.left,
|
|
1146
|
+
default: this.settings.default,
|
|
1147
|
+
});
|
|
1130
1148
|
if (this.settings.right?.includes(name)) {
|
|
1131
1149
|
return this.getRightPanel();
|
|
1132
1150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PictureInPicture.d.ts","sourceRoot":"","sources":["../../../src/plugins/picture-in-picture/PictureInPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAO9D,OAAO,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"PictureInPicture.d.ts","sourceRoot":"","sources":["../../../src/plugins/picture-in-picture/PictureInPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAO9D,OAAO,gDAAgD,CAAC;AAOxD;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,cAAc,CAAwB;IAErD;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,IAAa,UAAU;;MAItB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IACM,UAAU;IAQnB,OAAO,CAAC,cAAc;IAStB;;OAEG;IACM,MAAM;IAef,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,oBAAoB;CAI7B"}
|
|
@@ -4,6 +4,7 @@ import { CLAPPR_VERSION } from '../../build.js';
|
|
|
4
4
|
import pipIcon from '../../../assets/icons/new/pip.svg';
|
|
5
5
|
import buttonHtml from '../../../assets/picture-in-picture/button.ejs';
|
|
6
6
|
import '../../../assets/picture-in-picture/button.scss';
|
|
7
|
+
import assert from 'assert';
|
|
7
8
|
const VERSION = '0.0.1';
|
|
8
9
|
const T = `plugins.pip`;
|
|
9
10
|
/**
|
|
@@ -56,7 +57,11 @@ export class PictureInPicture extends UICorePlugin {
|
|
|
56
57
|
* @internal
|
|
57
58
|
*/
|
|
58
59
|
bindEvents() {
|
|
59
|
-
this.
|
|
60
|
+
this.listenToOnce(this.core, Events.CORE_READY, () => {
|
|
61
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
62
|
+
assert(mediaControl, 'media_control plugin is required');
|
|
63
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
|
|
64
|
+
});
|
|
60
65
|
}
|
|
61
66
|
isPiPSupported() {
|
|
62
67
|
trace(`${T} isPiPSupported`, {
|
|
@@ -75,7 +80,7 @@ export class PictureInPicture extends UICorePlugin {
|
|
|
75
80
|
this.$el.html(PictureInPicture.buttonTemplate({ pipIcon }));
|
|
76
81
|
const mediaControl = this.core.getPlugin('media_control');
|
|
77
82
|
if (mediaControl) {
|
|
78
|
-
mediaControl.putElement('pip', this
|
|
83
|
+
mediaControl.putElement('pip', this.$el);
|
|
79
84
|
}
|
|
80
85
|
return this;
|
|
81
86
|
}
|