@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.mjs CHANGED
@@ -49906,18 +49906,18 @@ var browserPerformanceTimeOrigin = function() {
49906
49906
  // node_modules/@sentry/core/build/esm/utils-hoist/misc.js
49907
49907
  function uuid4() {
49908
49908
  var gbl = GLOBAL_OBJ;
49909
- var crypto = gbl.crypto || gbl.msCrypto;
49909
+ var crypto2 = gbl.crypto || gbl.msCrypto;
49910
49910
  var getRandomByte = function() {
49911
49911
  return Math.random() * 16;
49912
49912
  };
49913
49913
  try {
49914
- if (crypto && crypto.randomUUID) {
49915
- return crypto.randomUUID().replace(/-/g, "");
49914
+ if (crypto2 && crypto2.randomUUID) {
49915
+ return crypto2.randomUUID().replace(/-/g, "");
49916
49916
  }
49917
- if (crypto && crypto.getRandomValues) {
49917
+ if (crypto2 && crypto2.getRandomValues) {
49918
49918
  getRandomByte = function() {
49919
49919
  var typedArray = new Uint8Array(1);
49920
- crypto.getRandomValues(typedArray);
49920
+ crypto2.getRandomValues(typedArray);
49921
49921
  return typedArray[0];
49922
49922
  };
49923
49923
  }
@@ -74905,6 +74905,9 @@ var BradmaxMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
74905
74905
  {
74906
74906
  key: "handlePlayEvent",
74907
74907
  value: function handlePlayEvent() {
74908
+ if (!this.ready) {
74909
+ this.mediaIsReady();
74910
+ }
74908
74911
  this.emit("PLAY");
74909
74912
  this.context.store.dispatch({
74910
74913
  type: "PLAY"
@@ -74914,6 +74917,9 @@ var BradmaxMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
74914
74917
  {
74915
74918
  key: "handlePauseEvent",
74916
74919
  value: function handlePauseEvent() {
74920
+ if (!this.ready) {
74921
+ this.mediaIsReady();
74922
+ }
74917
74923
  this.emit("PAUSED");
74918
74924
  this.context.store.dispatch({
74919
74925
  type: "PAUSE"
@@ -74923,12 +74929,18 @@ var BradmaxMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
74923
74929
  {
74924
74930
  key: "handleSeekingEvent",
74925
74931
  value: function handleSeekingEvent() {
74932
+ if (!this.ready) {
74933
+ this.mediaIsReady();
74934
+ }
74926
74935
  this.emit("SEEKING");
74927
74936
  }
74928
74937
  },
74929
74938
  {
74930
74939
  key: "handleSeekedEvent",
74931
74940
  value: function handleSeekedEvent() {
74941
+ if (!this.ready) {
74942
+ this.mediaIsReady();
74943
+ }
74932
74944
  this.emit("SEEKED");
74933
74945
  }
74934
74946
  },
@@ -75487,6 +75499,7 @@ var DailymotionMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
75487
75499
  var container = document.createElement("div");
75488
75500
  this.rootNode = target;
75489
75501
  container.id = "BRNDTS";
75502
+ container.dataset.__brndts_k = target.dataset.__brndts_k;
75490
75503
  elements_default.wrap(target, container);
75491
75504
  window.dailymotion.createPlayer(target.id, {
75492
75505
  video: videoId
@@ -84435,38 +84448,119 @@ var VideoAd = /*#__PURE__*/ function() {
84435
84448
  return VideoAd;
84436
84449
  }();
84437
84450
  // src/Ads/VideoAds/VideoAds.ts
84451
+ function makeKey() {
84452
+ var _crypto;
84453
+ if ((_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.getRandomValues) {
84454
+ var a = new Uint32Array(2);
84455
+ crypto.getRandomValues(a);
84456
+ return a[0].toString(36) + a[1].toString(36);
84457
+ }
84458
+ return Math.random().toString(36).slice(2) + Date.now().toString(36);
84459
+ }
84460
+ function ensureKey(el) {
84461
+ if (!el.dataset.__brndts_k) {
84462
+ var key;
84463
+ if (el.closest("[data-__brndts_k]")) {
84464
+ var _el_closest;
84465
+ key = (_el_closest = el.closest("[data-__brndts_k]")) === null || _el_closest === void 0 ? void 0 : _el_closest.dataset.__brndts_k;
84466
+ }
84467
+ el.dataset.__brndts_k = key || makeKey();
84468
+ }
84469
+ return el.dataset.__brndts_k;
84470
+ }
84438
84471
  var VideoAds = /*#__PURE__*/ function() {
84439
84472
  "use strict";
84440
84473
  function VideoAds(context) {
84441
84474
  _class_call_check(this, VideoAds);
84442
- this.videoAdElements = [];
84475
+ this.byEl = /* @__PURE__ */ new WeakMap();
84476
+ // Element -> VideoAd
84477
+ this.byKey = /* @__PURE__ */ new Map();
84478
+ // key -> { inst: VideoAd, el: Element }
84479
+ this.pendingCleanup = /* @__PURE__ */ new Map();
84443
84480
  this.handlePageMutation = this.handlePageMutation.bind(this);
84481
+ this.attachOrTransfer = this.attachOrTransfer.bind(this);
84482
+ this.scheduleCleanupIfGone = this.scheduleCleanupIfGone.bind(this);
84483
+ this.scanAndAttach = functions_default.debounce(this.scanAndAttach.bind(this), 50);
84444
84484
  this.context = context;
84445
84485
  }
84446
84486
  _create_class(VideoAds, [
84447
84487
  {
84448
- key: "handleMedias",
84449
- value: function handleMedias() {
84450
- try {
84451
- var elements2 = [];
84452
- for(var index = 0; index < this.videoAdElements.length; index++){
84453
- var element = this.videoAdElements[index];
84454
- if (element.isBroken()) {
84455
- element.destroy();
84456
- } else {
84457
- elements2.push(element);
84488
+ key: "attachOrTransfer",
84489
+ value: function attachOrTransfer(el) {
84490
+ if (!_instanceof(el, Element)) {
84491
+ return;
84492
+ }
84493
+ ;
84494
+ var key = ensureKey(el);
84495
+ var known = this.byKey.get(key);
84496
+ if (known) {
84497
+ if (known.el !== el) {
84498
+ var tid = this.pendingCleanup.get(key);
84499
+ if (tid) {
84500
+ clearTimeout(tid);
84501
+ this.pendingCleanup.delete(key);
84458
84502
  }
84503
+ var inst2 = known.inst;
84504
+ this.byEl.delete(known.el);
84505
+ this.byEl.set(el, inst2);
84506
+ known.el = el;
84507
+ this.byKey.set(key, known);
84459
84508
  }
84460
- this.videoAdElements = elements2;
84461
- var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84462
- for(var index1 = 0; index1 < medias.length; index1++){
84463
- if (!medias[index1] || medias[index1].closest("#BRNDTS_R") || medias[index1].querySelector("#BRNDTS_R")) {
84464
- continue;
84465
- }
84466
- var videoAd = new VideoAd(this.context, medias[index1]);
84467
- this.videoAdElements.push(videoAd);
84468
- videoAd.start();
84509
+ return;
84510
+ }
84511
+ var inst = new VideoAd(this.context, el);
84512
+ this.byEl.set(el, inst);
84513
+ this.byKey.set(key, {
84514
+ inst: inst,
84515
+ el: el
84516
+ });
84517
+ inst.start();
84518
+ }
84519
+ },
84520
+ {
84521
+ // --- cleanup when nodes are actually gone (with a grace period) ---
84522
+ key: "scheduleCleanupIfGone",
84523
+ value: function scheduleCleanupIfGone(el) {
84524
+ var _this = this;
84525
+ var delayMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 800;
84526
+ var _el_dataset;
84527
+ var key = (_el_dataset = el.dataset) === null || _el_dataset === void 0 ? void 0 : _el_dataset.__brndts_k;
84528
+ if (!key) {
84529
+ return;
84530
+ }
84531
+ if (!this.byKey.has(key) || this.pendingCleanup.has(key)) {
84532
+ return;
84533
+ }
84534
+ var tid = setTimeout(function() {
84535
+ var entry = _this.byKey.get(key);
84536
+ if (entry && !entry.el.isConnected) {
84537
+ var _entry_inst_destroy, _entry_inst;
84538
+ (_entry_inst_destroy = (_entry_inst = entry.inst).destroy) === null || _entry_inst_destroy === void 0 ? void 0 : _entry_inst_destroy.call(_entry_inst);
84539
+ _this.byEl.delete(entry.el);
84540
+ _this.byKey.delete(key);
84469
84541
  }
84542
+ _this.pendingCleanup.delete(key);
84543
+ }, delayMs);
84544
+ this.pendingCleanup.set(key, tid);
84545
+ }
84546
+ },
84547
+ {
84548
+ // --- DOM wiring: scan + observer ---
84549
+ key: "scanAndAttach",
84550
+ value: function scanAndAttach() {
84551
+ var _this = this;
84552
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84553
+ medias.forEach(function(el) {
84554
+ return _this.attachOrTransfer(el);
84555
+ });
84556
+ }
84557
+ },
84558
+ {
84559
+ // small debounce
84560
+ key: "handleMedias",
84561
+ value: function handleMedias() {
84562
+ try {
84563
+ this.scanAndAttach();
84470
84564
  } catch (error) {
84471
84565
  if (_instanceof(error, Error)) {
84472
84566
  ErrorHandler.handle(error);
@@ -84477,49 +84571,41 @@ var VideoAds = /*#__PURE__*/ function() {
84477
84571
  {
84478
84572
  key: "start",
84479
84573
  value: function start() {
84574
+ var _this = this;
84480
84575
  if (!this.context.supports.api) {
84481
84576
  this.context.logger.error("Setup failed: no support");
84482
84577
  return;
84483
84578
  }
84484
- this.handleMedias();
84579
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84580
+ medias.forEach(function(el) {
84581
+ return _this.attachOrTransfer(el);
84582
+ });
84485
84583
  }
84486
84584
  },
84487
84585
  {
84488
84586
  key: "handlePageMutation",
84489
84587
  value: function handlePageMutation(mutations) {
84490
- var medias = [];
84491
84588
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84492
84589
  try {
84493
84590
  for(var _iterator = mutations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84494
- var mutation = _step.value;
84495
- if (mutation.type === "childList") {
84496
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
84497
- try {
84498
- for(var _iterator1 = mutation.addedNodes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
84499
- var node = _step1.value;
84500
- var _node_matches;
84501
- if ((_node_matches = node.matches) === null || _node_matches === void 0 ? void 0 : _node_matches.call(node, this.context.selectors.targets)) {
84502
- var mediaElement = MediaElementFactory.isElement(node);
84503
- if (mediaElement) {
84504
- medias.push(mediaElement);
84505
- }
84506
- }
84507
- }
84508
- } catch (err) {
84509
- _didIteratorError1 = true;
84510
- _iteratorError1 = err;
84511
- } finally{
84512
- try {
84513
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
84514
- _iterator1.return();
84515
- }
84516
- } finally{
84517
- if (_didIteratorError1) {
84518
- throw _iteratorError1;
84591
+ var rec = _step.value;
84592
+ rec.removedNodes.forEach(function(n) {
84593
+ if (n.nodeType === 1) {
84594
+ var stack = [
84595
+ n
84596
+ ];
84597
+ while(stack.length){
84598
+ var _node_dataset;
84599
+ var node = stack.pop();
84600
+ if ((_node_dataset = node.dataset) === null || _node_dataset === void 0 ? void 0 : _node_dataset.__brndts_k) {}
84601
+ ;
84602
+ for(var c = node.firstElementChild; c; c = c.nextElementSibling){
84603
+ stack.push(c);
84519
84604
  }
84605
+ ;
84520
84606
  }
84521
84607
  }
84522
- }
84608
+ });
84523
84609
  }
84524
84610
  } catch (err) {
84525
84611
  _didIteratorError = true;
@@ -84535,58 +84621,64 @@ var VideoAds = /*#__PURE__*/ function() {
84535
84621
  }
84536
84622
  }
84537
84623
  }
84538
- for(var index = 0; index < medias.length; index++){
84539
- if (!medias[index] || medias[index].closest("#BRNDTS_R") || medias[index].querySelector("#BRNDTS_R") || medias[index].brndts_VE !== void 0) {
84540
- continue;
84541
- }
84542
- var videoAd = new VideoAd(this.context, medias[index]);
84543
- this.videoAdElements.push(videoAd);
84544
- videoAd.start();
84545
- }
84624
+ this.scanAndAttach();
84546
84625
  }
84547
84626
  },
84548
84627
  {
84549
84628
  key: "updateSize",
84550
84629
  value: function updateSize() {
84551
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84552
- try {
84553
- for(var _iterator = this.videoAdElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84554
- var videoAd = _step.value;
84555
- videoAd.updateSize();
84556
- }
84557
- } catch (err) {
84558
- _didIteratorError = true;
84559
- _iteratorError = err;
84560
- } finally{
84561
- try {
84562
- if (!_iteratorNormalCompletion && _iterator.return != null) {
84563
- _iterator.return();
84564
- }
84565
- } finally{
84566
- if (_didIteratorError) {
84567
- throw _iteratorError;
84568
- }
84630
+ var _this = this;
84631
+ this.byKey.forEach(function(value2, key) {
84632
+ var tid = _this.pendingCleanup.get(key);
84633
+ if (!tid) {
84634
+ var _value2_inst_updateSize, _value2_inst;
84635
+ (_value2_inst_updateSize = (_value2_inst = value2.inst).updateSize) === null || _value2_inst_updateSize === void 0 ? void 0 : _value2_inst_updateSize.call(_value2_inst);
84569
84636
  }
84570
- }
84637
+ });
84571
84638
  }
84572
84639
  },
84573
84640
  {
84574
84641
  key: "getVideoAd",
84575
84642
  value: function getVideoAd(index) {
84643
+ if (this.byKey.size === 0) {
84644
+ return void 0;
84645
+ }
84576
84646
  if (index === void 0) {
84577
- return this.videoAdElements[0];
84647
+ return this.byKey.values().next().value.inst;
84648
+ }
84649
+ if (index < 0 || index >= this.byKey.size) {
84650
+ return void 0;
84578
84651
  }
84579
- return this.videoAdElements[index];
84652
+ var keys = Array.from(this.byKey.keys());
84653
+ var key = keys[index];
84654
+ if (!key) {
84655
+ return void 0;
84656
+ }
84657
+ var entry = this.byKey.get(key);
84658
+ if (!entry) {
84659
+ return void 0;
84660
+ }
84661
+ return entry.inst;
84580
84662
  }
84581
84663
  },
84582
84664
  {
84583
84665
  key: "destroy",
84584
84666
  value: function destroy() {
84667
+ var _this = this;
84585
84668
  this.context.logger.log("destroying video ads");
84586
- this.videoAdElements.forEach(function(videoAd) {
84587
- videoAd.destroy();
84669
+ this.byKey.forEach(function(value2, key) {
84670
+ var _value2_inst_destroy, _value2_inst;
84671
+ var tid = _this.pendingCleanup.get(key);
84672
+ if (tid) {
84673
+ clearTimeout(tid);
84674
+ _this.pendingCleanup.delete(key);
84675
+ }
84676
+ (_value2_inst_destroy = (_value2_inst = value2.inst).destroy) === null || _value2_inst_destroy === void 0 ? void 0 : _value2_inst_destroy.call(_value2_inst);
84677
+ _this.byEl.delete(value2.el);
84678
+ _this.byKey.delete(key);
84588
84679
  });
84589
- this.videoAdElements = [];
84680
+ this.pendingCleanup.clear();
84681
+ this.byEl = /* @__PURE__ */ new WeakMap();
84590
84682
  this.context.logger.log("destroyed video ads");
84591
84683
  }
84592
84684
  }