{"version":3,"file":"6058-b5a1fcf7.pkg.js","mappings":"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","sources":["webpack://frontend-build-tools/./src/feature/add-to-homescreen/AddToHomeScreen.jsx","webpack://frontend-build-tools/./src/feature/add-to-homescreen/add-to-homescreen.js","webpack://frontend-build-tools/./src/foundation/tracking/tracking.js","webpack://frontend-build-tools/./src/foundation/utilities/isMobile.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { pushGaEvent } from '../../foundation/tracking/tracking';\r\nimport { browserIsSafari, getOSHandler } from '../../foundation/utilities/isMobile';\r\nimport { Icon } from 'atoms';\r\n\r\nconst STORAGE_KEY = 'tivoli-casino-add-to-home-screen';\r\nconst DEFAULT_LOCALSTORAGE = {\r\n pauseUntil: false, // time to pass before we display the message again\r\n visitsUntil: false, // number of pages viewed\r\n displayCount: 0, // number of times the message has been displayed\r\n addedToHome: false // has been actually added to the home screen\r\n};\r\n\r\nlet localStorage = {};\r\n\r\nconst AddToHomeScreen = (props) => {\r\n const { settings } = props;\r\n const icon = settings?.icon?.source || '/dist/assets/images/android-icon-192x192.png';\r\n const btnText = settings?.btnText || 'Tilføj';\r\n const btnBgColor = settings?.btnBgColor || '#bc9f6d';\r\n const btnColor = settings?.btnColor || '#ffffff';\r\n const bgImage = settings?.bgImage?.source || '/dist/assets/svg/icon-bg.svg';\r\n const itemName = document.querySelector('div[data-behavior=\"add-to-homescreen\"]')?.getAttribute('data-item-name');\r\n\r\n const [showPwaPrompt, setShowPwaPrompt] = useState(false);\r\n const [pwaEnabled, setPwaEnabled] = useState(false);\r\n const [showPwaGuidance, setShowPwaGuidance] = useState(false);\r\n const [path, setPath] = useState(window.location.href);\r\n const [OS, setOS] = useState(false);\r\n\r\n const listenToPopstate = () => {\r\n const winPath = window.location.href;\r\n setPath(winPath);\r\n };\r\n\r\n useEffect(() => {\r\n const getOS = getOSHandler();\r\n setOS(getOS);\r\n\r\n switch (getOS) {\r\n case 'android':\r\n initializeAndroidInstallPrompt();\r\n break;\r\n }\r\n\r\n window.addEventListener('popstate', listenToPopstate);\r\n return () => {\r\n window.removeEventListener('popstate', listenToPopstate);\r\n };\r\n }, []);\r\n\r\n\r\n const initialize = () => {\r\n // check if all conditions are fulfilled\r\n if (!shouldShowPopup()) return;\r\n\r\n // check if all custom criteria are fulfilled\r\n if (isOnPause()) return;\r\n\r\n // Get the operating system of the device\r\n const getOS = getOSHandler();\r\n if (!getOS) return;\r\n\r\n // Handle the logic based on the detected operating system\r\n switch (getOS) {\r\n // For iOS devices (both iPhones and iPads)\r\n case 'ios':\r\n case 'ipad':\r\n // Check if the browser is Safari and Initialize logic for displaying the popup for adding to home screen on iOS\r\n if (browserIsSafari()) showPopup();\r\n break;\r\n // For Android devices\r\n case 'android':\r\n // Initialize the Android-specific install prompt logic\r\n showPopup();\r\n break;\r\n }\r\n };\r\n\r\n\r\n useEffect(initialize, [path]);\r\n\r\n\r\n const shouldShowPopup = () => {\r\n if(showPwaPrompt) return false;\r\n\r\n const { currentUser } = sessionStorage.getItem('persist:root:shared') ? JSON.parse(JSON.parse(sessionStorage.getItem('persist:root:shared'))?.currentUser) : { currentUser: { isAuthenticated: false } };\r\n const isLoggedIn = document.querySelector('header.is-logged-in');\r\n\r\n // check if user is logged in\r\n if (!currentUser.isAuthenticated && !isLoggedIn) return false;\r\n\r\n // get localStorage data from local storage or set default values if not available\r\n const localStorageString = window.localStorage.getItem(STORAGE_KEY);\r\n localStorage = localStorageString ? JSON.parse(localStorageString) : DEFAULT_LOCALSTORAGE;\r\n\r\n // check if the app is already installed\r\n if (localStorage?.addedToHome || window.matchMedia('(display-mode: standalone)').matches || navigator.standalone === true) {\r\n // there is nothing to do if app was already added to home screen\r\n localStorage.addedToHome = true;\r\n updateLocalStorage();\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n\r\n const isOnPause = () => {\r\n // increment the page views\r\n if (localStorage.visitsUntil > 0) {\r\n /* eslint-disable-next-line no-plusplus */\r\n --localStorage.visitsUntil;\r\n updateLocalStorage();\r\n }\r\n\r\n if (localStorage.visitsUntil || (localStorage.pauseUntil && new Date().getTime() <= localStorage.pauseUntil)) return true;\r\n\r\n return false;\r\n };\r\n\r\n\r\n const showPopup = () => {\r\n // Display the \"Add to Home Screen\" popup\r\n setShowPwaPrompt(true);\r\n\r\n // increment the display count\r\n /* eslint-disable-next-line no-plusplus */\r\n ++localStorage.displayCount;\r\n updateLocalStorage();\r\n\r\n // Handle tracking for the event when the popup is shown\r\n handleTracking('shown');\r\n };\r\n\r\n\r\n const initializeAndroidInstallPrompt = () => {\r\n window.addEventListener('beforeinstallprompt', (event) => {\r\n event.preventDefault();\r\n window.promptEvent = event;\r\n\r\n setPwaEnabled(true);\r\n });\r\n };\r\n\r\n\r\n const handleTracking = (action) => {\r\n // If there's a count of how many times the popup has been seen, send a tracking event.\r\n if (localStorage.displayCount) {\r\n pushGaEvent('smartbanner', action, localStorage.displayCount, itemName);\r\n }\r\n };\r\n\r\n\r\n const updateLocalStorage = () => {\r\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(localStorage));\r\n };\r\n\r\n\r\n const installHandler = async () => {\r\n if (pwaEnabled) {\r\n const promptEvent = window.promptEvent;\r\n // The deferred prompt isn't available.\r\n if (!promptEvent) return;\r\n\r\n // Show the install prompt.\r\n promptEvent.prompt();\r\n const { outcome } = await promptEvent.userChoice;\r\n // Reset the deferred prompt variable, since\r\n // prompt() can only be called once.\r\n window.promptEvent = null;\r\n\r\n if (outcome === 'accepted') afterInstallHandler();\r\n\r\n setShowPwaPrompt(false);\r\n } else { // fallback for unsupported browsers\r\n setShowPwaGuidance(true);\r\n afterInstallHandler();\r\n }\r\n };\r\n\r\n\r\n const afterInstallHandler = () => {\r\n localStorage.pauseUntil = false;\r\n localStorage.visitsUntil = false;\r\n localStorage.addedToHome = true;\r\n updateLocalStorage();\r\n\r\n // Handle tracking for the event when the popup is added\r\n handleTracking('add');\r\n };\r\n\r\n\r\n const cancelHandler = () => {\r\n setShowPwaPrompt(false);\r\n\r\n if (localStorage.visitsUntil === false && !localStorage.pauseUntil) {\r\n localStorage.visitsUntil = 5;\r\n } else {\r\n localStorage.pauseUntil = Date.now() + 5259600000; // 2 months into the future (milliseconds);\r\n localStorage.visitsUntil = false;\r\n }\r\n updateLocalStorage();\r\n\r\n // Handle tracking for the event when the popup is closed\r\n handleTracking('close');\r\n };\r\n\r\n\r\n const closeGuidanceHandler = () => {\r\n setShowPwaPrompt(false);\r\n };\r\n\r\n\r\n const renderSwitch = () => {\r\n switch(OS) {\r\n case 'android':\r\n return
Tryk og derefter “Tilføj til startskærm”
;\r\n case 'ios':\r\n case 'ipad':\r\n return
Tryk og derefter “Føj til hjemmeskærm”
;\r\n default:\r\n return 'Fejl: Din browser understøtter ikke PWA';\r\n }\r\n };\r\n\r\n\r\n return (OS == 'android' && pwaEnabled && showPwaPrompt) || (OS !== 'android' && showPwaPrompt) ?
\r\n \r\n { showPwaGuidance ?\r\n
\r\n \r\n pwa icon\r\n
\r\n { renderSwitch() }\r\n
\r\n
\r\n :\r\n
\r\n
\r\n \r\n\r\n pwa icon\r\n\r\n
\r\n

{ localStorage?.visitsUntil === 0 || localStorage?.pauseUntil ? settings.alternativeText : settings.firstTimeText }

\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n : null;\r\n};\r\n\r\nAddToHomeScreen.propTypes = {\r\n settings: PropTypes.object\r\n};\r\n\r\nexport default AddToHomeScreen;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { store } from 'app/shared/store';\r\nimport BaseFeature from '../../foundation/base/base';\r\nimport AddToHomeScreen from './AddToHomeScreen';\r\n\r\nclass AddToHomeScreenWrapper extends BaseFeature {\r\n constructor(element) {\r\n super(element);\r\n this.element = element;\r\n\r\n this.loadReactApp();\r\n }\r\n\r\n loadReactApp() {\r\n ReactDOM.render(\r\n \r\n \r\n , \r\n this.element);\r\n }\r\n}\r\n\r\nexport default AddToHomeScreenWrapper;","export const onError = (errors, e) => {\r\n const concatErrors = Object.keys(errors).map((key) => {\r\n const error = errors[key];\r\n return `${key.toLowerCase()}_${error.type}`;\r\n }).join(',');\r\n\r\n if (typeof window.TC?.gaEvent === 'function') {\r\n window.TC?.gaEvent(e.target.name, 'error', concatErrors);\r\n }\r\n};\r\n\r\nexport const pushGaEvent = (category, action, label, value = '') => {\r\n const dataLayerAvailable = Array.isArray(window.dataLayer);\r\n\r\n if (!dataLayerAvailable) {\r\n console.warn('Tracking DataLayer not available');\r\n return;\r\n }\r\n\r\n var tracking = {\r\n event: 'gaEvent',\r\n eventSyntax: {\r\n action: action,\r\n category: category,\r\n value: value,\r\n label: label\r\n }\r\n };\r\n\r\n window.dataLayer.push(tracking);\r\n};\r\n\r\n// format string from e.g. 'Populære spil' to 'populaere_spil'\r\nexport var formatString = (str) => {\r\n str = str.replace(/\\s+/g, '_').toLowerCase();\r\n str = str.replace(/æ/g, 'ae');\r\n str = str.replace(/ø/g, 'oe');\r\n str = str.replace(/å/g, 'aa');\r\n return str;\r\n};\r\n\r\nexport const pushGaEventOnPageRedirect = (category, action, label) => {\r\n localStorage.setItem('localStorageGaEventTracking', JSON.stringify({\r\n category: category,\r\n action: action,\r\n label: label,\r\n }));\r\n};\r\n\r\nexport const getGaEventAfterPageRedirect = () => {\r\n var ls = localStorage.getItem('localStorageGaEventTracking');\r\n if (ls) {\r\n ls = JSON.parse(ls);\r\n if (ls.category !== null\r\n && ls.action !== null\r\n && ls.label !== null) {\r\n pushGaEvent(ls.category, ls.action, ls.label);\r\n }\r\n localStorage.removeItem('localStorageGaEventTracking');\r\n }\r\n};\r\n\r\nexport const pushGaEventVirtualPage = (name, virtualPath) => {\r\n const dataLayerAvailable = Array.isArray(window.dataLayer);\r\n\r\n if (!dataLayerAvailable) {\r\n console.warn('Tracking DataLayer not available');\r\n return;\r\n }\r\n\r\n var tracking = {\r\n event: 'virtualPage',\r\n page: {\r\n name: name,\r\n virtualPath: virtualPath\r\n }\r\n };\r\n\r\n window.dataLayer.push(tracking);\r\n};\r\n\r\nexport const pushGaEventVirtualPageOnPageRedirect = (name, virtualPath) => {\r\n let vp = '/virtualpath/' + virtualPath;\r\n localStorage.setItem('localStorageGaEventVirtualPageTracking', JSON.stringify({\r\n name: name,\r\n virtualPath: vp\r\n }));\r\n};\r\n\r\nexport const getGaEventVirtualPageAfterPageRedirect = () => {\r\n var ls = localStorage.getItem('localStorageGaEventVirtualPageTracking');\r\n if (ls) {\r\n ls = JSON.parse(ls);\r\n if (ls.name !== null\r\n && ls.virtualPath !== null) {\r\n pushGaEventVirtualPage(ls.name, ls.virtualPath);\r\n }\r\n localStorage.removeItem('localStorageGaEventVirtualPageTracking');\r\n }\r\n};\r\n\r\nexport const pushHeroTrackingEvent = (eventType, bannerName) => {\r\n const dataLayerAvailable = Array.isArray(window.dataLayer);\r\n\r\n if (!dataLayerAvailable) {\r\n console.warn('Tracking DataLayer not available');\r\n return;\r\n }\r\n\r\n var tracking = {\r\n event: eventType,\r\n ecommerce: {\r\n [eventType]: {\r\n promotions: [{\r\n name: 'tivo',\r\n position: 'hero_banner',\r\n creative: bannerName\r\n }]\r\n }\r\n }\r\n };\r\n\r\n window.dataLayer.push(tracking);\r\n};\r\n\r\nexport const initTracking = () => {\r\n const dataLayerAvailable = Array.isArray(window.dataLayer);\r\n\r\n const pushVirtualPage = function(name, path, type) {\r\n if (!dataLayerAvailable) {\r\n console.warn('Tracking DataLayer not available');\r\n // No reason to do any furhter if dataLayer is not available or method is called without an object\r\n return;\r\n }\r\n\r\n const pushEvent = {\r\n event: 'virtualPage',\r\n page: {\r\n name: name.trim(),\r\n virtualPath: '/virtualPath' + path ? path.toLowerCase() : '',\r\n type: type ? type.toLowerCase() : ''\r\n }\r\n };\r\n\r\n window.dataLayer.push(pushEvent);\r\n };\r\n\r\n const userEvent = function(userObj) {\r\n if (!dataLayerAvailable || (typeof userObj === 'undefined' && !userObj)) {\r\n // No reason to do any furhter if dataLayer is not available or method is called without an object\r\n return;\r\n }\r\n\r\n var pushEvent = {\r\n event: 'umPushed',\r\n user: userObj\r\n };\r\n\r\n window.dataLayer.push(pushEvent);\r\n };\r\n\r\n const gaEvent = function(action, category,label) {\r\n if (!dataLayerAvailable) {\r\n console.warn('Tracking DataLayer not available');\r\n // No reason to do any furhter if dataLayer is not available or method is called without an object\r\n return;\r\n }\r\n\r\n var trackData = {\r\n 'event': 'gaEvent',\r\n 'eventSyntax': {\r\n 'action': action,\r\n 'category': category,\r\n 'label': label\r\n }\r\n };\r\n\r\n window.dataLayer.push(trackData);\r\n };\r\n\r\n // Global bindings here\r\n\r\n // Make available on window (namespaced to not conflict with other scripts)\r\n window.TC = window.TC || {};\r\n window.TC.userEvent = userEvent;\r\n window.TC.pushVirtualPage = pushVirtualPage;\r\n window.TC.gaEvent = gaEvent;\r\n};","export const isMobile = {\r\n Android: () => navigator.userAgent.match(/Android/i),\r\n BlackBerry: () => navigator.userAgent.match(/BlackBerry/i),\r\n iOS: () => navigator.userAgent.match(/iPhone|iPad|iPod/i),\r\n iPad: () => navigator.userAgent.match(/Macintosh|iPad/i),\r\n Opera: () => navigator.userAgent.match(/Opera Mini/i),\r\n Windows: () => navigator.userAgent.match(/IEMobile/i),\r\n any: () => (\r\n isMobile.Android()\r\n\t\t|| isMobile.BlackBerry()\r\n\t\t|| isMobile.iOS()\r\n\t\t|| isMobile.Opera()\r\n\t\t|| isMobile.Windows()\r\n )\r\n};\r\n\r\nexport const isMobileOrTablet = () => {\r\n var check = false;\r\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera); // eslint-disable-line\r\n return check;\r\n};\r\n\r\n\r\nexport const browserIsSafari = () => {\r\n const userAgent = navigator.userAgent;\r\n return /safari/i.test(userAgent) && !/chrome/i.test(userAgent); // Safari's user agent contains 'Safari' but Chrome's contains both 'Safari' and 'Chrome'.\r\n};\r\n\r\nexport const getOSHandler = () => {\r\n if (isMobile.Android()) return 'android';\r\n\r\n // Checks for macOS devices with touch capability, which indicates an iPad.\r\n if (isMobile.iPad() && navigator.maxTouchPoints && navigator.maxTouchPoints > 1) return 'ipad';\r\n\r\n if (isMobile.iOS()) return 'ios';\r\n\r\n return false; // If none of the above, the OS is unknown.\r\n};\r\n"],"names":["STORAGE_KEY","DEFAULT_LOCALSTORAGE","pauseUntil","visitsUntil","displayCount","addedToHome","localStorage","AddToHomeScreen","props","settings","icon","source","btnText","btnBgColor","btnColor","bgImage","itemName","document","querySelector","getAttribute","showPwaPrompt","setShowPwaPrompt","useState","pwaEnabled","setPwaEnabled","showPwaGuidance","setShowPwaGuidance","path","setPath","window","location","href","OS","setOS","listenToPopstate","winPath","useEffect","getOS","getOSHandler","initializeAndroidInstallPrompt","addEventListener","removeEventListener","initialize","shouldShowPopup","isOnPause","browserIsSafari","showPopup","currentUser","sessionStorage","getItem","JSON","parse","isAuthenticated","isLoggedIn","localStorageString","matchMedia","matches","navigator","standalone","updateLocalStorage","Date","getTime","handleTracking","event","preventDefault","promptEvent","action","pushGaEvent","setItem","stringify","afterInstallHandler","React","className","onClick","closeGuidanceHandler","Icon","iconId","src","alt","renderSwitch","cancelHandler","now","alternativeText","firstTimeText","async","prompt","outcome","userChoice","propTypes","PropTypes","AddToHomeScreenWrapper","BaseFeature","constructor","element","super","this","loadReactApp","ReactDOM","Provider","store","onError","errors","e","concatErrors","Object","keys","map","key","error","toLowerCase","type","join","TC","gaEvent","target","name","category","label","value","arguments","length","undefined","Array","isArray","dataLayer","tracking","eventSyntax","push","console","warn","formatString","str","replace","pushGaEventOnPageRedirect","getGaEventAfterPageRedirect","ls","removeItem","pushGaEventVirtualPageOnPageRedirect","virtualPath","vp","getGaEventVirtualPageAfterPageRedirect","pushGaEventVirtualPage","page","pushHeroTrackingEvent","eventType","bannerName","ecommerce","promotions","position","creative","initTracking","dataLayerAvailable","userEvent","userObj","pushEvent","user","pushVirtualPage","trim","trackData","isMobile","Android","userAgent","match","BlackBerry","iOS","iPad","Opera","Windows","any","isMobileOrTablet","a","check","vendor","opera","test","substr","maxTouchPoints"],"sourceRoot":""}