@gcorevideo/player 2.28.14 → 2.28.17
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/gear-sub-menu.scss +9 -3
- package/dist/core.js +2552 -1323
- package/dist/index.css +173 -168
- package/dist/index.embed.js +2639 -1366
- package/dist/index.js +2661 -1374
- package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/NerdStats.js +10 -2
- package/lib/plugins/clappr-nerd-stats/speedtest/index.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/speedtest/index.js +14 -3
- package/lib/plugins/cmcd-config/CmcdConfig.d.ts +1 -1
- package/lib/plugins/cmcd-config/CmcdConfig.d.ts.map +1 -1
- package/lib/plugins/cmcd-config/CmcdConfig.js +1 -1
- package/lib/plugins/media-control/MediaControl.d.ts +1 -3
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +63 -23
- package/package.json +1 -1
- package/src/plugins/clappr-nerd-stats/NerdStats.ts +10 -2
- package/src/plugins/clappr-nerd-stats/speedtest/index.ts +15 -3
- package/src/plugins/cmcd-config/CmcdConfig.ts +1 -1
- package/src/plugins/media-control/MediaControl.ts +72 -31
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +2 -2
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/NerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,IAAI,EAGL,MAAM,cAAc,CAAA;AAuBrB,OAAO,0DAA0D,CAAA;
|
|
1
|
+
{"version":3,"file":"NerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/NerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,IAAI,EAGL,MAAM,cAAc,CAAA;AAuBrB,OAAO,0DAA0D,CAAA;AAkCjE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,gBAAgB,CAIvB;IAED,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED,OAAO,CAAC,OAAO;IAKf,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;gBAEW,IAAI,EAAE,IAAI;IAgBtB;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,wBAAwB;IAiChC;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,MAAM,CASb;IAED,OAAO,CAAC,IAAI;IAkBZ,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,aAAa;IAkFrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IAcf,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;CAU3B"}
|
|
@@ -14,12 +14,13 @@ import statsIcon from '../../../assets/icons/new/stats.svg';
|
|
|
14
14
|
import { GearEvents } from '../bottom-gear/BottomGear.js';
|
|
15
15
|
import { drawSummary, getPingQuality } from './utils.js';
|
|
16
16
|
import { getDownloadQuality } from './utils.js';
|
|
17
|
+
import { trace } from '@gcorevideo/utils';
|
|
17
18
|
const PLAYBACK_NAMES = {
|
|
18
19
|
dash: 'DASH.js',
|
|
19
20
|
hls: 'HLS.js',
|
|
20
21
|
html5_video: 'Native',
|
|
21
22
|
};
|
|
22
|
-
|
|
23
|
+
const T = 'plugins.nerd_stats';
|
|
23
24
|
/**
|
|
24
25
|
* `PLUGIN` that displays useful statistics regarding the playback as well as the network quality estimation.
|
|
25
26
|
* @public
|
|
@@ -156,6 +157,9 @@ export class NerdStats extends UICorePlugin {
|
|
|
156
157
|
return super.destroy();
|
|
157
158
|
}
|
|
158
159
|
toggle = () => {
|
|
160
|
+
trace(`${T} toggle`, {
|
|
161
|
+
open: this.open,
|
|
162
|
+
});
|
|
159
163
|
if (this.open) {
|
|
160
164
|
this.hide();
|
|
161
165
|
}
|
|
@@ -165,7 +169,7 @@ export class NerdStats extends UICorePlugin {
|
|
|
165
169
|
};
|
|
166
170
|
show() {
|
|
167
171
|
this.$el.show();
|
|
168
|
-
this.statsBoxElem.scrollTop(this.statsBoxElem
|
|
172
|
+
this.statsBoxElem.scrollTop(this.statsBoxElem?.scrollTop());
|
|
169
173
|
this.open = true;
|
|
170
174
|
initSpeedTest(this.speedtestMetrics)
|
|
171
175
|
.then(() => {
|
|
@@ -173,10 +177,14 @@ export class NerdStats extends UICorePlugin {
|
|
|
173
177
|
})
|
|
174
178
|
.catch((e) => {
|
|
175
179
|
reportError(e);
|
|
180
|
+
trace(`${T} speedtest error`, {
|
|
181
|
+
error: e,
|
|
182
|
+
});
|
|
176
183
|
this.disable();
|
|
177
184
|
});
|
|
178
185
|
}
|
|
179
186
|
hide() {
|
|
187
|
+
trace(`${T} hide`);
|
|
180
188
|
this.$el.hide();
|
|
181
189
|
this.open = false;
|
|
182
190
|
stopSpeedtest();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAkC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqC9C,wBAAgB,oBAAoB,SAmBnC;AAID,eAAO,MAAM,aAAa,GAAI,eAAe,gBAAgB,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAkC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqC9C,wBAAgB,oBAAoB,SAmBnC;AAID,eAAO,MAAM,aAAa,GAAI,eAAe,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAiF3E,CAAC;AAEF,eAAO,MAAM,aAAa,YAIzB,CAAC;AAEF,eAAO,MAAM,cAAc,YAI1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,YAEjC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAGnD"}
|
|
@@ -102,11 +102,13 @@ export const initSpeedTest = (customMetrics) => {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
};
|
|
105
|
-
|
|
106
|
-
await fetch('https://iam.gcdn.co/info/json')
|
|
105
|
+
const myinfoUrl = 'https://gcore.com/.well-known/cdn-debug/json';
|
|
106
|
+
// await fetch('https://iam.gcdn.co/info/json')
|
|
107
|
+
await fetch(myinfoUrl)
|
|
107
108
|
.then(r => r.json())
|
|
108
109
|
.then(data => {
|
|
109
|
-
const country = data['Server Country code'].toLowerCase();
|
|
110
|
+
// const country = data['Server Country code'].toLowerCase();
|
|
111
|
+
const country = getCountryCodeFromClientHeaders(data.client_headers);
|
|
110
112
|
const server = serversList.find(s => s.country === country) || serversList[0];
|
|
111
113
|
if (!server) {
|
|
112
114
|
throw new Error('Failed to select a server');
|
|
@@ -152,3 +154,12 @@ function rankConnectionSpeed(dlSpeed) {
|
|
|
152
154
|
}
|
|
153
155
|
return 0;
|
|
154
156
|
}
|
|
157
|
+
function getCountryCodeFromClientHeaders(clientHeaders) {
|
|
158
|
+
if (clientHeaders && clientHeaders['country']) {
|
|
159
|
+
const m = clientHeaders['country'].match(/'code':\s*'([A-Za-z]{2})'/);
|
|
160
|
+
if (m) {
|
|
161
|
+
return m[1].toLowerCase();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return 'lu';
|
|
165
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmcdConfig.d.ts","sourceRoot":"","sources":["../../../src/plugins/cmcd-config/CmcdConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,UAAU,EAAU,MAAM,cAAc,CAAA;AA4BrE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,GAAG,CAAQ;IAEnB,OAAO,CAAC,GAAG,CAAK;IAEhB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"CmcdConfig.d.ts","sourceRoot":"","sources":["../../../src/plugins/cmcd-config/CmcdConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,UAAU,EAAU,MAAM,cAAc,CAAA;AA4BrE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,GAAG,CAAQ;IAEnB,OAAO,CAAC,GAAG,CAAK;IAEhB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED;;OAEG;IACH,IAAI,gBAAgB,WAEnB;gBAEW,IAAI,EAAE,IAAI;IAMtB;;OAEG;IACM,UAAU;IAOnB;;;;OAIG;IACH,SAAS,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;YAO3B,cAAc;IAgC5B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,YAAY;CAGrB"}
|
|
@@ -360,13 +360,11 @@ export declare class MediaControl extends UICorePlugin {
|
|
|
360
360
|
*/
|
|
361
361
|
render(): this;
|
|
362
362
|
private handleFullScreenOnBtn;
|
|
363
|
-
private onStartAd;
|
|
364
|
-
private onFinishAd;
|
|
365
|
-
private hideControllAds;
|
|
366
363
|
private static getPageX;
|
|
367
364
|
private static getPageY;
|
|
368
365
|
private isSeekEnabledForHtml5Playback;
|
|
369
366
|
private getElementLocation;
|
|
370
367
|
private onDvrStateChanged;
|
|
368
|
+
private delayHide;
|
|
371
369
|
}
|
|
372
370
|
//# sourceMappingURL=MediaControl.d.ts.map
|
|
@@ -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;AAI5C,OAAO,kDAAkD,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@ const STANDARD_MEDIA_CONTROL_ELEMENTS = [
|
|
|
31
31
|
'volume',
|
|
32
32
|
];
|
|
33
33
|
const MENU_VMARGIN = 12;
|
|
34
|
+
const DEFAULT_HIDE_DELAY = 2000;
|
|
34
35
|
// TODO export
|
|
35
36
|
const DEFAULT_SETTINGS = {
|
|
36
37
|
default: ['seekbar'],
|
|
@@ -280,12 +281,12 @@ export class MediaControl extends UICorePlugin {
|
|
|
280
281
|
bindEvents() {
|
|
281
282
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
282
283
|
this.listenTo(this.core, Events.CORE_MOUSE_MOVE, this.show);
|
|
283
|
-
this.listenTo(this.core, Events.CORE_MOUSE_LEAVE,
|
|
284
|
+
this.listenTo(this.core, Events.CORE_MOUSE_LEAVE, this.delayHide);
|
|
284
285
|
this.listenTo(this.core, Events.CORE_FULLSCREEN, this.show);
|
|
285
286
|
this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.configure);
|
|
286
287
|
this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize);
|
|
287
|
-
this.listenTo(this.core, 'core:advertisement:start', this.onStartAd)
|
|
288
|
-
this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd)
|
|
288
|
+
// this.listenTo(this.core, 'core:advertisement:start', this.onStartAd)
|
|
289
|
+
// this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd)
|
|
289
290
|
// const has360 = this.core?.getPlugin('video_360');
|
|
290
291
|
// if (Browser.isiOS && has360) {
|
|
291
292
|
// this.container?.el.addEventListener('click', e => {
|
|
@@ -311,6 +312,10 @@ export class MediaControl extends UICorePlugin {
|
|
|
311
312
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_PAUSE, this.changeTogglePlay);
|
|
312
313
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_STOP, this.changeTogglePlay);
|
|
313
314
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_DBLCLICK, this.toggleFullscreen);
|
|
315
|
+
const clk = clickaway(() => {
|
|
316
|
+
this.resetUserKeepVisible();
|
|
317
|
+
}, this.core.activeContainer.$el[0]);
|
|
318
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_CLICK, clk);
|
|
314
319
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
315
320
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_PROGRESS, this.updateProgressBar);
|
|
316
321
|
this.listenTo(this.core.activeContainer, Events.CONTAINER_SETTINGSUPDATE, this.updateSettings);
|
|
@@ -325,20 +330,27 @@ export class MediaControl extends UICorePlugin {
|
|
|
325
330
|
this.listenTo(this.core, Events.CONTAINER_DESTROYED, () => {
|
|
326
331
|
this.cancelRenderTimer();
|
|
327
332
|
});
|
|
333
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_MOUSE_ENTER, this.show);
|
|
334
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_MOUSE_LEAVE, this.delayHide);
|
|
328
335
|
}
|
|
329
336
|
/**
|
|
330
337
|
* Hides the media control UI
|
|
331
338
|
*/
|
|
332
339
|
disable() {
|
|
340
|
+
trace(`${T} disable`);
|
|
333
341
|
this.userDisabled = true; // TODO distinguish between user and system (e.g., unplayable) disabled?
|
|
334
342
|
this.hide();
|
|
335
343
|
this.unbindKeyEvents();
|
|
336
|
-
this.$el.hide();
|
|
344
|
+
this.$el.hide();
|
|
337
345
|
}
|
|
338
346
|
/**
|
|
339
347
|
* Reenables the plugin disabled earlier with the {@link MediaControl.disable} method
|
|
340
348
|
*/
|
|
341
349
|
enable() {
|
|
350
|
+
trace(`${T} enable`, {
|
|
351
|
+
chromeless: this.options.chromeless,
|
|
352
|
+
userDisabled: this.userDisabled,
|
|
353
|
+
});
|
|
342
354
|
if (this.options.chromeless) {
|
|
343
355
|
return;
|
|
344
356
|
}
|
|
@@ -492,6 +504,13 @@ export class MediaControl extends UICorePlugin {
|
|
|
492
504
|
this.$el.removeClass('w370');
|
|
493
505
|
this.$el.removeClass('w270');
|
|
494
506
|
this.verticalVolume = false;
|
|
507
|
+
trace(`${T} playerResize`, {
|
|
508
|
+
size,
|
|
509
|
+
width: this.container.$el.width(),
|
|
510
|
+
height: this.container.$el.height(),
|
|
511
|
+
hideVolumeBar: this.options.hideVolumeBar,
|
|
512
|
+
isMobile: Browser.isMobile,
|
|
513
|
+
});
|
|
495
514
|
try {
|
|
496
515
|
const skinWidth = this.container.$el.width() || size.width;
|
|
497
516
|
if (skinWidth <= 370 || this.options.hideVolumeBar) {
|
|
@@ -739,19 +758,30 @@ export class MediaControl extends UICorePlugin {
|
|
|
739
758
|
this.setSeekPercentage(pos);
|
|
740
759
|
}
|
|
741
760
|
setUserKeepVisible() {
|
|
761
|
+
trace(`${T} setUserKeepVisible`, {
|
|
762
|
+
userKeepVisible: this.userKeepVisible,
|
|
763
|
+
});
|
|
742
764
|
this.userKeepVisible = true;
|
|
743
765
|
}
|
|
744
766
|
resetUserKeepVisible() {
|
|
767
|
+
trace(`${T} resetUserKeepVisible`, {
|
|
768
|
+
userKeepVisible: this.userKeepVisible,
|
|
769
|
+
});
|
|
745
770
|
this.userKeepVisible = false;
|
|
746
771
|
}
|
|
747
772
|
isVisible() {
|
|
748
773
|
return !this.$el.hasClass('media-control-hide');
|
|
749
774
|
}
|
|
750
775
|
show(event) {
|
|
776
|
+
trace(`${T} show`, {
|
|
777
|
+
disabled: this.disabled,
|
|
778
|
+
disableControlPanel: this.options.disableControlPanel,
|
|
779
|
+
event,
|
|
780
|
+
});
|
|
751
781
|
if (this.disabled || this.options.disableControlPanel) {
|
|
752
782
|
return;
|
|
753
783
|
}
|
|
754
|
-
const timeout =
|
|
784
|
+
const timeout = DEFAULT_HIDE_DELAY;
|
|
755
785
|
const mousePointerMoved = event &&
|
|
756
786
|
event.clientX !== this.lastMouseX &&
|
|
757
787
|
event.clientY !== this.lastMouseY;
|
|
@@ -774,6 +804,16 @@ export class MediaControl extends UICorePlugin {
|
|
|
774
804
|
this.updateCursorStyle(showing);
|
|
775
805
|
}
|
|
776
806
|
hide(delay = 0) {
|
|
807
|
+
trace(`${T} hide`, {
|
|
808
|
+
delay,
|
|
809
|
+
visible: this.isVisible(),
|
|
810
|
+
disabled: this.disabled,
|
|
811
|
+
hideMediaControl: this.options.hideMediaControl,
|
|
812
|
+
userKeepVisible: this.userKeepVisible,
|
|
813
|
+
keepVisible: this.keepVisible,
|
|
814
|
+
draggingSeekBar: this.draggingSeekBar,
|
|
815
|
+
draggingVolumeBar: this.draggingVolumeBar,
|
|
816
|
+
});
|
|
777
817
|
if (!this.isVisible()) {
|
|
778
818
|
return;
|
|
779
819
|
}
|
|
@@ -1110,7 +1150,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1110
1150
|
if (!this.hasUpdate || !this.metadataLoaded) {
|
|
1111
1151
|
return this;
|
|
1112
1152
|
}
|
|
1113
|
-
const timeout = this.options.hideMediaControlDelay ||
|
|
1153
|
+
const timeout = this.options.hideMediaControlDelay || DEFAULT_HIDE_DELAY;
|
|
1114
1154
|
this.$el.html(MediaControl.template({ settings: this.settings }));
|
|
1115
1155
|
this.createCachedElements();
|
|
1116
1156
|
this.drawDurationAndPosition();
|
|
@@ -1176,23 +1216,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
1176
1216
|
}
|
|
1177
1217
|
this.resetUserKeepVisible();
|
|
1178
1218
|
}
|
|
1179
|
-
// TODO manage by the ads plugin
|
|
1180
|
-
onStartAd() {
|
|
1181
|
-
// this.advertisementPlaying = true
|
|
1182
|
-
this.disable();
|
|
1183
|
-
}
|
|
1184
|
-
// TODO manage by the ads plugin
|
|
1185
|
-
onFinishAd() {
|
|
1186
|
-
// this.advertisementPlaying = false
|
|
1187
|
-
this.enable();
|
|
1188
|
-
}
|
|
1189
|
-
// TODO remove
|
|
1190
|
-
hideControllAds() {
|
|
1191
|
-
if (this.container.advertisement &&
|
|
1192
|
-
this.container.advertisement.type !== 'idle') {
|
|
1193
|
-
this.hide();
|
|
1194
|
-
}
|
|
1195
|
-
}
|
|
1196
1219
|
static getPageX(event) {
|
|
1197
1220
|
return getPageX(event);
|
|
1198
1221
|
}
|
|
@@ -1233,6 +1256,12 @@ export class MediaControl extends UICorePlugin {
|
|
|
1233
1256
|
this.$el.removeClass('dvr');
|
|
1234
1257
|
}
|
|
1235
1258
|
}
|
|
1259
|
+
delayHide(e) {
|
|
1260
|
+
trace(`${T} delayHide`, {
|
|
1261
|
+
e,
|
|
1262
|
+
});
|
|
1263
|
+
this.hide(this.options.hideMediaControlDelay || DEFAULT_HIDE_DELAY);
|
|
1264
|
+
}
|
|
1236
1265
|
}
|
|
1237
1266
|
MediaControl.extend = function (properties) {
|
|
1238
1267
|
return extend(MediaControl, properties);
|
|
@@ -1273,3 +1302,14 @@ function mergeElements(a, b) {
|
|
|
1273
1302
|
return acc;
|
|
1274
1303
|
}, a);
|
|
1275
1304
|
}
|
|
1305
|
+
function clickaway(callback, element) {
|
|
1306
|
+
const handler = (event) => {
|
|
1307
|
+
if (!element.contains(event.target)) {
|
|
1308
|
+
callback();
|
|
1309
|
+
window.removeEventListener('click', handler);
|
|
1310
|
+
}
|
|
1311
|
+
};
|
|
1312
|
+
return () => {
|
|
1313
|
+
window.addEventListener('click', handler);
|
|
1314
|
+
};
|
|
1315
|
+
}
|
package/package.json
CHANGED
|
@@ -35,6 +35,7 @@ import statsIcon from '../../../assets/icons/new/stats.svg'
|
|
|
35
35
|
import { BottomGear, GearEvents } from '../bottom-gear/BottomGear.js'
|
|
36
36
|
import { drawSummary, getPingQuality } from './utils.js'
|
|
37
37
|
import { getDownloadQuality } from './utils.js'
|
|
38
|
+
import { trace } from '@gcorevideo/utils'
|
|
38
39
|
|
|
39
40
|
const PLAYBACK_NAMES: Record<string, string> = {
|
|
40
41
|
dash: 'DASH.js',
|
|
@@ -59,7 +60,7 @@ type Metrics = PerfMetrics & {
|
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
const T = 'plugins.nerd_stats'
|
|
63
64
|
|
|
64
65
|
/**
|
|
65
66
|
* `PLUGIN` that displays useful statistics regarding the playback as well as the network quality estimation.
|
|
@@ -233,6 +234,9 @@ export class NerdStats extends UICorePlugin {
|
|
|
233
234
|
}
|
|
234
235
|
|
|
235
236
|
private toggle = () => {
|
|
237
|
+
trace(`${T} toggle`, {
|
|
238
|
+
open: this.open,
|
|
239
|
+
})
|
|
236
240
|
if (this.open) {
|
|
237
241
|
this.hide()
|
|
238
242
|
} else {
|
|
@@ -242,7 +246,7 @@ export class NerdStats extends UICorePlugin {
|
|
|
242
246
|
|
|
243
247
|
private show() {
|
|
244
248
|
this.$el.show()
|
|
245
|
-
this.statsBoxElem.scrollTop(this.statsBoxElem
|
|
249
|
+
this.statsBoxElem.scrollTop(this.statsBoxElem?.scrollTop())
|
|
246
250
|
this.open = true
|
|
247
251
|
|
|
248
252
|
initSpeedTest(this.speedtestMetrics)
|
|
@@ -251,11 +255,15 @@ export class NerdStats extends UICorePlugin {
|
|
|
251
255
|
})
|
|
252
256
|
.catch((e) => {
|
|
253
257
|
reportError(e)
|
|
258
|
+
trace(`${T} speedtest error`, {
|
|
259
|
+
error: e,
|
|
260
|
+
})
|
|
254
261
|
this.disable()
|
|
255
262
|
})
|
|
256
263
|
}
|
|
257
264
|
|
|
258
265
|
private hide() {
|
|
266
|
+
trace(`${T} hide`)
|
|
259
267
|
this.$el.hide()
|
|
260
268
|
this.open = false
|
|
261
269
|
stopSpeedtest()
|
|
@@ -122,12 +122,14 @@ export const initSpeedTest = (customMetrics: SpeedtestMetrics): Promise<void> =>
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
|
-
// getElementById('dlText').textContent = DEFAULT_DOWNLOAD_SPEED;
|
|
126
125
|
|
|
127
|
-
|
|
126
|
+
const myinfoUrl = 'https://gcore.com/.well-known/cdn-debug/json'
|
|
127
|
+
// await fetch('https://iam.gcdn.co/info/json')
|
|
128
|
+
await fetch(myinfoUrl)
|
|
128
129
|
.then(r => r.json())
|
|
129
130
|
.then(data => {
|
|
130
|
-
const country = data['Server Country code'].toLowerCase();
|
|
131
|
+
// const country = data['Server Country code'].toLowerCase();
|
|
132
|
+
const country = getCountryCodeFromClientHeaders(data.client_headers)
|
|
131
133
|
const server = serversList.find(s => s.country === country) || serversList[0];
|
|
132
134
|
if (!server) {
|
|
133
135
|
throw new Error('Failed to select a server');
|
|
@@ -181,3 +183,13 @@ function rankConnectionSpeed(dlSpeed: number): ConnectionSpeed {
|
|
|
181
183
|
}
|
|
182
184
|
return 0;
|
|
183
185
|
}
|
|
186
|
+
|
|
187
|
+
function getCountryCodeFromClientHeaders(clientHeaders: Record<string, string>): string {
|
|
188
|
+
if (clientHeaders && clientHeaders['country']) {
|
|
189
|
+
const m = clientHeaders['country'].match(/'code':\s*'([A-Za-z]{2})'/);
|
|
190
|
+
if (m) {
|
|
191
|
+
return m[1].toLowerCase();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return 'lu';
|
|
195
|
+
}
|
|
@@ -51,6 +51,8 @@ const STANDARD_MEDIA_CONTROL_ELEMENTS: string[] = [
|
|
|
51
51
|
|
|
52
52
|
const MENU_VMARGIN = 12
|
|
53
53
|
|
|
54
|
+
const DEFAULT_HIDE_DELAY = 2000
|
|
55
|
+
|
|
54
56
|
/**
|
|
55
57
|
* Built-in media control elements.
|
|
56
58
|
* @public
|
|
@@ -415,15 +417,13 @@ export class MediaControl extends UICorePlugin {
|
|
|
415
417
|
this.onActiveContainerChanged,
|
|
416
418
|
)
|
|
417
419
|
this.listenTo(this.core, Events.CORE_MOUSE_MOVE, this.show)
|
|
418
|
-
this.listenTo(this.core, Events.CORE_MOUSE_LEAVE,
|
|
419
|
-
this.hide(this.options.hideMediaControlDelay),
|
|
420
|
-
)
|
|
420
|
+
this.listenTo(this.core, Events.CORE_MOUSE_LEAVE, this.delayHide)
|
|
421
421
|
this.listenTo(this.core, Events.CORE_FULLSCREEN, this.show)
|
|
422
422
|
this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.configure)
|
|
423
423
|
this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize)
|
|
424
424
|
|
|
425
|
-
this.listenTo(this.core, 'core:advertisement:start', this.onStartAd)
|
|
426
|
-
this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd)
|
|
425
|
+
// this.listenTo(this.core, 'core:advertisement:start', this.onStartAd)
|
|
426
|
+
// this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd)
|
|
427
427
|
|
|
428
428
|
// const has360 = this.core?.getPlugin('video_360');
|
|
429
429
|
|
|
@@ -468,6 +468,14 @@ export class MediaControl extends UICorePlugin {
|
|
|
468
468
|
Events.CONTAINER_DBLCLICK,
|
|
469
469
|
this.toggleFullscreen,
|
|
470
470
|
)
|
|
471
|
+
const clk = clickaway(() => {
|
|
472
|
+
this.resetUserKeepVisible()
|
|
473
|
+
}, this.core.activeContainer.$el[0])
|
|
474
|
+
this.listenTo(
|
|
475
|
+
this.core.activeContainer,
|
|
476
|
+
Events.CONTAINER_CLICK,
|
|
477
|
+
clk,
|
|
478
|
+
)
|
|
471
479
|
this.listenTo(
|
|
472
480
|
this.core.activeContainer,
|
|
473
481
|
Events.CONTAINER_TIMEUPDATE,
|
|
@@ -522,22 +530,29 @@ export class MediaControl extends UICorePlugin {
|
|
|
522
530
|
this.listenTo(this.core, Events.CONTAINER_DESTROYED, () => {
|
|
523
531
|
this.cancelRenderTimer()
|
|
524
532
|
})
|
|
533
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_MOUSE_ENTER, this.show)
|
|
534
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_MOUSE_LEAVE, this.delayHide)
|
|
525
535
|
}
|
|
526
536
|
|
|
527
537
|
/**
|
|
528
538
|
* Hides the media control UI
|
|
529
539
|
*/
|
|
530
540
|
override disable() {
|
|
541
|
+
trace(`${T} disable`)
|
|
531
542
|
this.userDisabled = true // TODO distinguish between user and system (e.g., unplayable) disabled?
|
|
532
543
|
this.hide()
|
|
533
544
|
this.unbindKeyEvents()
|
|
534
|
-
this.$el.hide()
|
|
545
|
+
this.$el.hide()
|
|
535
546
|
}
|
|
536
547
|
|
|
537
548
|
/**
|
|
538
549
|
* Reenables the plugin disabled earlier with the {@link MediaControl.disable} method
|
|
539
550
|
*/
|
|
540
551
|
override enable() {
|
|
552
|
+
trace(`${T} enable`, {
|
|
553
|
+
chromeless: this.options.chromeless,
|
|
554
|
+
userDisabled: this.userDisabled,
|
|
555
|
+
})
|
|
541
556
|
if (this.options.chromeless) {
|
|
542
557
|
return
|
|
543
558
|
}
|
|
@@ -717,9 +732,16 @@ export class MediaControl extends UICorePlugin {
|
|
|
717
732
|
this.$el.removeClass('w370')
|
|
718
733
|
this.$el.removeClass('w270')
|
|
719
734
|
this.verticalVolume = false
|
|
735
|
+
trace(`${T} playerResize`, {
|
|
736
|
+
size,
|
|
737
|
+
width: this.container.$el.width(),
|
|
738
|
+
height: this.container.$el.height(),
|
|
739
|
+
hideVolumeBar: this.options.hideVolumeBar,
|
|
740
|
+
isMobile: Browser.isMobile,
|
|
741
|
+
})
|
|
742
|
+
|
|
720
743
|
try {
|
|
721
744
|
const skinWidth = this.container.$el.width() || size.width
|
|
722
|
-
|
|
723
745
|
if (skinWidth <= 370 || this.options.hideVolumeBar) {
|
|
724
746
|
this.$el.addClass('w370')
|
|
725
747
|
}
|
|
@@ -1022,10 +1044,16 @@ export class MediaControl extends UICorePlugin {
|
|
|
1022
1044
|
}
|
|
1023
1045
|
|
|
1024
1046
|
private setUserKeepVisible() {
|
|
1047
|
+
trace(`${T} setUserKeepVisible`, {
|
|
1048
|
+
userKeepVisible: this.userKeepVisible,
|
|
1049
|
+
})
|
|
1025
1050
|
this.userKeepVisible = true
|
|
1026
1051
|
}
|
|
1027
1052
|
|
|
1028
1053
|
private resetUserKeepVisible() {
|
|
1054
|
+
trace(`${T} resetUserKeepVisible`, {
|
|
1055
|
+
userKeepVisible: this.userKeepVisible,
|
|
1056
|
+
})
|
|
1029
1057
|
this.userKeepVisible = false
|
|
1030
1058
|
}
|
|
1031
1059
|
|
|
@@ -1034,11 +1062,16 @@ export class MediaControl extends UICorePlugin {
|
|
|
1034
1062
|
}
|
|
1035
1063
|
|
|
1036
1064
|
private show(event?: MouseEvent) {
|
|
1065
|
+
trace(`${T} show`, {
|
|
1066
|
+
disabled: this.disabled,
|
|
1067
|
+
disableControlPanel: this.options.disableControlPanel,
|
|
1068
|
+
event,
|
|
1069
|
+
})
|
|
1037
1070
|
if (this.disabled || this.options.disableControlPanel) {
|
|
1038
1071
|
return
|
|
1039
1072
|
}
|
|
1040
1073
|
|
|
1041
|
-
const timeout =
|
|
1074
|
+
const timeout = DEFAULT_HIDE_DELAY
|
|
1042
1075
|
const mousePointerMoved =
|
|
1043
1076
|
event &&
|
|
1044
1077
|
event.clientX !== this.lastMouseX &&
|
|
@@ -1068,6 +1101,17 @@ export class MediaControl extends UICorePlugin {
|
|
|
1068
1101
|
}
|
|
1069
1102
|
|
|
1070
1103
|
private hide(delay = 0) {
|
|
1104
|
+
trace(`${T} hide`, {
|
|
1105
|
+
delay,
|
|
1106
|
+
visible: this.isVisible(),
|
|
1107
|
+
disabled: this.disabled,
|
|
1108
|
+
hideMediaControl: this.options.hideMediaControl,
|
|
1109
|
+
userKeepVisible: this.userKeepVisible,
|
|
1110
|
+
keepVisible: this.keepVisible,
|
|
1111
|
+
draggingSeekBar: this.draggingSeekBar,
|
|
1112
|
+
draggingVolumeBar: this.draggingVolumeBar,
|
|
1113
|
+
})
|
|
1114
|
+
|
|
1071
1115
|
if (!this.isVisible()) {
|
|
1072
1116
|
return
|
|
1073
1117
|
}
|
|
@@ -1473,7 +1517,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
1473
1517
|
if (!this.hasUpdate || !this.metadataLoaded) {
|
|
1474
1518
|
return this
|
|
1475
1519
|
}
|
|
1476
|
-
const timeout = this.options.hideMediaControlDelay ||
|
|
1520
|
+
const timeout = this.options.hideMediaControlDelay || DEFAULT_HIDE_DELAY
|
|
1477
1521
|
|
|
1478
1522
|
this.$el.html(MediaControl.template({ settings: this.settings }))
|
|
1479
1523
|
|
|
@@ -1553,28 +1597,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
1553
1597
|
this.resetUserKeepVisible()
|
|
1554
1598
|
}
|
|
1555
1599
|
|
|
1556
|
-
// TODO manage by the ads plugin
|
|
1557
|
-
private onStartAd() {
|
|
1558
|
-
// this.advertisementPlaying = true
|
|
1559
|
-
this.disable()
|
|
1560
|
-
}
|
|
1561
|
-
|
|
1562
|
-
// TODO manage by the ads plugin
|
|
1563
|
-
private onFinishAd() {
|
|
1564
|
-
// this.advertisementPlaying = false
|
|
1565
|
-
this.enable()
|
|
1566
|
-
}
|
|
1567
|
-
|
|
1568
|
-
// TODO remove
|
|
1569
|
-
private hideControllAds() {
|
|
1570
|
-
if (
|
|
1571
|
-
this.container.advertisement &&
|
|
1572
|
-
this.container.advertisement.type !== 'idle'
|
|
1573
|
-
) {
|
|
1574
|
-
this.hide()
|
|
1575
|
-
}
|
|
1576
|
-
}
|
|
1577
|
-
|
|
1578
1600
|
private static getPageX(event: MouseEvent | TouchEvent): number {
|
|
1579
1601
|
return getPageX(event)
|
|
1580
1602
|
}
|
|
@@ -1625,6 +1647,13 @@ export class MediaControl extends UICorePlugin {
|
|
|
1625
1647
|
this.$el.removeClass('dvr')
|
|
1626
1648
|
}
|
|
1627
1649
|
}
|
|
1650
|
+
|
|
1651
|
+
private delayHide(e: unknown) {
|
|
1652
|
+
trace(`${T} delayHide`, {
|
|
1653
|
+
e,
|
|
1654
|
+
})
|
|
1655
|
+
this.hide(this.options.hideMediaControlDelay || DEFAULT_HIDE_DELAY)
|
|
1656
|
+
}
|
|
1628
1657
|
}
|
|
1629
1658
|
|
|
1630
1659
|
MediaControl.extend = function (properties) {
|
|
@@ -1678,3 +1707,15 @@ function mergeElements(
|
|
|
1678
1707
|
return acc
|
|
1679
1708
|
}, a)
|
|
1680
1709
|
}
|
|
1710
|
+
|
|
1711
|
+
function clickaway(callback: () => void, element: Node) {
|
|
1712
|
+
const handler = (event: MouseEvent | TouchEvent) => {
|
|
1713
|
+
if (!element.contains(event.target as Node)) {
|
|
1714
|
+
callback()
|
|
1715
|
+
window.removeEventListener('click', handler)
|
|
1716
|
+
}
|
|
1717
|
+
}
|
|
1718
|
+
return () => {
|
|
1719
|
+
window.addEventListener('click', handler)
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
@@ -57,10 +57,10 @@ describe('MediaControl', () => {
|
|
|
57
57
|
core.activePlayback.emit(Events.PLAYBACK_LOADEDMETADATA)
|
|
58
58
|
core.activeContainer.emit(Events.CONTAINER_LOADEDMETADATA)
|
|
59
59
|
})
|
|
60
|
-
// TODO review why delay is needed
|
|
60
|
+
// TODO review why such a short delay is needed
|
|
61
61
|
it('should wait a delay before rendering anything', async () => {
|
|
62
62
|
expect(mediaControl.el.innerHTML).toBe('')
|
|
63
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
63
|
+
await new Promise((resolve) => setTimeout(resolve, 25))
|
|
64
64
|
expect(mediaControl.el.innerHTML).toMatchSnapshot()
|
|
65
65
|
expect(
|
|
66
66
|
mediaControl.$el.find('.media-control-left-panel [data-playpause]')
|