{"version":3,"sources":["webpack:///./EnBW.Vertrieb.Websites.Dsc/StaticResources/TypeScript/Site/Q.ts","webpack:///./EnBW.Vertrieb.Websites.Dsc/StaticResources/TypeScript/Site/DscTracking.ts"],"names":["isBrowser","window","document","Q","prototype","create","tagName","attribs","elem","createElement","attrib","setAttribute","insertBefore","el","target","parentNode","addProp","prop","val","nodeType","getProp","getAttribute","removeProp","removeAttribute","addStyle","elems","css","nodelist","_this","this","Element","NodeList","isPrototypeOf","Array","from","forEach","attr","regX","RegExp","oldStyle","addedStyle","newStyle","test","removeStyle","style","semicolon","replace","addClass","cName","testClass","classList","add","removeClass","classNames","_i","arguments","length","cl_1","cn","contains","remove","getClassList","swapClass","classA","classB","cl","toggleClass","toggle","toggleClasses","cl_2","triggerClick","props","properties","bubbles","cancelable","view","e","MouseEvent","dispatchEvent","closest","removeAllListeners","clone","cloneNode","replaceChild","exports","matches","msMatchesSelector","webkitMatchesSelector","documentElement","parentElement","of","className","split","getElementsByTagName","hasClass","default","DscTracking","startAutomaticTracking","addEventListener","hasBeenTracked","targetElement","dataset","trackId","trackAuto","Tracking_1","sendTrackIdByElement","HTMLAnchorElement","parent","sendTrackIdBy","element","trackingInfo","TrackingHelper_1","extractParamFrom","value","trackingEvent","trackingProviders","cfId","itemId","trackClick","sendFakeClickBundle","parentId","dataItems","ValidationHelper_1","isNull","Error","trackingData","dataItems_1","item","trackingKey","type","toLowerCase","isNotNull","parentSeoSlug","parentKey","additionalTrackingId","Sluggify_1","webtrekkId","key","id","baiContext","brickId","optionsId","push","trackFaceClickBundle","sendFakeClick","dataItem","sluggify","data"],"mappings":"gLAAA,IAAMA,EAAuC,oBAAXC,QAA6C,MAAnBA,OAAOC,SAKnEC,GAEIA,EAAAC,UAAAC,OAAA,SAAOC,EAAiBC,GACpB,IAAMC,EAAgBN,SAASO,cAAcH,GAE7C,GAAIC,EACA,IAAK,IAAMG,KAAUH,EACjBC,EAAKG,aAAaD,EAAQH,EAAQG,IAI1C,OAAOF,GAGXL,EAAAC,UAAAQ,aAAA,SAAaC,EAAaC,GACtB,GAAID,EAGA,OAFAC,EAAOC,WAAWH,aAAaC,EAAIC,GAE5BD,GAIfV,EAAAC,UAAAY,QAAA,SAAQH,EAAaI,EAAcC,GAC/B,GAAIL,EAAI,CACJ,GAAoB,IAAhBA,EAAGM,WAAmBN,EAAGF,aACzB,OAKJ,OAFAE,EAAGF,aAAaM,EAAMC,GAEfL,IAIfV,EAAAC,UAAAgB,QAAA,SAAQP,EAAaI,GACjB,GAAIJ,EAAI,CACJ,GAAoB,IAAhBA,EAAGM,WAAmBN,EAAGF,aACzB,OAIJ,OAFoBE,EAAGQ,aAAaJ,KAM5Cd,EAAAC,UAAAkB,WAAA,SAAWT,EAAaI,GACpB,GAAIJ,EAAI,CACJ,GAAoB,IAAhBA,EAAGM,WAAmBN,EAAGU,gBACzB,OAKJ,OAFAV,EAAGU,gBAAgBN,GAEZJ,IAKfV,EAAAC,UAAAoB,SAAA,SAASC,EAA2BC,GAApC,IACQC,EADRC,EAAAC,KAGI,GAAIJ,aAAiBK,QACjBH,EAAW,CAACF,OACT,KAAIM,SAAS3B,UAAU4B,cAAcP,GAGxC,OAFAE,EAAWM,MAAMC,KAAKT,GAK1BE,EAASQ,QAAQ,SAACtB,GACd,IAAK,IAAMI,KAAQS,EAAK,CACpB,IAAMU,EAAOnB,EACPC,EAAMQ,EAAIT,GACVoB,EAAe,IAAIC,OAAOF,EAAM,MAChCG,EAAmB1B,EAAGQ,aAAa,SACnCmB,EAAwBJ,EAAI,IAAIlB,EAAG,IACrCuB,OAAQ,EAERJ,EAAKK,KAAKH,IACVX,EAAKe,YAAY9B,EAAIuB,GAIrBK,EADAF,EACWA,EAAWC,EAEXA,EAGf3B,EAAGF,aAAa,QAAS8B,OAKrCtC,EAAAC,UAAAuC,YAAA,SAAY9B,EAAauB,GACrB,GAAIvB,EAAI,CACJ,IAAI+B,EAAgB/B,EAAGQ,aAAa,SACpC,IAAKuB,EACD,OAEJ,IAAMC,EAAoB,IAAIP,OAAO,QAAS,MAC9CM,EAAQ,IAAIA,EAAME,QAAQD,EAAW,MAErC,IACMR,EAAe,IAAIC,OADF,aAAaF,EAAI,yCACA,MAClCK,EAAmBG,EAAME,QAAQT,EAAM,IAQ7C,OANAxB,EAAGF,aAAa,QAAS8B,GAErB,UAAUC,KAAKD,IACfZ,KAAKP,WAAWT,EAAI,SAGjBA,IAKfV,EAAAC,UAAA2C,SAAA,SAASlC,EAAamC,GAClB,GAAInC,IAAOgB,KAAKoB,UAAUpC,EAAImC,GAG1B,OAFAnC,EAAGqC,UAAUC,IAAIH,GAEVnC,GAKfV,EAAAC,UAAAgD,YAAA,SAAYvC,OAAa,IAAAwC,EAAA,GAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAD,EAAAC,EAAA,GAAAC,UAAAD,GACrB,GAAIzC,EAAI,CACJ,IAAM4C,EAAmB5C,EAAGqC,UAQ5B,OAPAG,EAAWlB,QACP,SAACuB,GACOD,EAAGE,SAASD,IACZD,EAAGG,OAAOF,KAIf7C,IAKfV,EAAAC,UAAA6C,UAAA,SAAUpC,EAAamC,GACnB,QAAInC,GACOA,EAAGqC,UAAUS,SAASX,IAOrC7C,EAAAC,UAAAyD,aAAA,SAAahD,GACT,GAAIA,EACA,OAAOoB,MAAMC,KAAKrB,EAAGqC,YAK7B/C,EAAAC,UAAA0D,UAAA,SAAUjD,EAAakD,EAAgBC,GACnC,GAAInD,EAAI,CACJ,IAAMoD,EAAmBpD,EAAGqC,UAU5B,OARIa,GAAUE,EAAGN,SAASI,IACtBE,EAAGL,OAAOG,GAGVC,IAAWC,EAAGN,SAASK,IACvBC,EAAGd,IAAIa,GAGJnD,IAKfV,EAAAC,UAAA8D,YAAA,SAAYrD,EAAamC,GACrB,GAAInC,EAGA,OAFAA,EAAGqC,UAAUiB,OAAOnB,GAEbnC,GAKfV,EAAAC,UAAAgE,cAAA,SAAcvD,OAAa,IAAAwC,EAAA,GAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAD,EAAAC,EAAA,GAAAC,UAAAD,GACvB,GAAIzC,EAAI,CACJ,IAAMwD,EAAmBxD,EAAGqC,UAU5B,OATAG,EAAWlB,QACP,SAACuB,GACOW,EAAGV,SAASD,GACZW,EAAGT,OAAOF,GAEVW,EAAGlB,IAAIO,KAIZ7C,IAIfV,EAAAC,UAAAkE,aAAA,SAAazD,OAAa,IAAA0D,EAAA,GAAAjB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAiB,EAAAjB,EAAA,GAAAC,UAAAD,GAEtB,IAAMkB,EAAa,CACfC,QAASF,EAAM,KAAM,EACrBG,WAAYH,EAAM,KAAM,EACxBI,KAAMJ,EAAM,IAAMtE,QAGtB,GAAIY,EAAI,CACJ,IAAM+D,EAAW,IAAIC,WAAW,QAASL,GAEzC,OAAQ3D,EAAGiE,cAAcF,KAMjCzE,EAAAC,UAAA2E,QAAA,SAAQlE,EAAaC,GACjB,GAAID,EACA,OAAOA,EAAGkE,QAAQjE,IAM1BX,EAAAC,UAAA4E,mBAAA,SAAmBnE,GACf,GAAIA,EAAI,CACJ,IAAMoE,EAAcpE,EAAGqE,WAAU,GAGjC,OAFyBrE,EAAGE,WAAWoE,aAAaF,EAAOpE,KAKvEV,GAxOA,SAAAA,KAAaiF,EAAAjF,IA0OTH,IAGK8B,QAAQ1B,UAAU2E,UACdjD,QAAQ1B,UAAUiF,UACnBvD,QAAQ1B,UAAUiF,QAAgBvD,QAAQ1B,UAAWkF,mBACjDxD,QAAQ1B,UAAUmF,uBAG1BzD,QAAQ1B,UAAU2E,QAAU,SAAUjE,GAClC,IAAID,EAAKgB,KAET,IAAK3B,SAASsF,gBAAgB7B,SAAS9C,GACnC,OAAO,KAGX,EAAG,CACC,GAAIA,EAAGwE,QAAQvE,GACX,OAAOD,EAEXA,EAAKA,EAAG4E,oBACI,OAAP5E,GAET,OAAO,OAIVoB,MAAMyD,KACPvF,EAAEC,UAAUyD,aAAe,SAAUhD,GACjC,GAAIA,EAGA,OAF+BA,EAAG8E,UAAUC,MAAM,OAOxD1F,SAAS2F,qBAAqB,QAAQ,GAAY,YACpD1F,EAAEC,UAAU6C,UAAY,SAAUpC,EAAamC,GAC3C,GAAInC,EAGA,OAFqB,IAAIyB,OAAO,MAAMU,EAAK,OAE/BN,KAAK7B,EAAG8E,YAI5BxF,EAAEC,UAAU2C,SAAW,SAAUlC,EAAamC,GAC1C,GAAInC,EAAI,CACJ,GAAIgB,KAAKoB,UAAUpC,EAAImC,GACnB,OAIJ,OAFAnC,EAAG8E,WAAa,IAAI3C,EAEbnC,IAIfV,EAAEC,UAAUgD,YAAc,SAAUvC,EAAamC,GAC7C,GAAInC,EAAI,CACJ,IAAMwB,EAAe,IAAIC,OAAO,MAAMU,EAAK,OAM3C,OAJInB,KAAKoB,UAAUpC,EAAImC,KACnBnC,EAAG8E,UAAY9E,EAAG8E,UAAU7C,QAAQT,EAAM,KAGvCxB,IAIfV,EAAEC,UAAU0D,UAAY,SAAUjD,EAAakD,EAAgBC,GAC3D,GAAInD,EASA,OARIkD,GAAUlC,KAAKoB,UAAUpC,EAAIkD,IAC7BlC,KAAKuB,YAAYvC,EAAIkD,GAGrBC,IAAWnC,KAAKoB,UAAUpC,EAAImD,IAC9BnC,KAAKkB,SAASlC,EAAImD,GAGfnD,GAIfV,EAAEC,UAAU8D,YAAc,SAAUrD,EAAamC,GAC7C,GAAInC,EAAI,CACJ,IAAMiF,EAAoBjE,KAAKoB,UAAUpC,EAAImC,GAQ7C,OANI8C,EACAjE,KAAKuB,YAAYvC,EAAImC,GACb8C,GACRjE,KAAKkB,SAASlC,EAAImC,GAGfnC,IAIfV,EAAEC,UAAUgE,cAAgB,SAAUvD,OAAV,IAAAe,EAAAC,KAAuBwB,EAAA,GAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAD,EAAAC,EAAA,GAAAC,UAAAD,GAC/C,GAAIzC,EAWA,OAVAwC,EAAWlB,QACP,SAACuB,GACG,IAAMoC,EAAoBlE,EAAKqB,UAAUpC,EAAI6C,GACzCoC,EACAlE,EAAKwB,YAAYvC,EAAI6C,GACboC,GACRlE,EAAKmB,SAASlC,EAAI6C,KAIvB7C,KAOvBuE,EAAAW,QAAe,IAAI5F,6LC3VnB,IAAA6F,GAEkBA,EAAAC,uBAAd,WACI/F,SAASgG,iBAAiB,QAAS,SAAUtB,GAEzC,IADA,IAAIuB,GAAiB,EACZrF,EAAgB8D,EAAQ,OAAI9D,GAAUA,IAAWe,OAAUsE,EAAgBrF,EAASA,EAAOC,WAAY,CAE5G,IAAMqF,EAAgBtF,EAStB,GAPIsF,GAAiBA,EAAcC,QAAQC,SAA+C,UAApCF,EAAcC,QAAQE,YAExEC,EAAAT,QAASU,qBAAqBL,GAE9BD,GAAiB,GAGjBC,aAAyBM,kBAAmB,CAC5C,IAAMC,EAASP,EAAcrB,QAAQ,gBACrCoB,EAAiBH,EAAYY,cAAcR,EAAeO,OAItE,IAGUX,EAAAY,cAAd,SAA4BC,EAAyDF,GACjF,IAAIR,GAAiB,EAEfW,EAAeC,EAAAhB,QAAeiB,iBAAiBH,GAErD,GAA2B,OAAvBC,EAAaG,OAAyC,KAAvBH,EAAaG,MAAc,CAC1D,IAAMC,EAAyC,CAC3CC,kBAAmB,CAAC,OACpBC,KAAMT,EAASA,EAAOS,KAAOP,EAAQO,KACrCC,OAAQR,EAAQO,KAChBP,QAASA,GAEbL,EAAAT,QAASuB,WAAWR,EAAaG,MAAOC,GAExCf,GAAiB,EAGrB,OAAOA,GAGGH,EAAAuB,oBAAd,SAAkCC,EAAkBC,GAChD,GAAIC,EAAA3B,QAAiB4B,OAAOF,GACxB,MAAM,IAAIG,MAAM,yCAGpB,KAAIH,EAAUjE,QAAU,GAAxB,CAOA,IADA,IAAMqE,EAAwC,CAAEV,kBAAmB,GAAIU,aAAc,IAAI5F,OACtEqB,EAAA,EAAAwE,EAAAL,EAAAnE,EAAAwE,EAAAtE,OAAAF,IAAW,CAAzB,IAAMyE,EAAID,EAAAxE,GAEP0E,EAAc,SACc,QAA5BD,EAAKE,KAAKC,gBACNR,EAAA3B,QAAiBoC,UAAUJ,EAAKK,gBAA8C,EAA5BL,EAAKK,cAAc5E,OACrEwE,GAAkBD,EAAKK,cAAa,IAEpCJ,GAAkBD,EAAKM,UAAS,KAIpCX,EAAA3B,QAAiBoC,UAAUJ,EAAKO,uBAA4D,EAAnCP,EAAKO,qBAAqB9E,SACnFwE,GAAkBD,EAAKO,qBAAoB,KAG/CN,GAAkBO,EAAAxC,QAASgC,EAAKS,YAAcT,EAAKU,KAAI,IAAIV,EAAKW,GAC5DX,EAAKY,aACLX,GAAe,IAAID,EAAKY,WAAWC,QAAO,IAAIb,EAAKY,WAAWE,WAGlEhB,EAAaA,aAAaiB,KAAsB,CAACd,YAAaA,EAAaZ,KAAMI,IAGrFhB,EAAAT,QAASgD,qBAAqBlB,KAGpB7B,EAAAgD,cAAd,SAA4BC,EAAuBpC,GAC/C,QAD+C,IAAAA,MAAA,MAC3CoC,QACA,MAAM,IAAIrB,MAAM,wCAGpB,IAAMV,EAA0C,CAAEC,kBAAmB,IACjEN,EACAK,EAAuB,QAAIL,EAAQpB,cAEnCyB,EAAoB,KAAI+B,EAASP,GAIrC,IAAIV,EAAc,SACkB,QAAhCiB,EAAShB,KAAKC,gBACVR,EAAA3B,QAAiBoC,UAAUc,EAASb,gBAAkD,EAAhCa,EAASb,cAAc5E,OAC7EwE,GAAkBiB,EAASb,cAAa,IAExCJ,GAAkBiB,EAASZ,UAAS,KAIxCX,EAAA3B,QAAiBoC,UAAUc,EAASX,uBAAgE,EAAvCW,EAASX,qBAAqB9E,SAC3FwE,GAAkBiB,EAASX,qBAAoB,KAGnDN,GAAkBO,EAAAxC,QAASkD,EAAST,YAAcS,EAASR,KAAI,IAAIQ,EAASP,GACxEO,EAASN,aACTX,GAAe,IAAIiB,EAASN,WAAWC,QAAO,IAAIK,EAASN,WAAWE,WAG1ErC,EAAAT,QAASuB,WAAWU,EAAad,IAGvBlB,EAAAkD,SAAd,SAAuBC,GACnB,OAAOZ,EAAAxC,QAASoD,IAExBnD,GAxHA,SAAAA","file":"site.42c1f3d05bb901c52d63.chunk.js","sourcesContent":["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: Array;\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: RegExp = new RegExp(attr, 'gi');\r\n const oldStyle: string = el.getAttribute('style');\r\n const addedStyle: string = `${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, attr: string): Element {\r\n if (el) {\r\n let style: string = el.getAttribute('style');\r\n if (!style) {\r\n return;\r\n }\r\n const semicolon: RegExp = new RegExp(';\\\\s?', 'gi');\r\n style = ` ${style.replace(semicolon, '; ')}`;\r\n\r\n const regStr: string = `\\\\s*[^\\\\-]${attr}\\\\s*:[0-9\\\\s#a-z\\\\(\\\\)\\\\.\\\\-\\\\,]*[^;];`;\r\n const regX: RegExp = new RegExp(regStr, 'gi');\r\n const newStyle: string = style.replace(regX, '');\r\n\r\n el.setAttribute('style', newStyle);\r\n\r\n if (/^\\s*$/gi.test(newStyle)) {\r\n this.removeProp(el, 'style');\r\n }\r\n\r\n return el;\r\n }\r\n }\r\n\r\n // Klasse hinzufügen\r\n addClass(el: Element, cName: string): Element {\r\n if (el && !this.testClass(el, cName)) {\r\n el.classList.add(cName);\r\n\r\n return el;\r\n }\r\n }\r\n\r\n // Klasse entfernen:\r\n removeClass(el: Element, ...classNames: Array): 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): Array {\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: Array): 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: Array) {\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);\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 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\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): Array {\r\n if (el) {\r\n const classes: Array = 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: RegExp = 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: RegExp = 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: Array): 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();","import { DataItemDto } from '../Models/DataItemDto';\r\nimport Tracking from '../Foundation/Tracking';\r\nimport TrackingHelper from '../Helper/TrackingHelper';\r\nimport ValidationHelper from '../Helper/ValidationHelper';\r\nimport sluggify from '../Foundation/Utilities/Sluggify';\r\nimport { CustomClickParameterDto } from '../Models/CustomClickParameterDto';\r\nimport { TrackingDataDto } from '../Models/TrackingDataDto';\r\n\r\nexport default class DscTracking {\r\n\r\n public static startAutomaticTracking() {\r\n document.addEventListener('click', function (e) {\r\n let hasBeenTracked = false;\r\n for (let target = (e.target); (target && target !== this) && !hasBeenTracked; target = target.parentNode) {\r\n // Loop parent nodes from the target to the delegation node\r\n const targetElement = target as HTMLElement;\r\n\r\n if (targetElement && targetElement.dataset.trackId && targetElement.dataset.trackAuto !== 'false') {\r\n // Console.debug(`Track click with data '${JSON.stringify(targetElement.dataset)} '.`);\r\n Tracking.sendTrackIdByElement(targetElement);\r\n\r\n hasBeenTracked = true;\r\n }\r\n\r\n if (targetElement instanceof HTMLAnchorElement) {\r\n const parent = targetElement.closest('[data-cf-id]');\r\n hasBeenTracked = DscTracking.sendTrackIdBy(targetElement, parent);\r\n }\r\n }\r\n },\r\n false);\r\n }\r\n\r\n public static sendTrackIdBy(element: { href: string; title: string; cfId?: string }, parent: { cfId?: string }): boolean {\r\n let hasBeenTracked = false;\r\n\r\n const trackingInfo = TrackingHelper.extractParamFrom(element);\r\n\r\n if (trackingInfo.value !== null && trackingInfo.value !== '') {\r\n const trackingEvent = {\r\n trackingProviders: ['bai'],\r\n cfId: parent ? parent.cfId : element.cfId,\r\n itemId: element.cfId,\r\n element: element as HTMLAnchorElement,\r\n };\r\n Tracking.trackClick(trackingInfo.value, trackingEvent);\r\n\r\n hasBeenTracked = true;\r\n }\r\n\r\n return hasBeenTracked;\r\n }\r\n\r\n public static sendFakeClickBundle(parentId: string, dataItems: Array) {\r\n if (ValidationHelper.isNull(dataItems)) {\r\n throw new Error('DataItems parameter must not be null!');\r\n }\r\n\r\n if (dataItems.length <= 0) {\r\n // Console.log('Nothing to log');\r\n\r\n return;\r\n }\r\n\r\n const trackingData = { trackingProviders: [], trackingData: new Array() };\r\n for (const item of dataItems) {\r\n // Track id format: dc..[.][.]\r\n let trackingKey = 'fc.dc.';\r\n if (item.type.toLowerCase() === 'faq') {\r\n if (ValidationHelper.isNotNull(item.parentSeoSlug) && item.parentSeoSlug.length > 0) {\r\n trackingKey += `${item.parentSeoSlug}.`;\r\n } else {\r\n trackingKey += `${item.parentKey}.`;\r\n }\r\n }\r\n\r\n if (ValidationHelper.isNotNull(item.additionalTrackingId) && item.additionalTrackingId.length > 0) {\r\n trackingKey += `${item.additionalTrackingId}.`;\r\n }\r\n\r\n trackingKey += `${sluggify(item.webtrekkId || item.key)}.${item.id}`;\r\n if (item.baiContext) {\r\n trackingKey += `.${item.baiContext.brickId}.${item.baiContext.optionsId}`;\r\n }\r\n\r\n trackingData.trackingData.push({trackingKey: trackingKey, cfId: parentId});\r\n }\r\n\r\n Tracking.trackFaceClickBundle(trackingData);\r\n }\r\n\r\n public static sendFakeClick(dataItem: DataItemDto, element: any = null) {\r\n if (dataItem === undefined || dataItem === null) {\r\n throw new Error('DataItem parameter must not be null!');\r\n }\r\n\r\n const trackingEvent = { trackingProviders: [] };\r\n if (element) {\r\n trackingEvent['element'] = element.parentElement;\r\n } else {\r\n trackingEvent['cfId'] = dataItem.id;\r\n }\r\n\r\n // Track id format: dc..[.][.]\r\n let trackingKey = 'fc.dc.';\r\n if (dataItem.type.toLowerCase() === 'faq') {\r\n if (ValidationHelper.isNotNull(dataItem.parentSeoSlug) && dataItem.parentSeoSlug.length > 0) {\r\n trackingKey += `${dataItem.parentSeoSlug}.`;\r\n } else {\r\n trackingKey += `${dataItem.parentKey}.`;\r\n }\r\n }\r\n\r\n if (ValidationHelper.isNotNull(dataItem.additionalTrackingId) && dataItem.additionalTrackingId.length > 0) {\r\n trackingKey += `${dataItem.additionalTrackingId}.`;\r\n }\r\n\r\n trackingKey += `${sluggify(dataItem.webtrekkId || dataItem.key)}.${dataItem.id}`;\r\n if (dataItem.baiContext) {\r\n trackingKey += `.${dataItem.baiContext.brickId}.${dataItem.baiContext.optionsId}`;\r\n }\r\n\r\n Tracking.trackClick(trackingKey, trackingEvent);\r\n }\r\n\r\n public static sluggify(data: string): string {\r\n return sluggify(data);\r\n }\r\n}"],"sourceRoot":""}