{"version":3,"sources":["node_modules/browser-pack/_prelude.js","src/js/analytics.js","src/js/analytics/addAnalyticsListeners.js","src/js/analytics/listeners/articleListeners.js","src/js/analytics/listeners/fileDownloadListener.js","src/js/analytics/listeners/formListeners.js","src/js/analytics/listeners/geoLocationsListeners.js","src/js/analytics/listeners/globalListeners.js","src/js/analytics/listeners/headerCTAListener.js","src/js/analytics/listeners/heroBannerListeners.js","src/js/analytics/listeners/pageLoadEvents.js","src/js/analytics/listeners/productListeners.js","src/js/analytics/listeners/productReviewsEvents.js","src/js/analytics/listeners/promoBoxListeners.js","src/js/analytics/listeners/selectPromotionListeners.js","src/js/analytics/pushToDataLayer.js","src/js/helpers/convertUrlToAbsolute.js","src/js/helpers/getPathname.js","src/js/helpers/getUrl.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","addAnalyticsListeners","_pushToDataLayer","pushToDataLayer","window","HMSAnalytics","_classCallCheck","this","init","key","value","apply","arguments","_globalListeners","_articleListeners","_pageLoadEvents","_productListeners","_promoBoxListeners","_headerCTAListener","_heroBannerListeners","_selectPromotionListeners","_formListeners","_fileDownloadListener","_productReviewsEvents","_geoLocationsListeners","addProductListeners","addArticleListeners","addPageLoadEvents","addGlobalListeners","addPromoBoxListeners","addHeaderCTAListeners","addHeroBannerListeners","addCampaignListeners","addFormListeners","addFileDownloadListeners","addProductReviewsEvents","addGeoLocationsListeners","$","on","event","action","url","currentTarget","href","clickOnFileDownload","targetHref","$currentTarget","URL","attr","error","fileExtension","pathname","split","pop","linkText","hasClass","find","closest","text","trim","fileNameRegex","RegExp","locationHostname","location","hostname","replace","includes","ga4_data","file_extension","toUpperCase","file_name","match","link_text","link_url","file_type","link_domain","formType","trackedFormId","isFormVisible","isFormStarted","triggerFormFillEvent","$form","data","toLowerCase","sessionStorage","setItem","IntersectionObserver","entries","forEach","entry","isIntersecting","form_name","form_id","root","threshold","observe","get","formName","$eventTarget","website_country","website_language","_convertUrlToAbsolute","document","label","not","$target","targetURL","convertUrlToAbsolute","clickedText","linkUrlHostname","outbound","_getPathname","$clickedText","isSameDomen","eventLabel","getPathname","eventTrigger","eventCategory","eventAction","$pageLoad","top","_getUrl","$link","getUrl","single_item_id","single_item_name","productName","$productID","parents","retailer","startsWith","indexOf","target","is","reviewFormInteractionListener","$productId","$productName","formInteraction","action_type","reviewFormSubmissionListener","ready","intervalId","shadowHost","retries","productIdPushbox","getItem","productNamePushbox","querySelector","test","setInterval","$reviewStars","shadowRoot","clearInterval","each","index","element","eventValue","creative_name","promotion_name","dataLayer","push","link","createElement","concat","protocol","host"],"mappings":"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","file":"analytics.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\n addProductListeners();\n addArticleListeners();\n addPageLoadEvents();\n addGlobalListeners();\n addPromoBoxListeners();\n addHeaderCTAListeners();\n addHeroBannerListeners();\n addCampaignListeners();\n addFormListeners();\n addFileDownloadListeners();\n addProductReviewsEvents();\n addGeoLocationsListeners();\n};\n","import { pushToDataLayer } from '../pushToDataLayer';\n\nfunction clickOnArticleLink() {\n\t$('.ga-article-link').on('click', event => {\n\t\tpushToDataLayer({\n\t\t\tevent: 'engagement',\n\t\t\taction: 'article-read',\n\t\t\turl: event.currentTarget.href\n\t\t});\n\t});\n}\n\nexport const addArticleListeners = () => {\n\tclickOnArticleLink();\n};\n","/* eslint-disable camelcase */\nimport { pushToDataLayer } from '../pushToDataLayer';\n\n/**\n * DataLayer push on file download click event.\n * This function is used also for promo box click event (promoBoxListeners.js).\n * @param {Event} event - The click event object.\n */\nexport const clickOnFileDownload = (event) => {\n let linkText;\n let targetHref;\n const $currentTarget = $(event.currentTarget);\n\n try {\n targetHref = new URL($currentTarget.attr('href'));\n } catch (error) {\n return;\n }\n\n const fileExtension = targetHref.pathname.split('.').pop();\n\n if ($currentTarget.hasClass('ga-pushbox-link')) {\n linkText = $currentTarget.find('.btn span').text().trim();\n } else if ($currentTarget.hasClass('ga-banner-cta-promotion')) {\n linkText = $currentTarget.find('.cta-btn-text').text().trim();\n } else if (($currentTarget.closest('.ProductContent').length > 0)) {\n linkText = $currentTarget.text().trim();\n } else if ($currentTarget.hasClass('footer-text-angle-link')) {\n linkText = $currentTarget.text().trim();\n } else if ($currentTarget.hasClass('ga-campaign-promotion')) {\n linkText = $currentTarget.text().trim();\n } else {\n linkText = $currentTarget.find('span').text().trim();\n }\n\n const allowedFileTypes = ['pdf', 'doc', 'docx', 'xml', 'csv', 'xls', 'xlsx', 'txt', 'ppt', 'pptx', 'zip', 'rar'];\n /*\n - Matches the last \"/\" followed by the filename (excluding \"/\").\n - Captures the filename before the extension.\n - Matches a dot \".\" before the allowed file extensions.\n - Ensures the extension is one of the listed ones.\n - Ends at the string boundary \"$\".\n - Case-insensitive \"i\".\n */\n const fileNameRegex = new RegExp('\\\\/([^/]+)\\\\.(pdf|doc|docx|xml|csv|xls|xlsx|txt|ppt|pptx|zip|rar)$', 'i');\n const locationHostname = window.location.hostname.replace(/^www\\./, '');\n\n if (allowedFileTypes.includes(fileExtension)) {\n pushToDataLayer({\n event: 'ga4_file_download',\n ga4_data: {\n file_extension: fileExtension.toUpperCase(),\n file_name: targetHref.href.match(fileNameRegex)[1],\n link_text: linkText,\n link_url: targetHref.href,\n file_type: 'General download',\n link_domain: locationHostname,\n }\n });\n }\n}\n\nexport const addFileDownloadListeners = () => {\n // File download event listener for:\n // item box (item-box.hbs),\n // call to action (call-to-action-item.hbs),\n // product-intro (product-intro-content.hbs),\n // footer (footer-column-item.hbs),\n // campaign (campaign-image-content.hbs).\n $('.ga4-item-box-link, .ga-banner-cta-promotion, ProductContent a, .footer-text-angle-link, .ga-campaign-promotion').on('click', event => clickOnFileDownload(event));\n};\n","/* eslint-disable camelcase */\nimport { pushToDataLayer } from '../pushToDataLayer';\n\n/**\n * Attaches event listeners to forms for analytics tracking.\n * Depending on the form type, different events are pushed to the dataLayer.\n */\nconst formListeners = () => {\n const $form = $('.js-form');\n\n if (!$form.length) {\n return;\n }\n\n const formType = $form.data('formtype').toLowerCase().replace(/\\s/g, '');\n const trackedFormId = $('form').attr('id');\n sessionStorage.setItem('trackedFormId', trackedFormId);\n let isFormVisible = false;\n let isFormStarted = false;\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !isFormVisible) {\n switch (formType) {\n case 'contactus':\n pushToDataLayer({\n event: 'ga4_form_visible',\n ga4_data: {\n form_name: 'Contact us',\n form_id: trackedFormId\n }\n });\n break;\n case 'newsletter':\n pushToDataLayer({\n event: 'ga4_form_visible',\n ga4_data: {\n form_name: 'Newsletter form',\n form_id: trackedFormId\n }\n });\n break;\n case 'askthedoctor':\n pushToDataLayer({\n event: 'ga4_form_visible',\n ga4_data: {\n form_name: 'Ask the doctor',\n form_id: trackedFormId\n }\n });\n break;\n }\n isFormVisible = true;\n }\n });\n }, {\n root: null,\n threshold: 0.1\n });\n\n observer.observe($form.get(0));\n\n const triggerFormFillEvent = (formName) => {\n pushToDataLayer({\n event: 'ga4_form_start',\n ga4_data: {\n form_name: formName,\n form_id: trackedFormId\n }\n });\n };\n\n $form.find('.form-field').on('change', () => {\n if (!isFormStarted) {\n switch (formType) {\n case 'contactus':\n triggerFormFillEvent('Contact us');\n break;\n case 'newsletter':\n triggerFormFillEvent('Newsletter form');\n break;\n case 'askthedoctor':\n triggerFormFillEvent('Ask the doctor');\n break;\n }\n isFormStarted = true;\n }\n });\n}\n\nexport const addFormListeners = () => {\n formListeners();\n};\n","/* eslint-disable camelcase */\nimport { pushToDataLayer } from '../pushToDataLayer';\n\n/**\n * Handles the click event on country list items (country-selector.hbs)\n * and country links in the world map submenu (header-language-country-selector.hbs).\n */\nconst clickOnCountry = () => {\n $('.ga4-country-link').on('click', event => {\n const $eventTarget = $(event.currentTarget);\n\n pushToDataLayer({\n event: 'ga4_geo_selector',\n ga4_data: {\n website_country: $eventTarget.data('country-code').toUpperCase(),\n website_language: $eventTarget.data('language-code'),\n }\n });\n });\n}\n\nexport const addGeoLocationsListeners = () => {\n clickOnCountry();\n};\n","/* eslint-disable camelcase */\nimport { pushToDataLayer } from '../pushToDataLayer';\nimport { convertUrlToAbsolute } from './../../helpers/convertUrlToAbsolute';\n\nconst externalLinkClick = () => {\n $(document).on('click', 'a[target=_blank]', event => {\n const url = event.currentTarget.href;\n const label = $.trim($(event.currentTarget).text());\n pushToDataLayer({ event: 'exit-link-new-window', label, url });\n });\n}\n\nconst linkClick = () => {\n $('a').not('[href=\"javascript:void(0);\"], [href^=\"tel:\"], [href^=\"mailto:\"]').on('click', event => {\n const $target = $(event.currentTarget);\n const targetURL = convertUrlToAbsolute($target.attr('href'));\n const clickedText = $target.text().trim();\n const linkUrlObject = new URL(targetURL);\n // Remove 'www.' prefix from the hostname\n const linkUrlHostname = linkUrlObject.hostname.replace(/^www\\./, '');\n const locationHostname = window.location.hostname.replace(/^www\\./, '');\n const outbound = locationHostname !== linkUrlHostname;\n\n pushToDataLayer({\n event: 'ga4_click',\n ga4_data: {\n link_url: targetURL,\n link_domain: linkUrlHostname,\n link_text: clickedText,\n outbound: outbound\n }\n });\n });\n}\n\nconst externalPopupVideoClick = () => {\n $('.js-video-youtube').on('click', event => {\n pushToDataLayer({\n event: 'engagement',\n action: 'video-play',\n url: $(event.currentTarget).attr('href')\n });\n })\n}\n\nconst clickOnEmailAddress = () => {\n $('a[href*=\"mailto:\"]').on('click', () => {\n pushToDataLayer({\n event: 'ga4_email_click'\n });\n });\n}\n\nconst clickOnPhoneNumber = () => {\n $('a[href*=\"tel:\"]').on('click', () => {\n pushToDataLayer({\n event: 'ga4_phone_click'\n });\n });\n}\n\nconst openSampleForm = () => {\n $('.ga4-sample-form').on('click', event => {\n const $target = $(event.currentTarget);\n\n pushToDataLayer({\n event: 'ga4_sample_form_cta',\n ga4_data: {\n link_text: $target.text().trim(),\n link_url: convertUrlToAbsolute($target.attr('href'))\n }\n })\n })\n}\n\nexport const addGlobalListeners = () => {\n externalLinkClick();\n linkClick();\n externalPopupVideoClick();\n clickOnEmailAddress();\n clickOnPhoneNumber();\n openSampleForm();\n};\n","/* eslint-disable camelcase */\nimport { pushToDataLayer } from '../pushToDataLayer';\nimport { convertUrlToAbsolute } from './../../helpers/convertUrlToAbsolute';\nimport { getPathname } from './../../helpers/getPathname';\n\n/**\n * DataLayer push on header CTA event.\n */\nconst clickOnHeaderCTA = () => {\n $('.ga-header-item-link').on('click', event => {\n const $clickedText = $(event.currentTarget).find('.title').text().trim();\n const isSameDomen = event.currentTarget.hostname === window.location.hostname;\n const targetURL = convertUrlToAbsolute(event.currentTarget.href);\n\n const eventLabel = isSameDomen\n ? getPathname(event.currentTarget)\n : convertUrlToAbsolute(event.currentTarget.href);\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'headerNavigation',\n eventCategory: 'Header CTAs',\n eventAction: $clickedText,\n eventLabel\n });\n\n pushToDataLayer({\n event: 'ga4_select_header_cta',\n ga4_data: {\n link_text: $clickedText,\n link_url: targetURL\n }\n });\n });\n}\n\nconst clickOnWhereToBuyHeaderCTA = () => {\n $('.ga4-where-to-buy').on('click', () => {\n pushToDataLayer({\n event: 'where_to_buy_header_cta'\n });\n })\n}\n\nexport const addHeaderCTAListeners = () => {\n clickOnHeaderCTA();\n clickOnWhereToBuyHeaderCTA();\n};","import { pushToDataLayer } from '../pushToDataLayer';\nimport { convertUrlToAbsolute } from './../../helpers/convertUrlToAbsolute';\nimport { getPathname } from './../../helpers/getPathname';\n\n/**\n * DataLayer push on Hero Banner(intro-carousel, campaign-media-container, camapign-image-container) click event.\n */\nfunction clickOnHeroBanner() {\n $('.js-region-intro .ga-hero-banner-link').on('click', event => {\n const eventLabel = convertUrlToAbsolute(window.location.href);\n const isSameDomen = event.currentTarget.hostname === window.location.hostname;\n\n const eventAction = isSameDomen\n ? getPathname(event.currentTarget)\n : convertUrlToAbsolute(event.currentTarget.href);\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'bannerClick',\n eventCategory: 'Hero Banner Click',\n eventAction,\n eventLabel\n });\n });\n}\n\nexport const addHeroBannerListeners = () => {\n clickOnHeroBanner();\n};\n","import { pushToDataLayer } from '../pushToDataLayer';\n\nexport const addPageLoadEvents = () => {\n\tconst $pageLoad = $('.ga-page-load-events');\n\n\tif ($pageLoad.length) {\n\t\tswitch ($pageLoad.data('pagetype')) {\n\t\t\tcase 'article':\n\t\t\t\tpushToDataLayer({\n\t\t\t\t\tevent: 'engagement',\n\t\t\t\t\taction: 'article-read',\n\t\t\t\t\turl: window.top.location\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'productdetail':\n\t\t\t\tpushToDataLayer({\n\t\t\t\t\tevent: 'engagement',\n\t\t\t\t\taction: 'product-view',\n\t\t\t\t\turl: window.top.location\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n","/* eslint-disable camelcase */\nimport { getUrl } from '../../helpers/getUrl';\nimport { pushToDataLayer } from '../pushToDataLayer';\nimport { convertUrlToAbsolute } from '../../helpers/convertUrlToAbsolute';\n\nfunction buyNowClickOnProductDetailPage() {\n $(document).on('click', '.ga-buy-now-button', (event) => {\n const $link = $(event.currentTarget);\n const productName = $link.data('productname');\n const $productID = $link.data('productid');\n\n pushToDataLayer({\n event: 'buy-now-button',\n label: productName\n });\n\n if (!$link.parents('.js-click-to-buy-container').length) {\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'buyNowClick',\n eventCategory: 'Buy Now - Retailer Click - Retailer Domain',\n eventAction: productName,\n eventLabel: $link.data('siteurl')\n });\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'buyNowClick',\n eventCategory: 'Buy Now - Retailer Click - Page URL',\n eventAction: productName,\n eventLabel: getUrl(window.location)\n });\n\n pushToDataLayer({\n event: 'ga4_buy_now_go_to_retailer',\n ga4_data: {\n retailer: $link.data('retailer-name'),\n single_item_id: $productID,\n single_item_name: productName\n }\n });\n }\n });\n}\n\nfunction productFindeoutProductSelect() {\n $(document).on('click', '.js-product-findout', event => pushToDataLayer({\n event: 'engagement',\n action: 'findout',\n label: $(event.currentTarget).data('productname')\n }));\n}\n\nfunction buyNowRetailerClick() {\n $(document).on('click', '.ga-buyNow-retailerClick', event => {\n const $link = $(event.currentTarget);\n const productName = $link.data('productname');\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'buyNowClick',\n eventCategory: 'Buy Now - Retailer Click - Retailer Domain',\n eventAction: productName,\n eventLabel: $link.data('retailer-name')\n });\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'buyNowClick',\n eventCategory: 'Buy Now - Retailer Click - Page URL',\n eventAction: productName,\n eventLabel: getUrl(window.location)\n });\n\n pushToDataLayer({\n event: 'ga4_buy_now_go_to_retailer',\n ga4_data: {\n retailer: $link.data('retailer-name'),\n single_item_id: $link.data('productid'),\n single_item_name: productName\n }\n });\n });\n}\n\nfunction buyNowClic2Buy() {\n $(document).on('click', '.ga-click-to-buy', event => {\n const $link = $(event.currentTarget);\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'buyNowClick',\n eventCategory: 'Buy Now - List Retailers',\n eventAction: $link.data('productname'),\n eventLabel: getUrl(window.location)\n });\n\n pushToDataLayer({\n event: 'ga4_buy_now_list_retailers',\n ga4_data: {\n single_item_id: $link.data('productid'),\n single_item_name: $link.data('productname')\n }\n });\n });\n}\n\nfunction buyNowListRetailers() {\n $(document).on('click', '.ga-buy-now-popup', event => {\n const $link = $(event.currentTarget);\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'buyNowClick',\n eventCategory: 'Buy Now - List Retailers',\n eventAction: $link.data('productname'),\n eventLabel: getUrl(window.location)\n });\n\n pushToDataLayer({\n event: 'ga4_buy_now_list_retailers',\n ga4_data: {\n single_item_id: $link.data('productid'),\n single_item_name: $link.data('productname')\n }\n });\n });\n}\n\nfunction whereToBuyRetailerClick() {\n $(document).on('click', '.buyNowList a', event => {\n let targetURL = $(event.currentTarget).attr('href');\n\n if (targetURL !== '') {\n targetURL = targetURL.startsWith('http://') || targetURL.startsWith('https://') || targetURL.startsWith('www.')\n ? targetURL : 'www.' + targetURL;\n if (targetURL.indexOf('?') > 0) {\n targetURL = targetURL.split('?')[0];\n }\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'buyNowClick',\n eventCategory: 'Buy Now - Where to buy',\n eventAction: window.location.href,\n eventLabel: targetURL\n });\n }\n });\n}\n\nfunction productCardClick() {\n $(document).on('click', '.ga-product-click', event => {\n const $link = $(event.currentTarget);\n const $buttonText = $link.text().trim();\n // Default value is $buttonText\n let clickedText = $buttonText;\n const targetURL = convertUrlToAbsolute(event.currentTarget.href);\n\n // If the clicked target is an image\n if ($(event.target).is('img')) {\n clickedText = $(event.target).attr('title');\n }\n\n pushToDataLayer({\n event: 'ga4_product_click',\n ga4_data: {\n single_item_id: $link.data('productid'),\n single_item_name: $link.data('productname'),\n link_text: clickedText,\n link_url: targetURL\n }\n });\n });\n}\n\nexport const addProductListeners = () => {\n buyNowClic2Buy();\n buyNowClickOnProductDetailPage();\n buyNowListRetailers();\n buyNowRetailerClick();\n productFindeoutProductSelect();\n whereToBuyRetailerClick();\n productCardClick();\n}\n","/* eslint-disable camelcase */\nimport { pushToDataLayer } from '../pushToDataLayer';\n\nlet formInteraction = false;\n\n/**\n * Handles the interaction with the review form.\n *\n * @param {String} $productId - The ID of the product.\n * @param {String} $productName - The name of the product.\n */\nconst reviewFormInteractionListener = ($productId, $productName) => {\n $(document).on('input', '.bv-text, .pr-textinput, .pr-textarea', () => {\n if (!formInteraction) {\n pushToDataLayer({\n event: 'ga4_review',\n ga4_data: {\n action_type: 'Start to write a review',\n single_item_id: $productId,\n single_item_name: $productName\n }\n });\n\n formInteraction = true;\n }\n });\n}\n\n/**\n * Handles the submission of a review form.\n *\n * @param {String} $productId - The ID of the product being reviewed.\n * @param {String} $productName - The name of the product being reviewed.\n */\nconst reviewFormSubmissionListener = ($productId, $productName) => {\n $(document).on('click', '.pr-btn-review', () => {\n pushToDataLayer({\n event: 'ga4_review',\n ga4_data: {\n action_type: 'Submit a review',\n single_item_id: $productId,\n single_item_name: $productName\n }\n });\n });\n}\n\n/**\n * Handles the click event for the \"Write a review\" CTA.\n * Call reviewFormInteractionListener and reviewFormSubmissionListener\n * functions to handle the form interaction and submission listeners after review button click.\n */\nconst writeReviewCtaClick = () => {\n const $productId = $('.js-product-intro-item').data('product-id');\n const $productName = $('.js-product-intro-item').data('product-name');\n const shadowHost = document.querySelector('[data-bv-show=\"reviews\"]');\n const maxRetries = 3;\n let retries = 0;\n\n // DataLayer push on \"Write a review\" CTA event for PowerReviews.\n $(document).on('click', '.pr-snippet-write-review-link', () => {\n pushToDataLayer({\n event: 'ga4_review',\n ga4_data: {\n action_type: 'Write a review cta click',\n single_item_id: $productId,\n single_item_name: $productName\n }\n });\n\n reviewFormInteractionListener($productId, $productName);\n reviewFormSubmissionListener($productId, $productName);\n });\n\n // DataLayer push on \"Write a review\" CTA event for PowerReviews on pushbox component.\n $(document).on('click', '.ga-pushbox-link', event => {\n const $target = $(event.currentTarget);\n // Check if the href attribute contains 'write-a-review'\n const isReviewLink = /write-a-review/.test($target.attr('href'));\n\n if (isReviewLink) {\n const productIdPushbox = $target.data('product-id');\n const productNamePushbox = $target.data('product-name');\n\n // Store product ID and name in session storage for use on the powerReview page.\n sessionStorage.setItem('productIdPushbox', productIdPushbox);\n sessionStorage.setItem('productNamePushbox', productNamePushbox);\n\n pushToDataLayer({\n event: 'ga4_review',\n ga4_data: {\n action_type: 'Write a review cta click',\n single_item_id: productIdPushbox,\n single_item_name: productNamePushbox\n }\n });\n }\n });\n\n /**\n * Check for shadow DOM and set up star click handlers.\n * DataLayer push on \"Write a review\" CTA event for BazzarVoice.\n */\n if (shadowHost) {\n const intervalId = setInterval(() => {\n retries++;\n if (shadowHost.shadowRoot) {\n const shadowRoot = shadowHost.shadowRoot;\n const $reviewStars = $(shadowRoot).find('.bv-reviews-product-rating-star');\n\n if ($reviewStars.length > 0) {\n clearInterval(intervalId);\n $reviewStars.each((index, element) => {\n $(element).on('click', () => {\n pushToDataLayer({\n event: 'ga4_review',\n ga4_data: {\n action_type: 'Write a review cta click',\n single_item_id: $productId,\n single_item_name: $productName\n }\n });\n\n reviewFormInteractionListener($productId, $productName);\n reviewFormSubmissionListener($productId, $productName);\n });\n });\n }\n }\n\n if (retries >= maxRetries) {\n clearInterval(intervalId);\n }\n }, 1000);\n }\n}\n\nexport const addProductReviewsEvents = () => {\n $(document).ready(() => {\n // Retrieve product ID and name from session storage to use on the PowerReviews page.\n const productIdPushbox = sessionStorage.getItem('productIdPushbox');\n const productNamePushbox = sessionStorage.getItem('productNamePushbox');\n\n // If product ID and name exist in session storage, initialize review form interactions.\n if (productIdPushbox && productNamePushbox) {\n reviewFormInteractionListener(productIdPushbox, productNamePushbox);\n reviewFormSubmissionListener(productIdPushbox, productNamePushbox);\n }\n\n writeReviewCtaClick();\n });\n};\n","import { pushToDataLayer } from '../pushToDataLayer';\nimport { clickOnFileDownload } from './fileDownloadListener';\n\n/**\n * DataLayer push on Promo Box click event.\n */\nfunction clickOnPromoBox() {\n $('.ga-pushbox-link').on('click', event => {\n clickOnFileDownload(event); // File download event listener\n\n const targetHref = new URL(event.currentTarget.href);\n const eventAction = targetHref.pathname;\n\n pushToDataLayer({\n event: 'gaEvent',\n eventTrigger: 'contentInteraction',\n eventCategory: 'Promo Box',\n eventAction,\n eventLabel: window.location.href,\n eventValue: 'undefined',\n });\n });\n}\n\nexport const addPromoBoxListeners = () => {\n clickOnPromoBox();\n};\n","/* eslint-disable camelcase */\nimport { pushToDataLayer } from '../pushToDataLayer';\n\n/**\n * DataLayer push on Campaign-image-container ctas and video click event.\n * DataLayer push on CTA item.\n */\nfunction clickOnCampaignImageContainer() {\n $('.ga-campaign-promotion').on('click', event => {\n pushToDataLayer({\n event: 'ga4_select_promotion',\n ga4_data: {\n creative_name: 'Campaign box',\n promotion_name: $(event.currentTarget).data('promotion-name')\n }\n });\n });\n\n $('.ga-banner-cta-promotion').on('click', event => {\n pushToDataLayer({\n event: 'ga4_select_promotion',\n ga4_data: {\n creative_name: 'Banner CTA',\n promotion_name: $(event.currentTarget).data('promotion-name')\n }\n });\n });\n}\n\n/**\n * Datalayer push on elements with the 'ga4-select-promotion' class.\n * @param {jQuery.Event} event - The jQuery click event.\n */\nfunction handlePromotionClickAnalytics() {\n $('.ga4-select-promotion').on('click', event => {\n const $target = $(event.currentTarget);\n\n pushToDataLayer({\n event: 'ga4_select_promotion',\n ga4_data: {\n creative_name: $target.data('creative-name'),\n promotion_name: $target.data('promotion-name')\n }\n });\n })\n}\n\nexport const addCampaignListeners = () => {\n clickOnCampaignImageContainer();\n handlePromotionClickAnalytics();\n};\n","/**\n * Pushes analytics data to dataLayer\n * @param {Object} data\n*/\nexport const pushToDataLayer = data => {\n\twindow.dataLayer.push(data);\n};\n","/**\r\n * Converts relative url to absolute.\r\n * For example /men will be returned as https://www.tena.co.uk/men\r\n * @param {String} href\r\n * @returns {String}\r\n */\r\nexport const convertUrlToAbsolute = href => {\r\n const link = document.createElement('a');\r\n link.href = href;\r\n\r\n return link.href;\r\n};\r\n","/**\r\n * Returns pathname from full url.\r\n * @param {Sting} href\r\n * @returns {String}\r\n */\r\nexport const getPathname = href => {\r\n const link = document.createElement('a');\r\n link.href = href;\r\n\r\n return link.pathname;\r\n};\r\n","/**\n * Returns url without parameters/\n * @param {Object} location - window.location\n * @returns {String} Url string\n */\nexport const getUrl = location => `${location.protocol}//${location.host}${location.pathname}`;\n"]}