{"version":3,"file":"js/viabovag.9560.76635dc5.min.js","mappings":"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","sources":["webpack://viabovag/./client/src/js/polyfills.js","webpack://viabovag/./client/src/components/siteHeader/siteHeader.js","webpack://viabovag/./client/src/js/app.js","webpack://viabovag/./client/src/js/font-loading.js","webpack://viabovag/./client/src/js/conductor.js","webpack://viabovag/./client/src/js/mediaLoader.js"],"sourcesContent":["import svg4everybody from 'svg4everybody';\r\n\r\nsvg4everybody();\r\n","import Menu from 'components/molecules/menu_v2/menu_v2';\r\nimport { animateCSS } from 'js/tools';\r\n\r\nconst CLASS_FAVORITE_BUTTON_DISABLED = 'site-header__favorite--disabled';\r\n\r\nconst SELECTOR_MENU = '[data-component=\"menu\"]';\r\nconst SELECTOR_MENU_BAR = '[data-component=\"menu-bar\"]';\r\nconst SELECTOR_MENU_BUTTON = '[data-component=\"menu-button\"]';\r\n\r\nexport default context => {\r\n const refs = {\r\n container: context.querySelector('.site-header__container'),\r\n favoriteButton: context.querySelector('.site-header__favorite'),\r\n favoriteCount: context.querySelector('.site-header__favorite-count')\r\n };\r\n\r\n if (!refs.favoriteButton) {\r\n return;\r\n }\r\n\r\n initMenu();\r\n\r\n window.addEventListener('favoritesUpdated', onFavoritesUpdated);\r\n\r\n toggleFavoriteButton(refs.favoriteButton, !isFavoriteButtonDisabled(refs.favoriteButton));\r\n\r\n function initMenu() {\r\n new Menu({\r\n menuNode: document.querySelector(SELECTOR_MENU),\r\n menuBarNode: document.querySelector(SELECTOR_MENU_BAR),\r\n menuButtonNode: document.querySelector(SELECTOR_MENU_BUTTON)\r\n });\r\n }\r\n\r\n function onFavoritesUpdated(e) {\r\n const { count } = e.detail;\r\n\r\n refs.favoriteButton.classList.toggle(CLASS_FAVORITE_BUTTON_DISABLED, count === 0);\r\n\r\n animateCSS({\r\n node: refs.favoriteButton,\r\n animationName: 'heartBeat'\r\n });\r\n\r\n refs.favoriteCount.innerHTML = e.detail.count;\r\n }\r\n\r\n const mutationObserver = new MutationObserver(([mutation]) => {\r\n toggleFavoriteButton(mutation.target, !isFavoriteButtonDisabled(mutation.target));\r\n });\r\n\r\n mutationObserver.observe(refs.favoriteButton, {\r\n attributes: true,\r\n attributeFilter: ['class']\r\n });\r\n\r\n function toggleFavoriteButton(favoriteButton, toggle) {\r\n if (toggle) {\r\n favoriteButton.removeEventListener('click', disableFavoriteButton);\r\n } else {\r\n favoriteButton.addEventListener('click', disableFavoriteButton);\r\n }\r\n }\r\n\r\n function isFavoriteButtonDisabled(favoriteButton) {\r\n return favoriteButton.classList.contains(CLASS_FAVORITE_BUTTON_DISABLED);\r\n }\r\n\r\n function disableFavoriteButton(e) {\r\n e.preventDefault();\r\n }\r\n};\r\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\n\r\nimport 'js/polyfills';\r\nimport 'js/analytics';\r\n\r\nimport Conductor from 'js/conductor';\r\nimport checkFontLoaded from 'js/font-loading';\r\nimport mediaLoader from 'js/mediaLoader';\r\nimport { replaceIconPlaceholderNodes, triggerJs } from 'js/tools';\r\n\r\nimport NotificationBar from 'components/molecules/notificationBar_v2/notificationBar_v2';\r\nimport Toaster from 'components/molecules/toaster_v2/toaster_v2';\r\nimport ContentDialog from 'components/molecules/contentDialog_v2/contentDialog_v2';\r\nimport UspBar from 'components/molecules/uspBar_v2/uspBar_v2';\r\nimport siteHeader from 'components/siteHeader/siteHeader';\r\n\r\nif (window.viabovag?.instrumentationKey) {\r\n const appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: window.viabovag.instrumentationKey\r\n }\r\n });\r\n\r\n appInsights.loadAppInsights();\r\n appInsights.trackPageView();\r\n}\r\n\r\ncheckFontLoaded();\r\n\r\nmediaLoader.lazyLoadImages();\r\nmediaLoader.updateImageQualities();\r\n\r\ntriggerJs('site-header', siteHeader);\r\n\r\nconst ua = window.navigator.userAgent;\r\nconst isIOSSafari = /(iPod|iPhone|iPad)/i.test(ua) && /WebKit/i.test(ua) && !/CriOS/i.test(ua);\r\nconst isAndroid = /Android/i.test(ua);\r\n\r\nif (isIOSSafari) {\r\n document.documentElement.classList.add('ua-ios-safari');\r\n}\r\nif (isAndroid) {\r\n document.documentElement.classList.add('ua-android');\r\n}\r\n\r\nconst touchSupportClass = 'ontouchstart' in document.documentElement ? 'touch-supported' : 'touch-not-supported';\r\n\r\ndocument.documentElement.classList.add(touchSupportClass);\r\ndocument.documentElement.classList.remove('transitions-disabled');\r\n\r\nwindow.viabovag = window.viabovag ? window.viabovag : {};\r\n\r\nconst notificationBar = new NotificationBar();\r\nwindow.viabovag.showNotification = config => notificationBar.showNotification(config);\r\nwindow.viabovag.removeNotification = () => notificationBar.removeNotification();\r\n\r\nconst contentDialog = new ContentDialog();\r\nwindow.viabovag.showContentDialog = config => contentDialog.showContentDialog(config);\r\nwindow.viabovag.removeContentDialog = () => contentDialog.removeContentDialog();\r\n\r\nconst uspBarNode = document.querySelector('[data-js-usp-bar]');\r\nif (uspBarNode) {\r\n new UspBar(uspBarNode);\r\n}\r\n\r\nconst toaster = new Toaster();\r\nwindow.viabovag.showToaster = params => toaster.showToaster(params);\r\nwindow.viabovag.hideToaster = () => toaster.hideToaster();\r\n\r\nif (!window.viabovag.googleRecaptchaSiteKey) {\r\n window.viabovag.googleRecaptchaSiteKey = '6Le1OY0UAAAAAAcBEi0cXJOXyp7q7li8A_vNed5n';\r\n}\r\n\r\nif (!window.viabovag.hasConductor) {\r\n window.viabovag = {\r\n ...window.viabovag,\r\n ...(function iife() {\r\n const instance = new Conductor();\r\n\r\n return {\r\n hasConductor: true,\r\n init: instance.init.bind(instance),\r\n register: instance.register.bind(instance),\r\n scan: instance.scan.bind(instance),\r\n getInstanceById: instance.getInstanceById.bind(instance),\r\n getInstanceByNode: instance.getInstanceByNode.bind(instance),\r\n createInstanceByNode: instance.createInstanceByNode.bind(instance),\r\n deleteInstanceByNode: instance.deleteInstanceByNode.bind(instance)\r\n };\r\n })(),\r\n tools: {\r\n replaceIconPlaceholderNodes\r\n }\r\n };\r\n\r\n window.viabovag.init();\r\n}\r\n\r\nwindow.addEventListener('load', () => {\r\n window.dispatchEvent(new CustomEvent('app:ready'));\r\n window.isAppInitialized = true;\r\n});\r\n","import FontFaceObserver from 'fontfaceobserver/fontfaceobserver';\r\n\r\nconst FONT_FALLBACK_CLASS = 'font-fallback';\r\n\r\nexport default () => {\r\n const fontLatoRegular = new FontFaceObserver('Lato');\r\n const fontLatoBold = new FontFaceObserver('Lato', {\r\n style: 'bold'\r\n });\r\n\r\n const fontNeoTechRegular = new FontFaceObserver('Neo Tech W01');\r\n const fontNeoTechBold = new FontFaceObserver('Neo Tech W01', {\r\n style: 'bold'\r\n });\r\n\r\n Promise.all([fontLatoRegular.load(), fontLatoBold.load(), fontNeoTechRegular.load(), fontNeoTechBold.load()]).catch(\r\n () => {\r\n document.documentElement.classList.add(FONT_FALLBACK_CLASS);\r\n }\r\n );\r\n};\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\nexport default class {\r\n constructor() {\r\n this.registry = {};\r\n this.instances = {};\r\n }\r\n\r\n init() {\r\n this.initialiseObserver();\r\n }\r\n\r\n initialiseObserver() {\r\n if (window.MutationObserver) {\r\n this.observer = new MutationObserver(mutations => {\r\n mutations.forEach(mutation => this.processMutation(mutation));\r\n });\r\n\r\n this.observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n }\r\n\r\n scan(node = document.body) {\r\n Object.keys(this.registry).forEach(componentName => {\r\n const componentNodes = node.querySelectorAll(`[data-daisy-component=\"${componentName}\"]`);\r\n\r\n componentNodes.forEach(componentNode => this.createInstanceByNode(componentNode));\r\n });\r\n }\r\n\r\n processMutation(mutation) {\r\n if (mutation.removedNodes.length) {\r\n mutation.removedNodes.forEach(node => this.processRemovedNode(node));\r\n }\r\n\r\n if (mutation.addedNodes.length) {\r\n mutation.addedNodes.forEach(node => this.processAddedNode(node));\r\n }\r\n }\r\n\r\n processAddedNode(node) {\r\n if (node.nodeType !== Node.ELEMENT_NODE) {\r\n return;\r\n }\r\n\r\n const event = new CustomEvent('nodeAdded', {\r\n bubbles: true,\r\n detail: {\r\n node\r\n }\r\n });\r\n\r\n window.dispatchEvent(event);\r\n\r\n if (node.hasAttribute('data-daisy-component')) {\r\n this.createInstanceByNode(node);\r\n }\r\n\r\n this.scan(node);\r\n }\r\n\r\n processRemovedNode(node) {\r\n if (node.nodeType !== Node.ELEMENT_NODE) {\r\n return;\r\n }\r\n\r\n if (node.hasAttribute('data-daisy-component')) {\r\n this.deleteInstanceByNode(node);\r\n }\r\n\r\n const componentNodes = node.querySelectorAll('[data-daisy-component]');\r\n\r\n componentNodes.forEach(componentNode => this.deleteInstanceByNode(componentNode));\r\n }\r\n\r\n getInstanceByNode(node) {\r\n let instance = null;\r\n\r\n if (node && node.hasAttribute('data-daisy-component')) {\r\n const id = node.getAttribute('data-daisy-component-id');\r\n\r\n if (id && this.instances[id]) {\r\n instance = this.instances[id];\r\n }\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n createInstanceByNode(node) {\r\n const componentName = node.getAttribute('data-daisy-component');\r\n const id = uuidv4();\r\n const component = this.registry[componentName];\r\n\r\n if (!component || node.hasAttribute('data-daisy-component-id')) {\r\n return;\r\n }\r\n\r\n let instance;\r\n\r\n if (component.module) {\r\n instance = component.module(node);\r\n } else {\r\n const Class = component.constructor;\r\n\r\n instance = new Class(node);\r\n }\r\n\r\n node.jsApi = instance;\r\n node.setAttribute('data-daisy-component-id', id);\r\n\r\n this.instances[id] = {\r\n component: componentName,\r\n node,\r\n jsApi: instance\r\n };\r\n }\r\n\r\n deleteInstanceByNode(node) {\r\n const id = node.getAttribute('data-daisy-component-id');\r\n const instance = this.getInstanceById[id];\r\n\r\n if (instance) {\r\n delete this.instances[id];\r\n }\r\n }\r\n\r\n getInstanceById(id) {\r\n return this.instances[id];\r\n }\r\n\r\n register(componentArray) {\r\n componentArray.forEach(({ name, module, constructor }) => {\r\n this.registry[name] = { module, constructor };\r\n });\r\n }\r\n}\r\n","import { arrRemoveValue, isDisplayed, parseHtmlToDom, touchesElement, touchesViewport } from 'js/tools';\r\n\r\n/**\r\n * Handles lazy loading and responsive images\r\n */\r\nfunction MediaLoader() {\r\n const refs = {\r\n get responsiveImageElements() {\r\n return document.querySelectorAll('[data-responsive-image]');\r\n },\r\n get lazyLoadElements() {\r\n return document.querySelectorAll('[data-lazyload=\"auto\"]');\r\n }\r\n };\r\n\r\n const lazyLoadConfigs = [];\r\n\r\n const OFFSET_RESPONSIVE_IMAGE_REPLACEMENT = 150;\r\n const OFFSET_LAZYLOAD = 400;\r\n\r\n const qualities = [160, 320, 640, 1024, 1280, 1920];\r\n\r\n function init() {\r\n prepareLazyLoadElements();\r\n\r\n setInterval(() => {\r\n lazyLoadImages();\r\n updateImageQualities();\r\n }, 500);\r\n }\r\n\r\n function addImageLoadIndicator(elm) {\r\n const spinner = parseHtmlToDom(`\r\n
\r\n
\r\n
\r\n
\r\n
\r\n `);\r\n\r\n elm.parentNode.style.position = 'relative';\r\n elm.parentNode.appendChild(spinner);\r\n }\r\n\r\n function prepareLazyLoadElements() {\r\n refs.lazyLoadElements.forEach(elm => {\r\n elm.style.opacity = '0';\r\n elm.style.transition = 'opacity .3s ease-in-out';\r\n addImageLoadIndicator(elm);\r\n elm.addEventListener('load', handleOnImageLoad);\r\n });\r\n }\r\n\r\n function handleOnImageLoad(e) {\r\n const elm = e.target;\r\n const imageLoader = elm.parentNode.querySelector('.image-loader');\r\n\r\n if (imageLoader) {\r\n elm.parentNode.removeChild(imageLoader);\r\n }\r\n\r\n elm.style.opacity = '1';\r\n }\r\n\r\n /**\r\n * Calculate target quality of image based on its own context\r\n * @param image\r\n * @returns (int) target quality\r\n */\r\n function determineTargetQuality(widthInPixels, pixelDensity) {\r\n const minimumQualityNeeded = widthInPixels * pixelDensity;\r\n const targetQuality = qualities.find(quality => quality >= minimumQualityNeeded);\r\n\r\n return targetQuality || 'max';\r\n }\r\n\r\n /**\r\n * Check current quality of image based on src naming convention\r\n * @param src\r\n * @returns (int) current quality\r\n */\r\n function determineCurrentQuality(src) {\r\n if (src.search(`qmax`) !== -1) {\r\n return 'max';\r\n }\r\n\r\n const currentQuality = qualities.find(quality => src.search(`q${quality}`) !== -1);\r\n\r\n return currentQuality;\r\n }\r\n\r\n /**\r\n * Retrieve image src of a given element. This can be the src of an image element or a background-image\r\n * @param image\r\n * @returns {string} source url\r\n */\r\n function getImageSource(responsiveImageElement) {\r\n const imageType = getImageType(responsiveImageElement);\r\n let src;\r\n\r\n if (imageType === 'image') {\r\n ({ src } = responsiveImageElement);\r\n } else if (imageType === 'background-image') {\r\n src = responsiveImageElement.style.backgroundImage.slice(4, -1).replace(/['\"]/g, '');\r\n }\r\n\r\n return src;\r\n }\r\n\r\n /**\r\n * Check if image type. regular image OR background-image\r\n * @param image\r\n * @returns {string} imageType\r\n */\r\n function getImageType(responsiveImageElement) {\r\n return responsiveImageElement.tagName === 'IMG' ? 'image' : 'background-image';\r\n }\r\n\r\n /**\r\n * Download image in background. Perform callback when done\r\n * @param src\r\n * @param cb\r\n */\r\n function downloadImage(src, cb) {\r\n const image = new Image();\r\n\r\n image.onload = () => {\r\n cb(true);\r\n };\r\n\r\n image.onerror = () => {\r\n cb(false);\r\n };\r\n\r\n image.src = src;\r\n }\r\n\r\n /**\r\n * Update the source of an image/background image\r\n * @param responsiveImageElement\r\n * @param targetSrc\r\n */\r\n function updateImageSrc(responsiveImageElement, targetSrc) {\r\n const imageType = getImageType(responsiveImageElement);\r\n\r\n if (imageType === 'image') {\r\n responsiveImageElement.src = targetSrc;\r\n } else if (imageType === 'background-image') {\r\n responsiveImageElement.style.backgroundImage = `url(${targetSrc})`;\r\n }\r\n\r\n responsiveImageElement.setAttribute('data-responsive-image', determineCurrentQuality(targetSrc));\r\n }\r\n\r\n /**\r\n * Update quality of all responsive images\r\n */\r\n function updateImageQualities() {\r\n refs.responsiveImageElements.forEach(responsiveImageElement => {\r\n if (touchesViewport(responsiveImageElement, OFFSET_RESPONSIVE_IMAGE_REPLACEMENT)) {\r\n processImageQuality(responsiveImageElement);\r\n }\r\n });\r\n }\r\n\r\n function watch(config) {\r\n if (\r\n typeof config.action !== 'undefined' &&\r\n typeof config.src !== 'undefined' &&\r\n typeof config.target !== 'undefined' &&\r\n typeof config.offset !== 'undefined' &&\r\n config.action === 'lazyload'\r\n ) {\r\n lazyLoadConfigs.push(config);\r\n }\r\n }\r\n\r\n function loadImage(lazyLoadElement) {\r\n const imageType = getImageType(lazyLoadElement);\r\n\r\n lazyLoadElement.removeAttribute('data-lazyload');\r\n\r\n if (imageType === 'image') {\r\n const attributesToMove = ['sizes', 'srcset', 'src'];\r\n\r\n attributesToMove.forEach(attribute => {\r\n const attributeValue = lazyLoadElement.getAttribute(`data-${attribute}`);\r\n\r\n if (attributeValue) {\r\n lazyLoadElement.setAttribute(attribute, attributeValue);\r\n }\r\n });\r\n } else if (imageType === 'background-image') {\r\n const imageSource = lazyLoadElement.getAttribute('data-image-src');\r\n\r\n lazyLoadElement.style.backgroundImage = `url(${imageSource})`;\r\n }\r\n }\r\n\r\n function mediaWithinBoundry(srcElm, offset, targetElm) {\r\n if (typeof targetElm === 'undefined') {\r\n if (touchesViewport(srcElm, offset)) {\r\n return true;\r\n }\r\n } else if (touchesElement(srcElm, targetElm, offset)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function lazyLoadImages() {\r\n refs.lazyLoadElements.forEach(lazyLoadElement => {\r\n if (isDisplayed(lazyLoadElement) && mediaWithinBoundry(lazyLoadElement, OFFSET_LAZYLOAD)) {\r\n loadImage(lazyLoadElement);\r\n }\r\n });\r\n\r\n lazyLoadConfigs.forEach(lazyLoadConfig => {\r\n if (\r\n isDisplayed(lazyLoadConfig.src) &&\r\n mediaWithinBoundry(lazyLoadConfig.src, lazyLoadConfig.offset, lazyLoadConfig.target)\r\n ) {\r\n loadImage(lazyLoadConfig.src);\r\n arrRemoveValue(lazyLoadConfigs, lazyLoadConfig);\r\n }\r\n });\r\n }\r\n\r\n function processImageQuality(responsiveImageElement) {\r\n const src = getImageSource(responsiveImageElement);\r\n const currentQuality = determineCurrentQuality(src);\r\n const targetQuality = determineTargetQuality(responsiveImageElement.offsetWidth, window.devicePixelRatio);\r\n const maxSrc = src.replace(`q${currentQuality}`, `qmax`);\r\n\r\n if (targetQuality === 'max' && currentQuality !== 'max') {\r\n downloadImage(maxSrc, isSuccess => {\r\n if (isSuccess) {\r\n updateImageSrc(responsiveImageElement, maxSrc);\r\n }\r\n });\r\n } else if (targetQuality > currentQuality) {\r\n const targetSrc = src.replace(`q${currentQuality}`, `q${targetQuality}`);\r\n\r\n downloadImage(targetSrc, isSuccess => {\r\n if (isSuccess) {\r\n updateImageSrc(responsiveImageElement, targetSrc);\r\n } else {\r\n downloadImage(maxSrc, onSuccess => {\r\n if (onSuccess) {\r\n updateImageSrc(responsiveImageElement, maxSrc);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n init();\r\n\r\n return {\r\n loadImage,\r\n lazyLoadImages,\r\n updateImageQualities,\r\n watch,\r\n determineCurrentQuality,\r\n determineTargetQuality,\r\n mediaWithinBoundry,\r\n prepareLazyLoadElements\r\n };\r\n}\r\n\r\nconst mediaLoader = new MediaLoader();\r\n\r\nObject.freeze(mediaLoader);\r\n\r\nexport default mediaLoader;\r\n"],"names":["svg4everybody","CLASS_FAVORITE_BUTTON_DISABLED","window","viabovag","instrumentationKey","appInsights","ApplicationInsights","config","loadAppInsights","trackPageView","fontLatoRegular","FontFaceObserver","fontLatoBold","style","fontNeoTechRegular","fontNeoTechBold","Promise","all","load","catch","document","documentElement","classList","add","checkFontLoaded","mediaLoader","triggerJs","context","refs","container","querySelector","favoriteButton","favoriteCount","toggleFavoriteButton","toggle","removeEventListener","disableFavoriteButton","addEventListener","isFavoriteButtonDisabled","contains","e","preventDefault","Menu","menuNode","menuBarNode","menuButtonNode","count","detail","animateCSS","node","animationName","innerHTML","MutationObserver","mutation","target","observe","attributes","attributeFilter","ua","navigator","userAgent","isIOSSafari","test","isAndroid","touchSupportClass","remove","notificationBar","NotificationBar","showNotification","removeNotification","contentDialog","ContentDialog","showContentDialog","removeContentDialog","uspBarNode","UspBar","toaster","Toaster","showToaster","params","hideToaster","googleRecaptchaSiteKey","hasConductor","instance","constructor","this","registry","instances","init","initialiseObserver","observer","mutations","forEach","processMutation","body","childList","subtree","scan","Object","keys","componentName","querySelectorAll","componentNode","createInstanceByNode","removedNodes","length","processRemovedNode","addedNodes","processAddedNode","nodeType","Node","ELEMENT_NODE","event","CustomEvent","bubbles","dispatchEvent","hasAttribute","deleteInstanceByNode","getInstanceByNode","id","getAttribute","uuidv4","component","module","Class","jsApi","setAttribute","getInstanceById","register","componentArray","name","bind","tools","replaceIconPlaceholderNodes","isAppInitialized","responsiveImageElements","lazyLoadElements","lazyLoadConfigs","qualities","prepareLazyLoadElements","elm","opacity","transition","spinner","parseHtmlToDom","parentNode","position","appendChild","addImageLoadIndicator","handleOnImageLoad","imageLoader","removeChild","determineTargetQuality","widthInPixels","pixelDensity","minimumQualityNeeded","find","quality","determineCurrentQuality","src","search","getImageType","responsiveImageElement","tagName","downloadImage","cb","image","Image","onload","onerror","updateImageSrc","targetSrc","imageType","backgroundImage","updateImageQualities","touchesViewport","slice","replace","getImageSource","currentQuality","targetQuality","offsetWidth","devicePixelRatio","maxSrc","isSuccess","onSuccess","processImageQuality","loadImage","lazyLoadElement","removeAttribute","attribute","attributeValue","imageSource","mediaWithinBoundry","srcElm","offset","targetElm","touchesElement","lazyLoadImages","isDisplayed","lazyLoadConfig","arrRemoveValue","setInterval","watch","action","push","freeze"],"sourceRoot":""}