@brndts/brndts-ads 1.14.2 → 1.14.4

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/dist/index.js CHANGED
@@ -49920,18 +49920,18 @@ var browserPerformanceTimeOrigin = function() {
49920
49920
  // node_modules/@sentry/core/build/esm/utils-hoist/misc.js
49921
49921
  function uuid4() {
49922
49922
  var gbl = GLOBAL_OBJ;
49923
- var crypto = gbl.crypto || gbl.msCrypto;
49923
+ var crypto2 = gbl.crypto || gbl.msCrypto;
49924
49924
  var getRandomByte = function() {
49925
49925
  return Math.random() * 16;
49926
49926
  };
49927
49927
  try {
49928
- if (crypto && crypto.randomUUID) {
49929
- return crypto.randomUUID().replace(/-/g, "");
49928
+ if (crypto2 && crypto2.randomUUID) {
49929
+ return crypto2.randomUUID().replace(/-/g, "");
49930
49930
  }
49931
- if (crypto && crypto.getRandomValues) {
49931
+ if (crypto2 && crypto2.getRandomValues) {
49932
49932
  getRandomByte = function() {
49933
49933
  var typedArray = new Uint8Array(1);
49934
- crypto.getRandomValues(typedArray);
49934
+ crypto2.getRandomValues(typedArray);
49935
49935
  return typedArray[0];
49936
49936
  };
49937
49937
  }
@@ -74819,6 +74819,9 @@ var BradmaxMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
74819
74819
  {
74820
74820
  key: "handlePlayEvent",
74821
74821
  value: function handlePlayEvent() {
74822
+ if (!this.ready) {
74823
+ this.mediaIsReady();
74824
+ }
74822
74825
  this.emit("PLAY");
74823
74826
  this.context.store.dispatch({
74824
74827
  type: "PLAY"
@@ -74828,6 +74831,9 @@ var BradmaxMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
74828
74831
  {
74829
74832
  key: "handlePauseEvent",
74830
74833
  value: function handlePauseEvent() {
74834
+ if (!this.ready) {
74835
+ this.mediaIsReady();
74836
+ }
74831
74837
  this.emit("PAUSED");
74832
74838
  this.context.store.dispatch({
74833
74839
  type: "PAUSE"
@@ -74837,12 +74843,18 @@ var BradmaxMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
74837
74843
  {
74838
74844
  key: "handleSeekingEvent",
74839
74845
  value: function handleSeekingEvent() {
74846
+ if (!this.ready) {
74847
+ this.mediaIsReady();
74848
+ }
74840
74849
  this.emit("SEEKING");
74841
74850
  }
74842
74851
  },
74843
74852
  {
74844
74853
  key: "handleSeekedEvent",
74845
74854
  value: function handleSeekedEvent() {
74855
+ if (!this.ready) {
74856
+ this.mediaIsReady();
74857
+ }
74846
74858
  this.emit("SEEKED");
74847
74859
  }
74848
74860
  },
@@ -75400,6 +75412,7 @@ var DailymotionMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
75400
75412
  var container = document.createElement("div");
75401
75413
  this.rootNode = target;
75402
75414
  container.id = "BRNDTS";
75415
+ container.dataset.__brndts_k = target.dataset.__brndts_k;
75403
75416
  elements_default.wrap(target, container);
75404
75417
  window.dailymotion.createPlayer(target.id, {
75405
75418
  video: videoId
@@ -84296,37 +84309,118 @@ var VideoAd = /*#__PURE__*/ function() {
84296
84309
  return VideoAd;
84297
84310
  }();
84298
84311
  // src/Ads/VideoAds/VideoAds.ts
84312
+ function makeKey() {
84313
+ var _crypto;
84314
+ if ((_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.getRandomValues) {
84315
+ var a = new Uint32Array(2);
84316
+ crypto.getRandomValues(a);
84317
+ return a[0].toString(36) + a[1].toString(36);
84318
+ }
84319
+ return Math.random().toString(36).slice(2) + Date.now().toString(36);
84320
+ }
84321
+ function ensureKey(el) {
84322
+ if (!el.dataset.__brndts_k) {
84323
+ var key;
84324
+ if (el.closest("[data-__brndts_k]")) {
84325
+ var _el_closest;
84326
+ key = (_el_closest = el.closest("[data-__brndts_k]")) === null || _el_closest === void 0 ? void 0 : _el_closest.dataset.__brndts_k;
84327
+ }
84328
+ el.dataset.__brndts_k = key || makeKey();
84329
+ }
84330
+ return el.dataset.__brndts_k;
84331
+ }
84299
84332
  var VideoAds = /*#__PURE__*/ function() {
84300
84333
  function VideoAds(context) {
84301
84334
  _class_call_check(this, VideoAds);
84302
- this.videoAdElements = [];
84335
+ this.byEl = /* @__PURE__ */ new WeakMap();
84336
+ // Element -> VideoAd
84337
+ this.byKey = /* @__PURE__ */ new Map();
84338
+ // key -> { inst: VideoAd, el: Element }
84339
+ this.pendingCleanup = /* @__PURE__ */ new Map();
84303
84340
  this.handlePageMutation = this.handlePageMutation.bind(this);
84341
+ this.attachOrTransfer = this.attachOrTransfer.bind(this);
84342
+ this.scheduleCleanupIfGone = this.scheduleCleanupIfGone.bind(this);
84343
+ this.scanAndAttach = functions_default.debounce(this.scanAndAttach.bind(this), 50);
84304
84344
  this.context = context;
84305
84345
  }
84306
84346
  _create_class(VideoAds, [
84307
84347
  {
84308
- key: "handleMedias",
84309
- value: function handleMedias() {
84310
- try {
84311
- var elements2 = [];
84312
- for(var index = 0; index < this.videoAdElements.length; index++){
84313
- var element = this.videoAdElements[index];
84314
- if (element.isBroken()) {
84315
- element.destroy();
84316
- } else {
84317
- elements2.push(element);
84348
+ key: "attachOrTransfer",
84349
+ value: function attachOrTransfer(el) {
84350
+ if (!_instanceof(el, Element)) {
84351
+ return;
84352
+ }
84353
+ ;
84354
+ var key = ensureKey(el);
84355
+ var known = this.byKey.get(key);
84356
+ if (known) {
84357
+ if (known.el !== el) {
84358
+ var tid = this.pendingCleanup.get(key);
84359
+ if (tid) {
84360
+ clearTimeout(tid);
84361
+ this.pendingCleanup.delete(key);
84318
84362
  }
84363
+ var inst2 = known.inst;
84364
+ this.byEl.delete(known.el);
84365
+ this.byEl.set(el, inst2);
84366
+ known.el = el;
84367
+ this.byKey.set(key, known);
84319
84368
  }
84320
- this.videoAdElements = elements2;
84321
- var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84322
- for(var index1 = 0; index1 < medias.length; index1++){
84323
- if (!medias[index1] || medias[index1].closest("#BRNDTS_R") || medias[index1].querySelector("#BRNDTS_R")) {
84324
- continue;
84325
- }
84326
- var videoAd = new VideoAd(this.context, medias[index1]);
84327
- this.videoAdElements.push(videoAd);
84328
- videoAd.start();
84369
+ return;
84370
+ }
84371
+ var inst = new VideoAd(this.context, el);
84372
+ this.byEl.set(el, inst);
84373
+ this.byKey.set(key, {
84374
+ inst: inst,
84375
+ el: el
84376
+ });
84377
+ inst.start();
84378
+ }
84379
+ },
84380
+ {
84381
+ // --- cleanup when nodes are actually gone (with a grace period) ---
84382
+ key: "scheduleCleanupIfGone",
84383
+ value: function scheduleCleanupIfGone(el) {
84384
+ var _this = this;
84385
+ var delayMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 800;
84386
+ var _el_dataset;
84387
+ var key = (_el_dataset = el.dataset) === null || _el_dataset === void 0 ? void 0 : _el_dataset.__brndts_k;
84388
+ if (!key) {
84389
+ return;
84390
+ }
84391
+ if (!this.byKey.has(key) || this.pendingCleanup.has(key)) {
84392
+ return;
84393
+ }
84394
+ var tid = setTimeout(function() {
84395
+ var entry = _this.byKey.get(key);
84396
+ if (entry && !entry.el.isConnected) {
84397
+ var _entry_inst_destroy, _entry_inst;
84398
+ (_entry_inst_destroy = (_entry_inst = entry.inst).destroy) === null || _entry_inst_destroy === void 0 ? void 0 : _entry_inst_destroy.call(_entry_inst);
84399
+ _this.byEl.delete(entry.el);
84400
+ _this.byKey.delete(key);
84329
84401
  }
84402
+ _this.pendingCleanup.delete(key);
84403
+ }, delayMs);
84404
+ this.pendingCleanup.set(key, tid);
84405
+ }
84406
+ },
84407
+ {
84408
+ // --- DOM wiring: scan + observer ---
84409
+ key: "scanAndAttach",
84410
+ value: function scanAndAttach() {
84411
+ var _this = this;
84412
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84413
+ medias.forEach(function(el) {
84414
+ return _this.attachOrTransfer(el);
84415
+ });
84416
+ }
84417
+ },
84418
+ {
84419
+ // small debounce
84420
+ key: "handleMedias",
84421
+ value: function handleMedias() {
84422
+ try {
84423
+ this.scanAndAttach();
84330
84424
  } catch (error) {
84331
84425
  if (_instanceof(error, Error)) {
84332
84426
  ErrorHandler.handle(error);
@@ -84337,49 +84431,41 @@ var VideoAds = /*#__PURE__*/ function() {
84337
84431
  {
84338
84432
  key: "start",
84339
84433
  value: function start() {
84434
+ var _this = this;
84340
84435
  if (!this.context.supports.api) {
84341
84436
  this.context.logger.error("Setup failed: no support");
84342
84437
  return;
84343
84438
  }
84344
- this.handleMedias();
84439
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84440
+ medias.forEach(function(el) {
84441
+ return _this.attachOrTransfer(el);
84442
+ });
84345
84443
  }
84346
84444
  },
84347
84445
  {
84348
84446
  key: "handlePageMutation",
84349
84447
  value: function handlePageMutation(mutations) {
84350
- var medias = [];
84351
84448
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84352
84449
  try {
84353
84450
  for(var _iterator = mutations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84354
- var mutation = _step.value;
84355
- if (mutation.type === "childList") {
84356
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
84357
- try {
84358
- for(var _iterator1 = mutation.addedNodes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
84359
- var node = _step1.value;
84360
- var _node_matches;
84361
- if ((_node_matches = node.matches) === null || _node_matches === void 0 ? void 0 : _node_matches.call(node, this.context.selectors.targets)) {
84362
- var mediaElement = MediaElementFactory.isElement(node);
84363
- if (mediaElement) {
84364
- medias.push(mediaElement);
84365
- }
84366
- }
84367
- }
84368
- } catch (err) {
84369
- _didIteratorError1 = true;
84370
- _iteratorError1 = err;
84371
- } finally{
84372
- try {
84373
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
84374
- _iterator1.return();
84375
- }
84376
- } finally{
84377
- if (_didIteratorError1) {
84378
- throw _iteratorError1;
84451
+ var rec = _step.value;
84452
+ rec.removedNodes.forEach(function(n) {
84453
+ if (n.nodeType === 1) {
84454
+ var stack = [
84455
+ n
84456
+ ];
84457
+ while(stack.length){
84458
+ var _node_dataset;
84459
+ var node = stack.pop();
84460
+ if ((_node_dataset = node.dataset) === null || _node_dataset === void 0 ? void 0 : _node_dataset.__brndts_k) {}
84461
+ ;
84462
+ for(var c = node.firstElementChild; c; c = c.nextElementSibling){
84463
+ stack.push(c);
84379
84464
  }
84465
+ ;
84380
84466
  }
84381
84467
  }
84382
- }
84468
+ });
84383
84469
  }
84384
84470
  } catch (err) {
84385
84471
  _didIteratorError = true;
@@ -84395,58 +84481,64 @@ var VideoAds = /*#__PURE__*/ function() {
84395
84481
  }
84396
84482
  }
84397
84483
  }
84398
- for(var index = 0; index < medias.length; index++){
84399
- if (!medias[index] || medias[index].closest("#BRNDTS_R") || medias[index].querySelector("#BRNDTS_R") || medias[index].brndts_VE !== void 0) {
84400
- continue;
84401
- }
84402
- var videoAd = new VideoAd(this.context, medias[index]);
84403
- this.videoAdElements.push(videoAd);
84404
- videoAd.start();
84405
- }
84484
+ this.scanAndAttach();
84406
84485
  }
84407
84486
  },
84408
84487
  {
84409
84488
  key: "updateSize",
84410
84489
  value: function updateSize() {
84411
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84412
- try {
84413
- for(var _iterator = this.videoAdElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84414
- var videoAd = _step.value;
84415
- videoAd.updateSize();
84416
- }
84417
- } catch (err) {
84418
- _didIteratorError = true;
84419
- _iteratorError = err;
84420
- } finally{
84421
- try {
84422
- if (!_iteratorNormalCompletion && _iterator.return != null) {
84423
- _iterator.return();
84424
- }
84425
- } finally{
84426
- if (_didIteratorError) {
84427
- throw _iteratorError;
84428
- }
84490
+ var _this = this;
84491
+ this.byKey.forEach(function(value2, key) {
84492
+ var tid = _this.pendingCleanup.get(key);
84493
+ if (!tid) {
84494
+ var _value2_inst_updateSize, _value2_inst;
84495
+ (_value2_inst_updateSize = (_value2_inst = value2.inst).updateSize) === null || _value2_inst_updateSize === void 0 ? void 0 : _value2_inst_updateSize.call(_value2_inst);
84429
84496
  }
84430
- }
84497
+ });
84431
84498
  }
84432
84499
  },
84433
84500
  {
84434
84501
  key: "getVideoAd",
84435
84502
  value: function getVideoAd(index) {
84503
+ if (this.byKey.size === 0) {
84504
+ return void 0;
84505
+ }
84436
84506
  if (index === void 0) {
84437
- return this.videoAdElements[0];
84507
+ return this.byKey.values().next().value.inst;
84508
+ }
84509
+ if (index < 0 || index >= this.byKey.size) {
84510
+ return void 0;
84438
84511
  }
84439
- return this.videoAdElements[index];
84512
+ var keys = Array.from(this.byKey.keys());
84513
+ var key = keys[index];
84514
+ if (!key) {
84515
+ return void 0;
84516
+ }
84517
+ var entry = this.byKey.get(key);
84518
+ if (!entry) {
84519
+ return void 0;
84520
+ }
84521
+ return entry.inst;
84440
84522
  }
84441
84523
  },
84442
84524
  {
84443
84525
  key: "destroy",
84444
84526
  value: function destroy() {
84527
+ var _this = this;
84445
84528
  this.context.logger.log("destroying video ads");
84446
- this.videoAdElements.forEach(function(videoAd) {
84447
- videoAd.destroy();
84529
+ this.byKey.forEach(function(value2, key) {
84530
+ var _value2_inst_destroy, _value2_inst;
84531
+ var tid = _this.pendingCleanup.get(key);
84532
+ if (tid) {
84533
+ clearTimeout(tid);
84534
+ _this.pendingCleanup.delete(key);
84535
+ }
84536
+ (_value2_inst_destroy = (_value2_inst = value2.inst).destroy) === null || _value2_inst_destroy === void 0 ? void 0 : _value2_inst_destroy.call(_value2_inst);
84537
+ _this.byEl.delete(value2.el);
84538
+ _this.byKey.delete(key);
84448
84539
  });
84449
- this.videoAdElements = [];
84540
+ this.pendingCleanup.clear();
84541
+ this.byEl = /* @__PURE__ */ new WeakMap();
84450
84542
  this.context.logger.log("destroyed video ads");
84451
84543
  }
84452
84544
  }