@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.
@@ -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;AAiCjE;;;;;;;;;;;;;;;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,CAMb;IAED,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,IAAI;IAMZ,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"}
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
- // const T = 'plugins.nerd_stats'
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.scrollTop());
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,CA+E3E,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"}
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
- // getElementById('dlText').textContent = DEFAULT_DOWNLOAD_SPEED;
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
+ }
@@ -43,7 +43,7 @@ export declare class CmcdConfig extends CorePlugin {
43
43
  /**
44
44
  * @internal
45
45
  */
46
- get version(): string;
46
+ static get version(): string;
47
47
  /**
48
48
  * @internal
49
49
  */
@@ -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,IAAI,OAAO,WAEV;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"}
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"}
@@ -54,7 +54,7 @@ export class CmcdConfig extends CorePlugin {
54
54
  /**
55
55
  * @internal
56
56
  */
57
- get version() {
57
+ static get version() {
58
58
  return '0.1.0';
59
59
  }
60
60
  /**
@@ -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":"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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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"}
@@ -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, () => this.hide(this.options.hideMediaControlDelay));
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(); // TODO why?
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 = 2000;
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 || 2000;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.28.14",
3
+ "version": "2.28.17",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -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
- // const T = 'plugins.nerd_stats'
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.scrollTop())
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
- await fetch('https://iam.gcdn.co/info/json')
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
+ }
@@ -78,7 +78,7 @@ export class CmcdConfig extends CorePlugin {
78
78
  /**
79
79
  * @internal
80
80
  */
81
- get version() {
81
+ static get version() {
82
82
  return '0.1.0'
83
83
  }
84
84
 
@@ -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() // TODO why?
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 = 2000
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 || 2000
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, 50))
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]')