{"version":3,"sources":["webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/Accessibility.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/Q.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/customEventPolyfill.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/Foundation/Tracking.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/MediaQueries.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/ScrollTo.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/Spinner.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/RequestAnimationframe.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/AppCommon.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/ErrorHandling.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/LayoutInteraction.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/OffCanvas.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/Browserfilter.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/ToolbarFlyouts.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/StickyHeader.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/App/Search.ts","webpack:///./EnBW.Vertrieb.Websites.EKP/StaticResources/TypeScript/ImportViewCommon.ts"],"names":["el","enable","els","tabIndex","querySelectorAll","addProp","forEach","call","isBrowser","window","document","create","tagName","attribs","elem","createElement","attrib","setAttribute","insertBefore","target","parentNode","prop","val","nodeType","getProp","getAttribute","removeProp","removeAttribute","addStyle","elems","css","nodelist","Element","NodeList","prototype","isPrototypeOf","Array","from","attr","regX","RegExp","oldStyle","addedStyle","newStyle","test","removeStyle","semicolon","replace","this","testStyle","style","addClass","classList","classNames","cn","contains","add","removeClass","remove","testClass","cName","getClassList","swapClass","classA","classB","cl","toggleClass","toggle","toggleClasses","triggerClick","properties","bubbles","props","cancelable","view","e","MouseEvent","dispatchEvent","closest","removeAllListeners","clone","cloneNode","replaceChild","Q","matches","msMatchesSelector","webkitMatchesSelector","documentElement","parentElement","of","className","split","getElementsByTagName","hasClass","customEvent","event","params","detail","undefined","evt","createEvent","initCustomEvent","CustomEvent","clickIdAttributeName","fakeClickAttributeName","input","trim","toLowerCase","waitForIFrameResizer","Promise","resolve","reject","startTime","Date","now","waitFn","deltaTime","setTimeout","trackClick","action","isDev","getWebsiteOption","then","eventCategory","actionParts","eventAction","eventLabel","slice","length","join","payload","JSON","stringify","console","log","sendMessage","catch","error","isVisible","Boolean","offsetWidth","offsetHeight","getClientRects","groupName","message","contentId","clicks","floodPrevention","clickEventHandler","eventId","timeStamp","screenX","screenY","isTrusted","depth","element","clickId","protocol","href","index","indexOf","isButton","type","aktion","innerText","label","trackingElement","ariaLabel","substr","trackingId","hasAttribute","createClickId","elementId","floodPreventionId","isFlooded","v","value","text","checked","getClickTrackingValue","trackFakeClick","trackingIds","addEventListener","fakeClickTrackingElements","i","minW","maxW","breakpoints","xs","s","md","lg","xl","get","w","minQuery","maxQuery","queryString","mq","matchMedia","MediaMatch","ease","t","b","c","d","animateScrollTop","change","dur","duration","move","currentPos","callback","scrollTo","requestAnimFrame","func","bind","changeDelta","scrollTop","scrollY","header","getElementById","headerHeight","headerDefaultHeight","targetBounds","getBoundingClientRect","targetHeight","winHeight","innerHeight","targetPos","top","height","ScrollTo","instance","query","location","search","targetId","URLSearchParams","querySelector","dataset","scrollpos","suppressedEvents","timeout","appendSpinner","isActive","childNodes","blockDefaultsListener","busyLayer","position","htmlRoot","width","innerW","margin","overflow","appendChild","childs","removeEventListener","removeSpinner","removeChild","body","preventDefault","stopPropagation","innerWidth","Spinner","setup","polyfills","img","Image","push","Number","isNaN","find","Object","assign","all","AppCommon","initComponent","initClickTracking","entryPointModuleName","getPageOption","viewName","importPromise","initView","selector","module","elements","m","err","logAjaxErrorUrl","errorPageUrl","stack","post","ajaxUrl","currentUrl","status","code","textStatus","errorThrown","ex","ajaxHeaders","ajaxErrorHandler","xhr","url","data","responseURL","responseText","statusText","options","headers","defaults","common","Accept","onerror","filename","lineno","colno","linenumber","column","msg","line","errorAsJson","appName","navigator","appVersion","userAgent","logScriptError","toString","openXhr","XMLHttpRequest","open","reloadConst","response","parse","redirectUrl","ajaxAccessDeniedHandler","apply","args","viewMeta","mainNav","offCanvas","queryMediumUp","windowName","environmentName","toUpperCase","name","initBreakPoint","accessibility","fixFocus","unFixFocus","isIOS","main","skipNav","addListener","ua","isAndroid","inputElems","inputs","attributes","mobileAttr","createAttribute","setNamedItem","removeAttr","focus","hideCanvas","toggleOffCanvasBut","offCanvasNav","isOpen","showCanvas","swipeOutEvent","swipeOffCanvas","isSafariiOS","pageYOffset","OffCanvas","addBrowserClass","root","problemBrowsers","edge","ie11","ioslwr10","safarimacos","safariios","BrowserFilter","but","activeButtonClass","hiddenFlyoutClass","isExpanded","closeOnKeyUp","keyCode","which","expandBut","click","changeState","addLayerClass","addButtonClass","flyout","hideAll","lastActiveElement","showLayer","activeElement","firstFocusableChild","controlledLayerID","expandVertragButtons","FlyOut","stickyObserver","entries","entry","ratio","intersectionRatio","isIntersecting","headerElem","stickyTracker","display","initScroll","getComputedStyle","getPropertyValue","observer","IntersectionObserver","observerOptions","observe","resizeStickyTracker","mainToolbar","maxHeight","rootMargin","threshold","readyState","StickyHeader","treffersuchform","l","suchfeld"],"mappings":"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","file":"main.2fb6a5c86ab185033d87.chunk.js","sourcesContent":["import Q from './Q';\r\n\r\n/*\r\n * Einfache Helferfunktion: ein übergebenes Dom-Element wird für Screenreader und TastaturNavigation sichtbar oder unsichtbar geschaltet.\r\n */\r\n\r\nconst accessibility = (el: HTMLElement, enable: Boolean) => {\r\n\r\n if (!el) {\r\n return;\r\n }\r\n\r\n const els: NodeList = el.querySelectorAll('button, a, [tabindex], textarea, input:not([type*=\\'hidden\\'])');\r\n\r\n const tabIndex: number = enable ? 0 : -1;\r\n\r\n Q.addProp(el, 'aria-hidden', !enable);\r\n Q.addProp(el, 'tabindex', tabIndex);\r\n\r\n [].forEach.call(els, (el) => {\r\n Q.addProp(el, 'tabindex', tabIndex);\r\n });\r\n};\r\n\r\nexport = accessibility;\r\n","const isBrowser: boolean = typeof window !== 'undefined' && window.document != null;\r\n/*\r\n* Diverse DOM Manipulation und Traversal Helfer\r\n*/\r\n\r\nexport class Q {\r\n // Neues Element erstellen:\r\n create(tagName: string, attribs?): Element {\r\n const elem: Element = document.createElement(tagName);\r\n\r\n if (attribs) {\r\n for (const attrib in attribs) {\r\n elem.setAttribute(attrib, attribs[attrib]);\r\n }\r\n }\r\n\r\n return elem;\r\n }\r\n\r\n insertBefore(el: Element, target: Element) {\r\n if (el) {\r\n target.parentNode.insertBefore(el, target);\r\n\r\n return el;\r\n }\r\n }\r\n\r\n addProp(el: Element, prop: string, val: any): Element {\r\n if (el) {\r\n if (el.nodeType === 3 || !el.setAttribute) {\r\n return;\r\n }\r\n\r\n el.setAttribute(prop, val);\r\n\r\n return el;\r\n }\r\n }\r\n\r\n getProp(el: Element, prop: string): any {\r\n if (el) {\r\n if (el.nodeType === 3 || !el.setAttribute) {\r\n return;\r\n }\r\n const val: string = el.getAttribute(prop);\r\n\r\n return val;\r\n }\r\n }\r\n\r\n removeProp(el: Element, prop: string): Element {\r\n if (el) {\r\n if (el.nodeType === 3 || !el.removeAttribute) {\r\n return;\r\n }\r\n\r\n el.removeAttribute(prop);\r\n\r\n return el;\r\n }\r\n }\r\n\r\n\r\n addStyle(elems: Element | NodeList, css: any): void {\r\n let nodelist: Node[];\r\n\r\n if (elems instanceof Element){\r\n nodelist = [elems];\r\n } else if (NodeList.prototype.isPrototypeOf(elems)){\r\n nodelist = Array.from(elems);\r\n } else {\r\n return;\r\n }\r\n\r\n nodelist.forEach((el: HTMLElement): void => {\r\n for (const prop in css) {\r\n const attr = prop;\r\n const val = css[prop];\r\n const regX = new RegExp(attr, 'gi');\r\n const oldStyle: string = el.getAttribute('style');\r\n const addedStyle = `${attr}:${val};`;\r\n let newStyle;\r\n\r\n if (regX.test(oldStyle)) {\r\n this.removeStyle(el, attr);\r\n }\r\n\r\n if (oldStyle) {\r\n newStyle = oldStyle + addedStyle;\r\n } else {\r\n newStyle = addedStyle;\r\n }\r\n\r\n el.setAttribute('style', newStyle);\r\n }\r\n });\r\n }\r\n\r\n removeStyle(el: Element, ...attribs: string[]): Element {\r\n if (el) {\r\n\r\n let style: string = el.getAttribute('style');\r\n if (!style) {\r\n return;\r\n }\r\n const semicolon = new RegExp(';\\\\s?', 'gi');\r\n\r\n style = ` ${style.replace(semicolon, '; ')}`;\r\n\r\n attribs.forEach((attr)=> {\r\n const regStr = `\\\\s*[^\\\\-]${attr}\\\\s*:[0-9\\\\s#a-z\\\\(\\\\)\\\\.\\\\-\\\\,]*[^;];`;\r\n const regX = new RegExp(regStr, 'gi');\r\n style = style.replace(regX, '');\r\n });\r\n\r\n if (/^\\s*$/gi.test(style)) {\r\n this.removeProp(el, 'style');\r\n } else {\r\n el.setAttribute('style', style);\r\n }\r\n\r\n return el;\r\n }\r\n }\r\n\r\n testStyle(el: Element, attrib: string): Boolean {\r\n if (el) {\r\n const style: string = el.getAttribute('style');\r\n\r\n if (!style) {\r\n return false;\r\n }\r\n const regX = new RegExp(attrib, 'gi');\r\n const hasStyle: Boolean = regX.test(style);\r\n\r\n return hasStyle;\r\n }\r\n }\r\n\r\n // Klasse hinzufügen\r\n addClass(el: Element, ...classNames: string[]): Element {\r\n if (el) {\r\n const cl: DOMTokenList = el.classList;\r\n classNames.forEach(\r\n (cn: string) => {\r\n if (!cl.contains(cn)) {\r\n el.classList.add(cn);\r\n }\r\n });\r\n\r\n return el;\r\n }\r\n }\r\n\r\n // Klasse entfernen:\r\n removeClass(el: Element, ...classNames: string[]): Element {\r\n if (el) {\r\n const cl: DOMTokenList = el.classList;\r\n classNames.forEach(\r\n (cn: string) => {\r\n if (cl.contains(cn)) {\r\n cl.remove(cn);\r\n }\r\n });\r\n\r\n return el;\r\n }\r\n }\r\n\r\n // Testen ob Element die Klasse hat:\r\n testClass(el: Element, cName: string): Boolean {\r\n if (el) {\r\n return el.classList.contains(cName);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Alle Klassen als Array zurückgeben\r\n getClassList(el: Element): string[] {\r\n if (el) {\r\n return Array.from(el.classList);\r\n }\r\n }\r\n\r\n // Klasse A entfernen, Klasse B hinzufügen:\r\n swapClass(el: Element, classA: string, classB?: string): Element {\r\n if (el) {\r\n const cl: DOMTokenList = el.classList;\r\n\r\n if (classA && cl.contains(classA)) {\r\n cl.remove(classA);\r\n }\r\n\r\n if (classB && !cl.contains(classB)) {\r\n cl.add(classB);\r\n }\r\n\r\n return el;\r\n }\r\n }\r\n\r\n // Klasse toggeln:\r\n toggleClass(el: Element, cName: string): Element {\r\n if (el) {\r\n el.classList.toggle(cName);\r\n\r\n return el;\r\n }\r\n }\r\n\r\n // Eine Liste von Klassen toggeln:\r\n toggleClasses(el: Element, ...classNames: string[]): Element {\r\n if (el) {\r\n const cl: DOMTokenList = el.classList;\r\n classNames.forEach(\r\n (cn: string) => {\r\n if (cl.contains(cn)) {\r\n cl.remove(cn);\r\n } else {\r\n cl.add(cn);\r\n }\r\n });\r\n\r\n return el;\r\n }\r\n }\r\n\r\n triggerClick(el: Element, ...props: string[]) {\r\n\r\n const properties = {\r\n bubbles: props[0] || true,\r\n cancelable: props[1] || true,\r\n view: props[2] || window,\r\n };\r\n\r\n if (el) {\r\n const e: Event = new MouseEvent('click', properties as MouseEventInit);\r\n\r\n return !el.dispatchEvent(e);\r\n }\r\n }\r\n\r\n // Nächstes Parent-Element im DOM-Tree:\r\n\r\n closest(el: Element, target: string): Element {\r\n if (el) {\r\n return el.closest(target);\r\n }\r\n }\r\n\r\n // Alle Event-Listener auf einem Element entfernen. Ersetzt das Element komplett, also mit Vorsicht zu genießen:\r\n\r\n removeAllListeners(el: Element): Element {\r\n if (el) {\r\n if (el.parentNode) {\r\n const clone: Node = el.cloneNode(true);\r\n const newNode: Element = el.parentNode.replaceChild(clone, el);\r\n\r\n return newNode;\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (isBrowser) {\r\n\r\n // Fallbacks für IE 9 - 10:\r\n if (!Element.prototype.closest) {\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches = (Element.prototype).msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n\r\n Element.prototype.closest = function (target) {\r\n let el = this;\r\n\r\n if (!document.documentElement.contains(el)) {\r\n return null;\r\n }\r\n\r\n do {\r\n if (el.matches(target)) {\r\n return el;\r\n }\r\n el = el.parentElement;\r\n } while (el !== null);\r\n\r\n return null;\r\n };\r\n }\r\n\r\n if (!Array.of) {\r\n Q.prototype.getClassList = function (el: Element): string[] {\r\n if (el) {\r\n const classes: string[] = el.className.split(' ');\r\n\r\n return classes;\r\n }\r\n };\r\n }\r\n\r\n if (!(document.getElementsByTagName('html')[0].classList)) {\r\n Q.prototype.testClass = function (el: Element, cName: string): boolean {\r\n if (el) {\r\n const regX = new RegExp(`\\\\b${cName}\\\\b`);\r\n\r\n return regX.test(el.className);\r\n }\r\n };\r\n\r\n Q.prototype.addClass = function (el: Element, cName: string): Element {\r\n if (el) {\r\n if (this.testClass(el, cName)) {\r\n return;\r\n }\r\n el.className += ` ${cName}`;\r\n\r\n return el;\r\n }\r\n };\r\n\r\n Q.prototype.removeClass = function (el: Element, cName: string): Element {\r\n if (el) {\r\n const regX = new RegExp(`\\\\b${cName}\\\\b`);\r\n\r\n if (this.testClass(el, cName)) {\r\n el.className = el.className.replace(regX, '');\r\n }\r\n\r\n return el;\r\n }\r\n };\r\n\r\n Q.prototype.swapClass = function (el: Element, classA: string, classB?: string): Element {\r\n if (el) {\r\n if (classA && this.testClass(el, classA)) {\r\n this.removeClass(el, classA);\r\n }\r\n\r\n if (classB && !this.testClass(el, classB)) {\r\n this.addClass(el, classB);\r\n }\r\n\r\n return el;\r\n }\r\n };\r\n\r\n Q.prototype.toggleClass = function (el: Element, cName: string): Element {\r\n if (el) {\r\n const hasClass: Boolean = this.testClass(el, cName);\r\n\r\n if (hasClass) {\r\n this.removeClass(el, cName);\r\n } else if (!hasClass) {\r\n this.addClass(el, cName);\r\n }\r\n\r\n return el;\r\n }\r\n };\r\n\r\n Q.prototype.toggleClasses = function (el: Element, ...classNames: string[]): Element {\r\n if (el) {\r\n classNames.forEach(\r\n (cn: string) => {\r\n const hasClass: Boolean = this.testClass(el, cn);\r\n if (hasClass) {\r\n this.removeClass(el, cn);\r\n } else if (!hasClass) {\r\n this.addClass(el, cn);\r\n }\r\n });\r\n\r\n return el;\r\n }\r\n };\r\n }\r\n}\r\n\r\n\r\nexport default new Q();","(() => {\r\n if (typeof window.CustomEvent === 'function') {\r\n return false;\r\n }\r\n\r\n function customEvent(event, params) {\r\n params = params || {\r\n bubbles: false, cancelable: false, detail: undefined,\r\n };\r\n const evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n\r\n return evt;\r\n }\r\n customEvent.prototype = window['Event'].prototype;\r\n\r\n window.CustomEvent = customEvent;\r\n\r\n return true;\r\n})();","import sluggify from './Utilities/Sluggify';\r\nimport RequireConfigAccessor from 'Foundation/Utilities/RequireConfigAccessor';\r\n// Import GtmLoader from 'Foundation/GtmLoader';\r\n\r\n// Konstante für Name des Attributes welches, die Link IDs enthält\r\nconst clickIdAttributeName = 'data-click-id';\r\nconst fakeClickAttributeName = 'data-fake-click-tracking';\r\n\r\n/**\r\n * Normalisiert einen string sodass er als WT ContentId verwendet werden kann\r\n *\r\n * @param input der Input\r\n * @returns den normalisierten String\r\n */\r\nexport function wtNormalize(input: string) {\r\n return input.trim()\r\n .toLowerCase()\r\n .replace(' ', '_')\r\n .replace('ö', 'oe')\r\n .replace('ä', 'ae')\r\n .replace('ü', 'ue')\r\n .replace('ß', 'ss')\r\n .replace(/\\W/g, '');\r\n}\r\n\r\n/**\r\n * Gibt die Google Tag Manager Instanz zurück\r\n *\r\n * @param callback\r\n */\r\n\r\nfunction mapActionToEvent(action: string): any {\r\n const actionParts = action.split('.');\r\n const eventCategory = actionParts[0];\r\n const eventAction = actionParts[1];\r\n const eventLabel = actionParts.slice(2, actionParts.length).join('.');\r\n\r\n return {\r\n event: 'event',\r\n eventCategory: eventCategory,\r\n eventAction: eventAction,\r\n eventLabel: eventLabel,\r\n };\r\n}\r\n\r\nconst waitForIFrameResizer = () => {\r\n return new Promise((resolve, reject) => {\r\n const startTime: number = Date.now();\r\n\r\n const waitFn = () => {\r\n const now: number = Date.now();\r\n const deltaTime = now - startTime;\r\n\r\n if (typeof window['parentIFrame'] !== 'undefined') {\r\n resolve(null);\r\n } else if (deltaTime < 1001) {\r\n setTimeout(waitFn, 100);\r\n } else {\r\n reject();\r\n }\r\n };\r\n waitFn();\r\n });\r\n};\r\n\r\n/**\r\n * Setzt den korrekten Aufruf für das Tracking eines Clicks ab\r\n *\r\n * @param action\r\n */\r\nexport function trackClick(action: string) {\r\n // Falls die action undefiniert oder null ist, so darf kein Aufruf abgesetzt werden\r\n if (!action) {\r\n return;\r\n }\r\n\r\n const isDev = RequireConfigAccessor.getWebsiteOption('stagingEnvironment') !== 'Production';\r\n\r\n waitForIFrameResizer()\r\n .then(() => {\r\n const event = mapActionToEvent(action);\r\n const payload = `{ \"source\": \"ekp\", \"event\": \"tracking\",\"message\": ${JSON.stringify(event)}}`;\r\n\r\n if (isDev) {\r\n console.log('tracking L-EKP', payload);\r\n }\r\n\r\n window['parentIFrame'].sendMessage(payload);\r\n })\r\n .catch(() => {\r\n if (isDev) {\r\n console.error('Error loading parentIFrame');\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Setzt den korrekten Aufruf für das Tracking einer angezeigten Fehlermeldung ab\r\n *\r\n * @param groupName Name der Gruppe auf dem der Fehler aufgetreten ist\r\n * @param message Fehlermeldung die gesetzt wurde\r\n */\r\nexport function trackError(groupName: string, message: string) {\r\n // Linkid erzeugen\r\n const linkId = `fehler.${groupName}.${sluggify(message)}`;\r\n\r\n // Tracking Aufruf absetzen\r\n trackClick(linkId);\r\n}\r\n\r\n/**\r\n * Setzt den korrekten Aufruf für das Tracking eines angezeigten Hinweises ab\r\n *\r\n * @param groupName Name der Gruppe auf dem der Hinweis aufgetreten ist\r\n * @param message Hinweis der gesetzt wurde\r\n */\r\nexport function trackWarning(groupName: string, message: string) {\r\n // Linkid erzeugen\r\n const linkId = `hinweis.${groupName}.${sluggify(message)}`;\r\n\r\n // Tracking Aufruf absetzen\r\n trackClick(linkId);\r\n}\r\n\r\n/**\r\n * Setzt den korrekten Aufruf für die Anzeige eines Layers ab\r\n *\r\n * @param contentId\r\n */\r\nexport function trackLayer(contentId: string) {\r\n trackClick(contentId);\r\n}\r\n\r\n/* ********************************************** *\\\r\n * CLICK-TRACKING *\r\n\\* ********************************************** */\r\n\r\nfunction isVisible(el: HTMLElement): boolean {\r\n return Boolean(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\r\n}\r\n\r\n// Erstellt eine Click-ID.\r\nfunction createClickId(element) {\r\n const href = element.getAttribute('href') || '';\r\n const index = href.indexOf(':');\r\n\r\n const isButton = element.classList.contains('btn');\r\n let type = isButton ? 'button' : 'link';\r\n let aktion = isButton ? sluggify(element.innerText) : sluggify(getAktionText(element));\r\n\r\n const isHttpLink = index >= 0;\r\n if (isHttpLink) {\r\n const protocol = href.substr(0, index).toLowerCase();\r\n if (protocol === 'tel' || protocol === 'mailto') {\r\n type = protocol;\r\n aktion = sluggify(href.substr(index + 1));\r\n }\r\n }\r\n\r\n const trackingId = `content.${type}.${aktion}`;\r\n\r\n if (!element.hasAttribute('data-volatile-click-id')) {\r\n element.setAttribute(clickIdAttributeName, trackingId);\r\n }\r\n\r\n return trackingId;\r\n}\r\n\r\n// Ermittelt einen optionalen, an das Click-Tracking-Pixel anzuhängenden Wert.\r\nfunction getClickTrackingValue(e) {\r\n switch (e.tagName) {\r\n case 'DIV':\r\n if (e.classList.contains('accordion__item')) {\r\n return e.classList.contains('accordion__item--active') ? '.open' : '.close';\r\n }\r\n break;\r\n case 'SELECT':\r\n // For-Schleifen sind schneller als forEach()\r\n for (const v of e) {\r\n if (v.value === e.value) {\r\n return `.${sluggify(v.text)}`;\r\n }\r\n }\r\n\r\n return `.${sluggify(e.value)}`;\r\n case 'INPUT':\r\n switch (e.type) {\r\n case 'radio':\r\n if (isVisible(e)) {\r\n return e.checked ? '.select' : '';\r\n }\r\n break;\r\n case 'checkbox':\r\n if (isVisible(e)) {\r\n return e.checked ? '.checked' : '.unchecked';\r\n }\r\n break;\r\n }\r\n break;\r\n }\r\n\r\n return '';\r\n}\r\n\r\n// Liefert einen Identifier, mit dem ein Mouse-Click-Event eindeutig identifiziert werden kann.\r\nfunction getEventId(event: MouseEvent): string {\r\n return `${event.timeStamp}|${event.screenX}|${event.screenY}`;\r\n}\r\n\r\n// Wertet die Element-Attribute aus und gibt den relevanten Text für die ClickId zurück.\r\nfunction getAktionText(trackingElement: HTMLElement): string {\r\n const label = trackingElement.getAttribute('label');\r\n const ariaLabel = trackingElement.getAttribute('aria-label');\r\n\r\n return label ? label : ariaLabel ? ariaLabel : trackingElement.innerText;\r\n}\r\n\r\nconst clicks = {};\r\nconst floodPrevention = {};\r\n\r\n// Gibt an, ob das Event für das gleiche Element innerhalb kurzer Zeit bereits aufgetreten ist.\r\nfunction isFlooded(elementId: string, eventId: string): boolean {\r\n const now = Date.now();\r\n const floodPreventionId = `${elementId}|${eventId}`;\r\n\r\n if (floodPrevention[floodPreventionId] > now) {\r\n return true;\r\n }\r\n\r\n floodPrevention[floodPreventionId] = now + 100;\r\n\r\n return false;\r\n}\r\n\r\n// Registriert den Event-Handler, der das Click-Tracking implementiert.\r\nfunction clickEventHandler(event: MouseEvent): void {\r\n const eventId = getEventId(event);\r\n if (event.isTrusted === false || clicks[eventId]) {\r\n return;\r\n }\r\n\r\n let depth = 1;\r\n const elementSelectors = 'a:not([data-click-id]):not([data-no-click-tracking]), button:not([data-click-id]):not([data-no-click-tracking]), label[data-click-id]:not([data-no-click-tracking]), [data-click-id]:not(label):not([data-no-click-tracking])';\r\n let element = event.target as HTMLElement;\r\n while (element && depth <= 3) {\r\n if (element.matches(elementSelectors)) {\r\n const clickId = element.getAttribute(clickIdAttributeName) || createClickId(element);\r\n if (isFlooded(clickId, eventId)) {\r\n break;\r\n }\r\n\r\n clicks[eventId] = true;\r\n\r\n trackClick(clickId + getClickTrackingValue(element));\r\n\r\n break;\r\n } else {\r\n element = element.parentElement;\r\n depth++;\r\n }\r\n }\r\n}\r\n\r\nexport function trackFakeClick(trackingElement: HTMLElement) {\r\n if (trackingElement && isVisible(trackingElement) && trackingElement.hasAttribute(fakeClickAttributeName)) {\r\n const trackingIds = trackingElement.getAttribute(fakeClickAttributeName).split(' ');\r\n for (const trackingId of trackingIds) {\r\n trackClick(trackingId);\r\n }\r\n }\r\n}\r\nexport function initClickTracking() {\r\n document.addEventListener('click', clickEventHandler);\r\n\r\n // Fake click tracking\r\n const fakeClickTrackingElements: NodeListOf = document.querySelectorAll('[data-fake-click-tracking]');\r\n for (let i = 0; i < fakeClickTrackingElements.length; i++) {\r\n const trackingElement: HTMLElement = fakeClickTrackingElements[i];\r\n trackFakeClick(trackingElement);\r\n }\r\n}\r\n","import { isBrowser } from 'Foundation/Utilities/utils';\r\n\r\ninterface IMediaBreakpoints {\r\n xs: number;\r\n s: number;\r\n md: number;\r\n lg: number;\r\n xl: number;\r\n get: Function;\r\n}\r\n\r\nexport class MediaMatch {\r\n mq: MediaQueryList;\r\n\r\n private breakpoints: IMediaBreakpoints = {\r\n xs:320,\r\n s: 520,\r\n md: 720,\r\n lg:1000,\r\n xl: 1200,\r\n get(w: string): number {\r\n return this[w];\r\n },\r\n }\r\n\r\n constructor(minW: string = null, maxW: string = null) {\r\n let minQuery = '';\r\n let maxQuery = '';\r\n\r\n if (minW) {\r\n const bp: number = this.breakpoints.get(minW);\r\n\r\n minQuery = `and (min-width: ${bp}px)`;\r\n }\r\n\r\n if (maxW) {\r\n const bp: number = this.breakpoints.get(maxW) - 1;\r\n\r\n maxQuery = ` and (max-width: ${bp}px)`;\r\n }\r\n\r\n const queryString = `screen ${minQuery}${maxQuery}`;\r\n\r\n this.mq = isBrowser ? window.matchMedia(queryString) : null;\r\n }\r\n}\r\n\r\nexport default MediaMatch;\r\n","import requestAFrame from './RequestAnimationframe';\r\n\r\nclass ScrollTo {\r\n requestAnimFrame;\r\n target: HTMLElement;\r\n callback: Function = ()=>{\r\n return;\r\n };\r\n targetPos: string;\r\n private static instance: ScrollTo;\r\n\r\n ease(t: number, b: number, c: number, d: number) {\r\n return -c * (t /= d) * (t - 2) + b;\r\n }\r\n\r\n animateScrollTop(change: number, from = 0, dur = 800) {\r\n const startTime: number = Date.now();\r\n const duration: number = dur;\r\n\r\n function move() {\r\n const now: number = Date.now();\r\n const deltaTime: number = now - startTime;\r\n const currentPos: number = this.ease(deltaTime, from, change, duration);\r\n\r\n if (deltaTime > duration) {\r\n this.callback();\r\n\r\n return;\r\n }\r\n\r\n window.scrollTo(0, currentPos);\r\n this.requestAnimFrame.func(move.bind(this));\r\n }\r\n\r\n this.requestAnimFrame.func(move.bind(this));\r\n }\r\n\r\n scrollTo() {\r\n const scrollTop: number = window.scrollY;\r\n const header: HTMLElement = document.getElementById('main-header');\r\n const headerHeight: number = header ? 50 : 0;\r\n const headerDefaultHeight: number = header ? header.offsetHeight : 0;\r\n const targetBounds: ClientRect = this.target.getBoundingClientRect();\r\n const targetHeight: number = this.target.offsetHeight;\r\n const winHeight: number = window.innerHeight - headerHeight;\r\n let changeDelta: number;\r\n\r\n if (this.targetPos === 'top') {\r\n changeDelta = targetBounds.top - headerDefaultHeight;\r\n } else if ((targetBounds.top + targetBounds.height) > winHeight || targetBounds.top < headerDefaultHeight) {\r\n changeDelta = targetBounds.height > winHeight ? targetBounds.top : (targetBounds.top - headerDefaultHeight - (winHeight - targetHeight) / 2);\r\n } else {\r\n this.callback();\r\n\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n this.animateScrollTop(changeDelta, scrollTop);\r\n }, 500);\r\n }\r\n\r\n constructor(className = 'js_scrollto', targetPos = 'middle', callback?) {\r\n if (!ScrollTo.instance) {\r\n const url: Location = document.location;\r\n const query: string = url.search;\r\n const targetId: string = new URLSearchParams(query).get('scrolltarget');\r\n\r\n this.target = targetId ? document.getElementById(targetId) : document.querySelector(`.${className}`);\r\n\r\n if (!this.target || typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n this.targetPos = this.target.dataset.scrollpos ? this.target.dataset.scrollpos : targetPos;\r\n\r\n if (callback) {\r\n this.callback = callback;\r\n }\r\n\r\n this.requestAnimFrame = new requestAFrame();\r\n this.scrollTo();\r\n\r\n ScrollTo.instance = this;\r\n } else {\r\n return ScrollTo.instance;\r\n }\r\n }\r\n}\r\n\r\nexport default ScrollTo;","import Q from './Q';\r\n\r\nconst suppressedEvents = 'click mousedown mouseup touchstart touchend'.split(' ');\r\n\r\nexport class Spinner {\r\n element: HTMLElement;\r\n htmlRoot: HTMLElement;\r\n busyLayer: HTMLElement;\r\n innerW: string;\r\n blockDefaultsListener: EventListener = (e: Event) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n /*\r\n * Gibt an, ob der Spinner \"aktiv\" ist.\r\n * Wenn der Spinner verzögert angezeigt werden soll, kann es passieren, dass der Spinner zwar schon aktiv ist aber noch nicht sichtbar.\r\n */\r\n private isActive = false;\r\n\r\n /*\r\n * Gibt an, ob der Spinner sichtbar ist.\r\n * Falls der Spinner sichtbar ist, dann befindet sich der Layer für den Spinner im HTML-Dokument.\r\n */\r\n private isVisible = false;\r\n\r\n /**\r\n * Konstruiert einen neuen Spinner\r\n *\r\n * @param element das Element auf dem der Spinner später liegen soll\r\n */\r\n\r\n constructor(element: HTMLElement = document.body) {\r\n this.element = element;\r\n this.htmlRoot = document.getElementsByTagName('html')[0];\r\n this.innerW = `${window.innerWidth}px`;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Zeigt den Spinner an\r\n *\r\n * @param timeOut die länge der Verzögerung (in ms) nach der der Spinner angezeigt wird\r\n * Wenn das Timeout null ist, wird kein timeout verwendet\r\n */\r\n\r\n add(timeout?: number) {\r\n if (!this.isActive) {\r\n this.isActive = true;\r\n const childs: NodeList = this.element.childNodes;\r\n\r\n suppressedEvents.forEach((event: string) => {\r\n [].forEach.call(childs, (el: HTMLElement) => {\r\n el.addEventListener(event, this.blockDefaultsListener, true);\r\n Q.addProp(el, 'tabindex', -1);\r\n Q.addProp(el, 'aria-hiden', true);\r\n });\r\n });\r\n\r\n this.busyLayer = document.createElement('div');\r\n Q.addClass(this.busyLayer,'is-busy-overlay');\r\n Q.addProp(this.busyLayer, 'aria-busy', 'true');\r\n\r\n if (this.element.tagName.toLowerCase() !== 'body') {\r\n Q.addStyle(this.busyLayer, {position : 'absolute'});\r\n } else {\r\n Q.addClass(this.htmlRoot, 'is-busy');\r\n Q.addStyle(this.htmlRoot, {width : this.innerW, margin : '0 auto 0 0'});\r\n }\r\n\r\n Q.addStyle(this.element, {overflow : 'hidden'});\r\n\r\n const appendSpinner = () => {\r\n if (this.isActive && !this.isVisible) {\r\n this.isVisible = true;\r\n this.element.appendChild(this.busyLayer);\r\n }\r\n };\r\n\r\n if (!timeout) {\r\n appendSpinner();\r\n } else {\r\n window.setTimeout(appendSpinner, timeout);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Entfernt den Spinner wieder\r\n *\r\n * @param timeout die länge der Verzögerung (in ms) nach der der Spinner entfernt wird\r\n * Wenn das Timeout null ist, wird kein timeout verwendet\r\n */\r\n remove(timeout?: number) {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n const childs: NodeList = this.element.childNodes;\r\n this.isActive = false;\r\n Q.removeStyle(this.element, 'overflow');\r\n Q.removeClass(this.htmlRoot, 'is-busy');\r\n Q.removeStyle(this.htmlRoot, 'width');\r\n Q.removeStyle(this.htmlRoot, 'margin');\r\n\r\n suppressedEvents.forEach((event) => {\r\n [].forEach.call(childs, (el) => {\r\n el.removeEventListener(event, this.blockDefaultsListener, true);\r\n Q.addProp(el, 'tabindex', 0);\r\n Q.removeProp(el, 'aria-hidden');\r\n });\r\n });\r\n\r\n const removeSpinner = () => {\r\n if (this.element.tagName.toLowerCase() === 'body') {\r\n Q.removeStyle(this.element, 'width');\r\n Q.removeStyle(this.element, 'position');\r\n }\r\n\r\n if (this.isVisible) {\r\n this.isVisible = false;\r\n this.element.removeChild(this.busyLayer);\r\n }\r\n };\r\n\r\n if (!timeout) {\r\n removeSpinner();\r\n } else {\r\n window.setTimeout(removeSpinner, timeout);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport default Spinner;\r\n","export default class RequestAnimFrame {\r\n func: Function = function (callback) {\r\n return window.setTimeout(callback, 17);\r\n };\r\n\r\n constructor() {\r\n ['webkitR', 'mozR', 'msR', 'r']\r\n .forEach((el: String) => {\r\n if (`${el}equestAnimationFrame` in window) {\r\n this.func = (callback) => {\r\n return window[`${el}equestAnimationFrame`](callback);\r\n };\r\n }\r\n });\r\n }\r\n}","import axios from 'axios';\r\nimport { IJavascriptComponent } from 'Foundation/Interfaces/IJavascriptComponent';\r\nimport { initClickTracking } from 'Foundation/Tracking';\r\nimport ErrorHandling from './App/ErrorHandling';\r\nimport RequireConfigAccessor from 'Foundation/Utilities/RequireConfigAccessor';\r\nimport LayoutInteraction from './App/LayoutInteraction';\r\nimport StickyHeader from './App/StickyHeader';\r\nimport Search from './App/Search';\r\nimport documentReady from 'Foundation/Utilities/documentReady';\r\nimport ImportViewCommon from './ImportViewCommon';\r\n\r\nif (typeof window !== 'undefined') {\r\n window.addEventListener('error', (e) => {\r\n if (/ResizeObserver\\sloop/gi.test(e.message)) {\r\n return;\r\n }\r\n });\r\n}\r\nexport class AppCommon {\r\n public async setup() {\r\n // = Setup Polyfills =\r\n const polyfills = [];\r\n const img = new Image();\r\n\r\n if (!('srcset' in img && 'sizes' in img && 'HTMLPictureElement' in window)) {\r\n polyfills.push(import('picturefill'));\r\n }\r\n\r\n try {\r\n document.querySelector(':focus-within');\r\n } catch (error) {\r\n import('focus-within-polyfill/src/focus-within');\r\n }\r\n\r\n if (!window.matchMedia) {\r\n polyfills.push(import('matchMedia'), import('matchMediaAddListener'));\r\n }\r\n\r\n if (!Number.isNaN) {\r\n polyfills.push(import('core-js/modules/es.number.is-nan'));\r\n }\r\n\r\n if (![].find) {\r\n polyfills.push(import('core-js/modules/es.array.find'));\r\n }\r\n\r\n if (!Array.from) {\r\n polyfills.push(import('core-js/modules/es.array.from'));\r\n }\r\n\r\n if (!Object.assign) {\r\n polyfills.push(import('es6-object-assign/auto'));\r\n }\r\n\r\n if (!('URLSearchParams' in window)) {\r\n polyfills.push(import('url-search-params-polyfill'));\r\n }\r\n\r\n if (!Element.prototype.matches) {\r\n polyfills.push(import('element-matches-polyfill'));\r\n }\r\n\r\n if (!('IntersectionObserver' in window) || !('IntersectionObserverEntry' in window)) {\r\n polyfills.push(import('intersection-observer'));\r\n }\r\n\r\n await Promise.all(polyfills);\r\n\r\n // = Setup Legacy (non Vue) Modules =\r\n /* Mappings von Elementen zu dazugehörigen Modulen, lässt sich noch weiter automatisieren */\r\n await AppCommon.initComponent('.js_module-teaser', () => import('./App/Teaser'));\r\n await AppCommon.initComponent('.js_ekp-form', () => import('./App/BlockFormOnSubmit'));\r\n await AppCommon.initComponent('.js_module-papierkommunikation-abfrage', () =>\r\n import('./App/PapierkommunikationAbfrage'),\r\n );\r\n await AppCommon.initComponent('.js_module-initial-overlay', () => import('./App/initial-overlay'));\r\n await AppCommon.initComponent('.js_tooltip', () => import('./App/Tooltip'));\r\n await AppCommon.initComponent('.js_myenergykey-info-btn', () => import('./App/OverlayMyEnergyKey'));\r\n await AppCommon.initComponent('.js_smartvisio-linkout-btn', () => import('./App/SmartMeteringSystemLinkoutModal'));\r\n await AppCommon.initComponent('.js_dekp_open_service_sheet', () => import('./App/DekpOpenServiceSheet'));\r\n\r\n ErrorHandling();\r\n new StickyHeader();\r\n new Search();\r\n LayoutInteraction();\r\n initClickTracking();\r\n\r\n const entryPointModuleName = RequireConfigAccessor.getPageOption('entryPointModuleName');\r\n const viewName: string = entryPointModuleName as string;\r\n if (viewName) {\r\n const importPromise: Promise = ImportViewCommon(viewName);\r\n AppCommon.initView(viewName, importPromise);\r\n }\r\n }\r\n\r\n public static async initComponent(selector: string, module: () => Promise): Promise {\r\n const elements = document.querySelectorAll(selector);\r\n\r\n if (elements.length) {\r\n (await module()).setup(elements);\r\n }\r\n }\r\n\r\n public static async initView(viewName: string, importPromise: Promise): Promise {\r\n if (importPromise) {\r\n importPromise\r\n .then((m) => {\r\n if (m.setup) {\r\n m.setup();\r\n }\r\n })\r\n .catch((err) => {\r\n const logAjaxErrorUrl = RequireConfigAccessor.getWebsiteOption('logAjaxErrorUrl');\r\n const errorPageUrl = RequireConfigAccessor.getWebsiteOption('errorPageUrl');\r\n\r\n if (console && console.error && err) {\r\n console.error(`Exception: ${err.message}`, err.stack);\r\n }\r\n\r\n axios.post(logAjaxErrorUrl, {\r\n ajaxUrl: viewName,\r\n currentUrl: window.location.href,\r\n status: err.code,\r\n textStatus: err.message,\r\n errorThrown: true,\r\n });\r\n\r\n window.location.href = errorPageUrl;\r\n });\r\n }\r\n }\r\n}\r\n\r\ndocumentReady(() => {\r\n try {\r\n const app = new AppCommon();\r\n app.setup();\r\n } catch (ex) {\r\n if (console && console.error && ex) {\r\n console.error(`Exception: ${ex.message}`, ex.stack);\r\n }\r\n }\r\n});\r\n","import axios from 'axios';\r\nimport config from 'Foundation/Utilities/RequireConfigAccessor';\r\n\r\nconst ajaxHeaders: { 'accept': string; 'Content-Type': String} = {\r\n 'accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=UTF-8',\r\n};\r\n\r\n/**\r\n * Registrierung\r\n */\r\nfunction setup(): void {\r\n\r\n /*\r\n //Dummy Fehler zum Testen, wird geworfen wenn 'TAB' gedrückt wird. Zum Testen einkommentieren:\r\n\r\n document.addEventListener(\"keyup\", event => {\r\n if (event.keyCode === 9) {\r\n throw new Error('testerror');\r\n }\r\n });\r\n */\r\n\r\n setupAxios();\r\n\r\n if (config.getWebsiteOption('platform') === 'AzureTest' || config.getWebsiteOption('platform') === 'AzureProd') {\r\n // ErrorHandler für JavaScript-Fehler\r\n window.onerror = (message: string, filename?: string, lineno?: number, colno?: number, error?: Error) => {\r\n logScriptError(message.toString(), filename, lineno, colno, error);\r\n\r\n return false; // True würde den Fehler als behandelt markieren, was wiederum dazu führt das AppInsights den Fehler nicht mehr tracken würde.\r\n };\r\n }\r\n\r\n // Registrierung von Event-Handlern für bestimmte HTTP Codes bei AJAX-Aufrufen\r\n const openXhr = XMLHttpRequest.prototype.open;\r\n\r\n XMLHttpRequest.prototype.open = function (...args) {\r\n this.addEventListener('load', () => {\r\n switch (this.status){\r\n case 401:\r\n ajaxNotAuthorizedHandler();\r\n break;\r\n case 403:\r\n ajaxAccessDeniedHandler(this);\r\n break;\r\n case 404:\r\n ajaxErrorHandler(this);\r\n break;\r\n case 422:\r\n ajaxErrorHandler(this);\r\n break;\r\n case 500:\r\n ajaxErrorHandler(this);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n openXhr.apply(this, args);\r\n };\r\n}\r\n\r\nfunction setupAxios(): void {\r\n axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\r\n axios.defaults.headers.post.Accept = 'application/json';\r\n axios.defaults.headers.post['Content-Type'] = 'application/json';\r\n}\r\n\r\n/**\r\n * Methode zum Protokollieren von Javascript Fehlern\r\n *\r\n * @param message die error message\r\n * @param url die url, bei der der Fehler aufgetreten ist\r\n * @param linenumber die Linenumber, bei der der Fehler aufgetreten ist\r\n * @param column\r\n * @param error\r\n */\r\nfunction logScriptError(message: string, url?: string, linenumber?: number, column?: number, error?: Error) {\r\n if (window.console && window.console.error) {\r\n console.error(message);\r\n }\r\n\r\n if (message) {\r\n const url: string = config.getWebsiteOption('logScriptErrorUrl');\r\n const data = JSON.stringify({\r\n msg: message,\r\n url: url,\r\n line: linenumber,\r\n column: column,\r\n errorAsJson: JSON.stringify(error),\r\n appName: navigator.appName,\r\n appVersion: navigator.appVersion,\r\n userAgent: navigator.userAgent,\r\n currentUrl: config.getPageOption('currentUrl'),\r\n });\r\n const options = {\r\n headers: ajaxHeaders,\r\n };\r\n\r\n axios.post(url, data, options);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Benutzer ist nicht mehr autorisiert. Reload der Seite sollte zur Login-Seite führen\r\n * Allerdings nur einmal reloaden, um eventuelle Edge-Cases nicht zu ruinieren.\r\n */\r\nfunction ajaxNotAuthorizedHandler() {\r\n const reloadConst = 'reloadOnAjax=true';\r\n\r\n if (window.location.href.indexOf(reloadConst) < 0) {\r\n window.location.href = window.location.href + (window.location.href.indexOf('?') < 0 ? '?' : '&') + reloadConst;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Standard Error Handler für Session Timeouts beim Aufruf von AJAX Aufrufen. Führt eine Weiterleitung auf die entsprechende Fehlerseite durch\r\n *\r\n * @param xhr das xhr Objekt\r\n */\r\nfunction ajaxAccessDeniedHandler(xhr: XMLHttpRequest) {\r\n const response = JSON.parse(xhr.responseText);\r\n\r\n if (response.redirectUrl && response.redirectUrl !== '') {\r\n window.location.href = response.redirectUrl;\r\n }\r\n}\r\n\r\n/**\r\n * Standard Error Handler für AJAX Aufrufe. Führt eine Weiterleitung auf die Fehlerseite durch\r\n *\r\n * @param xhr das xhr Objekt\r\n */\r\nfunction ajaxErrorHandler(xhr: XMLHttpRequest) {\r\n const url: string = config.getWebsiteOption('logAjaxErrorUrl');\r\n const data = JSON.stringify({\r\n ajaxUrl: xhr.responseURL,\r\n currentUrl: window.location.href,\r\n status: xhr.status,\r\n // Anstelle des 'textStatus'-Parameters, der nur in JQuery zur Verfügung steht, übermitteln wir den XHR ResponseText\r\n textStatus: xhr.responseText,\r\n errorThrown: xhr.statusText,\r\n });\r\n\r\n const options = {\r\n headers: ajaxHeaders,\r\n };\r\n\r\n axios.post(url, data, options).then(()=> {\r\n if (xhr.status === 500) {\r\n window.location.href = config.getWebsiteOption('errorPageUrl');\r\n }\r\n });\r\n}\r\n\r\nexport default setup;","// Datei enthält JavaScript, das benötigt wird um die auf ALLEN EKP Seiten gültigen Interaktionen\r\n// des Layouts sicherzustellen.\r\n\r\nimport './ToolbarFlyouts';\r\n\r\nimport * as accessibility from './Accessibility';\r\nimport MatchMedia from './MediaQueries';\r\nimport OffCanvas from './OffCanvas';\r\nimport Q from './Q';\r\nimport BrowserFilter from './Browserfilter';\r\nimport ScrollTo from './ScrollTo';\r\nimport RequireConfigAccessor from 'Foundation/Utilities/RequireConfigAccessor';\r\n\r\n\r\nconst queryMediumUp = new MatchMedia('md', null);\r\n\r\nlet viewMeta: HTMLElement;\r\nlet mainNav: HTMLElement;\r\nlet offCanvas: OffCanvas;\r\n\r\n// Window.name setzen (#205518 und #229746)\r\nlet windowName = `__EKP__${RequireConfigAccessor.getWebsiteOption('mandant')}`;\r\nconst environmentName = RequireConfigAccessor.getWebsiteOption('stagingEnvironment').toUpperCase();\r\nif (environmentName !== 'PRODUCTION') {\r\n windowName += `_${environmentName}`;\r\n}\r\nwindow.name = windowName;\r\n\r\n// HTML-Body für Clicks auf iOS empfänglich machen:\r\n\r\nconst fixIOS = () => {\r\n const ua: string = navigator.userAgent;\r\n const isIOS: Boolean = /(Mobile).*(Safari)/gi.test(ua);\r\n const isAndroid: Boolean = /(Android).*(Mobile).*/gi.test(ua);\r\n\r\n if (isIOS || isAndroid) {\r\n Q.addClass(document.body, 'ios-clickfix');\r\n }\r\n};\r\n\r\nconst initBreakPoint = () => {\r\n\r\n if (queryMediumUp.mq.matches) {\r\n accessibility(mainNav, true);\r\n offCanvas.accessibility(false);\r\n } else {\r\n accessibility(mainNav, false);\r\n offCanvas.accessibility(true);\r\n }\r\n};\r\n\r\nconst fixFocus = () => {\r\n Q.removeProp(viewMeta, 'content');\r\n Q.addProp(viewMeta, 'content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0');\r\n};\r\n\r\nconst unFixFocus = () => {\r\n Q.removeProp(viewMeta, 'content');\r\n Q.addProp(viewMeta, 'content', 'width=device-width, initial-scale=1.0');\r\n};\r\n\r\nexport function setup(): void {\r\n const main: HTMLElement = document.getElementById('mainarea');\r\n const skipNav: HTMLElement = document.getElementById('skipToMain');\r\n new BrowserFilter();\r\n\r\n window.addEventListener('load', () => {\r\n new ScrollTo();\r\n });\r\n\r\n viewMeta = document.getElementById('mainviewport');\r\n mainNav = document.getElementById('main-nav');\r\n offCanvas = new OffCanvas();\r\n\r\n initBreakPoint();\r\n queryMediumUp.mq.addListener(initBreakPoint);\r\n fixIOS();\r\n\r\n // Verhindern, das iOS Inputs bei Focus skaliert:\r\n const inputElems: NodeList = document.querySelectorAll('input[type=\"search\"], input[type=\"date\"], input[type=\"datetime\"], input[type=\"datetime-local\"], input[type=\"email\"], input[type=\"month\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"text\"], input[type=\"time\"], input[type=\"url\"], input[type=\"week\"]');\r\n\r\n [].forEach.call(inputElems, (el: HTMLElement) => {\r\n el.addEventListener('focus', fixFocus);\r\n el.addEventListener('blur', unFixFocus);\r\n el.addEventListener('focusout', unFixFocus);\r\n });\r\n\r\n if (RequireConfigAccessor.getPageOption('isMobile')) {\r\n const inputs: NodeList = document.querySelectorAll('input');\r\n\r\n // Switch, um die input-typen für mobile browser zu verändern\r\n [].forEach.call(inputs, (input) => {\r\n [].forEach.call(input.attributes, (el) => {\r\n if (/data-mobile-/.test(el.name)) {\r\n const mobileAttr: Attr = document.createAttribute(el.name.replace('data-mobile-', ''));\r\n mobileAttr.value = el.value;\r\n input.attributes.setNamedItem(mobileAttr);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Accessibility: Skipnav überspringt die Hauptnavigation, setzt den Focus direkt auf die Main-Area:\r\n if (skipNav) {\r\n skipNav.addEventListener('click', (e: Event) => {\r\n const removeAttr = () => {\r\n main.removeAttribute('tabindex');\r\n };\r\n\r\n e.preventDefault;\r\n\r\n if (main) {\r\n Q.addProp(main, 'tabindex', -1);\r\n main.addEventListener('blur', removeAttr);\r\n main.addEventListener('focusout', removeAttr);\r\n main.focus();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default setup;\r\n","import * as accessibility from './Accessibility';\r\nimport './customEventPolyfill';\r\nimport Q from './Q';\r\n\r\nexport class OffCanvas {\r\n toggleOffCanvasBut: HTMLElement = document.getElementById('toggleOffcanvas');\r\n offCanvasNav: HTMLElement = document.getElementById('off-canvas-nav');\r\n swipeOutEvent: Event = new CustomEvent('showCanvas');\r\n isOpen: Boolean = false;\r\n\r\n hideCanvas() {\r\n Q.removeClass(this.toggleOffCanvasBut, 'main-toolbar__menu-button--active');\r\n Q.removeClass(this.offCanvasNav, 'off-canvas-nav--active');\r\n accessibility(this.offCanvasNav, false);\r\n this.isOpen = false;\r\n }\r\n\r\n showCanvas() {\r\n Q.addClass(this.toggleOffCanvasBut, 'main-toolbar__menu-button--active');\r\n Q.addClass(this.offCanvasNav, 'off-canvas-nav--active');\r\n accessibility(this.offCanvasNav, true);\r\n document.body.dispatchEvent(this.swipeOutEvent);\r\n this.isOpen = true;\r\n }\r\n\r\n swipeOffCanvas() {\r\n if (Q.testClass(this.toggleOffCanvasBut, 'main-toolbar__menu-button--active')) {\r\n this.hideCanvas();\r\n } else {\r\n this.showCanvas();\r\n }\r\n }\r\n\r\n accessibility(val: Boolean) {\r\n accessibility(this.offCanvasNav, val);\r\n Q.addProp(this.toggleOffCanvasBut, 'tabindex', val ? 0 : false);\r\n Q.addProp(this.toggleOffCanvasBut, 'aria-hidden', !val);\r\n }\r\n\r\n constructor() {\r\n const isSafariiOS: boolean = /(iPad|iPhone).*?Mac OS.*?AppleWebkit.*?Safari/gi.test(navigator.userAgent);\r\n\r\n if (this.toggleOffCanvasBut && this.offCanvasNav) {\r\n document.body.addEventListener('showFlyout', () => {\r\n this.hideCanvas();\r\n });\r\n\r\n document.body.addEventListener('click', (e: Event) => {\r\n\r\n if ((e.target) === this.toggleOffCanvasBut) {\r\n this.swipeOffCanvas();\r\n } else if (this.isOpen && (e.target).closest('.js-offcanvas')) {\r\n this.hideCanvas();\r\n } else if (this.isOpen && !(e.target).closest('.off-canvas-nav')) {\r\n this.hideCanvas();\r\n }\r\n });\r\n\r\n /* Offsscreen-Nav soll bei Bounce am Seitenstart ebenfalls bouncen */\r\n\r\n if (isSafariiOS) {\r\n window.addEventListener('scroll', () => {\r\n if (!this.isOpen) {\r\n return;\r\n } else if (window.pageYOffset <= 0) {\r\n Q.addClass(this.offCanvasNav, 'off-canvas-nav--abs');\r\n } else if (Q.testClass(this.offCanvasNav, 'off-canvas-nav--abs')) {\r\n Q.removeClass(this.offCanvasNav, 'off-canvas-nav--abs');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default OffCanvas;\r\n","import Q from './Q';\r\n\r\nclass BrowserFilter {\r\n ua: string = navigator.userAgent;\r\n problemBrowsers = {\r\n edge: /Windows.*?Edge/gi,\r\n ie11: /Windows.*?Trident.*?11/gi,\r\n ioslwr10: /AppleWebkit.*?Version\\/10\\..*?Mobile.*?Safari/gi,\r\n safarimacos: /^((?!chrome|android).)*safari/i,\r\n safariios: /(iPad|iPhone).*?Mac OS.*?AppleWebkit.*?Safari/gi,\r\n };\r\n\r\n addBrowserClass() {\r\n const root: HTMLElement = document.documentElement;\r\n\r\n for (const prop in this.problemBrowsers) {\r\n const reg = this.problemBrowsers[prop];\r\n\r\n if (reg.test(this.ua)) {\r\n Q.addClass(root, prop);\r\n }\r\n }\r\n }\r\n\r\n constructor() {\r\n this.addBrowserClass();\r\n }\r\n}\r\n\r\nexport default BrowserFilter;\r\n","import './customEventPolyfill';\r\nimport * as accessibility from './Accessibility';\r\nimport Q from './Q';\r\n\r\nconst swipeOutEvent: Event = new CustomEvent('showFlyout');\r\nclass FlyOut {\r\n expandBut: HTMLButtonElement;\r\n flyout: HTMLElement;\r\n firstFocusableChild: HTMLElement;\r\n lastActiveElement: Element;\r\n activeButtonClass: String = 'but-expand-flyout--active';\r\n hiddenFlyoutClass: String = 'main-toolbar__flyout--hidden';\r\n isExpanded: Boolean = false;\r\n\r\n closeOnKeyUp = (e) => {\r\n const key: Number = e.keyCode || e.which;\r\n\r\n if (key === 27) {\r\n this.expandBut.click();\r\n this.expandBut.focus();\r\n }\r\n }\r\n\r\n changeState = (val: Boolean = false) => {\r\n const addLayerClass: String = val === true ? 'remove' : 'add';\r\n const addButtonClass: String = val === false ? 'remove' : 'add';\r\n\r\n accessibility(this.flyout, val);\r\n Q[`${addButtonClass}Class`](this.expandBut, this.activeButtonClass);\r\n Q[`${addLayerClass}Class`](this.flyout, this.hiddenFlyoutClass);\r\n this.expandBut.setAttribute('aria-expanded', val.toString());\r\n this.isExpanded = val;\r\n }\r\n\r\n hideAll = () => {\r\n this.changeState(false);\r\n if (this.lastActiveElement) {\r\n setTimeout(() => {\r\n ( this.lastActiveElement).focus();\r\n }, 100);\r\n }\r\n }\r\n\r\n showLayer = () => {\r\n document.body.removeEventListener('keyup', this.closeOnKeyUp, false);\r\n document.body.removeEventListener('showFlyout', this.hideAll);\r\n this.lastActiveElement = document.activeElement;\r\n\r\n if (this.isExpanded) {\r\n this.changeState(false);\r\n } else {\r\n this.changeState(true);\r\n document.body.addEventListener('keyup', this.closeOnKeyUp, false);\r\n document.body.dispatchEvent(swipeOutEvent);\r\n if (this.firstFocusableChild) {\r\n setTimeout(()=>{\r\n this.firstFocusableChild.focus();\r\n }, 100);\r\n }\r\n\r\n document.body.addEventListener('showFlyout', this.hideAll);\r\n }\r\n }\r\n\r\n constructor(but: HTMLButtonElement) {\r\n this.expandBut = but;\r\n\r\n const controlledLayerID: string = ( this.expandBut).getAttribute('aria-controls');\r\n\r\n this.flyout = document.getElementById(controlledLayerID);\r\n this.firstFocusableChild = this.flyout.querySelector('input[type=\"text\"], input[type=\"search\"]');\r\n accessibility(this.flyout, false);\r\n\r\n document.body.addEventListener('showCanvas', () => {\r\n this.changeState(false);\r\n });\r\n\r\n document.body.addEventListener('click', (e: Event) => {\r\n if ((e.target) === this.expandBut) {\r\n this.showLayer();\r\n } else if (this.isExpanded && !(e.target).closest(`#${controlledLayerID}`)) {\r\n this.changeState(false);\r\n }\r\n });\r\n }\r\n}\r\n\r\nconst expandVertragButtons: NodeList = document.querySelectorAll('.js-expand-flyout');\r\n\r\n[].forEach.call(expandVertragButtons, (el) => {\r\n new FlyOut(el);\r\n});","import * as accessibility from './Accessibility';\r\nimport Q from './Q';\r\n\r\nexport class StickyHeader {\r\n headerElem: HTMLElement;\r\n mainNav: HTMLElement;\r\n observer: IntersectionObserver;\r\n stickyTracker: HTMLDivElement;\r\n\r\n observerOptions: IntersectionObserverInit = {\r\n rootMargin: '0px',\r\n threshold: [0, 1],\r\n };\r\n\r\n stickyObserver (entries) {\r\n entries.forEach((entry: IntersectionObserverEntry) => {\r\n const ratio: number = entry.intersectionRatio;\r\n\r\n if (!entry.isIntersecting) {\r\n Q.addClass(this.headerElem, 'main-header--minified');\r\n accessibility(this.mainNav, false);\r\n this.stickyTracker.style.display = 'none';\r\n setTimeout(()=>{\r\n this.stickyTracker.style.display = 'block';\r\n }, 500);\r\n } else if (ratio >= 1) {\r\n Q.removeClass(this.headerElem, 'main-header--minified');\r\n accessibility(this.mainNav, true);\r\n }\r\n });\r\n }\r\n\r\n initScroll() {\r\n const positionStickySupported = /sticky/gi.test(window.getComputedStyle(this.headerElem, null).getPropertyValue('position'));\r\n\r\n if (!positionStickySupported) {\r\n return;\r\n }\r\n\r\n document.body.appendChild(this.stickyTracker);\r\n this.observer = new IntersectionObserver(this.stickyObserver.bind(this), this.observerOptions);\r\n this.observer.observe(this.stickyTracker);\r\n }\r\n\r\n resizeStickyTracker(){\r\n const mainToolbar: HTMLElement = document.querySelector('.main-header__content-wrapper');\r\n const style = getComputedStyle(mainToolbar);\r\n const height = style.maxHeight;\r\n\r\n Q.addStyle(this.stickyTracker, {height : height});\r\n }\r\n\r\n constructor() {\r\n this.headerElem = document.getElementById('main-header');\r\n\r\n if (!this.headerElem) {\r\n return;\r\n }\r\n\r\n this.mainNav = document.getElementById('main-nav');\r\n this.initScroll = this.initScroll.bind(this);\r\n\r\n ( this.stickyTracker) = Q.create('div', {\r\n style: `position: absolute;\r\n pointer-events: none;\r\n top:5px;\r\n left:1px;\r\n width:100px;\r\n visibility: hidden;`,\r\n });\r\n\r\n this.resizeStickyTracker();\r\n\r\n if (document.readyState !== 'complete'){\r\n window.addEventListener('load', this.initScroll);\r\n } else {\r\n this.initScroll();\r\n }\r\n }\r\n}\r\n\r\nexport default StickyHeader;","import Spinner from './Spinner';\r\n\r\nexport default class Search {\r\n\r\n constructor(){\r\n const treffersuchform: NodeList = document.querySelectorAll('.search_js');\r\n\r\n if (treffersuchform.length < 1) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l: number = treffersuchform.length; i < l; i++){\r\n const el: Node = treffersuchform[i];\r\n const suchfeld: HTMLInputElement = (el).querySelector('.autocomplete_js');\r\n\r\n if (suchfeld) {\r\n el.addEventListener('submit', (e: Event) => {\r\n if (suchfeld.value.length > 0) {\r\n new Spinner().add(300);\r\n } else {\r\n e.preventDefault();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","// \r\n// This file was generated by a T4 Template.\r\n// Don't change it directly as your change could get overwritten. Instead make changes to\r\n// The .tt file and save it to regenerate this file\r\n\r\nexport function initView(viewName: string): Promise {\r\n // Areas/Account\r\n switch (viewName) {\r\n case 'Areas/Account/Views/AccountAktivierung/IndexMitSecret':\r\n return import('./Areas/Account/Views/AccountAktivierung/IndexMitSecret');\r\n case 'Areas/Account/Views/AccountAutomatischeRegistrierung/Index':\r\n return import('./Areas/Account/Views/AccountAutomatischeRegistrierung/Index');\r\n case 'Areas/Account/Views/AccountMigration/AccountAktivieren':\r\n return import('./Areas/Account/Views/AccountMigration/AccountAktivieren');\r\n case 'Areas/Account/Views/AccountRegistrierungMitSecret/Index':\r\n return import('./Areas/Account/Views/AccountRegistrierungMitSecret/Index');\r\n case 'Areas/Account/Views/PasswortVergessen/Anfordern':\r\n return import('./Areas/Account/Views/PasswortVergessen/Anfordern');\r\n case 'Areas/Account/Views/PasswortVergessen/Verarbeiten':\r\n return import('./Areas/Account/Views/PasswortVergessen/Verarbeiten');\r\n case 'Areas/Account/Views/WerbezustimmungDoubleOptIn/Index':\r\n return import('./Areas/Account/Views/WerbezustimmungDoubleOptIn/Index');\r\n case 'Areas/Kunden/Views/Daten/Kundendaten/Einwilligungen/WerbezustimmungBestaetigen':\r\n return import('./Areas/Kunden/Views/Daten/Kundendaten/Einwilligungen/WerbezustimmungBestaetigen');\r\n case 'Areas/Kunden/Views/Daten/Zugangsdaten/AccountLoeschung':\r\n return import('./Areas/Kunden/Views/Daten/Zugangsdaten/AccountLoeschung');\r\n case 'Areas/Kunden/Views/Daten/Zugangsdaten/BenutzernameAendern':\r\n return import('./Areas/Kunden/Views/Daten/Zugangsdaten/BenutzernameAendern');\r\n case 'Areas/Kunden/Views/Daten/Zugangsdaten/BenutzernameUndEmailAendern':\r\n return import('./Areas/Kunden/Views/Daten/Zugangsdaten/BenutzernameUndEmailAendern');\r\n case 'Areas/Kunden/Views/Daten/Zugangsdaten/PasswortAendern':\r\n return import('./Areas/Kunden/Views/Daten/Zugangsdaten/PasswortAendern');\r\n case 'Areas/Kunden/Views/EmailAngleichung/Index':\r\n return import('./Areas/Kunden/Views/EmailAngleichung/Index');\r\n case 'Areas/Kunden/Views/Hilfe/FAQ/Anzeige':\r\n return import('./Areas/Kunden/Views/Hilfe/FAQ/Anzeige');\r\n case 'Areas/Kunden/Views/Hilfe/Kontaktformular/Index':\r\n return import('./Areas/Kunden/Views/Hilfe/Kontaktformular/Index');\r\n case 'Areas/Kunden/Views/Hilfe/Shared/Feedback':\r\n return import('./Areas/Kunden/Views/Hilfe/Shared/Feedback');\r\n case 'Areas/Kunden/Views/Shared/Seite':\r\n return import('./Areas/Kunden/Views/Shared/Seite');\r\n case 'Areas/Kunden/Views/Verbrauch/SmartMeterSparziel/AendernAnzeige':\r\n return import('./Areas/Kunden/Views/Verbrauch/SmartMeterSparziel/AendernAnzeige');\r\n case 'Areas/Kunden/Views/Verbrauch/SmartMeterVerbrauch/Index':\r\n return import('./Areas/Kunden/Views/Verbrauch/SmartMeterVerbrauch/Index');\r\n case 'Areas/Kunden/Views/Verbrauch/Verbrauchsdetails/Index':\r\n return import('./Areas/Kunden/Views/Verbrauch/Verbrauchsdetails/Index');\r\n case 'Areas/Kunden/Views/Verbrauch/ZaehlerstandEingabe/Index':\r\n return import('./Areas/Kunden/Views/Verbrauch/ZaehlerstandEingabe/Index');\r\n case 'Areas/Kunden/Views/Verbrauch/ZaehlerstandEingabe/NetzbetreiberKorrektur':\r\n return import('./Areas/Kunden/Views/Verbrauch/ZaehlerstandEingabe/NetzbetreiberKorrektur');\r\n case 'Areas/Kunden/Views/Verbrauch/ZaehlerstandEingabe/Plausibilisieren':\r\n return import('./Areas/Kunden/Views/Verbrauch/ZaehlerstandEingabe/Plausibilisieren');\r\n case 'Areas/Kunden/Views/Vertrag/VertragskommunikationAendern':\r\n return import('./Areas/Kunden/Views/Vertrag/VertragskommunikationAendern');\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport default initView;\r\n"],"sourceRoot":""}