{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///./scripts/utils/helpers.tsx","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/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","appendScript","url","onload","script","document","createElement","src","body","appendChild","removeOneTrustLink","otManageLink","querySelector","remove","isV2Page","documentElement","classList","contains","isOlp","getAttribute","getSlug","pathname","window","location","endsWith","slice","matches","match","slug","split","pop","toString","isValidLocaleFormat","substr","isVisible","elem","styles","getComputedStyle","opacity","parseInt","getPropertyValue","offsetWidth","offsetHeight","getClientRects","length","urlLang","test","getSlugWithoutLocale","slugArray","splice","join","convertUrlToArray","parts","cleanUrl","startsWith","replace","stripEndSlashes","smoothscroll","polyfill","Element","prototype","CharacterData","DocumentType","forEach","item","hasOwnProperty","Object","defineProperty","configurable","enumerable","writable","value","parentNode","removeChild","msMatchesSelector","webkitMatchesSelector","closest","s","el","call","parentElement","nodeType","CustomEvent","event","params","parameters","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","OT_COOKIE_KEYS","BOX_CLOSED","CONSENT","prevConsent","loginConsentState","oneTrustIsActiveGroup","group","OptanonActiveGroups","addOneTrustOnConsentFunction","func","OptanonWrapperFunctions","push","initalizeOneTrust","onConsentChanged","options","onerror","OneTrust","loaded","Optanon","OnConsentChanged","type","charset","defer","setAttribute","guuid","head","thirdPartyLinks","querySelectorAll","link","addEventListener","e","preventDefault","syncOneTrustConsent","id","isAuth","countryCode","OneTrustConsent","reload","filter","sendConsent","cookies","getAllCookies","name","values","includes","setCookie","expires","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","GlimpseV2Tracking","modalEl","index","target","modalContainers","modalContainer","isSticky","prefix","visibleEl","assetData","asset","tagName","toLowerCase","style","backgroundImage","indexOf","protocol","dataset","gv2Name","parentContainer","backgroundAsset","callback","data","initData","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","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","getPageName","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 ","/**\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 if (isV2Page() && !isOlp()) {\n const pageType = (document.querySelector('meta[name~=\"pageType\"]')?.getAttribute('content'))?.toString();\n return (pageType === 'splash');\n }\n\n return false;\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 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 if (isV2Page() && !isOlp()) {\n const pageType = document.querySelector('meta[name~=\"pageType\"]').getAttribute('content').toString();\n\n return ((pageType === 'splash') ? 'welcome__splash' : 'welcome__mlp');\n } else {\n // TODO: When V1 OLP is migrated to V2, replace isOlp() function with pageType\n return ((isOlp() || window.location.pathname === '/') ? 'welcome' : '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","import { getSlug, isV2Page, isOlp } from 'global-scripts/utils/helpers';\nimport { appendScript } from '../utils/helpers';\nimport { deepGet } from 'bam-deep-get';\n\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 // Only V2 Pages have pageType on them, use isOlp for V1 logic\n if (isV2Page() && !isOlp()) {\n const pageType = document.querySelector('meta[name~=\"pageType\"]').getAttribute('content').toString();\n return ((pageType === 'splash') ? 'Marketing Splash' : 'Welcome - MLP');\n } else {\n // TODO: When V1 OLP is migrated to V2, replace isOlp() function with pageType\n return (isOlp() ? 'Welcome' : 'Welcome - MLP');\n }\n },\n\n /**\n * @description Determine the section for adobe analytics (OLP, MLP, Splash)\n * @return Welcome = OLP; Welcome - MLP = MLP, Marketing Splash = Splash\n */\n getSection: () => {\n if (isV2Page() && !isOlp()) {\n const pageType = document.querySelector('meta[name~=\"pageType\"]').getAttribute('content').toString();\n return ((pageType === 'splash') ? 'Marketing Splash' : 'Welcome');\n } else {\n // TODO: When V1 OLP is migrated to V2, replace isOlp() function with pageType\n return 'Welcome';\n }\n\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.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 AdobeAnalytics.appendIdsForCrossDomainLinks();\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":""}