@brndts/brndts-ads 1.14.1 → 1.14.3

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
  }
@@ -75485,7 +75485,9 @@ var DailymotionMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
75485
75485
  this.context.elements.original = target;
75486
75486
  var _ref = _sliced_to_array(target.src.match(URLMatch) || [], 2), _ = _ref[0], videoId = _ref[1];
75487
75487
  var container = document.createElement("div");
75488
+ this.rootNode = target;
75488
75489
  container.id = "BRNDTS";
75490
+ container.dataset.__brndts_k = target.dataset.__brndts_k;
75489
75491
  elements_default.wrap(target, container);
75490
75492
  window.dailymotion.createPlayer(target.id, {
75491
75493
  video: videoId
@@ -76574,6 +76576,48 @@ var MediaElementFactory = /*#__PURE__*/ function() {
76574
76576
  return null;
76575
76577
  }
76576
76578
  },
76579
+ {
76580
+ key: "isElement",
76581
+ value: function isElement(element) {
76582
+ switch(element.tagName){
76583
+ case "DIV":
76584
+ var hasSrc = _MediaElementFactory.getElementAttribute(element, "src");
76585
+ if (hasSrc) {
76586
+ var _hasSrc = _sliced_to_array(hasSrc, 2), el = _hasSrc[0], value2 = _hasSrc[1];
76587
+ var provider2 = getProviderByUrl(value2);
76588
+ if (provider2) {
76589
+ return el;
76590
+ }
76591
+ }
76592
+ var hasBradMaxPID = _MediaElementFactory.getElementAttribute(element, "data-bradmax-player-pid");
76593
+ if (hasBradMaxPID) {
76594
+ var _hasBradMaxPID = _sliced_to_array(hasBradMaxPID, 2), el1 = _hasBradMaxPID[0], value21 = _hasBradMaxPID[1];
76595
+ return el1;
76596
+ }
76597
+ var isVideoJS = element.querySelector("video-js");
76598
+ if (isVideoJS) {
76599
+ return isVideoJS;
76600
+ }
76601
+ return null;
76602
+ case "IFRAME":
76603
+ var url2 = element.getAttribute("src");
76604
+ if (!url2) {
76605
+ return null;
76606
+ }
76607
+ var provider = getProviderByUrl(url2);
76608
+ if (!provider || provider !== "YOUTUBE" && provider !== "DAILYMOTION") {
76609
+ return null;
76610
+ }
76611
+ case "VIDEO-JS":
76612
+ return element;
76613
+ case "AUDIO":
76614
+ case "VIDEO":
76615
+ return element;
76616
+ default:
76617
+ return null;
76618
+ }
76619
+ }
76620
+ },
76577
76621
  {
76578
76622
  key: "getElements",
76579
76623
  value: function getElements(targets) {
@@ -84171,12 +84215,15 @@ var VideoAd = /*#__PURE__*/ function() {
84171
84215
  logger: context.logger,
84172
84216
  service: context.service
84173
84217
  };
84218
+ videoAdContext.elements.original = target.cloneNode(true);
84174
84219
  var media = MediaElementFactory.get(videoAdContext, target);
84175
84220
  if (!media) {
84176
84221
  throw new Error("No media element found!");
84177
84222
  }
84223
+ if (media.view) {
84224
+ media.view.brndts_VE = this;
84225
+ }
84178
84226
  videoAdContext.media = media;
84179
- videoAdContext.elements.original = target.cloneNode(true);
84180
84227
  this.recorderFactory = new RecorderFactory(this.context);
84181
84228
  this.videoAdContext = videoAdContext;
84182
84229
  this.presentationFactory = new PresentationModeFactory(this.videoAdContext);
@@ -84389,38 +84436,119 @@ var VideoAd = /*#__PURE__*/ function() {
84389
84436
  return VideoAd;
84390
84437
  }();
84391
84438
  // src/Ads/VideoAds/VideoAds.ts
84439
+ function makeKey() {
84440
+ var _crypto;
84441
+ if ((_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.getRandomValues) {
84442
+ var a = new Uint32Array(2);
84443
+ crypto.getRandomValues(a);
84444
+ return a[0].toString(36) + a[1].toString(36);
84445
+ }
84446
+ return Math.random().toString(36).slice(2) + Date.now().toString(36);
84447
+ }
84448
+ function ensureKey(el) {
84449
+ if (!el.dataset.__brndts_k) {
84450
+ var key;
84451
+ if (el.closest("[data-__brndts_k]")) {
84452
+ var _el_closest;
84453
+ key = (_el_closest = el.closest("[data-__brndts_k]")) === null || _el_closest === void 0 ? void 0 : _el_closest.dataset.__brndts_k;
84454
+ }
84455
+ el.dataset.__brndts_k = key || makeKey();
84456
+ }
84457
+ return el.dataset.__brndts_k;
84458
+ }
84392
84459
  var VideoAds = /*#__PURE__*/ function() {
84393
84460
  "use strict";
84394
84461
  function VideoAds(context) {
84395
84462
  _class_call_check(this, VideoAds);
84396
- this.videoAdElements = [];
84463
+ this.byEl = /* @__PURE__ */ new WeakMap();
84464
+ // Element -> VideoAd
84465
+ this.byKey = /* @__PURE__ */ new Map();
84466
+ // key -> { inst: VideoAd, el: Element }
84467
+ this.pendingCleanup = /* @__PURE__ */ new Map();
84397
84468
  this.handlePageMutation = this.handlePageMutation.bind(this);
84469
+ this.attachOrTransfer = this.attachOrTransfer.bind(this);
84470
+ this.scheduleCleanupIfGone = this.scheduleCleanupIfGone.bind(this);
84471
+ this.scanAndAttach = functions_default.debounce(this.scanAndAttach.bind(this), 50);
84398
84472
  this.context = context;
84399
84473
  }
84400
84474
  _create_class(VideoAds, [
84401
84475
  {
84402
- key: "handleMedias",
84403
- value: function handleMedias() {
84404
- try {
84405
- var elements2 = [];
84406
- for(var index = 0; index < this.videoAdElements.length; index++){
84407
- var element = this.videoAdElements[index];
84408
- if (element.isBroken()) {
84409
- element.destroy();
84410
- } else {
84411
- elements2.push(element);
84476
+ key: "attachOrTransfer",
84477
+ value: function attachOrTransfer(el) {
84478
+ if (!_instanceof(el, Element)) {
84479
+ return;
84480
+ }
84481
+ ;
84482
+ var key = ensureKey(el);
84483
+ var known = this.byKey.get(key);
84484
+ if (known) {
84485
+ if (known.el !== el) {
84486
+ var tid = this.pendingCleanup.get(key);
84487
+ if (tid) {
84488
+ clearTimeout(tid);
84489
+ this.pendingCleanup.delete(key);
84412
84490
  }
84491
+ var inst2 = known.inst;
84492
+ this.byEl.delete(known.el);
84493
+ this.byEl.set(el, inst2);
84494
+ known.el = el;
84495
+ this.byKey.set(key, known);
84413
84496
  }
84414
- this.videoAdElements = elements2;
84415
- var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84416
- for(var index1 = 0; index1 < medias.length; index1++){
84417
- if (!medias[index1] || medias[index1].closest("#BRNDTS_R") || medias[index1].querySelector("#BRNDTS_R")) {
84418
- continue;
84419
- }
84420
- var videoAd = new VideoAd(this.context, medias[index1]);
84421
- this.videoAdElements.push(videoAd);
84422
- videoAd.start();
84497
+ return;
84498
+ }
84499
+ var inst = new VideoAd(this.context, el);
84500
+ this.byEl.set(el, inst);
84501
+ this.byKey.set(key, {
84502
+ inst: inst,
84503
+ el: el
84504
+ });
84505
+ inst.start();
84506
+ }
84507
+ },
84508
+ {
84509
+ // --- cleanup when nodes are actually gone (with a grace period) ---
84510
+ key: "scheduleCleanupIfGone",
84511
+ value: function scheduleCleanupIfGone(el) {
84512
+ var _this = this;
84513
+ var delayMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 800;
84514
+ var _el_dataset;
84515
+ var key = (_el_dataset = el.dataset) === null || _el_dataset === void 0 ? void 0 : _el_dataset.__brndts_k;
84516
+ if (!key) {
84517
+ return;
84518
+ }
84519
+ if (!this.byKey.has(key) || this.pendingCleanup.has(key)) {
84520
+ return;
84521
+ }
84522
+ var tid = setTimeout(function() {
84523
+ var entry = _this.byKey.get(key);
84524
+ if (entry && !entry.el.isConnected) {
84525
+ var _entry_inst_destroy, _entry_inst;
84526
+ (_entry_inst_destroy = (_entry_inst = entry.inst).destroy) === null || _entry_inst_destroy === void 0 ? void 0 : _entry_inst_destroy.call(_entry_inst);
84527
+ _this.byEl.delete(entry.el);
84528
+ _this.byKey.delete(key);
84423
84529
  }
84530
+ _this.pendingCleanup.delete(key);
84531
+ }, delayMs);
84532
+ this.pendingCleanup.set(key, tid);
84533
+ }
84534
+ },
84535
+ {
84536
+ // --- DOM wiring: scan + observer ---
84537
+ key: "scanAndAttach",
84538
+ value: function scanAndAttach() {
84539
+ var _this = this;
84540
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84541
+ medias.forEach(function(el) {
84542
+ return _this.attachOrTransfer(el);
84543
+ });
84544
+ }
84545
+ },
84546
+ {
84547
+ // small debounce
84548
+ key: "handleMedias",
84549
+ value: function handleMedias() {
84550
+ try {
84551
+ this.scanAndAttach();
84424
84552
  } catch (error) {
84425
84553
  if (_instanceof(error, Error)) {
84426
84554
  ErrorHandler.handle(error);
@@ -84431,25 +84559,41 @@ var VideoAds = /*#__PURE__*/ function() {
84431
84559
  {
84432
84560
  key: "start",
84433
84561
  value: function start() {
84562
+ var _this = this;
84434
84563
  if (!this.context.supports.api) {
84435
84564
  this.context.logger.error("Setup failed: no support");
84436
84565
  return;
84437
84566
  }
84438
- this.handleMedias();
84567
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84568
+ medias.forEach(function(el) {
84569
+ return _this.attachOrTransfer(el);
84570
+ });
84439
84571
  }
84440
84572
  },
84441
84573
  {
84442
84574
  key: "handlePageMutation",
84443
- value: function handlePageMutation() {}
84444
- },
84445
- {
84446
- key: "updateSize",
84447
- value: function updateSize() {
84575
+ value: function handlePageMutation(mutations) {
84448
84576
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84449
84577
  try {
84450
- for(var _iterator = this.videoAdElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84451
- var videoAd = _step.value;
84452
- videoAd.updateSize();
84578
+ for(var _iterator = mutations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84579
+ var rec = _step.value;
84580
+ rec.removedNodes.forEach(function(n) {
84581
+ if (n.nodeType === 1) {
84582
+ var stack = [
84583
+ n
84584
+ ];
84585
+ while(stack.length){
84586
+ var _node_dataset;
84587
+ var node = stack.pop();
84588
+ if ((_node_dataset = node.dataset) === null || _node_dataset === void 0 ? void 0 : _node_dataset.__brndts_k) {}
84589
+ ;
84590
+ for(var c = node.firstElementChild; c; c = c.nextElementSibling){
84591
+ stack.push(c);
84592
+ }
84593
+ ;
84594
+ }
84595
+ }
84596
+ });
84453
84597
  }
84454
84598
  } catch (err) {
84455
84599
  _didIteratorError = true;
@@ -84465,25 +84609,64 @@ var VideoAds = /*#__PURE__*/ function() {
84465
84609
  }
84466
84610
  }
84467
84611
  }
84612
+ this.scanAndAttach();
84613
+ }
84614
+ },
84615
+ {
84616
+ key: "updateSize",
84617
+ value: function updateSize() {
84618
+ var _this = this;
84619
+ this.byKey.forEach(function(value2, key) {
84620
+ var tid = _this.pendingCleanup.get(key);
84621
+ if (!tid) {
84622
+ var _value2_inst_updateSize, _value2_inst;
84623
+ (_value2_inst_updateSize = (_value2_inst = value2.inst).updateSize) === null || _value2_inst_updateSize === void 0 ? void 0 : _value2_inst_updateSize.call(_value2_inst);
84624
+ }
84625
+ });
84468
84626
  }
84469
84627
  },
84470
84628
  {
84471
84629
  key: "getVideoAd",
84472
84630
  value: function getVideoAd(index) {
84631
+ if (this.byKey.size === 0) {
84632
+ return void 0;
84633
+ }
84473
84634
  if (index === void 0) {
84474
- return this.videoAdElements[0];
84635
+ return this.byKey.values().next().value.inst;
84475
84636
  }
84476
- return this.videoAdElements[index];
84637
+ if (index < 0 || index >= this.byKey.size) {
84638
+ return void 0;
84639
+ }
84640
+ var keys = Array.from(this.byKey.keys());
84641
+ var key = keys[index];
84642
+ if (!key) {
84643
+ return void 0;
84644
+ }
84645
+ var entry = this.byKey.get(key);
84646
+ if (!entry) {
84647
+ return void 0;
84648
+ }
84649
+ return entry.inst;
84477
84650
  }
84478
84651
  },
84479
84652
  {
84480
84653
  key: "destroy",
84481
84654
  value: function destroy() {
84655
+ var _this = this;
84482
84656
  this.context.logger.log("destroying video ads");
84483
- this.videoAdElements.forEach(function(videoAd) {
84484
- videoAd.destroy();
84657
+ this.byKey.forEach(function(value2, key) {
84658
+ var _value2_inst_destroy, _value2_inst;
84659
+ var tid = _this.pendingCleanup.get(key);
84660
+ if (tid) {
84661
+ clearTimeout(tid);
84662
+ _this.pendingCleanup.delete(key);
84663
+ }
84664
+ (_value2_inst_destroy = (_value2_inst = value2.inst).destroy) === null || _value2_inst_destroy === void 0 ? void 0 : _value2_inst_destroy.call(_value2_inst);
84665
+ _this.byEl.delete(value2.el);
84666
+ _this.byKey.delete(key);
84485
84667
  });
84486
- this.videoAdElements = [];
84668
+ this.pendingCleanup.clear();
84669
+ this.byEl = /* @__PURE__ */ new WeakMap();
84487
84670
  this.context.logger.log("destroyed video ads");
84488
84671
  }
84489
84672
  }
@@ -84504,8 +84687,8 @@ var Ads = /*#__PURE__*/ function() {
84504
84687
  _create_class(Ads, [
84505
84688
  {
84506
84689
  key: "handlePageMutation",
84507
- value: function handlePageMutation() {
84508
- this.videoAds.handlePageMutation();
84690
+ value: function handlePageMutation(mutations) {
84691
+ this.videoAds.handlePageMutation(mutations);
84509
84692
  this.staticAds.handlePageMutation();
84510
84693
  }
84511
84694
  },