{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///./scripts/utils/polyfills.js","webpack:///./scripts/oneTrust/oneTrust.js","webpack:///./scripts/analytics/glimpse/eventDefinitions/index.js","webpack:///./scripts/analytics/glimpse/eventDefinitions/app.js","webpack:///./scripts/analytics/glimpse/eventDefinitions/oneIdModal.js","webpack:///./scripts/analytics/glimpse/lifecycleHandlers/index.tsx","webpack:///./scripts/analytics/glimpse/lifecycleHandlers/appDeepLink.tsx","webpack:///./scripts/analytics/glimpseV2Tracking.js","webpack:///./scripts/utils/helpers.tsx","webpack:///./scripts/analytics/adobeAnalytics.js","webpack:///./scripts/components/onScroll.js","webpack:///./scripts/components/hero.js","webpack:///./scripts/components/grid.js","webpack:///./scripts/components/modal.js","webpack:///./scripts/entry.js","webpack:///./scripts/components/carousel.js","webpack:///./scripts/analytics/adobeLaunch.js","webpack:///./scripts/utils/langRegionRedirect.js","webpack:///./scripts/device/checkDevice.js","webpack:///./scripts/Global/utils/helpers.js","webpack:///./scripts/utils/sdk.js","webpack:///./scripts/components/langSelector.js","webpack:///./cannonball_v2/scripts/utils/buttonActions.js","webpack:///./scripts/analytics/analyticsManager.js"],"names":["root","factory","exports","module","define","amd","a","i","this","smoothscroll","polyfill","Element","prototype","CharacterData","DocumentType","forEach","item","hasOwnProperty","Object","defineProperty","configurable","enumerable","writable","value","parentNode","removeChild","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","call","parentElement","nodeType","window","CustomEvent","event","params","parameters","bubbles","cancelable","detail","evt","document","createEvent","initCustomEvent","OT_COOKIE_KEYS","BOX_CLOSED","CONSENT","prevConsent","loginConsentState","oneTrustIsActiveGroup","group","OptanonActiveGroups","match","addOneTrustOnConsentFunction","func","OptanonWrapperFunctions","push","initalizeOneTrust","onConsentChanged","options","onload","onerror","OneTrust","loaded","Optanon","OnConsentChanged","script","createElement","type","charset","defer","src","setAttribute","guuid","head","appendChild","thirdPartyLinks","querySelectorAll","link","addEventListener","e","preventDefault","syncOneTrustConsent","id","isAuth","countryCode","OneTrustConsent","reload","split","filter","length","sendConsent","cookies","getAllCookies","name","values","includes","setCookie","expires","location","setFallbackActiveGroup","activateAllCategories","dssMlpConfigs","regionConfig","featureConfig","enableCMP","loadAdobeSuites","cmpDisabled","AdobeAnalytics","loadScript","initAdobeLaunch","InsertScript","staticRoot","track","Event","adobeLaunchUrl","appEvents","lifecycle","appDeepLink","eventUrn","hierarchyBypass","payload","appStart","operationName","operationState","operationType","appLaunched","loadEnd","oneIdModal","containerView","emailForm","containerKey","containerType","elements","elementId","elementIdType","elementIndex","mediaFormatType","elementsPerWidth","horizontalPosition","verticalPosition","interaction","signUp","elementName","elementType","interactionType","pageView","pageId","pageName","pageKey","referrer","searchParams","URL","href","has","placement","get","placementDetails","distributionPartner","advertising","numberOfColumns","numberOfRows","placementColumn","placementRow","matrixLocation","parseInt","GlimpseV2Tracking","modalEl","index","target","modalContainers","modalContainer","pageType","pageTypeMeta","querySelector","getAttribute","isSticky","prefix","visibleEl","assetData","asset","isVisible","tagName","toLowerCase","style","backgroundImage","slice","replace","indexOf","protocol","dataset","gv2Name","url","pathname","test","parentContainer","backgroundAsset","callback","data","initData","slug","getSlug","abortTrack","payloadData","initPageViewPayload","getBackgroundAssetSrc","backgroundAssetType","getGlimpseV2PageType","common","isOverlay","deepGetOfType","String","initInteractionPayload","getElementName","gv2Key","gv2Type","initContainerViewPayload","button","contentTransactionId","makeGlimpseCall","entries","entry","isIntersecting","gv2Index","targetEl","modal","getElementById","setTimeout","classList","contains","trackModalOpen","currentTarget","hasAttribute","postClickHandler","killswitch","disableGlimpseV2","config","enableValidation","enableAnalyticsValidation","glimpse_v2","GlimpseEvent","AnalyticsManager","glimpseEvent","GlimpseEvents","glimpseEvents","UserActivityApi","userActivityApi","trackDefinedEvent","containers","intersect","IntersectionObserver","onIntersect","threshold","observe","dssAnalyticsInit","onClickHandler","dssTrack","then","error","console","log","contextData","appName","appVersion","consentStates","consentStatus","experiments","isAuthenticated","isLoggedIn","partner","platform","optimizelyCampaignId","experimentFeatureId","experimentId","optimizelyExperimentId","experimentPlatform","variantId","optimizelyVariationId","appLanguage","deviceLanguage","collectionGroupKey","collectionId","destination","contentKeys","contentId","encodedFamilyId","encodedSeriesId","mediaId","programId","contentType","elementsInView","mediaType","programType","adobeId","deviceData","mid","consentFallback","correlationId","JSON","parse","sessionStorage","getItem","kochavaAppId","defintionKey","eventType","eventKey","glimpseDefintionSet","EventDefinitions","initLifeCyclePayload","LifecycleHandlers","inboundUrl","appendScript","body","removeOneTrustLink","otManageLink","remove","endsWith","pop","isValidLocaleFormat","substr","elem","styles","getComputedStyle","opacity","getPropertyValue","offsetWidth","offsetHeight","getClientRects","urlLang","getSlugWithoutLocale","slugArray","splice","join","convertUrlToArray","parts","cleanUrl","startsWith","stripEndSlashes","getPageName","toString","getSection","optimizelyIntegrationCall","integrationAction","sVariable","optimizelyIntegration","optimizely","trackData","action","ctaButtonURL","ctaButtonCopy","moduleLocation","pagename","section","urlSlug","visitorID","analyticsName","analyticsSection","analyticsSectionName","moduleType","trim","charAt","toUpperCase","webAppName","tl","t","appendIdsForCrossDomainLinks","visitor","server_path","analytics","adobe","crossDomains","selectors","map","domain","appendVisitorIDsTo","deepGet","initAdobeAnalytics","isMobile","heroObserverCallback","intersectionRatio","add","logoObserverCallback","footerObserverCallback","intersectObserverInit","ctaToastModule","footerModule","logoTarget","heroTarget","scrollToNext","nav","top","nextElementSibling","getBoundingClientRect","navOffsetHeight","position","pageYOffset","scrollTo","behavior","onHeroInit","deviceType","isMobileDevice","backgroundVideo","videoBackgroundInit","hintLink","hero","richtextBottom","getElementsByClassName","richtextLink","getElementsByTagName","setHeroRichtextTestId","getNumItemsToShow","grid","numItemsToShowOverride","numItemsToShow","gridLayout","gridLayoutMobile","clientWidth","onGridInit","showMoreButton","gridItems","hasMoreItemsToShow","gridItem","visibility","faqElements","faqElement","faqButton","toggle","initFaq","hiddenGridItems","transitionDelay","onClickShowMoreItems","display","closeModal","key","modalToClose","closeButtons","closeButton","removeEventListener","modals","openModal","modalToOpen","modalHref","modalScrollers","modalScroller","scrollTop","init","carousels","modalLinks","isDeviceSupported","lazyLoadInit","LazyLoad","convertNodes","matchMedia","addListener","grids","onGridsInit","carousel","autoplay","speed","Splide","perPage","focus","interval","flickMaxPages","updateOnMove","pagination","padding","throttle","breakpoints","1440","mount","modalLink","langSelectorInit","initButtonActions","setupRichTextForTracking","localStorage","removeItem","initializeSdk","sdkPayload","glimpseV2Tracking","initGlimpseV2","firePageLoad","fireAction","fireGlimpseEvent","userData","dssDeviceId","prefLink","preFetch","abTest","weaponxScript","dssDataLayerDefaults","campaignCode","cid","countrycodeRegion","dssAccountId","dssSessionId","logInStatus","pageURL","partnerId","redemptionCode","subscriberPurchased","swid","unid","userProductName","userProductSku","userSubscriptionState","userVisitorState","voucherCode","AdobeLaunch","pick","source","keys","dest","k","updateDataLayer","dssDataLayer","loggedIn","regionCode","dispatchEvent","launchScriptUrl","crawlerUserAgents","localStorageSetItem","setItem","localStorageGetItem","isInArray","arr","arg","localStoreGetItem","itemStr","now","Date","getTime","ttl","localStorageRemoveItem","getLangOverride","langOverride","regionLanguages","rootLangs","v","languagePreferenceMlp","browserLanguage","navigator","languages","language","userLanguage","browserLangRegion","defaultLang","reqUrlPrefix","lang","info","redirectForRegionLang","bypassRedirect","sessionRegionCode","userAgent","some","bot","getCrawlerBot","origin","search","redirectUrl","newLang","shift","unshift","newLangRegionAndPath","replaceLanguageInPathname","stringify","localStoreSetItem","authLangRegionInit","redirectHome","isLoggedInRedirect","deviceSupportMatrix","chrome","firefox","msie","safari","device","getDevice","isPhone","formFactor","isTablet","isCrawlerBot","browser","version","browserVersion","minVersion","meetsMinimum","isSupported","osxVersionSegments","platformVersion","isDeviceSupportedVersionOfSafari","variant","prefetchSlugs","rel","NodeList","thisArg","textContent","cb","async","serverPath","sdkSessionUtil","setBootstrapConfiguration","sdk","userManager","session","getSessionInfo","sessionInfo","getSdkSession","sdkSession","bam","isSubscriber","UserActivity","SDK","Glimpse","langSelector","path","languageAppCodeMeta","getElementsByName","actionOnClick","ToggleInfoDisplay","destinationUrl","Util","getQueryParam","assign","navigateUrlQsp","history","back","navigateBack","scrollToTop","oneId","openLightbox","oneIdSignup","cta","skdPayload","triggerEvent","bind","initContextData","bindPageLoad","bindElementEvents","updateDynamicData","_sessionInfo","env","envString","host","adobeRsid","s_account","deviceStr","browserType","connectionType","osName","osVersion","platformType","adobeRsidName","rsidname","deviceLocale","optimizelyContextData","screenOrientation","testId","dssProfileId","Boolean","consentGroups","g","optimizelyData","adobeSdkVersion","getMarketingCloudVisitorID","previousUrl","timestamp","toISOString","getNewRepeat","captureEvent","customEvent","err","eventData","categoryStrings","glimpseTimeStamp","activitySessionId","glimpseV2Init","uuidv4","additionalParameters","glimpseTrackingParameters","getConsentState","setTrackingParameters","trackEvent"],"mappings":"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","file":"scripts/marketing_script_bundle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn ","import smoothscroll from 'smoothscroll-polyfill';\n\nfunction removePolyfill(arr) {\n arr.forEach(function (item) {\n if (item.hasOwnProperty('remove')) {\n return;\n }\n Object.defineProperty(item, 'remove', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: function remove() {\n if (this.parentNode === null) {\n return;\n }\n this.parentNode.removeChild(this);\n }\n });\n });\n}\n\nfunction closestPolyfill() {\n if (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n\n if (!Element.prototype.closest) {\n Element.prototype.closest = function (s) {\n var el = this;\n\n do {\n if (Element.prototype.matches.call(el, s)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n\n return null;\n };\n }\n}\n\nfunction customEventPolyfill() {\n if (typeof window.CustomEvent === 'function') return false;\n\n function CustomEvent(event, params) {\n const parameters = params || { bubbles: false, cancelable: false, detail: null };\n const evt = document.createEvent('CustomEvent');\n\n evt.initCustomEvent(event, parameters.bubbles, parameters.cancelable, parameters.detail);\n\n return evt;\n }\n\n window.CustomEvent = CustomEvent;\n\n return true;\n}\n\n\nsmoothscroll.polyfill();\nremovePolyfill([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\nclosestPolyfill();\ncustomEventPolyfill();\n","import { get as getCookie, getAll as getAllCookies, set as setCookie } from 'es-cookie';\nimport { deepGetOfType } from 'bam-deep-get';\nimport { AdobeAnalytics } from '../analytics/adobeAnalytics';\nimport { initAdobeLaunch } from '../analytics/adobeLaunch';\n\nconst OT_COOKIE_KEYS = {\n BOX_CLOSED: 'OptanonAlertBoxClosed',\n CONSENT: 'OptanonConsent'\n};\n\nlet prevConsent = '';\nlet loginConsentState = null;\n\n/**\n * Check if OneTrust is active\n * @returns {Boolean} True = OneTrust active\n */\nfunction isOneTrustActive() {\n return (window.Optanon);\n}\n\n/**\n * @description Check to see if the user consented to a particular group\n * @param {string} group The groups number\n * @returns {boolean} False if not active. True if user accepts or OneTrust not present\n */\nexport function oneTrustIsActiveGroup(group) {\n return (window.OptanonActiveGroups && window.OptanonActiveGroups.match(group));\n}\n\n/**\n * @description Check to see if the previous Consent contains any items that were deactivated.\n * If they are found return true to signal a reload is required.\n * @returns {Boolean} If a restart is required due to a previously activated group being disabled.\n */\nfunction checkForReload() {\n const prevActivedGroups = prevConsent.split(',');\n\n const deactivated = prevActivedGroups.filter(group => {\n if (!group) return false;\n\n return !(oneTrustIsActiveGroup(group));\n });\n\n return (deactivated.length);\n}\n\n/**\n * @description Add a function to be called when the user updates their OneTrust Consent\n * @param {Function} func = Function to be run when the user updates their consent\n */\nexport function addOneTrustOnConsentFunction(func) {\n if (!window.OptanonWrapperFunctions) {\n window.OptanonWrapperFunctions = [];\n }\n\n if (func && typeof func === 'function') {\n window.OptanonWrapperFunctions.push(func);\n }\n}\n\n/**\n * @description If there are any OptanonWrapperFunctions functions that were added after OneTrust loaded,\n * this function will re-run the OptanonWrapper method\n * @param {function} onConsentChanged - callback for consent change\n * @param {Object} options callbacks for onload and onerror\n */\nexport function initalizeOneTrust(onConsentChanged = () => {}, options = { onload: () => {}, onerror: () => {} }) {\n const { OneTrust } = window;\n\n if (OneTrust) {\n addOneTrustOnConsentFunction(()=>{\n if (!window.OneTrust.loaded) {\n // eslint-disable-next-line new-cap\n window.Optanon.OnConsentChanged(() => {\n onConsentChanged();\n });\n window.OneTrust.loaded = true;\n }\n });\n\n const script = document.createElement('script');\n\n script.type = 'text/javascript';\n script.charset = 'UTF-8';\n script.defer = true;\n script.onerror = () => {\n options.onerror();\n };\n script.onload = () => {\n options.onload();\n };\n script.src = OneTrust.src;\n script.setAttribute('data-document-language', 'true');\n script.setAttribute('data-domain-script', OneTrust.guuid);\n\n document.head.appendChild(script);\n\n prevConsent = window.OptanonActiveGroups;\n\n //Adding in preventDetaults for OT prefernce enter links that go to href=\"#\"\n const thirdPartyLinks = document.querySelectorAll('#onetrust-pc-sdk [href=\"#\"]');\n\n thirdPartyLinks.forEach(link => {\n link.addEventListener('click', e => {\n e.preventDefault();\n });\n });\n }\n}\n\n/**\n * @description Takes the users AccountId and associates that Id with the user consent\n * @param {string} id - The user's D+ account Id or device id\n * @param {bool} isAuth - Login state\n * @param {string} countryCode - Users physical location\n */\nexport function syncOneTrustConsent(id, isAuth, countryCode) {\n const { OneTrustConsent } = window;\n\n if (isOneTrustActive()) {\n if (prevConsent === window.OptanonActiveGroups && loginConsentState === isAuth) return;\n\n let reload = false;\n\n if (prevConsent) {\n reload = checkForReload();\n }\n\n prevConsent = window.OptanonActiveGroups;\n loginConsentState = isAuth;\n\n if (OneTrustConsent) {\n OneTrustConsent.sendConsent(id, isAuth, countryCode, () => {\n if (reload) {\n const cookies = getAllCookies();\n\n for (const name in cookies) {\n if (!Object.values(OT_COOKIE_KEYS).includes(name)) {\n setCookie(name, cookies[name], { expires: -1 });\n }\n }\n window.location.reload();\n }\n });\n }\n }\n}\n\n\n/**\n * @description Set OptanonActiveGroups Fallback to be cat 1\n */\nexport function setFallbackActiveGroup() {\n window.OptanonActiveGroups = ',1,';\n}\n\n/**\n * @description If the Onetrust featureConfig is on, this function will be used to get a local version of\n * OptanonActiveGroups.\n * If the OneTrust cookie is already set us that to populate\n * If the fallback cookie is set activate all categories.\n */\nexport function activateAllCategories() {\n if (window.dssMlpConfigs.regionConfig.featureConfig.enableCMP) {\n setFallbackActiveGroup();\n } else {\n window.OptanonActiveGroups = ',1,2,3,4,';\n }\n}\n\n\n/**\n * @description If the current user is a kid's profile do not show the consent banner. The next time\n * the user is on an adult profile, show the banner.\n * @param {object} profile The current active profile\n */\nexport function shouldBlockBanner(profile) {\n const closedExists = getCookie(OT_COOKIE_KEYS.BOX_CLOSED);\n const kidsModeEnabled = deepGetOfType(profile, 'attributes.kidsModeEnabled', Boolean, false);\n\n if (!closedExists && kidsModeEnabled) {\n setCookie(OT_COOKIE_KEYS.BOX_CLOSED, 'kidsAccountBlock');\n } else if (closedExists === 'kidsAccountBlock' && !kidsModeEnabled) {\n setCookie(OT_COOKIE_KEYS.BOX_CLOSED, 'kidsAccountBlock', { expires: -1 });\n }\n}\n\n/**\n * @description When the user accepts Group 4 cookies, load both Adobe Analytics and Adobe Launch\n */\nexport function loadAdobeSuites(cmpDisabled = false) {\n if (oneTrustIsActiveGroup('2')) {\n // eslint-disable-next-line new-cap\n\n if (cmpDisabled) {\n AdobeAnalytics.loadScript(() => {\n initAdobeLaunch(cmpDisabled);\n });\n } else {\n window.Optanon.InsertScript(\n `${window.dssMlpConfigs.staticRoot}/scripts/analytics_script_bundle.js`,\n 'head',\n () => {\n AdobeAnalytics.track(new Event('load'));\n },\n null,\n '4'\n );\n\n if (window.dssMlpConfigs.adobeLaunchUrl) {\n // eslint-disable-next-line new-cap\n window.Optanon.InsertScript(window.dssMlpConfigs.adobeLaunchUrl, 'head', () => {\n initAdobeLaunch(cmpDisabled);\n }, null, '4');\n }\n }\n }\n}\n","import oneIdModal from './oneIdModal';\nimport app from './app';\n\nexport default {\n ...app,\n ...oneIdModal\n};\n","export default {\n appEvents: {\n lifecycle: {\n appDeepLink: {\n eventUrn: 'urn:dss:event:fed:lifecycle:app-deeplink',\n hierarchyBypass: false,\n payload: {}\n },\n appStart: {\n eventUrn: 'urn:dss:event:app-performance:app-lifecycle:lifecycle',\n hierarchyBypass: true,\n payload: {\n operationName: 'coldStart',\n operationState: 'start',\n operationType: 'lifecycle'\n }\n },\n appLaunched: {\n eventUrn: 'appLaunched',\n hierarchyBypass: true,\n payload: {}\n },\n loadEnd: {\n eventUrn: 'urn:dss:event:app-performance:app-lifecycle:lifecycle',\n hierarchyBypass: true,\n payload: {\n operationName: 'coldStart',\n operationState: 'end',\n operationType: 'lifecycle'\n }\n }\n }\n }\n};\n","export default {\n oneIdModal: {\n containerView: {\n emailForm: {\n containerKey: 'email_capture',\n containerType: 'form',\n elements: [{\n elementId: 'sign_up',\n elementIdType: 'button',\n elementIndex: 0,\n mediaFormatType: 'not_applicable'\n }],\n elementsPerWidth: 1,\n horizontalPosition: 0,\n verticalPosition: 0\n }\n },\n interaction: {\n signUp: {\n containerKey: 'email_capture',\n containerType: 'form',\n elementId: 'sign_up',\n elementIdType: 'button',\n elementName: 'sign_up',\n elementType: 'button',\n interactionType: 'select'\n }\n },\n pageView: {\n pageId: 'sign_up_for_updates',\n pageName: 'sign_up_for_updates',\n pageKey: 'sign_up_for_updates'\n }\n }\n};\n","import appDeepLinkHandler from './appDeepLink';\n\nexport default {\n appDeepLink: appDeepLinkHandler\n};\n","type AppDeepLinkPayload = {\n advertising?: boolean;\n distributionPartner?: string;\n matrixLocation?: {\n numberOfColumns: number | null;\n numberOfRows: number | null;\n placementColumn: number | null;\n placementRow: number | null;\n };\n placement?: string;\n placementDetails?: string;\n referrer: string;\n};\n\n\nexport default function appDeepLinkHandler(): AppDeepLinkPayload | null {\n const payload: AppDeepLinkPayload = {\n referrer: document.referrer\n };\n\n const { searchParams } = new URL(window.location.href);\n\n if (searchParams.has('placement')) {\n payload.placement = searchParams.get('placement') || '';\n }\n\n if (searchParams.has('placementDetails')) {\n payload.placementDetails = searchParams.get('placementDetails') || '';\n }\n\n if (searchParams.has('distributionPartner')) {\n payload.distributionPartner = searchParams.get('distributionPartner') || '';\n }\n\n if (searchParams.has('advertising')) {\n payload.advertising = (searchParams.get('advertising') === 'true');\n }\n\n const numberOfColumns = searchParams.get('numberOfColumns');\n const numberOfRows = searchParams.get('numberOfRows');\n const placementColumn = searchParams.get('placementColumn');\n const placementRow = searchParams.get('placementRow');\n\n if (numberOfRows || numberOfColumns || placementRow || placementColumn) {\n payload.matrixLocation = {\n numberOfColumns: numberOfColumns ? parseInt(numberOfColumns, 10) : null,\n numberOfRows: numberOfRows ? parseInt(numberOfRows, 10) : null,\n placementColumn: placementColumn ? parseInt(placementColumn, 10) : null,\n placementRow: placementRow ? parseInt(placementRow, 10) : null\n };\n }\n\n return payload;\n}\n","import { dssAnalyticsInit, dssTrack } from 'dss-analytics-manager';\nimport { getSlug, isV2Page, isOlp, isVisible } from 'global-scripts/utils/helpers';\nimport { deepGetOfType } from 'bam-deep-get';\nimport EventDefinitions from './glimpse/eventDefinitions';\nimport LifecycleHandlers from './glimpse/lifecycleHandlers';\n\nconst GlimpseV2Tracking = {};\n\n\n/**\n * @description Manually track the pageView for the modal open\n * @param {HTMLElement} modalEl The modal opening HTML Element\n */\nGlimpseV2Tracking.trackModalOpen = (modalEl) => {\n GlimpseV2Tracking.track({\n index: 0,\n target: modalEl,\n type: 'load-overlay'\n });\n\n const modalContainers = modalEl.querySelectorAll('[data-gv2-element=\"container\"]');\n\n if (modalContainers.length) {\n modalContainers.forEach((modalContainer, i) => {\n GlimpseV2Tracking.track({\n index: i,\n target: modalContainer,\n type: 'inView'\n });\n });\n }\n};\n\n/**\n * @description Determine the page type (OLP, MLP, Splash)\n * @return welcome = OLP; welcome__mlp = MLP, welcome__splash = Splash\n */\nGlimpseV2Tracking.getGlimpseV2PageType = function () {\n // Only V2 Pages have pageType on them, use isOlp for V1 logic\n const pageTypeMeta = document.querySelector('meta[name~=\"pageType\"]');\n\n let pageType;\n if (pageTypeMeta) {\n pageType = pageTypeMeta.getAttribute('content');\n }\n\n if (pageType === 'olp') {\n return 'welcome';\n } else if (pageType === 'splash') {\n return 'welcome__splash';\n } else {\n return 'welcome__mlp';\n }\n};\n\n/**\n * @description Manually track the navigation. Nav state change needs to be track as the user scrolls up and down\n * the page.\n * @param {bool} isSticky Is the nav the sticky nav or not\n */\nGlimpseV2Tracking.trackNav = (isSticky) => {\n const prefix = isSticky ? 'post' : 'pre';\n\n const target = document.querySelector(`nav.${prefix}-sticky`);\n\n GlimpseV2Tracking.track({\n index: 0,\n target,\n type: 'analytics_inView'\n });\n};\n\n/**\n * @description Pull the background asset url for the visible background asset for the hero cotnent\n * @returns {Object} The asset URI and type for the background image\n */\nGlimpseV2Tracking.getBackgroundAssetSrc = () => {\n const assets = document.querySelectorAll('.hero .background-image__asset, .hero .background');\n const assetData = {\n src: null,\n type: null\n };\n\n let visibleEl;\n\n //Get first visible image if using css based responsive images.\n assets.forEach(asset => {\n if (!visibleEl && isVisible(asset)) {\n visibleEl = asset;\n }\n });\n\n if (visibleEl) {\n switch (visibleEl.tagName.toLowerCase()) {\n case 'div':\n if (visibleEl.style.backgroundImage) {\n assetData.src = visibleEl.style.backgroundImage.slice(4, -1).replace(/[\"']/g, '');\n assetData.type = 'image';\n }\n\n break;\n case 'img':\n assetData.type = 'image';\n assetData.src = visibleEl.src;\n break;\n case 'video':\n assetData.type = 'video';\n assetData.src = visibleEl.src;\n break;\n }\n\n if (assetData.src.indexOf('http') !== 0) {\n assetData.src = window.location.protocol + assetData.src;\n }\n }\n\n return assetData;\n};\n\n/**\n * @description Determine the element name for CTA links and buttons.\n * Most CTAs will specify their own name but sign-up\n * button name are determined by their deeplink.\n * @param {HTMLElement} el The CTA html element\n * @returns {String} The element name\n */\nGlimpseV2Tracking.getElementName = (el) => {\n let name = el.dataset.gv2Name;\n\n if (el.href && !name) {\n const url = new URL(el.href);\n\n if (url.pathname.includes('sign-up')) {\n if (url.searchParams.has('type')) {\n name = (url.searchParams.get('type') !== 'bundle') ? 'standalone_cta' : 'bundle_cta';\n } else if (url.searchParams.has('efid')) {\n name = 'sign_up_to_access';\n }\n } else if (/^modal/.test(el.getAttribute('href'))) {\n name = 'mlp_modal_link';\n }\n }\n\n return name;\n};\n\n/**\n * @description Build GlimpseV2 payload and fire glimpseV2 tracking based upon DOM attributes.\n * @param {Event} event The fired tracking event\n * @param {Function} callback A function to run after the analytics fires\n */\nGlimpseV2Tracking.track = (event, callback = () => {}) => {\n const { target, type, index = 0 } = event;\n\n let data = GlimpseV2Tracking.initData();\n\n const slug = getSlug();\n const elements = [];\n let parentContainer;\n let backgroundAsset;\n let abortTrack = false;\n let elementName;\n let elementId;\n let pageKey;\n let payloadData = {};\n\n switch (type.replace('analytics_', '')) {\n case 'load':\n data = GlimpseV2Tracking.initPageViewPayload(data);\n backgroundAsset = GlimpseV2Tracking.getBackgroundAssetSrc();\n\n payloadData = {\n backgroundAsset: backgroundAsset.src,\n backgroundAssetType: backgroundAsset.type,\n backgroundImage: backgroundAsset.src,\n pageId: slug,\n pageKey: slug,\n pageName: GlimpseV2Tracking.getGlimpseV2PageType()\n };\n\n break;\n case 'load-overlay':\n data = GlimpseV2Tracking.initPageViewPayload(data);\n data.common.isOverlay = true;\n\n pageKey = deepGetOfType(target, 'dataset.gv2Key', String);\n\n payloadData = {\n pageId: pageKey,\n pageKey,\n pageName: 'mlp_modal'\n };\n\n break;\n case 'click':\n data = GlimpseV2Tracking.initInteractionPayload(data);\n\n parentContainer = target.closest('[data-gv2-element=\\'container\\']');\n if (!parentContainer) {\n abortTrack = true;\n }\n\n elementName = GlimpseV2Tracking.getElementName(target);\n elementId = target.getAttribute('data-analytics-name') ? target.getAttribute('data-analytics-name') : elementName;\n if (/mlp_modal_link|modal_cta/.test(elementName)) {\n elementId = target.getAttribute('href');\n }\n\n if (!parentContainer || !elementName) {\n abortTrack = true;\n }\n\n payloadData = {\n containerKey: deepGetOfType(parentContainer, 'dataset.gv2Key', String),\n elementId,\n elementIdType: target.dataset.gv2Key,\n elementName,\n elementType: target.dataset.gv2Type || target.dataset.gv2Key\n };\n\n break;\n case 'inView':\n if (target) {\n data = GlimpseV2Tracking.initContainerViewPayload(data);\n target.querySelectorAll('[data-gv2-element=\"element\"]').forEach((button, i)=> {\n elementName = GlimpseV2Tracking.getElementName(button);\n elementId = button.getAttribute('data-analytics-name') ? button.getAttribute('data-analytics-name') : elementName;\n\n if (elementName) {\n if (/mlp_modal_link|modal_cta/.test(elementName)) {\n elementId = button.getAttribute('href');\n }\n elements.push({\n elementId,\n elementIdType: button.dataset.gv2Key,\n elementIndex: i,\n mediaFormatType: 'not_applicable'\n });\n }\n });\n\n if (!elements.length) {\n elements.push({\n elementId: 'mlp_body',\n elementIdType: 'text_detail',\n elementIndex: 0\n });\n }\n\n payloadData = {\n containerKey: target.dataset.gv2Key,\n containerType: target.dataset.gv2Type,\n contentTransactionId: null,\n elements: elements.length ? elements : null,\n elementsPerWidth: elements.length,\n horizontalPosition: 0,\n verticalPosition: index\n };\n }\n\n break;\n }\n\n if (!abortTrack) {\n data.payload = {\n ...data.payload,\n ...payloadData\n };\n\n GlimpseV2Tracking.makeGlimpseCall(data, callback);\n } else {\n callback();\n }\n};\n\n/**\n * @description Handler for the IntersectionObserver when element\n * comes into view. Once an element has come into view\n * they are unregistered with the IntersectionObserver.\n * @param {*} entries All items that are registered with observer\n * @param {*} observer The IntersectionObserver object\n */\nGlimpseV2Tracking.onIntersect = (entries) => {\n entries.forEach((entry, index) => {\n const { target } = entry;\n\n if (target && entry.isIntersecting) {\n const verticalPosition = parseInt(target.dataset.gv2Index, 10) || index;\n\n GlimpseV2Tracking.track({\n index: verticalPosition,\n target,\n type: 'analytics_inView'\n });\n }\n });\n};\n\n/**\n * @description Extra functionality that needs to be run post interaction tracking\n * @param {HTMLElement} targetEl The HTMLElement that was clicked on.\n */\nGlimpseV2Tracking.postClickHandler = (targetEl) => {\n const href = targetEl.getAttribute('href');\n\n if (/^#*modal/.test(href)) {\n const modal = document.getElementById(href.replace('#', ''));\n\n setTimeout(() => {\n if (modal && modal.classList.contains('open')) {\n GlimpseV2Tracking.trackModalOpen(modal);\n }\n }, 300);\n }\n};\n\n/**\n * @description Handler for analytics_click\n * @param {Event} e The analytics_click event\n */\nGlimpseV2Tracking.onClickHandler = (e) => {\n //Only fire track for elements that have the gv2-asset class.\n const target = e.currentTarget;\n\n if (target.hasAttribute('data-gv2-element') && target.getAttribute('data-gv2-element') === 'element') {\n GlimpseV2Tracking.track({\n target,\n type: e.type\n }, () => {\n GlimpseV2Tracking.postClickHandler(target);\n });\n }\n};\n\n/**\n * @description Initialize GlimpseV2 by adding listeners for the analytics_load and analytics_click events.\n * IntersectionObserver is registered if there are any gv2-containers that need to be observed.\n */\nGlimpseV2Tracking.initGlimpseV2 = () => {\n const featureConfig = window.dssMlpConfigs.featureConfig || window.dssMlpConfigs.killswitch;\n\n if (!featureConfig.disableGlimpseV2) {\n const config = {\n enableValidation: featureConfig.enableAnalyticsValidation,\n glimpse_v2: {\n GlimpseEvent: window.AnalyticsManager.glimpseEvent,\n GlimpseEvents: window.AnalyticsManager.glimpseEvents,\n UserActivityApi: window.AnalyticsManager.userActivityApi\n }\n };\n\n GlimpseV2Tracking.trackDefinedEvent('appEvents', 'lifecycle', 'appStart');\n GlimpseV2Tracking.trackDefinedEvent('appEvents', 'lifecycle', 'appLaunched');\n GlimpseV2Tracking.trackDefinedEvent('appEvents', 'lifecycle', 'appDeepLink');\n\n const containers = document.querySelectorAll('[data-gv2-element=\"container\"]:not(nav):not(.modal-content)');\n\n if (containers.length) {\n const intersect = new IntersectionObserver(GlimpseV2Tracking.onIntersect, {\n threshold: 0.1\n });\n\n containers.forEach(el => intersect.observe(el));\n }\n dssAnalyticsInit(config);\n\n document.querySelectorAll('[data-gv2-element=\"element\"]').forEach(el => {\n el.addEventListener('click', (e) => {\n GlimpseV2Tracking.onClickHandler(e);\n }, true);\n });\n\n document.addEventListener('analytics_load', GlimpseV2Tracking.track);\n }\n};\n\n/**\n * Makes the call to dssTrack with the provided data.\n * @param {Object} data GlimpseV2 data payload to be sent\n * @param {Function} callback A function to run after the analytics fires\n */\nGlimpseV2Tracking.makeGlimpseCall = (data, callback) => {\n const featureConfig = window.dssMlpConfigs.featureConfig || window.dssMlpConfigs.killswitch;\n\n dssTrack({\n glimpse_v2: data\n }).then(() => {\n callback();\n }).catch(error => {\n console.log(featureConfig);\n\n if (featureConfig.enableAnalyticsValidation) {\n console.error(error, data);\n }\n callback();\n });\n};\n\n/**\n * Generated and returns the common data needed for tracking\n * @returns {Object} Data object with some common items preset.\n */\nGlimpseV2Tracking.initData = () => {\n const { AnalyticsManager } = window;\n const { contextData } = AnalyticsManager;\n const featureConfig = window.dssMlpConfigs.featureConfig || window.dssMlpConfigs.killswitch;\n\n const data = {\n common: {\n appName: deepGetOfType(window, 'server_path.analytics.glimpse.appName', String),\n appVersion: contextData.appVersion,\n consentStates: contextData.consentStatus.split(','),\n experiments: [],\n isAuthenticated: contextData.isLoggedIn || false,\n isOverlay: false,\n partner: contextData.partner,\n platform: 'web'\n },\n config: {\n enableValidation: !!(featureConfig.enableAnalyticsValidation)\n },\n event: '',\n payload: {}\n };\n\n if (contextData.optimizelyCampaignId) {\n data.common.experiments.push({\n experimentFeatureId: contextData.optimizelyCampaignId,\n experimentId: contextData.optimizelyExperimentId,\n experimentPlatform: 'optimizely',\n variantId: contextData.optimizelyVariationId\n });\n }\n\n return data;\n};\n\n/**\n * @description Manipulates the data payload for the pageView event\n * @param {Object} data The current state of ther data payload\n * @returns {Object} Manipulated data object\n */\nGlimpseV2Tracking.initPageViewPayload = (data) => {\n const { AnalyticsManager } = window;\n const { contextData } = AnalyticsManager;\n\n data.event = 'pageView';\n data.payload = {\n appLanguage: contextData.appLanguage || contextData.deviceLanguage,\n backgroundAsset: null,\n backgroundAssetType: null,\n backgroundImage: null,\n collectionGroupKey: null,\n collectionId: null,\n destination: document.location.href,\n deviceLanguage: contextData.deviceLanguage,\n pageId: '',\n pageKey: '',\n pageName: '',\n referrer: document.referrer\n };\n\n return data;\n};\n\n/**\n * @description Manipulates the data payload for the containerView event\n * @param {Object} data The current state of ther data payload\n * @returns {Object} Manipulated data object\n */\nGlimpseV2Tracking.initContainerViewPayload = (data) => {\n data.event = 'containerView';\n data.payload = {\n containerKey: '',\n containerType: '',\n contentTransactionId: null,\n elements: null,\n elementsPerWidth: 0,\n horizontalPosition: 0,\n verticalPosition: 0\n };\n\n return data;\n};\n\n/**\n * @description Manipulates the data payload for the interaction event\n * @param {Object} data The current state of ther data payload\n * @returns {Object} Manipulated data object\n */\nGlimpseV2Tracking.initInteractionPayload = (data) => {\n data.event = 'interaction';\n data.payload = {\n containerKey: '',\n contentKeys: {\n collectionId: null,\n contentId: null,\n encodedFamilyId: null,\n encodedSeriesId: null,\n mediaId: null,\n programId: null\n },\n contentType: 'other',\n elementId: '',\n elementIdType: '',\n elementName: '',\n elementType: '',\n elementsInView: 1,\n interactionType: 'select',\n mediaFormatType: 'not_applicable',\n mediaType: 'other',\n programType: 'other'\n };\n\n return data;\n};\n\nGlimpseV2Tracking.initLifeCyclePayload = (data) => {\n data.event = '';\n data.payload = {\n adobeId: window.AnalyticsManager.deviceData.mid,\n consentFallback: (!window.Optanon),\n correlationId: JSON.parse(sessionStorage.getItem('correlationId')),\n kochavaAppId: 'id_not_available'\n };\n\n return data;\n};\n\n/**\n * @description Makes GlimpseV2 tracking calls based off of pre-defined Event definitions and not the DOM.\n * Useful for tracking items not controlled by the CMS.\n * @param {String} defintionKey The key for the set of eventDefintion to be used\n * @param {String} eventType The type of event to be tracked pageView, containerView, interaction or input only\n * @param {String} eventKey The key used to retrieve the specific set of tracking data for that eventType\n * @param {Function} callback A function to run after the analytics fires\n */\nGlimpseV2Tracking.trackDefinedEvent = (defintionKey, eventType, eventKey = '', callback = () => {}) => {\n let data = GlimpseV2Tracking.initData();\n let abortTrack = false;\n let payloadData;\n\n const glimpseDefintionSet = EventDefinitions[defintionKey];\n\n if (glimpseDefintionSet) {\n switch (eventType) {\n case 'pageView':\n data = GlimpseV2Tracking.initPageViewPayload(data);\n payloadData = (eventKey && glimpseDefintionSet.pageView[eventKey]) ?\n glimpseDefintionSet.pageView[eventKey] : glimpseDefintionSet.pageView;\n\n break;\n case 'containerView':\n data = GlimpseV2Tracking.initContainerViewPayload(data);\n payloadData = (eventKey && glimpseDefintionSet.containerView[eventKey]) ?\n glimpseDefintionSet.containerView[eventKey] : null;\n\n break;\n case 'interaction':\n data = GlimpseV2Tracking.initInteractionPayload(data);\n payloadData = (eventKey && glimpseDefintionSet.interaction[eventKey]) ?\n glimpseDefintionSet.interaction[eventKey] : null;\n break;\n case 'lifecycle':\n data = GlimpseV2Tracking.initLifeCyclePayload(data);\n payloadData = (eventKey && glimpseDefintionSet.lifecycle[eventKey]) ?\n glimpseDefintionSet.lifecycle[eventKey] : null;\n\n if (payloadData) {\n data.event = payloadData.eventUrn;\n data.config.hierarchyBypass = !!payloadData.hierarchyBypass;\n\n if (LifecycleHandlers[eventKey]) {\n payloadData = {\n ...LifecycleHandlers[eventKey](),\n ...payloadData.payload\n };\n } else {\n payloadData = payloadData.payload;\n }\n\n if (eventKey === 'appLaunched') {\n payloadData.inboundUrl = document.referrer;\n }\n }\n break;\n default:\n abortTrack = true;\n break;\n }\n } else {\n abortTrack = true;\n }\n\n if (!abortTrack) {\n if (payloadData) {\n data.payload = {\n ...data.payload,\n ...payloadData\n };\n } else {\n abortTrack = true;\n }\n\n GlimpseV2Tracking.makeGlimpseCall(data, callback);\n } else {\n callback();\n }\n};\n\nexport default GlimpseV2Tracking;\n","/**\n * @description Add Script tag to the document body\n * @param url The location of the script to add\n * @param onload Callback to run when the script successfully loads\n */\nexport function appendScript(url: string, onload = () => {}) {\n if (url) {\n const script = document.createElement('script');\n script.src = url;\n script.onload = onload;\n\n document.body.appendChild(script);\n }\n}\n\n/**\n * @description Remove the oneTrust Manage Preferences link\n */\nexport function removeOneTrustLink() {\n const otManageLink = document.querySelector('[data-action=\"onetrust-manage\"]');\n\n if (otManageLink) {\n otManageLink.remove();\n }\n}\n\n/**\n * @description Determine if the current page is using cannonbal V1 or V2 based upon HTML syntax\n * @returns True = is an CNBL V2 page; False = is a CNBL V1 page\n */\nexport function isV2Page(): boolean {\n return !document.documentElement.classList.contains('mlp');\n}\n\n/**\n * @description Determine if the current page is the OLP or a MLP landing page\n * @return True = OLP; False = MLP\n */\nexport function isOlp(): boolean {\n return !!(document.body.getAttribute('data-olp-page') === 'true');\n}\n\n/**\n * @description Determine if the current page is a Splash landing page\n * @return True = Splash; False = OLP/MLP\n */\nexport function isV2Splash(): boolean {\n const pageTypeMeta = document.querySelector('meta[name~=\"pageType\"]');\n\n let pageType;\n if (pageTypeMeta) {\n pageType = pageTypeMeta.getAttribute('content');\n }\n\n return (pageType === 'splash');\n}\n\n/**\n * @description Get the url slug to be sent via Analytics\n * @returns Returns the URL slug\n */\nexport function getSlug(): string {\n let { pathname } = window.location;\n\n if (pathname.endsWith('/')) {\n pathname = pathname.slice(0, -1);\n }\n\n const matches = pathname.match(/welcome\\/(.*)/);\n let slug : string = pathname.split('/').pop() || '';\n\n if (isV2Splash()) {\n slug = (isValidLocaleFormat(pathname.substr(1))) ? 'index' : slug;\n } else if (slug === 'welcome') {\n slug = 'welcome__mlp';\n } else if (matches && matches[1]) {\n slug = matches[1];\n } else if (isOlp() || !pathname) {\n slug = 'welcome';\n }\n\n return slug;\n}\n\n/**\n * @description Checks a HTMLElement properties to determine if the user can actually see the element\n * @param elem HTMLElement to check to see if it is visible to the user\n * @returns True = User can see it\n */\nexport function isVisible(elem: HTMLElement): boolean {\n const styles = window.getComputedStyle(elem);\n const opacity = parseInt(styles.getPropertyValue('opacity'), 10);\n\n return !!((elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length) && opacity > 0);\n}\n\n/**\n * @description Returns whether the urlLang is a valid locale format\n * @param {String} urlLang - language from URL\n * @returns {Boolean} True if contextUrlPrefix is a valid config combination\n */\nexport function isValidLocaleFormat(urlLang) {\n return /^[a-zA-Z]{2}(-[a-zA-Z0-9]{2,3})?$/.test(urlLang);\n}\n\n/**\n * @description Get the url slug without locale\n * @returns Returns the URL slug\n */\nexport function getSlugWithoutLocale(): string {\n const { pathname } = window.location;\n const slugArray = pathname.split('/');\n\n if (isValidLocaleFormat(slugArray[1])) slugArray.splice(1, 1);\n\n const slug = slugArray.join('/');\n\n return slug;\n}\n\n/**\n * @description Strips any trailing slashes from a url\n * @param {String} url Url to be stripped of extra trailing slashes\n * @returns clean url\n */\nexport function stripEndSlashes(url: string): string {\n let cleanUrl = url;\n\n if (url.startsWith('/')) {\n cleanUrl = url.slice(1);\n }\n\n if (url.endsWith('/')) {\n return cleanUrl.replace(/\\/+$/, '');\n }\n\n return cleanUrl;\n}\n\n/**\n * @description Converts the url string into an array of parts along slashes (i.e. /en-us/welcome to ['en-us', 'welcome'])\n * @param {String} url Url to be split\n * @returns {Array} url array\n */\nexport function convertUrlToArray(url: string): Array {\n // Remove forward & trailing slash from pathname\n const path = stripEndSlashes(url);\n\n // This can produce array with empty string\n let parts = path.split('/');\n if (parts[0] === '') {\n parts = [];\n }\n\n return parts;\n}\n","import { getSlug, isV2Page, isOlp } from 'global-scripts/utils/helpers';\nimport { appendScript } from '../utils/helpers';\nimport { deepGet } from 'bam-deep-get';\n\n// Used for V1 and V2\nexport const AdobeAnalytics = {\n /**\n * @description Determine the page type (OLP, MLP, Splash)\n * @return Welcome = OLP; Welcome - MLP = MLP, Marketing Splash = Splash\n */\n getPageName: () => {\n const pageTypeMeta = document.querySelector('meta[name~=\"pageType\"]');\n\n let pageType;\n if (pageTypeMeta) {\n pageType = pageTypeMeta.getAttribute('content').toString();\n }\n\n // Variations for olp, mlp, and splash, based on the pageType\n if (pageType === 'olp') {\n return 'Welcome';\n } else if (pageType === 'splash') {\n return 'Marketing Splash';\n } else {\n return 'Welcome - MLP';\n }\n },\n\n /**\n * @description Determine the section for adobe analytics (OLP, MLP, Splash)\n * @return Welcome = OLP; Welcome = MLP, Marketing Splash = Splash\n * There is no 'Welcome - MLP' for section, it's either 'Welcome' or 'Splash'\n */\n getSection: () => {\n const pageTypeMeta = document.querySelector('meta[name~=\"pageType\"]');\n\n let pageType;\n if (pageTypeMeta) {\n pageType = pageTypeMeta.getAttribute('content');\n }\n\n return ((pageType === 'splash') ? 'Marketing Splash' : 'Welcome');\n },\n\n /**\n * @description Fire optimizely analytics call\n * @param {String} integrationAction The action to track\n * @param {Object} sVariable The date to be tracked\n */\n optimizelyIntegrationCall: (integrationAction, sVariable) => {\n // If the Optimizely custom integration is hooked up use it\n const optimizelyIntegration = window.optimizely &&\n typeof window.optimizely.get === 'function' &&\n window.optimizely.get('custom/adobeIntegrator');\n\n if (optimizelyIntegration && optimizelyIntegration[integrationAction]) {\n optimizelyIntegration[integrationAction](sVariable);\n }\n },\n\n /**\n * @description Generate the Adobe Analytics tracking data and fire tracking call\n * @param {Object} event The event to be tracked\n */\n track: (event) => {\n if (!event) {\n return;\n }\n\n const { s, AnalyticsManager } = window;\n const { target, type } = event;\n\n if (!s) return;\n const slug = getSlug();\n\n const trackData = {\n action: null,\n ctaButtonURL: null,\n ctaButtonCopy: null,\n moduleLocation: null,\n pagename: AdobeAnalytics.getPageName(),\n section: AdobeAnalytics.getSection(),\n urlSlug: slug\n };\n\n const contextData = {\n ...AnalyticsManager.contextData,\n ...trackData\n };\n\n // s Top Level Items\n s.visitorID = 'D=s_vi';\n s.pageName = contextData.pagename;\n s.contextData = contextData;\n\n delete s.contextData.pagename;\n\n if (type.includes('click')) {\n const analyticsName = target.getAttribute('data-analytics-name') || '';\n const analyticsSection = target.closest('[data-analytics-section]');\n const analyticsSectionName = analyticsSection ? analyticsSection.dataset.analyticsSection : '';\n let moduleType = analyticsSectionName.includes(':') ? analyticsSectionName.split(':')[0].trim() : '';\n\n if (target.hasAttribute('data-analytics-module-type')) {\n moduleType = target.getAttribute('data-analytics-module-type');\n }\n\n moduleType = `${moduleType.charAt(0).toUpperCase() + moduleType.substr(1)} Click`;\n\n s.contextData.action = `${contextData.webAppName} ${trackData.pagename} : ${moduleType}`;\n s.contextData.ctaButtonCopy = analyticsName;\n s.contextData.ctaButtonURL = target.href || '';\n s.contextData.moduleLocation = analyticsSectionName;\n\n // If the Optimizely custom integration is hooked up use it\n AdobeAnalytics.optimizelyIntegrationCall('trackDelayedCampaigns', s);\n\n s.tl(null, 'lnk_o', s.contextData.action);\n } else if (type.includes('event')) {\n s.contextData = {\n ...s.contextData,\n ...event.detail,\n action: `${contextData.webAppName} ${trackData.pagename} : ${event.detail.action}`\n };\n\n // If the Optimizely custom integration is hooked up use it\n AdobeAnalytics.optimizelyIntegrationCall('trackDelayedCampaigns', s);\n\n s.tl(null, 'lnk_o', s.contextData.action);\n\n } else {\n\n // If the Optimizely custom integration is hooked up use it\n AdobeAnalytics.optimizelyIntegrationCall('assignCampaigns', s);\n\n s.t();\n }\n },\n\n /**\n * @description Scrape the site for any link for specific cross domain sites. Once found append the adobe\n * analytics specific IDs to the url. The linked site will need to be able to handle the inclusion of these IDs\n */\n appendIdsForCrossDomainLinks: () => {\n if (window.visitor) {\n const { crossDomains = [] } = window.server_path.analytics.adobe;\n const selectors = crossDomains.map(domain => `[href*='${domain}']`);\n const links = document.querySelectorAll(selectors.join(','));\n\n links.forEach(link => {\n link.href = window.visitor.appendVisitorIDsTo(link.href);\n });\n }\n },\n\n /**\n * @description Loads analytics_script_bundle if OneTrust was not enabled\n */\n loadScript: (callback = () => {}) => {\n const staticRoot = deepGet(window, 'dssMlpConfigs.staticRoot');\n\n if (staticRoot) {\n appendScript(`${staticRoot}/scripts/analytics_script_bundle.js`, () => {\n AdobeAnalytics.appendIdsForCrossDomainLinks();\n AdobeAnalytics.track(new Event('load'));\n callback();\n });\n }\n }\n};\n\n/**\n * Currently Adobe Analytics only needs to listen for the click and load events\n */\nexport function initAdobeAnalytics() {\n document.addEventListener('analytics_click', AdobeAnalytics.track);\n document.addEventListener('analytics_load', AdobeAnalytics.track);\n document.addEventListener('analytics_event', AdobeAnalytics.track);\n}\n","let isMobile;\n\n/**\n * heroObserverCallback\n * @description This function sets the entries parameter for the new IntersectionObserver objects\n * created when the hero is in view in intersectObserverInit().\n */\nconst heroObserverCallback = (entries) => {\n for (const entry of entries) {\n if (entry.intersectionRatio > 0.25) {\n // CTA Target is in view\n document.body.classList.remove('show-cta-toast');\n if (!isMobile.matches) {\n document.body.classList.remove('show-top-nav');\n }\n } else {\n // CTA Target is not in view.\n document.body.classList.add('show-cta-toast');\n if (!isMobile.matches) {\n document.body.classList.add('show-top-nav');\n }\n }\n }\n};\n\n/**\n * logoObserverCallback\n * @description This function sets the entries parameter for the new IntersectionObserver objects\n * created when the logo is in view in intersectObserverInit().\n */\nconst logoObserverCallback = (entries) => {\n if (isMobile.matches) {\n for (const entry of entries) {\n if (entry.intersectionRatio > 0.1) {\n // Logo is in view\n document.body.classList.remove('show-top-nav');\n } else {\n // Logo is not in view.\n document.body.classList.add('show-top-nav');\n }\n }\n }\n};\n\n/**\n * footerObserverCallback\n * @description This function sets the entries parameter for the new IntersectionObserver objects\n * created when the footer is in view in intersectObserverInit().\n */\nconst footerObserverCallback = (entries) => {\n for (const entry of entries) {\n if (entry.intersectionRatio > 0.1) {\n // Footer Module is in view\n document.body.classList.add('hide-cta-toast');\n } else {\n // Footer Module is not in view.\n document.body.classList.remove('hide-cta-toast');\n }\n }\n};\n\n/**\n * intersectObserverInit\n * @description This observer watches Logo, CTAs, CTA Toast Module and Footer Module\n */\nconst intersectObserverInit = () => {\n\n const options = {\n threshold: [0.1, 0.25, 0.5, 0.75, 1]\n };\n /*\n MOBILE - Show top nav early because it does not have primary cta in it\n - TOP Nav should be visible when LOGO is off screen\n - TOP Nav should be hidden when LOGO is visible\n\n - CTA Toast should be visible when CTA is off screen\n - CTA Toast should be hidden when CTA is visible\n\n DESKTOP - Show top nav late as possible because it does have primary cta in it\n - TOP Nav should be visible when hero CTAs are off screen\n - TOP Nav should be hidden when hero CTAs are off screen\n\n MOBILE/DESKTOP\n - CTA Toast should be hidden when footer is visible\n - CTA Toast should be visible when footer is hidden\n */\n\n // Modules\n const ctaToastModule = document.getElementById('cta-toast');\n const footerModule = document.getElementById('footer');\n\n // Targets\n const logoTarget = document.getElementById('logo');\n const heroTarget = document.getElementById('hero');\n\n // MOBILE - Show/Hide CTA Toast when heroTarget is out of view\n // DESKTOP - Show/Hide TOP Nav when heroTarget is out of view\n if (heroTarget) {\n const heroTargetObserver = new IntersectionObserver(heroObserverCallback, options);\n heroTargetObserver.observe(heroTarget);\n } else {\n document.body.classList.add('show-top-nav');\n }\n\n // MOBILE - Show/Hide Top Nav when LOGO Target is out of view\n if (logoTarget) {\n const logoTargetObserver = new IntersectionObserver(logoObserverCallback, options);\n logoTargetObserver.observe(logoTarget);\n } else {\n document.body.classList.add('show-top-nav');\n }\n\n // Show/Hide CTA Toast when footer is in view\n if (footerModule && ctaToastModule) {\n const footerObserver = new IntersectionObserver(footerObserverCallback, options);\n footerObserver.observe(footerModule);\n }\n};\n\n/**\n * onScrollInit\n * @description A simple intersect observer scroll watcher for navigation menus\n */\nconst onScrollInit = () => {\n isMobile = window.matchMedia('(max-width: 768px)');\n\n isMobile.addListener(intersectObserverInit);\n intersectObserverInit();\n};\n\n\n/**\n * lazyLoadInit\n * @description Init image lazyLoad on scroll\n */\nconst lazyLoadInit = (LazyLoad) => {\n return new LazyLoad({\n threshold: 400\n });\n};\n\n\nexport {\n heroObserverCallback,\n footerObserverCallback,\n lazyLoadInit,\n onScrollInit\n};\n","import { isMobileDevice } from '../device/checkDevice';\n\nconst scrollToNext = () => {\n const nav = document.getElementById('nav');\n const hero = document.querySelector('.hero');\n const sibling = hero.nextElementSibling; //Get the first sibling element to the hero.\n const { top } = sibling.getBoundingClientRect(); //Find the top position of the sibling\n const navOffsetHeight = nav.offsetHeight;\n const windowPageYOffset = window.pageYOffset;\n const position = top + windowPageYOffset - navOffsetHeight;\n\n window.scrollTo({ top: position, behavior: 'smooth' });\n};\n\n/**\n * @description Adds device-desktop or device-mobile to html tag\n * and changes video data-src to src to prevent mobile from downloading the video\n */\nconst videoBackgroundInit = () => {\n const deviceType = isMobileDevice() ? 'mobile' : 'desktop';\n document.querySelector('html').classList.add('device-' + deviceType);\n if (!isMobileDevice()) {\n const backgroundVideo = document.getElementById('background-video');\n if (backgroundVideo) {\n backgroundVideo.src = backgroundVideo.getAttribute('data-src');\n }\n }\n};\n\n/**\n * @description Adds test ID to the standalone plan link in richtext\n */\n// Note: delete when Cannonball V2 migration happens\nconst setHeroRichtextTestId = () => {\n const hero = document.getElementById('hero');\n\n if (hero && hero.classList.contains('hero-cta-emphasis')) {\n const richtextBottom = document.getElementsByClassName('richtext-bottom')[0];\n const richtextLink = richtextBottom && richtextBottom.getElementsByTagName('a')[0];\n\n if (richtextLink) {\n richtextLink.setAttribute('data-testid', 'signup-standalone-hero');\n }\n }\n};\n\nconst onHeroInit = () => {\n\n videoBackgroundInit();\n\n const hintLink = document.querySelector('.hint a');\n\n if (hintLink) {\n hintLink.addEventListener('click', scrollToNext);\n }\n setHeroRichtextTestId();\n};\n\nexport {\n onHeroInit\n};\n","let browserWidth;\n\n\n// Get the number of items to show based on screen size or layout type\nconst getNumItemsToShow = (grid, numItemsToShowOverride) => {\n const gridLayout = grid.getAttribute('data-grid-layout');\n const gridLayoutMobile = grid.getAttribute('data-grid-mobile-layout');\n browserWidth = document.body.clientWidth;\n let layout;\n\n if (browserWidth >= 769) {\n // Large\n layout = gridLayout || 'grid3';\n } else {\n // Small\n layout = gridLayoutMobile || 'grid3';\n\n }\n\n let numItemsToShow;\n\n switch (layout) {\n case 'grid5':\n case 'mobile-grid5':\n numItemsToShow = 10;\n break;\n case 'grid4':\n case 'mobile-grid4':\n numItemsToShow = 8;\n break;\n case 'grid3':\n numItemsToShow = 9;\n break;\n case 'mobile-grid3':\n numItemsToShow = 6;\n break;\n case 'grid2':\n case 'mobile-grid2':\n numItemsToShow = 4;\n break;\n case 'grid1':\n case 'mobile-grid1':\n numItemsToShow = 2;\n break;\n default:\n numItemsToShow = 10;\n }\n\n // Override Number of items\n if (numItemsToShowOverride) {\n numItemsToShow = numItemsToShowOverride;\n }\n\n return numItemsToShow;\n};\n\n\n// OnClick Show grid items\nconst onClickShowMoreItems = (hiddenGridItems, numItemsToShow) => {\n hiddenGridItems.forEach((gridItem, i) => {\n if (i < numItemsToShow) {\n gridItem.style.opacity = 0;\n gridItem.style.visibility = 'visible';\n gridItem.style.transitionDelay = '.2s';\n gridItem.classList.remove('hide');\n setTimeout(function () {\n gridItem.style.opacity = 1;\n }, 100);\n }\n });\n};\n\nconst initFaq = (grid) => {\n // For FAQ elements, add toggleViewRichText functionality\n const faqElements = grid.querySelectorAll('.faq-element');\n\n if (faqElements.length) {\n faqElements.forEach(faqElement => {\n const faqButton = faqElement.getElementsByClassName('faq-button')[0];\n if (faqButton) {\n\n // Add functionality to button to toggle 'open' class\n faqButton.addEventListener('click', (event) => {\n const wrapper = event.currentTarget.parentElement;\n wrapper.classList.toggle('open');\n });\n }\n });\n }\n};\n\n// Init this grid\nconst onGridInit = (grid) => {\n\n const numItemsToShowOverride = grid.getAttribute('data-number-items-to-show-override');\n const showMoreButton = grid.querySelector('.grid-show-more-button');\n const gridItems = grid.querySelectorAll('.grid-item');\n let numItemsToShow = getNumItemsToShow(grid, numItemsToShowOverride);\n\n // Hide grid items\n let hasMoreItemsToShow = false;\n gridItems.forEach((gridItem, i) => {\n if (i >= numItemsToShow) {\n hasMoreItemsToShow = true;\n gridItem.classList.add('hide');\n } else {\n gridItem.style.visibility = 'visible';\n }\n });\n\n initFaq(grid);\n\n // Show button if there are more items to show\n if (hasMoreItemsToShow && showMoreButton) {\n\n showMoreButton.style.visibility = 'visible';\n showMoreButton.style.opacity = 1;\n\n // CLICK Show More\n showMoreButton.addEventListener('click', function () {\n const hiddenGridItems = grid.querySelectorAll('.grid-item.hide');\n numItemsToShow = getNumItemsToShow(grid, numItemsToShowOverride);\n onClickShowMoreItems(hiddenGridItems, numItemsToShow);\n\n // Hide button if all grid items are visible\n if (hiddenGridItems.length <= numItemsToShow) {\n showMoreButton.style.display = 'none';\n }\n });\n\n } else if (!hasMoreItemsToShow && showMoreButton) {\n\n showMoreButton.style.display = 'none';\n\n }\n\n};\n\n\n// Init all grids\nconst onGridsInit = () => {\n const grids = document.querySelectorAll('.caption .grid');\n\n if (grids.length) {\n for (const grid of grids) {\n onGridInit(grid);\n }\n }\n\n};\n\n\nexport {\n getNumItemsToShow,\n onClickShowMoreItems,\n initFaq,\n onGridInit,\n onGridsInit\n};\n","export function closeModal(e) {\n // Close modal if page is clicked, close button is clicked, or escape key is pressed\n if (e.target.classList.contains('modal') || e.target.classList.contains('close-button') || e.key === 'Escape') {\n const modalToClose = document.querySelector('.modal.open');\n\n if (modalToClose) {\n e.preventDefault();\n modalToClose.classList.remove('open');\n document.body.classList.remove('modal-open');\n\n const closeButtons = document.querySelectorAll('.modal .close-button');\n if (closeButtons) {\n closeButtons.forEach(closeButton => {\n closeButton.removeEventListener('click', closeModal);\n });\n }\n\n const modals = document.querySelectorAll('.modal');\n if (modals) {\n modals.forEach(modal => {\n modal.removeEventListener('click', closeModal);\n });\n document.removeEventListener('keydown', closeModal);\n }\n }\n }\n}\n\nexport function openModal(e) {\n e.preventDefault();\n let modalToOpen;\n\n if (e.currentTarget) {\n const modalHref = e.currentTarget.getAttribute('href');\n modalToOpen = document.getElementById(modalHref);\n }\n\n if (modalToOpen) {\n modalToOpen.classList.add('open');\n document.body.classList.add('modal-open');\n }\n\n const closeButtons = document.querySelectorAll('.modal .close-button');\n if (closeButtons) {\n closeButtons.forEach(closeButton => {\n closeButton.addEventListener('click', closeModal);\n });\n }\n\n const modals = document.querySelectorAll('.modal');\n if (modals) {\n modals.forEach(modal => {\n modal.addEventListener('click', closeModal);\n });\n document.addEventListener('keydown', closeModal);\n }\n\n // Always reset scroll position within modal to top of modal.\n const modalScrollers = document.querySelectorAll('.modal .modal-scroller');\n if (modalScrollers) {\n modalScrollers.forEach(modalScroller => {\n modalScroller.scrollTop = 0;\n });\n }\n}\n\nexport function initModal() {\n const modalLinks = document.querySelectorAll('[href*=\"#modal\"]');\n if (document.querySelector('.modal') && modalLinks) {\n modalLinks.forEach(modalLink => {\n modalLink.addEventListener('click', openModal);\n });\n }\n}\n","import './global';\n\n// Marketing Scripts\nimport { initializeSdk } from './utils/sdk';\nimport { removeOneTrustLink } from './utils/helpers';\nimport { preFetch, convertNodes, setupRichTextForTracking } from './Global/utils/helpers';\nimport { onScrollInit, lazyLoadInit } from './components/onScroll';\nimport { onHeroInit } from './components/hero';\nimport { onGridsInit } from './components/grid';\nimport { langSelectorInit } from './components/langSelector';\nimport { carouselInit } from './components/carousel';\nimport { initButtonActions } from 'v2-scripts/utils/buttonActions';\nimport { initModal } from './components/modal';\nimport { isDeviceSupported } from './device/checkDevice';\nimport {\n activateAllCategories,\n addOneTrustOnConsentFunction,\n initalizeOneTrust,\n loadAdobeSuites,\n setFallbackActiveGroup,\n syncOneTrustConsent\n} from 'oneTrust/oneTrust';\n\n// Analytics\nimport AnalyticsManager from './analytics/analyticsManager';\nimport { initAdobeAnalytics } from './analytics/adobeAnalytics';\nimport { initAdobeLaunch } from './analytics/adobeLaunch';\nimport glimpseV2Tracking from './analytics/glimpseV2Tracking';\n\n\n// 3rd Party Plugins\nimport { deepGet } from 'bam-deep-get';\nimport LazyLoad from 'vanilla-lazyload';\nimport './utils/polyfills';\n\n// Internet Explorer Polyfills\nimport intersectionObserver from 'intersection-observer'; // eslint-disable-line no-unused-vars\n\n\n/**\n * @description The application entry point\n */\nexport function init() {\n\n if (!isDeviceSupported()) {\n window.location = '/unsupported';\n }\n\n lazyLoadInit(LazyLoad);\n convertNodes();\n onScrollInit();\n onHeroInit();\n onGridsInit();\n carouselInit();\n initModal();\n langSelectorInit();\n initButtonActions();\n setupRichTextForTracking();\n\n try {\n localStorage.removeItem('dss_super_bundle_selected');\n } catch (e) {}\n\n initializeSdk(sdkPayload => {\n if (sdkPayload) {\n window.AnalyticsManager = window.AnalyticsManager || new AnalyticsManager(sdkPayload);\n initAdobeAnalytics();\n glimpseV2Tracking.initGlimpseV2();\n window.AnalyticsManager.firePageLoad();\n\n if (window.OneTrust) {\n\n addOneTrustOnConsentFunction(loadAdobeSuites);\n\n const oneTrustTrack = () => {\n window.AnalyticsManager.fireAction('Content Update Success');\n window.AnalyticsManager.fireGlimpseEvent('consentGranted');\n\n const id = deepGet(sdkPayload, 'sessionInfo.account.id', null);\n const countryCode = deepGet(sdkPayload, 'sessionInfo.location.countryCode', '');\n\n syncOneTrustConsent(id || window.AnalyticsManager.userData.dssDeviceId, !!(id), countryCode);\n };\n\n initalizeOneTrust(oneTrustTrack, {\n onload: () => {\n const prefLink = document.querySelector('.onetrust-manage');\n if (prefLink) {\n prefLink.style.display = 'inline-block';\n }\n },\n onerror: () => {\n setFallbackActiveGroup();\n removeOneTrustLink();\n }\n });\n } else {\n activateAllCategories();\n loadAdobeSuites(true);\n removeOneTrustLink();\n }\n }\n\n glimpseV2Tracking.trackDefinedEvent('appEvents', 'lifecycle', 'loadEnd');\n // Prefetch sign-up and login\n preFetch();\n });\n}\n\n\n/**\n * @description Run init function on dom ready and when critical scripts done\n */\n\n// If there is a WeaponX experiment on the page, do not execute init yet.\nif (window.abTest) {\n // Wait for WeaponX Script to be finished before continuing\n window.weaponxScript.then(() => { init(); });\n} else {\n init();\n}\n\n","import Splide from '@splidejs/splide';\n// https://splidejs.com/options/\n\nconst carouselInit = () => {\n const carousels = document.getElementsByClassName('splide');\n\n if (carousels.length) {\n carousels.forEach((carousel) => {\n const { autoplay, speed } = carousel.dataset;\n\n const splideCarousel = new Splide(carousel, {\n type: 'loop',\n perPage: 3,\n focus: 'center',\n autoplay,\n interval: autoplay && (speed * 1000 || 6000),\n flickMaxPages: 3,\n updateOnMove: true,\n pagination: false,\n padding: '10%',\n throttle: 300,\n breakpoints: {\n 1440: {\n perPage: 1,\n padding: '30%'\n }\n }\n }).mount();\n\n return splideCarousel;\n });\n }\n};\n\nexport { carouselInit };\n","import { deepGet } from 'bam-deep-get';\nimport { appendScript } from '../utils/helpers';\n\nconst dssDataLayerDefaults = {\n campaignCode: '',\n cid: '',\n countryCode: '',\n countrycodeRegion: '',\n deviceLanguage: '',\n dssAccountId: '',\n dssDeviceId: '',\n dssSessionId: '',\n logInStatus: '',\n mid: '',\n pageName: '',\n pageURL: '',\n partnerId: '',\n redemptionCode: '',\n subscriberPurchased: '',\n swid: '',\n unid: '',\n userProductName: '',\n userProductSku: '',\n userSubscriptionState: '',\n userVisitorState: '',\n voucherCode: ''\n};\n\nexport const AdobeLaunch = {\n /**\n * @description\n * @param {object} source Object containing key/value pairs to be searched\n * @param {array} keys Array of keys to look for in the source object\n * @returns {object} a new object containing only keys found in source\n */\n pick: (source, keys) => {\n const dest = {};\n\n keys.forEach(k => {\n if (source.hasOwnProperty(k)) {\n dest[k] = source[k];\n }\n });\n\n return dest;\n },\n\n /**\n * Sets the dssDataLayer properties for the current page\n */\n updateDataLayer: () => {\n const { contextData } = window.AnalyticsManager;\n const { s } = window;\n\n window.dssDataLayer = AdobeLaunch.pick({\n ...dssDataLayerDefaults,\n ...contextData,\n logInStatus: contextData.loggedIn,\n pageName: (s && s.pageName) ? s.pageName : document.body.getAttribute('data-analytics-pagename'),\n pageURL: window.location.href,\n countryCode: window.dssMlpConfigs.regionConfig.regionCode,\n countrycodeRegion: window.dssMlpConfigs.regionConfig.group\n }, Object.keys(dssDataLayerDefaults));\n\n document.body.dispatchEvent(new CustomEvent('dynamicPageIsDisplayed', {\n bubbles: true,\n cancelable: true\n }));\n },\n\n /**\n * Dynamically appends the Adobe Launch script tag\n */\n loadScript: () => {\n const launchScriptUrl = deepGet(window, 'dssMlpConfigs.adobeLaunchUrl');\n\n if (launchScriptUrl) {\n appendScript(launchScriptUrl, () => {\n AdobeLaunch.updateDataLayer();\n });\n }\n }\n};\n\n/**\n * Initialized adobe launch. If the cmpDisabled is true append the script tag to load the JS file. If false the script\n * tag is loaded using OneTrust, so it just updates the dssDatalayer.\n * @param {Boolean} cmpDisabled Flag if the OneTrust CMP banner is being used or not.\n */\nexport function initAdobeLaunch(cmpDisabled) {\n if (cmpDisabled) {\n AdobeLaunch.loadScript();\n } else if (window.dssMlpConfigs.adobeLaunchUrl) {\n AdobeLaunch.updateDataLayer();\n }\n}\n","import { isValidLocaleFormat, convertUrlToArray } from './helpers';\n// MLP Lang Region Redirector\n\n/*\n * @description Crawler User Agents List\n */\nexport const crawlerUserAgents = [\n 'adidxbot',\n 'adsbot-google',\n 'baiduspider',\n 'bingbot',\n 'facebookexternalhit/1.1',\n 'googlebot',\n 'ia_archiver',\n 'optimizelyedit',\n 'twitterbot',\n 'slurp'\n];\n\n/* Local storage wrapper */\nexport function localStorageSetItem(key, value) {\n try {\n window.localStorage.setItem(key, value);\n } catch (e) {}\n}\nexport function localStorageGetItem(key) {\n try {\n return window.localStorage.getItem(key);\n } catch (e) {\n return null;\n }\n}\nexport function localStorageRemoveItem(key) {\n try {\n localStorage.removeItem(key);\n } catch (e) {}\n}\n\n\n/**\n * @description Replace the current language string with a new one\n * @param {string} pathname\n * @param {string} newLang\n * @return {string}\n */\nexport function replaceLanguageInPathname(pathname, newLang) {\n let parts = convertUrlToArray(pathname);\n\n if (parts.length && isValidLocaleFormat(parts[0])) {\n // Valid lang found in url\n // Subtract the lang\n parts.shift();\n }\n\n if (newLang !== 'en' && newLang !== 'en-us') {\n // Add newLang to parts\n parts.unshift(newLang);\n }\n\n let newLangRegionAndPath = parts.join('/');\n\n // Only add prefix slash if path is not empty\n if (newLangRegionAndPath) {\n newLangRegionAndPath = '/' + newLangRegionAndPath;\n }\n\n return newLangRegionAndPath;\n}\n\n\n/**\n * @description Retrieves the user's primary browser language.\n * If the language is a lang-region string only return the lang.\n */\nexport function getBrowserLanguage() {\n const browserLanguage = (\n window.navigator.languages && window.navigator.languages[0]\n || window.navigator.language\n || window.navigator.userLanguage\n || '')\n .toLowerCase();\n\n return browserLanguage.split('-')[0];\n}\n\n\n/**\n * @description Simple includes helper for older browser support\n */\nexport function isInArray(arr, arg) {\n if (arr && arg) {\n return arr.indexOf(arg) > -1;\n }\n\n return false;\n}\n\n\n/**\n * @description Checks userAgent to see if it is a supported crawler bot.\n * @return {Boolean} Whether the userAgent has been verified as a crawler bot.\n */\nexport function getCrawlerBot() {\n if (window.navigator && window.navigator.userAgent) {\n const userAgent = window.navigator.userAgent.toLowerCase();\n const isBot = crawlerUserAgents.some(function (bot) {\n return isInArray(userAgent, bot);\n });\n\n return isBot;\n }\n\n return false;\n}\n\n\n/**\n * @description Sets localStorage entry with TTL\n * @param {String} key - Your local storage key\n * @param {String} value - Your local storage value\n * @param {String} ttl - Time to live expiration in milliseconds. Default 1 day\n */\nexport function localStoreSetItem(key, value, ttl = 1000 * 60 * 60 * 24) {\n const now = new Date().getTime();\n const item = {\n value,\n ttl: now + ttl\n };\n localStorageSetItem(key, JSON.stringify(item));\n}\n\n\n/**\n * @description Get localStorage entry if it has not expired. If expired remove it.\n * @param {String} key - Your local storage key\n * @return {String} Returns your string value\n */\nexport function localStoreGetItem(key) {\n const itemStr = localStorageGetItem(key);\n let item;\n const now = new Date();\n\n if (!itemStr) {\n return null;\n }\n\n try {\n item = JSON.parse(itemStr);\n } catch (e) {\n return null;\n }\n\n if (now.getTime() > item.ttl) {\n localStorageRemoveItem(key);\n return null;\n }\n\n return item.value;\n}\n\n\nexport function getLangOverride(regionConfig) {\n let regionLanguages = regionConfig.regionLanguages;\n const regionCode = regionConfig.regionCode;\n const rootLangs = ['en', 'en-us'];\n let langOverride;\n\n\n // Force Lowercase all region languages for accurate comparison\n regionLanguages = regionLanguages.map(function (v) {\n return v.toLowerCase();\n });\n\n // Get Preferred Lang MLP LocalStorage\n let languagePreferenceMlp = localStorageGetItem('languagePreferenceMlp') || '';\n if (languagePreferenceMlp) {\n languagePreferenceMlp = languagePreferenceMlp.toLowerCase();\n }\n\n // Get Browser Language and Browser Lang Region\n const browserLanguage = getBrowserLanguage();\n let browserLangRegion = null;\n if (browserLanguage) {\n browserLangRegion = browserLanguage + '-' + regionCode.toLowerCase();\n }\n\n // Get Valid urlLang\n const splitUrl = window.location.pathname.split('/');\n const reqUrlPrefix = splitUrl[1];\n let urlLang = 'en';\n if (isValidLocaleFormat(reqUrlPrefix)) {\n urlLang = reqUrlPrefix.toLowerCase();\n }\n\n // Set defaultLang\n let defaultLang;\n if (regionConfig.lang) {\n defaultLang = regionConfig.lang.toLowerCase();\n }\n\n if (rootLangs.includes(urlLang)) {\n // Check to see if User came to domain.com/welcome/xxx\n if (languagePreferenceMlp && isInArray(regionLanguages, languagePreferenceMlp)) {\n\n // Check to see if languagePreferenceMlp is set and valid for the current region\n langOverride = (!rootLangs.includes(languagePreferenceMlp)) ? languagePreferenceMlp : false;\n console.info('Lang: 1 - languagePreferenceMlp is valid Goto languagePreferenceMlp', langOverride);\n\n } else if (browserLangRegion && !rootLangs.includes(browserLangRegion) &&\n isInArray(regionLanguages, browserLangRegion)) {\n\n // If no preferred Lang set, check the Browser Language\n langOverride = browserLangRegion;\n console.info('Lang: 2 - Goto browserLangRegion', langOverride);\n\n } else if (!rootLangs.includes(defaultLang)) {\n\n // If no preferred lang and the browser lang is not valid,\n // use the region default (if the default is not EN)\n langOverride = defaultLang;\n console.info('Lang: 3 - Invalid langRegion Goto defaultLang', langOverride);\n\n }\n\n } else if (!isInArray(regionLanguages, urlLang)) {\n\n if (browserLangRegion && browserLangRegion !== urlLang &&\n isInArray(regionLanguages, browserLangRegion)) {\n\n // If the specified urlLang is not valid for the region try the browser language\n langOverride = browserLangRegion;\n console.info('Lang: 4 urlLang Invalid for Region Goto browserLangRegion', langOverride);\n\n } else {\n\n // If the specified urlLang and the browser lang are invalid for region, use the region default.\n langOverride = defaultLang;\n console.info('Lang: 5 - Invalid langRegion Goto defaultLang', langOverride);\n\n }\n\n }\n\n return langOverride;\n}\n\n\n/**\n * If the user enters a URL with a language-region string that does not match there current location it will redirect\n * the user to the same url but for the default language for the correct region.\n * @example /welcome will redirect to /en-ca/welcome\n */\nexport function redirectForRegionLang() {\n const regionConfig = window.dssMlpConfigs.regionConfig;\n const regionCode = regionConfig.regionCode;\n const sessionRegionCode = localStoreGetItem('regionCodeMLP') || regionCode;\n const regionLanguages = regionConfig.regionLanguages;\n\n // Don't redirect for bots or preview environment\n let bypassRedirect;\n if (getCrawlerBot() || window.dssMlpConfigs && window.dssMlpConfigs.bypassRedirect) {\n bypassRedirect = true;\n }\n\n // Don't redirect loop as we have already redirected the guest\n if (sessionRegionCode !== regionCode) {\n bypassRedirect = true;\n console.info('Lang: Missmatch SessionRegion', sessionRegionCode, '- ServerRegion', regionCode);\n }\n\n if (!bypassRedirect && regionLanguages && regionLanguages.length) {\n\n const langOverride = getLangOverride(regionConfig);\n\n if (langOverride) {\n const origin = window.location.origin;\n const search = window.location.search;\n let pathname = window.location.pathname;\n pathname = replaceLanguageInPathname(pathname, langOverride);\n const redirectUrl = origin + pathname + search;\n\n localStoreSetItem('regionCodeMLP', regionCode, 5000);\n console.info('Lang: 6a - REDIRECT ', redirectUrl);\n window.location.replace(redirectUrl);\n\n } else {\n // Language specified in the Url is a valid langRegion, do nothing.\n console.info('Lang: 6b - urlLang is valid langRegion Stay', window.location.pathname);\n }\n\n }\n}\n\n\n/**\n * If the guest is logged in and this is an olp type page, redirect them to /home\n */\nexport function redirectForIsLoggedIn() {\n const isLoggedIn = localStorageGetItem('isLoggedIn');\n const { isLoggedInRedirect } = window.dssMlpConfigs;\n let redirectHome = false;\n\n if (isLoggedInRedirect && isLoggedIn) {\n redirectHome = true;\n window.location.replace('/home');\n }\n\n return redirectHome;\n}\n\n\n/**\n * Auth Lang Region Redirect\n */\nexport function authLangRegionInit() {\n console.info('Lang: Lang Region Init');\n\n if (!redirectForIsLoggedIn()) {\n redirectForRegionLang();\n }\n}\n","import { getDevice } from 'dss-device';\nimport { crawlerUserAgents } from '../utils/langRegionRedirect';\n\nconst deviceSupportMatrix = {\n chrome: 53,\n firefox: 49,\n msie: 11,\n safari: 9\n};\n\nconst mobileDeviceBlacklist = [\n 'silk'\n];\n\n\n/**\n * Mobile Device Check\n * @description Checks if on a mobile device or not\n * @returns {Boolean} whether device is mobile or not\n */\nfunction isMobileDevice() {\n const device = getDevice();\n const isPhone = device.formFactor === 'phone';\n const isTablet = device.formFactor === 'tablet';\n\n return isPhone || isTablet;\n}\n\n/**\n * Mobile Device BlacklistCheck\n * @description Checks if the user is on a mobile device and whether it is black-listed or not\n * @returns {Boolean} whether device is mobile and blacklisted\n */\nfunction isSupportedMobileDevice() {\n const device = getDevice();\n const browser = device.browser;\n\n return isMobileDevice() && !mobileDeviceBlacklist.includes(browser);\n}\n\n\n/**\n * Get Device Platform\n * @description Gets and returns device platform. ie: 'apple' or 'android'\n * @returns {String} the platform string\n */\nfunction getDevicePlatform() {\n const device = getDevice();\n\n return device.platform || '';\n}\n\n/**\n * @description Checks userAgent to see if it is a supported crawler bot.\n * @param {string} userAgent the userAgent string\n * @return {Boolean} Whether the userAgent has been verified as a crawler bot.\n */\nfunction isCrawlerBot(userAgent) {\n if (!userAgent) {\n return false;\n }\n\n return crawlerUserAgents.some(bot => userAgent.toLowerCase().includes(bot));\n}\n\n/**\n * @description Checks the IE browser version against the minimum we support and returns true or false\n * @returns {Boolean} Whether the browser is IE and is a supported version or not\n */\nfunction isDeviceSupportedVersionOfSafari() {\n const device = getDevice();\n let isSupported = true;\n\n // check to see if the user is on osx and using safari\n if (device.browser === 'safari') {\n\n if (device.platform === 'macintosh') {\n const osxVersionSegments = device.platformVersion.split('.');\n\n // if the user is on El Capitan or lower, redirect to /unsupported (verison 11 is El Capitan)\n if ((osxVersionSegments.length >= 2) &&\n (osxVersionSegments[0] === '10') &&\n (parseInt(osxVersionSegments[1], 10) <= 11)\n ) {\n isSupported = false;\n }\n }\n }\n\n return isSupported;\n}\n\n/**\n * @description Checks the browser version against the minimum we support and returns true or false\n * @returns {Boolean} Whether the device is supported or not\n */\nfunction isDeviceSupported() {\n const device = getDevice();\n const browser = device.browser;\n const version = parseInt(device.browserVersion, 10);\n const minVersion = deviceSupportMatrix[browser];\n\n //Should probably fail open\n let meetsMinimum = true;\n\n if (!isCrawlerBot(device.userAgent)) {\n if ((browser === 'silk') || !isDeviceSupportedVersionOfSafari()) {\n meetsMinimum = false;\n } else if (browser && version && minVersion) {\n meetsMinimum = version >= minVersion;\n }\n }\n\n return meetsMinimum;\n}\n\n/**\n * @description Checks the IE browser version against the minimum we support and returns true or false\n * @returns {Boolean} Whether the browser is IE and is a supported version or not\n */\nfunction isDeviceSupportedVersionOfIE() {\n const device = getDevice();\n const browser = device.browser;\n\n return browser === 'msie' && isDeviceSupported();\n}\n\n/**\n * @description Checks the Edge browser version against the minimum we support and returns true or false\n * @returns {Boolean} Whether the browser is Edge and is a supported version or not\n */\nfunction isDeviceSupportedVersionOfEdge() {\n return getDevice().browser === 'edge' && isDeviceSupported();\n}\n\n/**\n * @description Determines whether other not the current device has a retina display\n * @returns {Boolean} Whether the current device has a retina display\n */\nfunction isRetinaDisplay() {\n //Wrapped in try/catch for server execution\n try {\n if (window.matchMedia) {\n const mediaQuery = '(-webkit-min-device-pixel-ratio: 2), ' +\n '(min-device-pixel-ratio: 2), (min-resolution: 192dpi)';\n\n return matchMedia(mediaQuery).matches;\n } else {\n return false;\n }\n } catch (e) {\n //Default to true for server generated images to minimize flicker\n return true;\n }\n}\n\nexport {\n isCrawlerBot,\n isMobileDevice,\n isSupportedMobileDevice,\n getDevicePlatform,\n isDeviceSupported,\n isDeviceSupportedVersionOfEdge,\n isDeviceSupportedVersionOfIE,\n isDeviceSupportedVersionOfSafari,\n isRetinaDisplay\n};\n","/**\n * Prefetch Nav Item Urls\n * @description A simple nav prefetch to improve UX speed for primary pages\n */\nconst preFetch = () => {\n\n // Cancel for splash because sign up and login do not exist\n if (window.dssMlpConfigs && window.dssMlpConfigs.variant === 'splash') {\n return;\n }\n\n const prefetchSlugs = ['/sign-up', '/login'];\n const head = document.getElementsByTagName('head')[0];\n let i;\n\n for (i = 0; i < prefetchSlugs.length; i++) {\n const link = document.createElement('link');\n link.rel = 'prefetch';\n link.href = window.location.origin + prefetchSlugs[i];\n head.appendChild(link);\n }\n};\n\n/**\n * Convert Nodelists into arrays\n * @description //Polyfill to turn nodelists into arrays for IE\n */\nconst convertNodes = () => {\n if (window.NodeList && !NodeList.prototype.forEach) {\n NodeList.prototype.forEach = function (callback, thisArg = window) {\n for (let i = 0; i < this.length; i++) {\n callback.call(thisArg, this[i], i, this);\n }\n };\n }\n};\n\n\n/**\n * @description Returns whether the urlLang is a valid locale format\n * @param {String} urlLang - language from URL\n * @returns {Boolean} True if contextUrlPrefix is a valid config combination\n * Example valid matches en, de, en-gb, en-us, fr-fr\n */\nconst isValidLocaleFormat = (urlLang = '') => {\n return /^[a-zA-Z]{2}(-[a-zA-Z0-9]{2,3})?$/.test(urlLang);\n};\n\n\n/**\n * Replace the current language string with a new one\n * @param {string} originalUrl\n * @param {string} lang\n * @param {string} newLang\n * @return {string}\n */\nconst replaceLanguageInPathname = (pathname, newLang) => {\n const parts = pathname.slice(1).split('/');\n if (parts.length > 1 && isValidLocaleFormat(parts[0])) {\n if (newLang === 'en') {\n parts.shift();\n } else {\n parts[0] = newLang;\n }\n } else {\n parts.unshift(newLang);\n }\n\n return `/${parts.join('/')}`;\n};\n\n/**\n * @description Adds tracking attributes to rich text links\n */\nconst setupRichTextForTracking = () => {\n document.querySelectorAll('.hero .richtext a').forEach(el => {\n el.setAttribute('data-gv2-element', 'element');\n el.setAttribute('data-gv2-key', 'button');\n el.setAttribute('data-analytics', 'click');\n el.setAttribute('data-analytics-name', el.textContent);\n });\n};\n\nmodule.exports = {\n isValidLocaleFormat,\n preFetch,\n convertNodes,\n replaceLanguageInPathname,\n setupRichTextForTracking\n};\n","import sdkSessionUtil from 'bam-browser-sdk-sdkSession-util';\nimport SDK from 'bam-browser-sdk';\nimport userManager from 'btm-user-manager';\n\nexport async function initializeSdk(cb) {\n const { server_path: serverPath } = window;\n\n sdkSessionUtil.setBootstrapConfiguration(serverPath.sdk);\n\n try {\n const sessionInfo = await userManager.session.getSessionInfo();\n const sdkSession = await userManager.getSdkSession();\n const isLoggedIn = await userManager.bam.isLoggedIn();\n const { isSubscriber } = sessionInfo;\n\n const UserActivity = {\n GlimpseEvents: SDK.UserActivity.Glimpse.GlimpseEvents,\n GlimpseEvent: SDK.UserActivity.Glimpse.GlimpseEvent,\n UserActivityApi: sdkSession.userActivityApi\n };\n\n if (typeof(cb) === 'function') {\n cb({\n UserActivity,\n sessionInfo,\n isLoggedIn,\n isSubscriber\n });\n }\n } catch (err) {\n console.error(err);\n }\n}\n","// LangSelector V1 and V2\n\n/**\n * @description Returns whether the urlLang is a valid locale format\n * @param {String} urlLang - language from URL\n * @returns {Boolean} True if contextUrlPrefix is a valid config combination\n */\nexport function isValidLocaleFormat(urlLang) {\n return /^[a-zA-Z]{2}(-[a-zA-Z0-9]{2,3})?$/.test(urlLang);\n}\n\n\n/**\n * langSelectorInit\n * @description A simple language selector navigation tool\n */\nexport const langSelectorInit = () => {\n\n const langSelector = document.getElementById('language-selector');\n\n // Bind Select Menu\n if (langSelector) {\n langSelector.addEventListener('change', function () {\n const path = langSelector.value || '';\n\n if (path) {\n let languagePreferenceMlp = path.split('/')[1];\n\n if (isValidLocaleFormat(languagePreferenceMlp)) {\n languagePreferenceMlp = languagePreferenceMlp.toLowerCase();\n } else {\n languagePreferenceMlp = 'en';\n }\n\n try {\n localStorage.setItem('languagePreferenceMlp', languagePreferenceMlp);\n } catch (e) {}\n // Redirect to the lang url page\n window.location.replace(path);\n }\n });\n }\n\n // Set localStorage to render client side preferred lang for commerce\n const languageAppCodeMeta = document.getElementsByName('languageAppCode')[0];\n\n if (languageAppCodeMeta) {\n const lang = languageAppCodeMeta.getAttribute('content');\n\n // Set localStorage for app lang\n try {\n localStorage.setItem('languagePreference', lang);\n } catch (e) {}\n }\n};\n","/**\n * @description Navigate to the URL supplied in the query string\n * @param e - The onClick event object\n */\nexport function navigateUrlQsp(e) {\n const destinationUrl = window.s && window.s.Util.getQueryParam('url');\n if (destinationUrl) {\n e.preventDefault();\n window.location.assign(destinationUrl);\n }\n}\n\n/**\n * @description Navigate to the previous page in the users history\n * @param e - The onClick event object\n */\nexport function navigateBack(e) {\n if (window.history.length > 1) {\n e.preventDefault();\n window.history.back();\n }\n}\n\n/**\n * @description Scroll to the top of the page when button is clicked\n * @param e - The onClick event object\n */\nexport function scrollToTop(e) {\n e.preventDefault();\n window.scrollTo({ top: 0, behavior: 'smooth' });\n}\n\n/**\n * @description Open the OneID Lightbox if OneID signup button is clicked\n * @param e - The onClick event object\n */\nexport function oneIdSignup(e) {\n window.oneId.openLightbox(e.currentTarget);\n}\n\n/**\n * @description Determine which action should be taken when the target button is clicked\n * @param {*} e - The onClick event object\n */\nexport function actionOnClick(e) {\n const target = e.currentTarget;\n const action = target.getAttribute('data-action');\n\n switch (action) {\n case 'onetrust-manage':\n if (window.Optanon) {\n // eslint-disable-next-line new-cap\n window.Optanon.ToggleInfoDisplay();\n }\n break;\n\n case 'speedbump-continue':\n navigateUrlQsp(e);\n break;\n\n case 'speedbump-go-back':\n navigateBack(e);\n break;\n\n case 'scroll-top':\n scrollToTop(e);\n break;\n\n case 'oneid-signup':\n oneIdSignup(e);\n break;\n }\n}\n\n/**\n * @description Scan the DOM for any elements that have the data-action attribute and attach an onclick listener.\n */\nexport function initButtonActions() {\n const ctas = document.querySelectorAll('[data-action]');\n\n ctas.forEach(cta => {\n cta.addEventListener('click', actionOnClick);\n });\n}\n","import { getDevice } from 'dss-device';\nimport { deepGet, deepGetOfType } from 'bam-deep-get';\nimport uuidv4 from 'uuid/v4';\n\n/**\n * Class listens for trackable events and fires custom event to allow for easy use by integrated\n * Analytics platforms\n */\nexport default class AnalyticsManager {\n constructor(skdPayload) {\n const { UserActivity } = skdPayload;\n this.triggerEvent = this.triggerEvent.bind(this);\n this.deviceData = {};\n this.userData = {};\n this.userActivityApi = UserActivity.UserActivityApi;\n this.glimpseEvents = UserActivity.GlimpseEvents;\n this.glimpseEvent = UserActivity.GlimpseEvent;\n\n this.initContextData(skdPayload.sessionInfo);\n this.bindPageLoad();\n this.bindElementEvents();\n }\n\n /**\n * @description Getter returns the gloabl context data\n * @returns {object}\n */\n get contextData() {\n return {\n ...this.deviceData,\n ...this.userData,\n ...this.updateDynamicData()\n };\n }\n\n get sessionInfo() {\n return this._sessionInfo;\n }\n\n get appVersion() {\n const { env } = window.server_path;\n const subdomain = window.location.host.split('.')[0];\n const envString = (subdomain === 'www') ? '' : `__${env}`;\n\n return `${window.server_path.appVersion}${envString}`;\n }\n\n /**\n * @description Initialize the static context data\n * @param {object} sessionInfo - The current session info from the bam-browser-sdk-sdkSession-util module\n */\n initContextData(sessionInfo) {\n const device = getDevice();\n const {\n s_account: adobeRsid,\n navigator,\n server_path: serverPath\n } = window;\n const { browser, browserVersion, formFactor, platform, platformVersion, userAgent } = device;\n const deviceStr = (formFactor === 'phone') || (formFactor === 'tablet') ? 'Mobile Web' : 'Web';\n\n this._sessionInfo = sessionInfo;\n\n this.deviceData = {\n browserType: browser,\n browserVersion,\n connectionType: deepGet(navigator, 'connection.type', 'unknown'),\n device: deviceStr,\n deviceType: formFactor,\n osName: platform,\n osVersion: platformVersion,\n partner: deepGetOfType(window, 'server_path.analytics.partner', String),\n platform: 'Web',\n platformType: 'Web',\n userAgent,\n webAppName: deepGetOfType(window, 'server_path.analytics.adobe.webAppName', String)\n };\n\n this.userData = {\n adobeRsid,\n adobeRsidName: serverPath.analytics.adobe.rsidname,\n deviceLanguage: navigator.language.split('-')[0],\n deviceLocale: navigator.language,\n dssDeviceId: (sessionInfo) ? sessionInfo.device.id : '',\n dssSessionId: (sessionInfo) ? sessionInfo.id : ''\n };\n }\n\n /**\n * @description Some analyics data changes per event tracked.\n * @return {Object} Dynamic Data\n */\n updateDynamicData() {\n const { s, visitor } = window;\n const { screenOrientation } = getDevice();\n const cid = s ? s.Util.getQueryParam('cid') : '';\n const partnerId = s ? s.Util.getQueryParam('partnerId') : '';\n const testId = s ? s.Util.getQueryParam('testId') : '';\n const dssAccountId = deepGet(this._sessionInfo, 'account.id', null);\n const dssProfileId = deepGet(this._sessionInfo, 'profile.id', null);\n const enableCMP = deepGetOfType(window, 'dssMlpConfigs.regionConfig.featureConfig.enableCMP', Boolean);\n let consentStatus;\n\n const consentGroups = (window.OptanonActiveGroups) ?\n window.OptanonActiveGroups.trim().split(',').filter(g => g) : [];\n\n if (!consentGroups.length) {\n consentStatus = (enableCMP) ? '1' : '1,2,3,4';\n } else {\n consentStatus = consentGroups.join(',');\n }\n\n let optimizelyContextData;\n\n if (window.optimizelyData) {\n optimizelyContextData = {\n optimizelyCampaignId: deepGet(window.optimizelyData, 'data.decision.campaignId'),\n optimizelyExperimentId: deepGet(window.optimizelyData, 'data.decision.experimentId'),\n optimizelyVariationId: deepGet(window.optimizelyData, 'data.decision.variationId')\n };\n }\n\n return {\n adobeSdkVersion: s ? s.version : '',\n appVersion: this.appVersion,\n cid,\n dssAccountId,\n dssProfileId,\n loggedIn: dssAccountId ? 'true' : 'false',\n mid: (visitor) ? visitor.getMarketingCloudVisitorID() : '',\n previousUrl: document.referrer,\n consentStatus,\n partnerId,\n screenOrientation,\n testId,\n timestamp: new Date().toISOString(),\n userVisitorState: s ? s.getNewRepeat() : '',\n ...optimizelyContextData\n };\n }\n\n /**\n * @description Find all elements that are to be tracked and listen for the specified event. Once that event is triggered\n * fire a custom event.\n */\n bindElementEvents() {\n document.querySelectorAll('[data-analytics]').forEach(el => {\n const captureEvent = el.getAttribute('data-analytics') || 'click';\n\n el.addEventListener(captureEvent, this.triggerEvent);\n });\n }\n\n /**\n * @description Listen for the page load event\n */\n bindPageLoad() {\n document.body.addEventListener('load', this.triggerEvent);\n }\n\n /**\n * @description Fire a custom event with the string syntax of 'analtyics_$type'\n * @example analytics_click, analytics_load, analytics_change, etc\n * @param {Event} e - Event Object\n */\n triggerEvent(e) {\n let customEvent;\n\n //IE 11 has CustomEvent Obj but doesn't like the constructor for IE reasons\n try {\n customEvent = new CustomEvent(`analytics_${e.type}`, {\n bubbles: true,\n detail: e.detail\n });\n } catch (err) {\n customEvent = document.createEvent('CustomEvent');\n customEvent.initCustomEvent(`analytics_${e.type}`, true, false, e.detail);\n }\n\n e.currentTarget.dispatchEvent(customEvent);\n }\n\n /** @description Fire the page load event */\n firePageLoad() {\n this.triggerEvent({ type: 'load', currentTarget: document.body });\n }\n\n /** @description Fire a special event\n * @param {Object} eventData Data to send thru to the analytics event\n * @param {String} eventData.action Special action being tracked\n */\n fireAction(eventData) {\n this.triggerEvent({ type: 'event', currentTarget: document.body, detail: {\n ...eventData\n } });\n }\n\n\n /**\n * @description Get the consentStatus based upon CMP approvals or defaults for the region.\n * @returns {Array} User's consent status\n */\n getConsentState() {\n const enableCMP = deepGetOfType(window, 'dssMlpConfigs.regionConfig.featureConfig.enableCMP', Boolean);\n\n let consentGroups = (window.OptanonActiveGroups) ? window.OptanonActiveGroups.trim().split(',').filter(g => g) : [];\n const categoryStrings = ['essential', 'performance_and_analytics', 'functional', 'targeting_and_advertising'];\n\n if (!consentGroups.length) {\n consentGroups = (enableCMP) ? ['1'] : ['1', '2', '3', '4'];\n }\n\n return consentGroups.map(index => {\n return categoryStrings[index - 1];\n });\n }\n\n /** @description Handle Glimpse Tracking Events **/\n fireGlimpseEvent(glimpseEvent) {\n const {\n appLaunched\n } = this.glimpseEvents;\n\n const glimpseTimeStamp = new Date();\n glimpseTimeStamp.toISOString();\n\n const glimpseV2Persisted = JSON.parse(sessionStorage.getItem('dss-glimpseV2-persist')) || {};\n const { activitySessionId } = glimpseV2Persisted;\n\n if (!activitySessionId) {\n const glimpseV2Init = {\n activitySessionId: uuidv4()\n };\n sessionStorage.setItem('dss-glimpseV2-persist', JSON.stringify(glimpseV2Init));\n }\n\n const correlationId = JSON.parse(sessionStorage.getItem('correlationId')) || uuidv4();\n sessionStorage.setItem('correlationId', JSON.stringify(correlationId));\n\n const glimpseTrackingParameters = {\n activitySessionId,\n adobeId: this.deviceData.mid,\n appName: deepGetOfType(window, 'server_path.analytics.adobe.webAppName', String),\n appVersion: this.appVersion,\n consentFallback: (!window.Optanon),\n consentStates: this.getConsentState(),\n correlationId,\n kochavaAppId: 'id_not_available',\n partner: this.deviceData.partner,\n platform: this.deviceData.platform,\n timestamp: glimpseTimeStamp\n };\n\n let event;\n let additionalParameters;\n\n switch (glimpseEvent) {\n case 'consentGranted':\n // eslint-disable-next-line new-cap\n event = new this.glimpseEvent('urn:dss:event:fed:lifecycle:consent:granted');\n additionalParameters = {\n action: 'Click'\n };\n break;\n }\n\n if (event) {\n this.userActivityApi.setTrackingParameters(glimpseTrackingParameters);\n this.userActivityApi.trackEvent(event, additionalParameters);\n }\n\n }\n}\n"],"sourceRoot":""}