{"version":3,"file":"dash-ugc.js","sources":["../../../resources/javascript/entrypoint/dash-ugc.js","../../../resources/javascript/features/content-block/dash-ugc/index.js"],"sourcesContent":["import { initDashUgcBlocks, initDashUgcProductBlocks } from '../features/content-block/dash-ugc';\nimport { onDOMContentLoaded } from '../util/loaded';\n\nonDOMContentLoaded(() => {\n  initDashUgcBlocks();\n  initDashUgcProductBlocks();\n});\n","/**\n * Initialise Dash UGC Blocks\n *\n * This function must be called on pages that include Dash UGC\n * content blocks, but no more than once per page load.\n */\nexport const initDashUgcBlocks = () => {\n  // Add an IntersectionObserver to track impressions when a Dash UGC\n  // carousel block becomes visible in the viewport.\n  const observer = new IntersectionObserver((entries) => {\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        continue;\n      }\n\n      // Unobserve, so we only record impressions once per block.\n      observer.unobserve(entry.target);\n\n      const widget = entry.target.querySelector('.dash-ugc-widget');\n\n      const script = document.createElement('script');\n\n      script.type= 'text/javascript';\n      script.src = 'https://cdn.dashhudson.com/web/js/board-carousel-embed.js';\n\n      script.dataset.name = 'dhboard-carousel'\n      script.dataset.galleryId = widget.dataset.candidId;\n      script.dataset.rowSize = 6;\n      script.dataset.gapSize = 4;\n      script.dataset.rowLimit = 1\n      script.dataset.mobileRowSize = 2\n      script.dataset.mobileGapSize = 2;\n      script.dataset.autoplay = 'true';\n      script.dataset.carouselDots = 'true';\n\n      const viewport = new Viewport(MV.breakpoints);\n      const rowSize = viewport.matches('mobile') ? script.dataset.mobileRowSize : script.dataset.rowSize;\n      const gapSize = viewport.matches('mobile') ? script.dataset.mobileGapSize : script.dataset.gapSize;\n\n      const height = Math.round((window.innerWidth - (gapSize * rowSize)) / rowSize);\n      const placeholder = entry.target.querySelector('.dash-ugc-widget-placeholder');\n      placeholder.style.height = `${height}px`;\n\n      const container = entry.target.querySelector('.dash-ugc-widget-container');\n      container.style.height = `${height}px`;\n\n      const mutationObserver = new MutationObserver((records) => {\n        for (const record of records) {\n          for (const addedNode of record.addedNodes) {\n            if (addedNode.classList.contains('slick-list')) {\n              container.style.height = '';\n              placeholder.remove();\n              mutationObserver.disconnect();\n            }\n          }\n        }\n      });\n      mutationObserver.observe(widget, { childList: true, subtree: true });\n\n      widget.appendChild(script);\n\n      observer.disconnect();\n    }\n  }, { rootMargin: `${window.innerHeight / 2}px 0px 0px 0px` });\n\n  document.querySelectorAll('.block--dash-ugc').forEach((block) => {\n    observer.observe(block);\n  });\n};\n\nexport const initDashUgcProductBlocks = () => {\n  // Add an IntersectionObserver to track impressions when a Dash UGC Product Aware\n  // carousel block becomes visible in the viewport.\n  const observer = new IntersectionObserver((entries) => {\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        continue;\n      }\n\n      // Unobserve, so we only record impressions once per block.\n      observer.unobserve(entry.target);\n\n      const widget = entry.target.querySelector('.dash-ugc-product-widget');\n      const block = widget.closest('.block--dash-ugc-product');\n\n      const script = document.createElement('script');\n\n      script.type= 'text/javascript';\n      script.src = 'https://cdn.dashhudson.com/web/js/product-carousel-embed.js';\n\n      script.dataset.name = 'dhproduct-carousel'\n      script.dataset.id = widget.dataset.brandId;\n      script.dataset.idType = \"brand_id\";\n      script.dataset.rowSize = 6;\n      script.dataset.gapSize = 4;\n      script.dataset.rowLimit = 1\n      script.dataset.mobileRowSize = 2\n      script.dataset.mobileGapSize = 2;\n      script.dataset.autoplay = 'true';\n      script.dataset.carouselDots = 'true';\n\n      const viewport = new Viewport(MV.breakpoints);\n      const rowSize = viewport.matches('mobile') ? script.dataset.mobileRowSize : script.dataset.rowSize;\n      const gapSize = viewport.matches('mobile') ? script.dataset.mobileGapSize : script.dataset.gapSize;\n\n      const height = Math.round((window.innerWidth - (gapSize * rowSize)) / rowSize);\n      const placeholder = entry.target.querySelector('.dash-ugc-widget-placeholder');\n      placeholder.style.height = `${height}px`;\n\n      const container = entry.target.querySelector('.dash-ugc-product-widget-container');\n      container.style.height = `${height}px`;\n\n      const mutationObserver = new MutationObserver((records) => {\n\n        for (const record of records) {\n          for (const addedNode of record.addedNodes) {\n            if (addedNode.classList.contains('empty')) {\n              block.style.display = 'none';\n            } else if (addedNode.classList.contains('slick-list')) {\n              container.style.height = '';\n              placeholder.remove();\n              mutationObserver.disconnect();\n            }\n          }\n        }\n      });\n      mutationObserver.observe(widget, { childList: true, subtree: true });\n\n      widget.appendChild(script);\n\n      observer.disconnect();\n    }\n  }, { rootMargin: `${window.innerHeight / 2}px 0px 0px 0px` });\n\n  document.querySelectorAll('.block--dash-ugc-product').forEach((block) => {\n    observer.observe(block);\n  });\n};\n\n"],"names":["onDOMContentLoaded","initDashUgcBlocks","observer","IntersectionObserver","entries","entry","isIntersecting","unobserve","target","widget","querySelector","script","document","createElement","type","src","dataset","name","galleryId","candidId","rowSize","gapSize","rowLimit","mobileRowSize","mobileGapSize","autoplay","carouselDots","viewport","Viewport","MV","breakpoints","matches","height","Math","round","window","innerWidth","placeholder","style","container","mutationObserver","MutationObserver","records","record","addedNode","addedNodes","classList","contains","remove","disconnect","observe","childList","subtree","appendChild","rootMargin","innerHeight","querySelectorAll","forEach","block","initDashUgcProductBlocks","closest","id","brandId","idType","display"],"mappings":"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"}