{"version":3,"file":"5568.fd7ae7328fc2fcc29f38.js","mappings":"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","sources":["webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/atoms/a-button/a-button.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/atoms/a-button/a-button.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/atoms/a-play-button/a-play-button.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/atoms/a-play-button/a-play-button.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-category-toggle-selector/m-category-toggle-selector.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-fhw-contact-form/m-fhw-contact-form.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-fhw-profile-jump-to-section/m-fhw-profile-jump-to-section.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-fhw-profile-sliders/m-fhw-profile-sliders.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-filter-accordion/m-filter-accordion.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-finder-popup-form/m-finder-popup-form.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-finder-select-step/m-finder-select-step.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-finder-select-step/m-finder-select-step.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-form/m-form.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-form/m-form.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-resume-slice/m-formstep-resume-slice.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-select-icon/m-formstep-select-icon.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-select-image/m-formstep-select-image.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-system-component/m-formstep-system-component.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-system-component/m-formstep-system-component.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-warranty-step-2/m-formstep-warranty-step-2.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-warranty-step-3/m-formstep-warranty-step-3.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-formstep-warranty-wolf-products/m-formstep-warranty-wolf-products.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-job-offer-area/m-job-offer-area.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-product-gallery/m-product-gallery.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-video-overlay/m-video-overlay.data.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-video/o-video.data.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-product-gallery/m-product-gallery.data.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/atoms/a-energy-badge/a-energy-badge.data.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-product-gallery/m-product-gallery.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-video-overlay/m-video-overlay.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-video-overlay/m-video-overlay.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-form-stepper/o-form-stepper.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-grid-container/o-grid-container.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-teaser-grid/o-teaser-grid.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-video/o-video.cookieservice.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-video/o-video.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-video/o-video.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-fhw-profile-header/m-fhw-profile-header.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/global/js/controller-list.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-alert/m-alert.template.twig","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-job-offer-area-content/m-job-offer-area-content.template.twig","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-job-offer-item/m-job-offer-item.template.twig"],"sourcesContent":["import ControllerBase from '../../../../global/js/ControllerBase';\nimport { fromEvent, Subject } from 'rxjs';\nimport { AtomButtonEvents } from './a-button.events';\nimport { takeUntil } from 'rxjs/operators';\nimport { ControllerUnmount } from 'global/interfaces/controller.interface';\n\nexport default class ControllerButton extends ControllerBase implements ControllerUnmount {\n\t/** A list of dom element references available to this component */\n\tprivate readonly componentRefs = {\n\t\tbuttonClick: 'buttonClick',\n\t};\n\n\t/** Subscription management */\n\tprivate _unsubscribeAll: Subject;\n\tprivate isSpinning;\n\tprivate spinner;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\n\t\t// handle subscriptions\n\t\tthis._unsubscribeAll = new Subject();\n\n\t\tconst dataDownload = this.$element.getAttribute('data-download');\n\t\tif (dataDownload && dataDownload === 'share') this.share();\n\n\t\t// watch for button clicks\n\t\tthis.observeButtonClick();\n\t}\n\n\tprivate share() {\n\t\tthis.$element.addEventListener('click', () => {\n\t\t\tconst windowNavigator = window.navigator;\n\t\t\tconst windowUrl = this.$element.getAttribute('href') || window.location.href || undefined;\n\t\t\tconst title = document.head?.querySelector('title')?.textContent || `Share page: ${windowUrl}`;\n\t\t\tconst copy = document.querySelector('.m-job-ad .a-copy') as HTMLElement;\n\t\t\tlet text = '';\n\t\t\tif (copy) {\n\t\t\t\tconst pos = copy.innerText.indexOf('Deine Tätigkeiten');\n\t\t\t\ttext = copy.innerText.substr(pos > 0 ? pos : 0);\n\t\t\t\tconst pos2 = text.indexOf('Dein Profil');\n\t\t\t\tif (pos2 > 0) {\n\t\t\t\t\ttext = text.substr(0, pos2);\n\t\t\t\t} else {\n\t\t\t\t\ttext = text.substr(0, 1000);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttext = document.head?.querySelector('meta[name=\"description\"]')?.getAttribute('content') || `Check page:${windowUrl}`;\n\t\t\t}\n\t\t\tconst shareData = {\n\t\t\t\ttitle,\n\t\t\t\ttext,\n\t\t\t\turl: windowUrl,\n\t\t\t\tfile: [],\n\t\t\t};\n\t\t\tif (windowNavigator && windowNavigator.share) {\n\t\t\t\twindowNavigator\n\t\t\t\t\t.share(shareData)\n\t\t\t\t\t.then(() => console.info('Successful share'))\n\t\t\t\t\t.catch((error) => console.error('Error sharing', error));\n\t\t\t} else {\n\t\t\t\tif (shareData?.url !== undefined) {\n\t\t\t\t\talert('Successfully copied to clipboard!');\n\t\t\t\t\twindowNavigator.clipboard.writeText(shareData?.url);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Observe button clicks\n\t */\n\tprivate observeButtonClick(): void {\n\t\tfromEvent(this.$element, 'click')\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: Event | MouseEvent) => this.dispatchCustomEvent(AtomButtonEvents.buttonClicked, e));\n\t\tthis.$element.addEventListener('click', () => this.spinnerHandler());\n\t}\n\n\tpublic onControllerUnmount(): void {\n\t\t// remove subscribers\n\t\tthis._unsubscribeAll.next();\n\t\tthis._unsubscribeAll.complete();\n\t}\n\n\tprivate spinnerHandler(): void {\n\t\tthis.spinner = this.$element.getAttribute('data-spinner');\n\t\tif (this.spinner === 'true') {\n\t\t\tthis.$element.setAttribute('data-is-spinning', 'true');\n\t\t\tthis.isSpinning = this.$element.getAttribute('data-is-spinning');\n\t\t\tif (this.isSpinning) setTimeout(() => this.$element.setAttribute('data-is-spinning', 'false'), 3000);\n\t\t}\n\t}\n}\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nexport const AtomButtonEvents: ComponentEvents = {\n\t/** The custom event emitted when the button is clicked */\n\tbuttonClicked: 'buttonClicked',\n};\n","import ControllerBase from '../../../../global/js/ControllerBase';\nimport { AtomPlayButtonEvents } from './a-play-button.events';\n\nexport default class ControllerPlayButton extends ControllerBase {\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\n\t\t// watch for button clicks\n\t\tthis.observeButtonClick();\n\t}\n\n\t/**\n\t * Observe button clicks\n\t */\n\tprivate observeButtonClick(): void {\n\t\tthis.$element.removeEventListener('click', this.handleButtonClick);\n\t\tthis.$element.addEventListener('click', (e) => this.handleButtonClick(e));\n\t}\n\n\tprivate handleButtonClick(e: MouseEvent): void {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tthis.dispatchCustomEvent(AtomPlayButtonEvents.playButtonClicked, e);\n\t}\n}\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'AtomPlayButtonEvents__';\n\n/** The type of custom events emitted */\nexport type AtomPlayButtonEventTypes = {\n\tplayButtonClicked: true;\n};\n\nexport const AtomPlayButtonEvents: ComponentEvents = {\n\t/** The custom event emitted when the button is clicked */\n\tplayButtonClicked: EVENT_PREFIX + 'Clicked',\n};\n","import { ComponentEvents } from 'global/interfaces/component.interface';\nimport ControllerBase from '../../../../global/js/ControllerBase';\n\ntype ComponentRefs = {\n\tcategoryWrapper: 'categoryWrapper';\n};\n\nconst EVENT_PREFIX = 'MoleculeToggleCategory__';\n\n/** The type of custom events emitted in event.detail */\nexport type MoleculeToggleCategoryEventTypes = {\n\tUPDATE_FILTER_CATEGORY: {\n\t\tcategory: string;\n\t};\n\tUPDATE_TOGGLED_CATEGORY: {\n\t\tcategory: string;\n\t};\n};\n\nexport const MoleculeToggleCategoryEvents: ComponentEvents = {\n\tUPDATE_FILTER_CATEGORY: EVENT_PREFIX + 'UPDATE_FILTER_CATEGORY',\n\tUPDATE_TOGGLED_CATEGORY: EVENT_PREFIX + 'UPDATE_TOGGLED_CATEGORY',\n};\nexport default class ControllerToggleSearchCategory extends ControllerBase {\n\tcategoryWrapper: HTMLElement;\n\tcategoryMobileSelector: NodeListOf;\n\tcategoryTriggers: NodeListOf;\n\n\tprivate static readonly componentRefs: ComponentRefs = {\n\t\tcategoryWrapper: 'categoryWrapper',\n\t};\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerToggleSearchCategory.componentRefs));\n\t\tthis.categoryWrapper = this.$references[ControllerToggleSearchCategory.componentRefs.categoryWrapper];\n\t\tthis.categoryTriggers = this.categoryWrapper.querySelectorAll('a');\n\t\tthis.categoryMobileSelector = this.$element.querySelectorAll('.m-filter-accordion input[type=\"checkbox\"]') as NodeListOf;\n\t\tthis.observeCategoryTrigger();\n\t\tthis.registerEvents();\n\t}\n\n\tprivate handleCategoryActiveState(currentCategory: string): void {\n\t\tthis.categoryTriggers.forEach((element) => {\n\t\t\tconst elementCategory = element.dataset.category;\n\t\t\tif (currentCategory === elementCategory) {\n\t\t\t\tif (!element.classList.contains('uk-active')) element.classList.add('uk-active');\n\t\t\t} else {\n\t\t\t\telement.classList.remove('uk-active');\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate observeCategoryTrigger(): void {\n\t\tthis.categoryTriggers.forEach((element) =>\n\t\t\telement.addEventListener('click', (e: Event) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst trigger = e.currentTarget as HTMLElement;\n\t\t\t\tif (trigger) {\n\t\t\t\t\tconst category = trigger.dataset.category;\n\t\t\t\t\tif (category) {\n\t\t\t\t\t\tthis.dispatchCustomEvent(MoleculeToggleCategoryEvents.UPDATE_FILTER_CATEGORY, { category }, false, true);\n\t\t\t\t\t\tthis.handleCategoryActiveState(category);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t\tfor (const check of this.categoryMobileSelector) {\n\t\t\tconst checkbox = check as HTMLInputElement;\n\t\t\tcheckbox.addEventListener('click', (e) => {\n\t\t\t\tconst category = checkbox.value;\n\t\t\t\tthis.dispatchCustomEvent(MoleculeToggleCategoryEvents.UPDATE_FILTER_CATEGORY, { category }, false, true);\n\t\t\t\tthis.handleCategoryActiveState(category);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate registerEvents() {\n\t\twindow.addEventListener(MoleculeToggleCategoryEvents.UPDATE_TOGGLED_CATEGORY, (event: CustomEvent) =>\n\t\t\tthis.handleCategoryActiveState(event.detail.category),\n\t\t);\n\t}\n}\n","import { Component } from 'global/interfaces/component.interface';\nimport ControllerBase from 'global/js/ControllerBase';\nimport { IAlert, MoleculeAlertProps } from '../m-alert/m-alert.data';\nimport { PostFormResponseFailure, PostFormResponseSuccess } from './m-fhw-contact-form.types';\n\nconst templateAlert = require('components/molecules/m-alert/m-alert.template.twig') as (data: Component) => string;\n\nexport default class ControllerFhwContactForm extends ControllerBase {\n\tprivate form: HTMLFormElement;\n\tprivate formAlert: HTMLDivElement;\n\tprivate formAlertRef: ComponentRefs['formAlert'] = 'formAlert';\n\tprivate submitButton: HTMLInputElement;\n\tprivate submitButtonRef: ComponentRefs['submitButton'] = 'submitButton';\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\n\t\tthis.form = this.$references.form as HTMLFormElement;\n\t\tthis.formAlert = this.$references.formAlert as HTMLDivElement;\n\t\tthis.submitButton = this.$references.submitButton as HTMLInputElement;\n\t\tthis.init();\n\t}\n\n\tprivate init() {\n\t\tthis.form && this.form.addEventListener('submit', (e) => this.handleFormPost(e));\n\t}\n\n\tprivate handleFormPost(e: Event): void {\n\t\te.preventDefault();\n\n\t\t// reset previous submission errors\n\t\tthis.clearAlert();\n\n\t\t// const formData = new FormData(this.form);\n\t\tconst formData = new FormData(e.target as HTMLFormElement);\n\t\t// const formData = JSON.stringify({ foo: 'bar' });\n\t\tconst endpoint = new URL((e.target as HTMLFormElement).action || '');\n\n\t\t// post the data\n\t\tfetch(endpoint.toString(), {\n\t\t\tmethod: 'POST',\n\t\t\tcredentials: 'same-origin',\n\t\t\tbody: formData,\n\t\t})\n\t\t\t.then((resp) => {\n\t\t\t\treturn resp.json();\n\t\t\t})\n\t\t\t.then((resp: PostFormResponseSuccess) => {\n\t\t\t\t// success\n\t\t\t\tthis.showAlertMessage(resp?.message || '', 'success');\n\t\t\t\tthis.disableSubmitButton();\n\t\t\t})\n\t\t\t.catch((error: PostFormResponseFailure) => {\n\t\t\t\t// fail\n\t\t\t\tthis.showAlertMessage((error && error.message) || '', 'danger');\n\t\t\t});\n\t}\n\n\t/**\n\t * show the response alert in the DOM\n\t * @param {string} message\n\t * @param {IAlert['type']} type\n\t * @returns void\n\t */\n\tprivate showAlertMessage(message: string, type: IAlert['type']): void {\n\t\tconst newAlert: MoleculeAlertProps = {\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tmessage,\n\t\t\t\t\ttype,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\t// build new alert HTML\n\t\tconst html = templateAlert({\n\t\t\tdata: newAlert,\n\t\t});\n\n\t\t// render onto page above submit button\n\t\tthis.domUtils.renderDomElement(this.formAlertRef, html);\n\t}\n\n\tprivate clearAlert(): void {\n\t\tthis.domUtils.renderDomElement(this.formAlertRef, '');\n\t}\n\n\tprivate disableSubmitButton(): void {\n\t\tthis.submitButton && this.submitButton.setAttribute('disabled', 'true');\n\t}\n}\n\ninterface ComponentRefs {\n\tform: 'form';\n\tformAlert: 'formAlert';\n\tsubmitButton: 'submitButton';\n}\n","import ControllerBase from 'global/js/ControllerBase';\n\nexport default class ControllerFhwProfileJumpToSection extends ControllerBase {\n\tprivate buttonAtomComponents: HTMLAnchorElement[];\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\t\tthis.getButtonEvent = this.getButtonEvent.bind(this);\n\t\tthis.observeClick = this.observeClick.bind(this);\n\t\tthis.init();\n\t}\n\n\tprivate init() {\n\t\tthis.buttonAtomComponents = Array.from(this.$element.querySelectorAll('.fhw-jump-to-item'));\n\n\t\tif (this.buttonAtomComponents) {\n\t\t\t[...this.buttonAtomComponents].forEach((button) => this.getButtonEvent(button));\n\t\t}\n\t}\n\n\tgetButtonEvent(button: HTMLAnchorElement): void {\n\t\tbutton.addEventListener('click', (e: CustomEvent) => this.observeClick(e, button));\n\t}\n\n\tprivate observeClick(e: CustomEvent, button: HTMLAnchorElement) {\n\t\te.preventDefault();\n\n\t\tconst target = button.dataset.jumpto;\n\n\t\tif (e && e.detail && target) {\n\t\t\tconst section = document.getElementById(target);\n\t\t\tsection && section.scrollIntoView();\n\t\t}\n\t}\n}\n","import ControllerBase from 'global/js/ControllerBase';\n\nexport default class ControllerProfileSliders extends ControllerBase {\n\tprivate activeSlide = 0;\n\tprivate buttonLeft;\n\tprivate buttonRight;\n\tprivate containerWidth;\n\tprivate imageContainer;\n\tprivate imageList;\n\tprivate imageWidths = [] as number[];\n\tprivate sliderWidth;\n\tprivate sliderWidthExceptLast;\n\tprivate stop = false;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\t\tthis.init();\n\t}\n\n\tprivate init() {\n\t\tthis.imageContainer = this.$element.querySelector('.m-fhw-profile-sliders__image-container') as HTMLElement;\n\t\tthis.imageList = this.$element.querySelectorAll('.image-wrapper');\n\t\tthis.buttonLeft = this.$element.querySelector('.scroller-left');\n\t\tthis.buttonLeft?.addEventListener('click', () => {\n\t\t\tthis.stop = true;\n\t\t\t--this.activeSlide;\n\t\t\tthis.scrollToSlide();\n\t\t});\n\t\tthis.buttonRight = this.$element.querySelector('.scroller-right');\n\t\tthis.buttonRight?.addEventListener('click', () => {\n\t\t\tthis.stop = true;\n\t\t\t++this.activeSlide;\n\t\t\tthis.scrollToSlide();\n\t\t});\n\t\tthis.buttonHandlear();\n\t\tthis.imageContainer.addEventListener('scroll', () => this.getCurrentSlide());\n\t\twindow.addEventListener('resize', () => this.buttonHandlear(), false);\n\t}\n\n\tprivate getCurrentSlide() {\n\t\tif (this.stop) return;\n\t\tconst scrollLeft = this.imageContainer.scrollLeft;\n\t\tlet width = 32;\n\t\tfor (const key in this.imageWidths) {\n\t\t\twidth += this.imageWidths[key];\n\t\t\tif (scrollLeft < width) {\n\t\t\t\tthis.activeSlide = parseInt(key);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.checkButtons();\n\t}\n\n\tprivate checkButtons() {\n\t\tconst scrollLeft = this.imageContainer.scrollLeft;\n\t\tif (this.sliderWidth - 40 < scrollLeft + this.containerWidth) this.buttonRight.classList.add('scroller--disabled');\n\t\telse this.buttonRight.classList.remove('scroller--disabled');\n\t\tif (this.activeSlide < 1) this.buttonLeft.classList.add('scroller--disabled');\n\t\telse this.buttonLeft.classList.remove('scroller--disabled');\n\t}\n\n\tprivate scrollToSlide() {\n\t\tconst scrollLeft = this.imageWidths?.slice(0, this.activeSlide)?.reduce((acc, cur) => acc + cur, 0);\n\t\tthis.imageContainer.scrollTo(scrollLeft - 15, 0);\n\t\tsetTimeout(() => {\n\t\t\tthis.stop = false;\n\t\t\tthis.checkButtons();\n\t\t}, 700);\n\t}\n\n\tprivate buttonHandlear() {\n\t\tconst sliderButtons = this.$element.querySelector('.m-fhw-profile-sliders__nav');\n\t\tthis.containerWidth = this.imageContainer ? this.imageContainer.clientWidth : 0;\n\t\tthis.imageList.forEach((element) => this.imageWidths.push(element.clientWidth));\n\t\tthis.sliderWidth = this.imageWidths.reduce((acc, cur) => acc + cur, 32);\n\t\tthis.sliderWidthExceptLast = this.imageWidths.slice(0, this.imageWidths.length - 1).reduce((acc, cur) => acc + cur, 32);\n\t\tthis.containerWidth <= this.sliderWidth ? sliderButtons?.classList.remove('hide-button') : sliderButtons?.classList.add('hide-button');\n\t\tthis.getCurrentSlide();\n\t}\n}\n","import ControllerBase from '../../../../global/js/ControllerBase';\n\nexport interface FilterProps {\n\tactive: number;\n\tactiveCounter: HTMLElement;\n\tdrop: HTMLElement;\n\tinputs: NodeListOf;\n\tlabels: string[];\n\tidList: string[];\n\tlabelContainer: HTMLElement;\n\topen: boolean;\n\thiddenInput: HTMLInputElement;\n\twrapper: Element;\n\tsingleOptions: boolean;\n}\n\nexport default class ControllerAccordionFilter extends ControllerBase {\n\tprivate filters: FilterProps[] = [];\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\t\tthis.init();\n\t}\n\n\tprivate init() {\n\t\tconst change = new Event('change');\n\t\tconst wrappers = this.$element.querySelectorAll('.m-filter-accordion-wrapper');\n\t\tfor (const wrapper of wrappers) {\n\t\t\tconst drop = wrapper.querySelector('.m-filter-accordion-head') as HTMLElement;\n\t\t\tconst labelContainer = drop.querySelector('.left-content') as HTMLElement;\n\t\t\tconst activeCounter = wrapper.querySelector('.checked-filters') as HTMLElement;\n\t\t\tconst inputs = wrapper.querySelectorAll('input[type=\"checkbox\"]');\n\t\t\tconst hiddenInput = wrapper.querySelector('input[type=\"hidden\"]') as HTMLInputElement;\n\t\t\tconst singleOptions = !!wrapper.getAttribute('data-single-options');\n\t\t\tthis.filters.push({\n\t\t\t\tactive: 0,\n\t\t\t\tactiveCounter,\n\t\t\t\tdrop,\n\t\t\t\tinputs,\n\t\t\t\tlabels: [],\n\t\t\t\tidList: [],\n\t\t\t\tlabelContainer,\n\t\t\t\topen: false,\n\t\t\t\thiddenInput,\n\t\t\t\twrapper,\n\t\t\t\tsingleOptions: singleOptions,\n\t\t\t});\n\t\t\tconst key = this.filters.length - 1;\n\t\t\tdrop.addEventListener('click', (e) => {\n\t\t\t\tthis.filters[key].open = !this.filters[key].open;\n\t\t\t\twrapper.setAttribute('data-opened', this.filters[key].open ? 'true' : 'false');\n\t\t\t});\n\t\t\tfor (const el of inputs) {\n\t\t\t\tconst checkbox = el;\n\t\t\t\tcheckbox?.addEventListener('change', () => {\n\t\t\t\t\tconst text = checkbox.getAttribute('data-label') || '';\n\t\t\t\t\tconst id = checkbox.getAttribute('data-id') || '';\n\t\t\t\t\tconst index = this.filters[key].labels.indexOf(text);\n\t\t\t\t\tif (this.filters[key].singleOptions) {\n\t\t\t\t\t\tconst inputsChecked = wrapper.querySelectorAll('input[type=\"checkbox\"]:checked');\n\t\t\t\t\t\tif (inputsChecked.length) {\n\t\t\t\t\t\t\tfor (const check of inputsChecked) {\n\t\t\t\t\t\t\t\tconst checky = check;\n\t\t\t\t\t\t\t\tif (checky.value != id) {\n\t\t\t\t\t\t\t\t\tchecky.checked = false;\n\t\t\t\t\t\t\t\t\tthis.filters[key].labels.splice(0, 1);\n\t\t\t\t\t\t\t\t\tthis.filters[key].idList.splice(0, 1);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.filters[key].labels.push(text);\n\t\t\t\t\t\t\t\t\tthis.filters[key].idList.push(id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcheckbox.checked = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (checkbox.checked) {\n\t\t\t\t\t\t\tthis.filters[key].active++;\n\t\t\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\t\t\tthis.filters[key].labels.push(text);\n\t\t\t\t\t\t\t\tthis.filters[key].idList.push(id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.filters[key].active--;\n\t\t\t\t\t\t\tthis.filters[key].labels.splice(index, 1);\n\t\t\t\t\t\t\tthis.filters[key].idList.splice(index, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.filters[key].active) {\n\t\t\t\t\t\tthis.filters[key].activeCounter.innerHTML = `+${this.filters[key].active}`;\n\t\t\t\t\t\tactiveCounter.classList.add('active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.filters[key].activeCounter.innerHTML = '';\n\t\t\t\t\t\tactiveCounter.classList.remove('active');\n\t\t\t\t\t}\n\t\t\t\t\tthis.filters[key].hiddenInput.value = this.filters[key].idList.length ? JSON.stringify(this.filters[key].idList) : '';\n\t\t\t\t\tthis.filters[key].labelContainer.innerHTML = `${this.filters[key].labels.join(', ')}`;\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst inputsChecked = wrapper.querySelectorAll('input[type=\"checkbox\"]:checked');\n\t\t\tif (inputsChecked.length) {\n\t\t\t\tfor (const check of inputsChecked) {\n\t\t\t\t\tconst checkbox = check;\n\t\t\t\t\tcheckbox.dispatchEvent(change);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import ControllerBase from '../../../../global/js/ControllerBase';\nimport { fromEvent, Observable, of, Subject } from 'rxjs';\nimport { catchError, map, takeUntil } from 'rxjs/operators';\nimport { fromFetch } from 'rxjs/fetch';\nimport { ModalFinderPopupFormResponseModel } from './m-finder-popup-form.model';\nimport { HttpActionResponse } from 'global/interfaces/http.interface';\nimport { ComponentEvents } from 'global/interfaces/component.interface';\n\nimport { MoleculeAlertProps } from '../m-alert/m-alert.data';\n\nconst alertTemplate = require('components/molecules/m-alert/m-alert.template.twig') as any;\n\nenum SubmitButtonUseCases {\n\tDisable,\n\tEnable,\n\tDone,\n}\n\nexport default class ControllerFinderPopupForm extends ControllerBase {\n\tprivate readonly componentRefs = {\n\t\talertWrapper: 'alertWrapper',\n\t\tformWrapper: 'formFinderWrapper',\n\t\tsubmitBtn: 'submitBtn',\n\t\tspinnerWrapper: 'spinnerWrapper',\n\t\tsubmitText: 'submitText',\n\t\tdoneWrapper: 'doneWrapper',\n\t};\n\n\tprivate componentEvents: ComponentEvents = {\n\t\tsuccess: '',\n\t\tfailure: '',\n\t};\n\n\t/** Subscription management */\n\tprivate _unsubscribeAll: Subject;\n\n\tprivate formUrl: string;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\n\t\tthis.init();\n\t\tthis.observeFormSubmissions();\n\t}\n\n\tprivate init() {\n\t\tthis._unsubscribeAll = new Subject();\n\t\twindow.addEventListener('unload', (e) => {\n\t\t\tthis._unsubscribeAll.next();\n\t\t\tthis._unsubscribeAll.complete();\n\t\t});\n\n\t\tthis.formUrl = this.$element.dataset.formurl;\n\n\t\tthis.componentEvents.success = this.$element.dataset.eventNameSuccess || '';\n\t\tthis.componentEvents.failure = this.$element.dataset.eventNameFailure || '';\n\t}\n\n\t/**\n\t * Returns the form html element\n\t * @returns HTMLFormElement\n\t */\n\tprivate getForm(): HTMLFormElement | undefined {\n\t\tconst form = this.$references[this.componentRefs.formWrapper];\n\t\tif (form) {\n\t\t\treturn form;\n\t\t}\n\t}\n\n\tprivate getSubmitButton(): HTMLElement | undefined {\n\t\tconst submitBtn = this.$references[this.componentRefs.submitBtn];\n\t\tif (submitBtn) {\n\t\t\treturn submitBtn;\n\t\t}\n\t}\n\n\tprivate getSpinnerWrapper(): HTMLElement | undefined {\n\t\tconst spinnerWrapper = this.$references[this.componentRefs.spinnerWrapper];\n\t\tif (spinnerWrapper) {\n\t\t\treturn spinnerWrapper;\n\t\t}\n\t}\n\n\tprivate getSubmitText(): HTMLElement | undefined {\n\t\tconst submitText = this.$references[this.componentRefs.submitText];\n\t\tif (submitText) {\n\t\t\treturn submitText;\n\t\t}\n\t}\n\n\tprivate getDoneWrapper(): HTMLElement | undefined {\n\t\tconst doneWrapper = this.$references[this.componentRefs.doneWrapper];\n\t\tif (doneWrapper) {\n\t\t\treturn doneWrapper;\n\t\t}\n\t}\n\n\t/**\n\t * Watch for form submitted events\n\t * @returns void\n\t */\n\tprivate observeFormSubmissions(): void {\n\t\tconst form = this.getForm();\n\t\tif (form) {\n\t\t\tfromEvent(form, 'submit')\n\t\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t\t.subscribe((e) => {\n\t\t\t\t\tthis.handleDisableSubmitButton(SubmitButtonUseCases.Disable);\n\t\t\t\t\te && e.preventDefault();\n\t\t\t\t\t// send a form submission to the API\n\t\t\t\t\tthis.submitForm()\n\t\t\t\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t\t\t\t.subscribe(\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t//after 30 secs reanable it\n\t\t\t\t\t\t\t\tsetTimeout(() => this.handleDisableSubmitButton(SubmitButtonUseCases.Enable), 30000);\n\n\t\t\t\t\t\t\t\tif (response) {\n\t\t\t\t\t\t\t\t\tif (response.message) {\n\t\t\t\t\t\t\t\t\t\tthis.handleDisableSubmitButton(SubmitButtonUseCases.Done);\n\t\t\t\t\t\t\t\t\t\tthis.showSubmissionAlert(response.message);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (response?.data?.success) {\n\t\t\t\t\t\t\t\t\tthis.handleDisableSubmitButton(SubmitButtonUseCases.Done);\n\t\t\t\t\t\t\t\t\t// emit eventNameSuccess\n\t\t\t\t\t\t\t\t\tthis.componentEvents.success\n\t\t\t\t\t\t\t\t\t\t? this.dispatchCustomEvent(this.componentEvents.success, response.data, true)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.handleDisableSubmitButton(SubmitButtonUseCases.Enable);\n\t\t\t\t\t\t\t\t\t// emit eventNameFailure\n\t\t\t\t\t\t\t\t\tthis.componentEvents.failure ? this.dispatchCustomEvent(this.componentEvents.success, false, true) : undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\tthis.handleDisableSubmitButton(SubmitButtonUseCases.Enable);\n\t\t\t\t\t\t\t\t/** show generic error message */\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\talert: {\n\t\t\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tmessage: response.text(),\n\t\t\t\t\t\t\t\t\t\t\t\ttype: 'danger',\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t}\n\t}\n\n\tprivate handleDisableSubmitButton(disable: SubmitButtonUseCases) {\n\t\tconst submitBtn = this.getSubmitButton();\n\t\tconst spinnerWrapper = this.getSpinnerWrapper();\n\t\tconst submitText = this.getSubmitText();\n\t\tconst doneWrapper = this.getDoneWrapper();\n\t\tswitch (disable) {\n\t\t\tcase SubmitButtonUseCases.Disable:\n\t\t\t\tsubmitBtn?.setAttribute('disabled', 'disabled');\n\t\t\t\tspinnerWrapper?.setAttribute('style', 'display: unset;');\n\t\t\t\tsubmitText?.setAttribute('style', 'display: none;');\n\t\t\t\tbreak;\n\t\t\tcase SubmitButtonUseCases.Enable:\n\t\t\t\tsubmitBtn?.removeAttribute('disabled');\n\t\t\t\tspinnerWrapper?.setAttribute('style', 'display: none;');\n\t\t\t\tsubmitText?.setAttribute('style', 'display: block;');\n\t\t\t\tbreak;\n\t\t\tcase SubmitButtonUseCases.Done:\n\t\t\t\tsubmitBtn?.setAttribute('disabled', 'disabled');\n\t\t\t\tspinnerWrapper?.setAttribute('style', 'display: none;');\n\t\t\t\tsubmitText?.setAttribute('style', 'display: none;');\n\t\t\t\tdoneWrapper?.setAttribute('style', 'display: unset;');\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Returns an observable of the API response\n\t * @returns Observable\n\t */\n\tprivate submitForm(): Observable | undefined> {\n\t\tconst form = this.getForm();\n\t\tif (form) {\n\t\t\t// get the form's submit URL\n\t\t\tconst submitUrl = this.getFormSubmitUrl();\n\t\t\treturn fromFetch>(submitUrl.toString(), {\n\t\t\t\tselector: (response) => response.json(),\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify(this.getFormData()),\n\t\t\t}).pipe(\n\t\t\t\tmap((p) => {\n\t\t\t\t\tif (p && p) {\n\t\t\t\t\t\treturn p;\n\t\t\t\t\t}\n\t\t\t\t\t// @todo - might be a message from the server here...\n\t\t\t\t\treturn of(undefined);\n\t\t\t\t}),\n\t\t\t\tcatchError((e) => {\n\t\t\t\t\t// handle error case or non-20x response\n\t\t\t\t\treturn of(e);\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn of(undefined);\n\t}\n\n\t/**\n\t * Determines the form's submit URL for XHR submissions\n\t * @returns URL\n\t */\n\tprivate getFormSubmitUrl(): URL {\n\t\tconst form = this.getForm();\n\n\t\t// set the url, based on the data attrib, or the form action\n\t\tlet url = this.formUrl;\n\n\t\tif (this.formUrl.length === 0) {\n\t\t\turl = form ? form.getAttribute('action') || '' : '';\n\t\t}\n\n\t\treturn new URL(url);\n\t}\n\n\t/**\n\t * Returns the form data\n\t * @returns FormData\n\t */\n\tprivate getFormData() {\n\t\tconst form = this.getForm();\n\t\tconst data = {};\n\n\t\tif (form) {\n\t\t\tconst inputs = form.querySelectorAll('input.js-input');\n\t\t\tconst message: HTMLTextAreaElement | null = form.querySelector('textarea.js-input');\n\n\t\t\tinputs.forEach((input: HTMLInputElement) => {\n\t\t\t\tdata[input.name] = input.value;\n\t\t\t});\n\n\t\t\tif (message) {\n\t\t\t\tdata['message'] = message.value;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t/**\n\t * Show a success or error message on the page after form submission\n\t * @param {MoleculeAlertProps} alert\n\t * @returns void\n\t */\n\tprivate showSubmissionAlert(alert: MoleculeAlertProps): void {\n\t\tconst alertDiv = this.$references[this.componentRefs.alertWrapper];\n\t\tif (alert && alertDiv) {\n\t\t\tconst alertHtml = alertTemplate({\n\t\t\t\tdata: alert,\n\t\t\t});\n\t\t\talertDiv.innerHTML = alertHtml;\n\t\t}\n\t}\n}\n","import ControllerBase from 'global/js/ControllerBase';\nimport { MoleculeFinderSelectStepEvent, MyMoleculeFinderSelectStepEvents } from './m-finder-select-step.events';\n\ninterface ComponentRefs {\n\tbackButton: 'backButton';\n\tbackButtonMobile: 'backButtonMobile';\n\tpdfButton: 'pdfButton';\n\tproductsButton: 'productsButton';\n\tnextButton: 'nextButton';\n}\n\nexport default class ControllerFinderSelectStep extends ControllerBase {\n\tprivate back: HTMLDivElement;\n\tprivate backMobile: HTMLDivElement;\n\tprivate products: HTMLDivElement;\n\tprivate next: HTMLDivElement;\n\tprivate option: number;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\t\tthis.back = this.$references.backButton as HTMLDivElement;\n\t\tthis.backMobile = this.$references.backButtonMobile as HTMLDivElement;\n\t\tthis.products = this.$references.productsButton as HTMLDivElement;\n\t\tthis.next = this.$references.nextButton as HTMLDivElement;\n\n\t\tthis.init();\n\t}\n\n\tprivate init(): void {\n\t\tconst options = this.$element.querySelectorAll('.js-option');\n\n\t\t// Creates an event when back button (desktop) has been clicked\n\t\tthis.back &&\n\t\t\tthis.back.addEventListener('click', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.dispatchCustomEvent(MyMoleculeFinderSelectStepEvents.back, {}, true, true);\n\t\t\t});\n\n\t\t// Creates an event when back button (mobile) has been clicked\n\t\tthis.backMobile &&\n\t\t\tthis.backMobile.addEventListener('click', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.dispatchCustomEvent(MyMoleculeFinderSelectStepEvents.back, {}, true, true);\n\t\t\t});\n\n\t\t// Creates an event when show results has been clicked\n\t\tthis.products.addEventListener('click', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tthis.dispatchCustomEvent(MyMoleculeFinderSelectStepEvents.products, {}, true, true);\n\t\t});\n\n\t\t// If we are in mobile\n\t\tif (this.isMobile()) {\n\t\t\t// Creates an event when next button has been clicked\n\t\t\tthis.next &&\n\t\t\t\tthis.next.addEventListener('click', (e: MouseEvent | PointerEvent) => {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (this.next.dataset.step === 'last-question') {\n\t\t\t\t\t\tthis.dispatchCustomEvent(MyMoleculeFinderSelectStepEvents.start, {}, true, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.dispatchCustomEvent(\n\t\t\t\t\t\t\tMyMoleculeFinderSelectStepEvents.clicked,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tadditionalId: this.option,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\n\t\toptions &&\n\t\t\toptions.forEach((option: HTMLDivElement) => {\n\t\t\t\toption.addEventListener('click', (event) => this.emitEvent(event, option));\n\t\t\t});\n\t}\n\n\t/**\n\t * Gets the option value and fires an event\n\t * @param event\n\t * @param target\n\t */\n\tprivate emitEvent(event: MouseEvent | PointerEvent, target: HTMLDivElement): void {\n\t\tevent.preventDefault();\n\n\t\tthis.option = Number(target.dataset.searchId);\n\n\t\tif (this.isMobile()) {\n\t\t\ttarget.classList.toggle('selected');\n\t\t\ttarget.querySelector('.a-button')?.classList.toggle('selected');\n\t\t} else {\n\t\t\tthis.dispatchCustomEvent(\n\t\t\t\tMyMoleculeFinderSelectStepEvents.clicked,\n\t\t\t\t{\n\t\t\t\t\tadditionalId: this.option,\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Checks if we are in mobile\n\tprivate isMobile() {\n\t\treturn /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\t}\n}\n","import { ComponentEvents } from 'global/interfaces/component.interface';\n\nexport const MyMoleculeFinderSelectStepEvents: ComponentEvents = {\n\tclicked: 'MoleculeFinderSelectStepClickEvent',\n\tback: 'MoleculeFinderSelectStepClickEventBack',\n\tproducts: 'MoleculeFinderSelectStepClickEventProducts',\n\tstart: 'MoleculeFinderSelectStepClickEventStart',\n};\n\nexport interface MoleculeFinderSelectStepEvent {\n\tadditionalId: number;\n}\n","import ControllerBase from '../../../../global/js/ControllerBase';\nimport { MoleculeFormProps } from './m-form.data';\nimport { MoleculeFormEvents, MoleculeFormEventTypes } from './m-form.events';\nimport { OrganismFormStepperEvents } from '../../organisms/o-form-stepper/o-form-stepper.events';\n\ninterface ComponentRefs {}\n\ntype HTMLInputTypes = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nexport default class ControllerControlledForm extends ControllerBase {\n\tprivate static readonly componentRefs: ComponentRefs = {};\n\n\tprivate inputs: Record = {};\n\t/** Initialize form validity state */\n\tprivate formValidity = true;\n\t/** A list of translations for the component */\n\tprivate readonly translations: MoleculeFormProps['translations'];\n\tprivate readonly lastControlKeyUp: boolean;\n\tprivate currentElementWithKeyupListener: HTMLInputTypes | undefined;\n\tprivate currentTimer: NodeJS.Timeout;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerControlledForm.componentRefs));\n\t\ttry {\n\t\t\tthis.translations = this.$element.dataset.translations && JSON.parse(this.$element.dataset.translations);\n\t\t\tthis.lastControlKeyUp = this.$element.dataset.lastcontrolinvalidevent === 'keyup' ? true : false;\n\t\t} catch (error) {\n\t\t\tconsole.warn(error, 'Missing translations for m-form');\n\t\t}\n\n\t\tthis.init().validateFields().listenForChanges().observeValidationUpdateRequests().observeFormValidationErrors();\n\t}\n\n\tprivate init(): ControllerControlledForm {\n\t\t// collect a list of inputs, selects, textareas\n\t\tthis.getFields().forEach((input: HTMLInputTypes) => {\n\t\t\tif (input && input.name) {\n\t\t\t\t// check for non-unique names!\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.inputs, input.name)) {\n\t\t\t\t\tconsole.warn('Form input name is not unique: ', input.name);\n\t\t\t\t}\n\t\t\t\tthis.inputs[input.name] = input;\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tprivate getFields(): Array {\n\t\treturn Array.from(this.$element.querySelectorAll('input, textarea, select'));\n\t}\n\n\t/**\n\t * Runs form validation and optionally emits the validity event\n\t * @url https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation\n\t * @param {HTMLInputTypes|null} currentFormElement\n\t * @param {boolean=true} emitOnlyOnChanged\n\t * @returns ControllerControlledForm\n\t */\n\tprivate validateFields(currentFormElement: HTMLInputTypes | null = null, emitOnlyOnChanged: boolean = true): ControllerControlledForm {\n\t\tthis.dispatchCustomEvent(OrganismFormStepperEvents.FORM_DATA_CHANGED_BY_STEP, 0, false, true);\n\n\t\t// remove old error message from the form element if it exists\n\t\tcurrentFormElement && this.clearValidationErrors(currentFormElement);\n\t\t// if field is required and value empty, add a required error message\n\t\tcurrentFormElement && this.showHTML5ValidationErrors(currentFormElement);\n\n\t\tconst validity = this.runValidation();\n\t\tthis.formValidity = validity.currentValidState;\n\n\t\t// dispatch the form's validity state to the $element. Listening parent components can listen using a reference\n\t\tif (emitOnlyOnChanged && validity.validStateChanged) {\n\t\t\tthis.dispatchCustomEvent(MoleculeFormEvents.VALIDATION_RAN, this.formValidity, false, false);\n\t\t} else {\n\t\t\tthis.dispatchCustomEvent(MoleculeFormEvents.VALIDATION_RAN, this.formValidity, false, false);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Perform HTML5 validation on collected form fields and report changes to the validation state\n\t * @returns CustomValidity\n\t */\n\tprivate runValidation(): CustomValidity {\n\t\tlet valid: boolean = true;\n\t\tconst currentValidity = this.formValidity;\n\t\tconst invalidInputs: HTMLInputTypes[] = [];\n\n\t\tfor (const key in this.inputs) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(this.inputs, key)) {\n\t\t\t\tconst element = this.inputs[key];\n\t\t\t\tif (element.validity.valid === false) {\n\t\t\t\t\tif (this.lastControlKeyUp) {\n\t\t\t\t\t\t// remember that the input was invalid\n\t\t\t\t\t\tinvalidInputs.push(element);\n\t\t\t\t\t}\n\n\t\t\t\t\t// test inputs to find at least one that is not valid\n\t\t\t\t\tif (valid === true) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// set up keyup events for the last invalid input\n\t\tif (invalidInputs.length === 1) {\n\t\t\tconst elInv = invalidInputs[0];\n\t\t\tif (elInv.tagName.toUpperCase() === 'INPUT') {\n\t\t\t\telInv.addEventListener('keyup', (e) => this.onKeyup(e, elInv));\n\t\t\t\tthis.currentElementWithKeyupListener = elInv;\n\t\t\t}\n\t\t} else if (this.currentElementWithKeyupListener) {\n\t\t\t// reset keyup event listeners\n\t\t\tthis.currentElementWithKeyupListener.removeEventListener('keyup', (e) =>\n\t\t\t\tthis.onKeyup(e, this.currentElementWithKeyupListener as HTMLInputTypes),\n\t\t\t);\n\t\t\tclearTimeout(this.currentTimer);\n\t\t\tthis.currentElementWithKeyupListener = undefined;\n\t\t}\n\n\t\tconst validity: CustomValidity = {\n\t\t\tpreviousValidState: currentValidity,\n\t\t\tcurrentValidState: valid,\n\t\t\tvalidStateChanged: currentValidity !== valid,\n\t\t};\n\t\treturn validity;\n\t}\n\n\tprivate onKeyup(e: Event, elInv: HTMLInputTypes) {\n\t\tif (this.currentTimer) {\n\t\t\tclearTimeout(this.currentTimer);\n\t\t}\n\t\tthis.currentTimer = setTimeout(() => {\n\t\t\tthis.validateFields(elInv);\n\t\t}, 500);\n\t}\n\n\tprivate listenForChanges(): ControllerControlledForm {\n\t\tfor (const key in this.inputs) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(this.inputs, key)) {\n\t\t\t\tconst elem = this.inputs[key];\n\t\t\t\tswitch (elem.tagName.toUpperCase()) {\n\t\t\t\t\tcase 'INPUT': {\n\t\t\t\t\t\telem.addEventListener('blur', (e) => {\n\t\t\t\t\t\t\tthis.validateFields(elem);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'RADIO': // todo\n\t\t\t\t\tcase 'TEXTAREA':\n\t\t\t\t\tcase 'SELECT': {\n\t\t\t\t\t\telem.addEventListener('change', (e) => this.validateFields(elem));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Support for re-running validation from parent component\n\t * @returns ControllerControlledForm\n\t */\n\tprivate observeValidationUpdateRequests(): ControllerControlledForm {\n\t\tthis.$element.addEventListener(MoleculeFormEvents.RERUN_VALIDATION, (event: CustomEvent) => {\n\t\t\tif (event.detail) {\n\t\t\t\tthis.validateFields(null, false);\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n\n\tprivate observeFormValidationErrors(): ControllerControlledForm {\n\t\twindow.addEventListener(\n\t\t\tMoleculeFormEvents.DISPLAY_VALIDATION_ERRORS,\n\t\t\t(event: CustomEvent) => {\n\t\t\t\tif (event.detail) {\n\t\t\t\t\tthis.updateValidationErrors(event.detail);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\treturn this;\n\t}\n\n\tprivate updateValidationErrors(errors: MoleculeFormEventTypes['DISPLAY_VALIDATION_ERRORS']): void {\n\t\tif (!errors) return;\n\t\tthis.inputUtils.addErrorsToFieldset({ element: this.$element, errors });\n\t}\n\n\tprivate clearValidationErrors(formElement: HTMLInputTypes): ControllerControlledForm {\n\t\tthis.inputUtils.addOrRemoveFormValidationError('HIDE_VALIDATION_ERROR', formElement);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Show additional client-side validation errors, such as when a field is 'touched' by the user, show a required validation error if the field in required and invalid\n\t * @param {HTMLInputTypes} formElement\n\t * @returns ControllerControlledForm\n\t */\n\tprivate showHTML5ValidationErrors(formElement: HTMLInputTypes): ControllerControlledForm {\n\t\tif (formElement.required && formElement.validity.valid === false) {\n\t\t\tthis.inputUtils.addOrRemoveFormValidationError(\n\t\t\t\t'SHOW_VALIDATION_ERROR',\n\t\t\t\tformElement,\n\t\t\t\tthis.translations.fieldIsRequired || 'This field is required.',\n\t\t\t);\n\t\t}\n\t\t// ...more support for patterns and general invalid fields, min length etc...?\n\t\treturn this;\n\t}\n}\n\ninterface CustomValidity {\n\t/** The previous HTML5 validation state of the form elements */\n\tpreviousValidState: boolean;\n\t/** The current or new HTML5 validation state of the form elements after checking validation */\n\tcurrentValidState: boolean;\n\t/** True if the state changed since last check */\n\tvalidStateChanged: boolean;\n}\n","import { FormFieldErrors } from 'global/interfaces/http.interface';\nimport { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'MoleculeFormEvents__';\n\n/** The type of custom events emitted in event.detail */\nexport type MoleculeFormEventTypes = {\n\tVALIDATION_RAN: boolean;\n\tRERUN_VALIDATION: boolean;\n\t/** This will be like { firstname: 'Please provide your name', address1: 'Invalid address' } */\n\tDISPLAY_VALIDATION_ERRORS: FormFieldErrors;\n};\n\n/** The event names for the above events */\nexport const MoleculeFormEvents: ComponentEvents = {\n\t/** Event emitted everytime the HTML5 validation is run */\n\tVALIDATION_RAN: EVENT_PREFIX + 'VALIDATION_RAN',\n\tRERUN_VALIDATION: EVENT_PREFIX + 'RERUN_VALIDATION',\n\t/** Event listener for external controllers to tell the m-form to show a list of validation errors */\n\tDISPLAY_VALIDATION_ERRORS: EVENT_PREFIX + 'DISPLAY_VALIDATION_ERRORS',\n};\n","import { fromEvent } from 'rxjs';\nimport ControllerBase from '../../../../global/js/ControllerBase';\nimport UIkit from 'uikit';\nimport { OrganismFormStepperEvents } from 'wolf/components/organisms/o-form-stepper/o-form-stepper.events';\n\ntype ComponentRefs = {\n\tctaEditStep: 'cta-edit-step';\n};\n\nexport enum ResumeSliceEvents {\n\tTOGGLE_SLICE_FOR_INPUTS = 'TOGGLE_SLICE_FOR INPUTS',\n}\n\nexport default class ControllerFormStepResumeSlice extends ControllerBase {\n\tctaEditStep: HTMLButtonElement;\n\tstepToVisit: number | null;\n\n\tprivate static readonly componentRefs: ComponentRefs = {\n\t\tctaEditStep: 'cta-edit-step',\n\t};\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerFormStepResumeSlice.componentRefs));\n\t\tthis.ctaEditStep = this.$references[ControllerFormStepResumeSlice.componentRefs.ctaEditStep];\n\t\tthis.stepToVisit = Number(this.ctaEditStep.getAttribute('data-step-idx'));\n\t\tthis.observeRemoveFormPartRequest();\n\t}\n\n\tobserveRemoveFormPartRequest(): void {\n\t\t// console.log(this.ctaEditStep)\n\t\tconst click$ = fromEvent(this.ctaEditStep, 'click');\n\n\t\tclick$.subscribe((e: Event | MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.handleEditStep();\n\t\t});\n\t}\n\n\thandleEditStep(): void {\n\t\t// Switcher steps starts from 0\n\t\tconst ctaEditStepData = this.ctaEditStep.dataset;\n\t\tconst ctaOriginalStep = Number(ctaEditStepData.stepIdx);\n\t\tconst resumeSliceId = ctaEditStepData.sliceId;\n\n\t\tconst currentSwitcher = document.getElementById('wolf-form-stepper');\n\n\t\tif (currentSwitcher) {\n\t\t\tconst activeStep = currentSwitcher?.getElementsByClassName('uk-active')[0] as HTMLElement;\n\t\t\tconst currentSwitcherActiveStep = Number(activeStep.dataset.step);\n\t\t\tconst shouldRedirectToStep = ctaOriginalStep !== currentSwitcherActiveStep;\n\n\t\t\tif (shouldRedirectToStep && this.stepToVisit !== null) {\n\t\t\t\tthis.dispatchCustomEvent(OrganismFormStepperEvents.REQUEST_GO_TO_STEP, this.stepToVisit, false, true);\n\t\t\t}\n\t\t}\n\n\t\tthis.dispatchCustomEvent(ResumeSliceEvents.TOGGLE_SLICE_FOR_INPUTS, { id: resumeSliceId }, false, true);\n\t}\n}\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'FormstepSelectIconEvents__';\n\n/** The type of custom events emitted */\nexport type FormstepSelectIconEventTypes = {\n\tREQUEST_VALIDATION: string;\n};\n\n/** The event names for the above events */\nexport const FormstepSelectIconEvents: ComponentEvents = {\n\tREQUEST_VALIDATION: EVENT_PREFIX + 'REQUEST_VALIDATION',\n};\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'FormstepSelectImageEvents__';\n\nexport interface MoleculeSelectImageOptionChangedEvent {\n\tselectedOptions: any[];\n}\n\nexport interface MoleculeSelectImageEvent {\n\tcurrentStep: number;\n\tselectedValue: string;\n\tisSelected: boolean;\n}\n\n/** The type of custom events emitted */\nexport type FormstepSelectImageEventTypes = {\n\tREQUEST_VALIDATION: string;\n\tSELECT_OPTION_CHANGED: MoleculeSelectImageOptionChangedEvent;\n\tSELECT_IMAGE: MoleculeSelectImageEvent;\n};\n\n/** The event names for the above events */\nexport const FormstepSelectImageEvents: ComponentEvents = {\n\tREQUEST_VALIDATION: EVENT_PREFIX + 'REQUEST_VALIDATION',\n\tSELECT_OPTION_CHANGED: EVENT_PREFIX + 'SELECT_OPTION_CHANGED',\n\tSELECT_IMAGE: EVENT_PREFIX + 'SELECT_IMAGE',\n};\n","import { fromEvent } from 'rxjs';\nimport ControllerBase from '../../../../global/js/ControllerBase';\nimport { FormstepSystemComponentEvents } from './m-formstep-system-component.events';\n\ntype ComponentRefs = {\n\tcomponentRemovalButton: 'form-slice-deleter';\n\tcomponentSubmitButton: 'form-slice-submit';\n\texitEditModeButton: 'form-slice-exit-edit-mode';\n\tserialNumberInput: 'm-formstep-system-component__serialNumber';\n\tshortDescriptionInput: 'm-formstep-system-component__shortDescription';\n};\n\nexport default class ControllerSystemComponent extends ControllerBase {\n\tremovalButton: HTMLButtonElement;\n\tsubmitButton: HTMLElement;\n\texitEditModeButton: HTMLElement;\n\tserialNumberInput: HTMLInputElement;\n\tshortDescriptionInput: HTMLInputElement;\n\n\tprivate static readonly componentRefs: ComponentRefs = {\n\t\tcomponentRemovalButton: 'form-slice-deleter',\n\t\tcomponentSubmitButton: 'form-slice-submit',\n\t\texitEditModeButton: 'form-slice-exit-edit-mode',\n\t\tserialNumberInput: 'm-formstep-system-component__serialNumber',\n\t\tshortDescriptionInput: 'm-formstep-system-component__shortDescription',\n\t};\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerSystemComponent.componentRefs));\n\t\tthis.removalButton = this.$references[ControllerSystemComponent.componentRefs.componentRemovalButton];\n\t\tthis.exitEditModeButton = this.$references[ControllerSystemComponent.componentRefs.exitEditModeButton];\n\t\tthis.submitButton = this.$references[ControllerSystemComponent.componentRefs.componentSubmitButton];\n\t\tthis.serialNumberInput = this.$references[ControllerSystemComponent.componentRefs.serialNumberInput];\n\t\tthis.shortDescriptionInput = this.$references[ControllerSystemComponent.componentRefs.shortDescriptionInput];\n\t\tthis.initApp();\n\t}\n\n\tobserveShortDescriptionSubmission(): void {\n\t\tthis.inputUtils.observeElementEvents(this.shortDescriptionInput, 'input', (value) => {\n\t\t\tif (value) {\n\t\t\t\tthis.submitButton.classList.remove('input-disabled');\n\t\t\t} else this.submitButton.classList.add('input-disabled');\n\t\t});\n\t}\n\n\tobserveExitEditModeRequest(): void {\n\t\tconst click$ = fromEvent(this.exitEditModeButton, 'click');\n\n\t\tclick$.subscribe((e: Event | MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.requestExitEditMode();\n\t\t});\n\t}\n\n\tobserveSubmitFormPartRequest(): void {\n\t\tconst click$ = fromEvent(this.submitButton, 'click');\n\n\t\tclick$.subscribe((e: Event | MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.requestSubmitSystemComponent();\n\t\t});\n\t}\n\n\tobserveRemoveFormPartRequest(): void {\n\t\tconst click$ = fromEvent(this.removalButton, 'click');\n\n\t\tclick$.subscribe((e: Event | MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.removeFormPartFromDom();\n\t\t});\n\t}\n\n\trequestSubmitSystemComponent(): void {\n\t\tconst elementId = this.$element.id;\n\t\tthis.dispatchCustomEvent(FormstepSystemComponentEvents.REQUEST_ADD_SYSTEM_COMPONENT, { elementId }, true, true);\n\t}\n\n\trequestExitEditMode(): void {\n\t\tconst elementId = this.$element.id;\n\t\tthis.dispatchCustomEvent(FormstepSystemComponentEvents.EXIT_EDIT_MODE, { elementId }, true, true);\n\t}\n\n\tremoveFormPartFromDom(): void {\n\t\tconst elementId = this.$element.id;\n\t\tthis.dispatchCustomEvent(FormstepSystemComponentEvents.REMOVE_SYSTEM_COMPONENT, { elementId }, true, true);\n\t\tthis.$element.remove();\n\t}\n\n\tinitApp(): void {\n\t\tthis.observeRemoveFormPartRequest();\n\t\tthis.observeSubmitFormPartRequest();\n\t\tthis.observeExitEditModeRequest();\n\t\tthis.observeShortDescriptionSubmission();\n\t}\n}\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'FormstepSystemComponentEvents__';\n\n/** The type of custom events emitted */\nexport type FormstepSystemComponentEventTypes = {\n\tREQUEST_ADD_SYSTEM_COMPONENT: string;\n\tEXIT_EDIT_MODE: string;\n\tREMOVE_SYSTEM_COMPONENT: string;\n};\n\n/** The event names for the above events */\nexport const FormstepSystemComponentEvents: ComponentEvents = {\n\tREQUEST_ADD_SYSTEM_COMPONENT: EVENT_PREFIX + 'REQUEST_ADD_SYSTEM_COMPONENT',\n\tEXIT_EDIT_MODE: EVENT_PREFIX + 'EXIT_EDIT_MODE',\n\tREMOVE_SYSTEM_COMPONENT: EVENT_PREFIX + 'REMOVE_SYSTEM_COMPONENT',\n};\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'FormstepWarrantyStep2Events__';\n\n/** The type of custom events emitted */\nexport type FormstepWarrantyStep2EventTypes = {\n\tREQUEST_VALIDATION: string;\n};\n\n/** The event names for the above events */\nexport const FormstepWarrantyStep2Events: ComponentEvents = {\n\tREQUEST_VALIDATION: EVENT_PREFIX + 'REQUEST_VALIDATION',\n};\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'FormstepWarrantyStep3Events__';\n\n/** The type of custom events emitted */\nexport type FormstepWarrantyStep3EventTypes = {\n\tREQUEST_VALIDATION: string;\n};\n\n/** The event names for the above events */\nexport const FormstepWarrantyStep3Events: ComponentEvents = {\n\tREQUEST_VALIDATION: EVENT_PREFIX + 'REQUEST_VALIDATION',\n};\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'FormstepWarrantyWolfProductsEvents__';\n\n/** The type of custom events emitted */\nexport type FormstepWarrantyWolfProductsEventTypes = {\n\t// DISABLE_GO_TO_NEXT_STEP: string;\n\tREQUEST_VALIDATION: string;\n};\n\n/** The event names for the above events */\nexport const FormstepWarrantyWolfProductsEvents: ComponentEvents = {\n\t// DISABLE_GO_TO_NEXT_STEP: EVENT_PREFIX + 'DISABLE_GO_TO_NEXT_STEP',\n\n\tREQUEST_VALIDATION: EVENT_PREFIX + 'REQUEST_VALIDATION',\n};\n","import { Component } from 'global/interfaces/component.interface';\nimport ControllerBase from 'global/js/ControllerBase';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AtomButtonEvents } from 'wolf/components/atoms/a-button/a-button.events';\nimport { FilterDataProps } from 'wolf/components/organisms/o-job-offers/o-job-offers.controller';\nimport { MoleculeJobOfferAreaContentProps } from '../m-job-offer-area-content/m-job-offer-area-content.data';\n\nconst jobOfferAreaContentTemplate = require('components/molecules/m-job-offer-area-content/m-job-offer-area-content.template.twig') as (\n\tdata: Component,\n) => string;\n\nexport default class ControllerJobOfferArea extends ControllerBase {\n\tprivate loadBtn: HTMLAnchorElement;\n\tprivate jobsArea: HTMLDivElement;\n\tprivate jobFiltersContainer: HTMLDivElement;\n\tprivate areaTypeName: string;\n\tprivate jobsAreaUrl: string;\n\t/** Filter values */\n\tprivate filterValues: FilterDataProps;\n\tprivate areaContent: MoleculeJobOfferAreaContentProps;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\t\tthis.loadBtn = this.$element.querySelector('.js-job-wrapper .js-load-button .a-button') as HTMLAnchorElement;\n\t\tthis.jobsArea = this.$element.querySelector('.js-job-wrapper') as HTMLDivElement;\n\t\tthis.jobFiltersContainer = document.querySelector('.js-job-offer__filter-container') as HTMLDivElement;\n\t\tthis.areaTypeName = this.$element.dataset.areaName || '';\n\t\tthis.jobsAreaUrl = this.$element.dataset.jobsAreaUrl || '';\n\n\t\tthis.init();\n\t}\n\n\tprivate init() {\n\t\tthis.filterValues = {\n\t\t\tselects: [],\n\t\t\tsearch: '',\n\t\t};\n\t\tthis.loadBtn && this.loadBtn.addEventListener(AtomButtonEvents.buttonClicked, (e: CustomEvent) => this.loadMoreOffers(e));\n\t}\n\n\tprivate setFilterData() {\n\t\tconst search = this.jobFiltersContainer.querySelector('input.js-search-input') as HTMLInputElement;\n\t\tconst inputs = this.jobFiltersContainer.querySelectorAll('select.js-select');\n\n\t\tif (search) {\n\t\t\tthis.filterValues.search = search.value || '';\n\t\t}\n\n\t\tinputs.forEach((input: HTMLSelectElement) => {\n\t\t\tthis.filterValues.selects.push({ key: input.name, value: input.value });\n\t\t});\n\t}\n\n\t/**\n\t * Detects event from button and triggers AJAX call\n\t */\n\tprivate loadMoreOffers(e: CustomEvent): void {\n\t\tif (e && e.detail) {\n\t\t\te.detail.preventDefault();\n\n\t\t\tthis.setFilterData();\n\n\t\t\tthis.getJobs()\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.areaContent = response && response.data;\n\t\t\t\t\tthis.loadNewContent();\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Renders loaded job offers\n\t */\n\tprivate loadNewContent(): void {\n\t\tconst areaToRender = jobOfferAreaContentTemplate({\n\t\t\tdata: this.areaContent,\n\t\t});\n\n\t\tthis.jobsArea && this.domUtils.renderDomElementInHTMLElement(this.jobsArea, areaToRender);\n\t}\n\n\t/**\n\t * AJAX call\n\t */\n\tprivate async getJobs() {\n\t\tconst url = new URL(this.jobsAreaUrl);\n\n\t\tif (this.filterValues.search) {\n\t\t\turl.searchParams.append('search', this.filterValues.search);\n\t\t}\n\n\t\tif (this.filterValues.selects) {\n\t\t\tthis.filterValues.selects.forEach((filter) => {\n\t\t\t\tif (filter.value) {\n\t\t\t\t\turl.searchParams.append(filter.key, filter.value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\turl.searchParams.append('areaType', this.areaTypeName);\n\n\t\tconst response = await fetch(url.toString());\n\n\t\treturn await response.json();\n\t}\n}\n","import ControllerBase from '../../../../global/js/ControllerBase';\nimport { ProductGalleryItemTypes } from './m-product-gallery.data';\nimport { MoleculeProductGalleryEvents, MoleculeProductGalleryEventTypes } from './m-product-gallery.events';\n\ninterface ComponentRefs {\n\tgalleryWrapper: 'galleryWrapper';\n\tsliderWrapper: 'sliderWrapper';\n\tsliderList: 'sliderList';\n\topenModalButton: 'openModalButton';\n}\n\nexport default class ControllerProductGallery extends ControllerBase {\n\tprivate static readonly componentRefs: ComponentRefs = {\n\t\tgalleryWrapper: 'galleryWrapper',\n\t\tsliderWrapper: 'sliderWrapper',\n\t\tsliderList: 'sliderList',\n\t\topenModalButton: 'openModalButton',\n\t};\n\tprivate galleryWrapper: HTMLDivElement;\n\tprivate galleryItems: HTMLDivElement[] = [];\n\tprivate currentThumbIndexSelected: number;\n\tprivate sliderWrapper: HTMLDivElement;\n\tprivate sliderList: HTMLUListElement;\n\tprivate slides: HTMLAnchorElement[] = [];\n\tprivate sliderWrapperWidth = 0 as number;\n\tprivate sliderListWidth = 0 as number;\n\tprivate sliderListWidth2 = 0 as number;\n\tprivate sliderListElements = [] as number[];\n\tprivate sliderListElements2 = [] as number[];\n\tprivate openModalButton: HTMLButtonElement;\n\tprivate sliderWrapperHeight = 0 as number;\n\tprivate modalProducGallery: HTMLDivElement;\n\tprivate sliderList2: HTMLUListElement;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerProductGallery.componentRefs));\n\n\t\tthis.galleryWrapper = this.$references.galleryWrapper as HTMLDivElement;\n\t\tif (this.galleryWrapper) {\n\t\t\tthis.galleryItems = Array.from(this.galleryWrapper.querySelectorAll('div.js-focus'));\n\t\t}\n\n\t\tthis.sliderWrapper = this.$references.sliderWrapper as HTMLDivElement;\n\t\tif (this.sliderWrapper) {\n\t\t\tthis.slides = Array.from(this.sliderWrapper.querySelectorAll('ul li a.js-thumb'));\n\t\t\tthis.sliderWrapperWidth = this.sliderWrapper.clientWidth;\n\t\t\tthis.sliderWrapperHeight = this.sliderWrapper.clientHeight;\n\t\t}\n\n\t\tthis.sliderList = this.$references.sliderList as HTMLUListElement;\n\n\t\tthis.init();\n\t\tthis.galleryPositionHandler();\n\n\t\tthis.openModalButton = document.querySelector('a[data-ref=\"openModalButton\"]') as HTMLButtonElement;\n\t\tthis.openModalButton?.addEventListener('click', () => this.galleryPositionHandlerFullwidth());\n\t\tthis.galleryPositionHandlerFullwidth();\n\t}\n\n\tprivate init(): void {\n\t\tthis.observeSlideThumbClicks();\n\t}\n\n\tprivate observeSlideThumbClicks(): void {\n\t\tthis.slides.forEach((slide) => {\n\t\t\tslide.addEventListener('click', (e) => this.slideClick(e));\n\t\t});\n\t}\n\n\tprivate slideClick(event: Event | MouseEvent): void {\n\t\tevent.preventDefault();\n\n\t\tconst currentAnchor = event.currentTarget as HTMLAnchorElement;\n\t\tconst thumbIndex = parseInt(currentAnchor.dataset.index as string);\n\t\tconst type = currentAnchor.dataset.type || 'none';\n\n\t\t// break early if user clicks the same thumb...do nothing\n\t\tif (this.currentThumbIndexSelected === thumbIndex) return;\n\n\t\t// update selected appearance\n\t\tthis.updateSelectedThumb(currentAnchor);\n\n\t\t// show new item\n\t\tthis.updateVisibleGalleryItem(thumbIndex);\n\n\t\t// remember new thumb index\n\t\tthis.currentThumbIndexSelected = thumbIndex;\n\n\t\t// emit change event for listeners\n\t\tthis.dispatchCustomEvent(\n\t\t\tMoleculeProductGalleryEvents.thumbnailChanged,\n\t\t\tthis.currentThumbIndexSelected,\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t);\n\n\t\t// show the content based on the data type\n\t\tswitch (type) {\n\t\t\tcase ProductGalleryItemTypes.Image: {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ProductGalleryItemTypes.Video: {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ProductGalleryItemTypes.ThreeSixty: {\n\t\t\t\t// re-init 360?\n\t\t\t\t// console.log('reinit 360');\n\t\t\t\t(window as any).CI360 && (window as any).CI360.destroy();\n\t\t\t\t(window as any).CI360 && (window as any).CI360.init();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tconsole.log('Invalid product gallery type');\n\t\t}\n\t}\n\n\t/**\n\t * Remove selected appearance from thumbs and add newly selected appearance, if anchor provided\n\t * @param {HTMLAnchorElement} newSelected?\n\t * @returns void\n\t */\n\tprivate updateSelectedThumb(newSelected?: HTMLAnchorElement): void {\n\t\tthis.slides.forEach((thumb) => {\n\t\t\tthumb.classList.remove('selected');\n\t\t});\n\t\tif (newSelected) {\n\t\t\tnewSelected.classList.add('selected');\n\t\t}\n\t}\n\n\t/**\n\t * Hide current gallery item and show new one by index\n\t * @param {number} newIndex\n\t * @returns void\n\t */\n\tprivate updateVisibleGalleryItem(newIndex: number): void {\n\t\tthis.galleryItems.forEach((item) => {\n\t\t\t// hide current visible item\n\t\t\tif (item.hasAttribute('hidden') === false) {\n\t\t\t\titem.setAttribute('hidden', 'true');\n\t\t\t}\n\t\t\t// item.style.opacity = '0';\n\t\t});\n\n\t\tif (newIndex >= 0 && this.galleryItems.length >= newIndex) {\n\t\t\t// show new item\n\t\t\tthis.galleryItems[newIndex].removeAttribute('hidden');\n\n\t\t\t// this.galleryItems[newIndex].style.opacity = '1';\n\t\t\t// const foo = this.galleryItems[newIndex].querySelector('div.cloudimage-360');\n\t\t\t// const e = e.dispatchEvent(new CustomEvent('dragStart'));\n\t\t}\n\t}\n\n\tprivate galleryPositionHandler(): void {\n\t\tif (this.sliderList) {\n\t\t\tthis.sliderList.children.length > 0 &&\n\t\t\t\tArray.from(this.sliderList.children)?.forEach((element) => this.sliderListElements?.push(element?.clientHeight));\n\t\t\tthis.sliderListWidth = this.sliderListElements.reduce((acc, cur) => acc + cur, 0);\n\t\t\tthis.sliderWrapperWidth > this.sliderListWidth\n\t\t\t\t? this.sliderWrapper.setAttribute('data-position', 'list-centered')\n\t\t\t\t: this.sliderWrapper.setAttribute('data-position', 'list-left');\n\t\t}\n\t}\n\n\tprivate galleryPositionHandlerFullwidth(): void {\n\t\tthis.modalProducGallery = document.querySelector(\n\t\t\t'.uk-modal-full.o-product-gallery-360__modalFullWrapper [data-ref=\"sliderWrapper\"]',\n\t\t) as HTMLDivElement;\n\t\tthis.sliderList2 = document.querySelector('.uk-modal-full.o-product-gallery-360__modalFullWrapper [data-ref=\"sliderList\"]') as HTMLUListElement;\n\t\tif (this.modalProducGallery && this.sliderList2) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.sliderWrapperHeight = this.modalProducGallery.clientHeight;\n\t\t\t\tthis.sliderList2.children.length > 0 &&\n\t\t\t\t\tArray.from(this.sliderList2.children)?.forEach((element) => this.sliderListElements2?.push(element?.clientHeight));\n\t\t\t\tthis.sliderListWidth2 = this.sliderListElements2.reduce((acc, cur) => acc + cur, 0);\n\t\t\t\tthis.sliderWrapperHeight > this.sliderListWidth2\n\t\t\t\t\t? this.modalProducGallery.setAttribute('data-vertical-position', 'list-middle')\n\t\t\t\t\t: this.modalProducGallery.setAttribute('data-vertical-position', 'list-top');\n\t\t\t}, 50);\n\t\t}\n\t}\n}\n","import { AtomButtonProps } from 'wolf/components/atoms/a-button/a-button.data';\nimport { AtomCopyProps } from 'wolf/components/atoms/a-copy/a-copy.data';\nimport { AtomHeadlineProps } from 'wolf/components/atoms/a-headline/a-headline.data';\nimport { Component } from '../../../../global/interfaces/component.interface';\n\nexport interface MoleculeVideoOverlayProps {\n\tlayout?: 0 | 1 | 2 | 3 | 4;\n\t/** The headline */\n\theadline?: AtomHeadlineProps;\n\t/** The subheadline */\n\tsubheadline?: AtomHeadlineProps;\n\t/** The copy text */\n\tcopy?: AtomCopyProps;\n\t/** The button */\n\tbutton?: AtomButtonProps;\n}\n\n// Just a big play button\nexport const MyMoleculeVideoOverlayLayoutDefault: Component = {\n\tdata: {\n\t\t// no props\n\t},\n};\n\n// As seen on the knowledge base (I think)\nexport const MyMoleculeVideoOverlayLayout1: Component = {\n\tdata: {\n\t\tlayout: 1,\n\t\theadline: {\n\t\t\ttext: 'Der Luftreiniger Der Profis',\n\t\t\tstyle: 1,\n\t\t},\n\t\tcopy: {\n\t\t\ttext: '

Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores minima quidem unde vitae reiciendis rerum itaque a aperiam! A, eius. Ab facilis tempora optio dolore mollitia nesciunt eligendi voluptate quos?

',\n\t\t},\n\t},\n};\n\n// As seen on the job portal\nexport const MyMoleculeVideoOverlayLayout2: Component = {\n\tdata: {\n\t\tlayout: 2,\n\t\theadline: {\n\t\t\ttext: 'Folge 1',\n\t\t\tstyle: 5,\n\t\t},\n\t\tsubheadline: {\n\t\t\ttext: 'WOLF Junior Reporter
Unterwegs im Werk in Mainburg',\n\t\t\tstyle: 4,\n\t\t},\n\t\tcopy: {\n\t\t\ttext: '

Mit Gina, Dominik und Jürgen-Anton

',\n\t\t},\n\t},\n};\n\n// As seen on the private pages?\nexport const MyMoleculeVideoOverlayLayout3: Component = {\n\tdata: {\n\t\tlayout: 3,\n\t\theadline: {\n\t\t\ttext: 'Wärmepumpen
Verstehen',\n\t\t\tstyle: 1,\n\t\t},\n\t\tcopy: {\n\t\t\ttext: '

Dieses Video wird sie von den Socken hauen -100%-ige Trennung der Zu– und Ablaufströme. Hocheffiziente Wärmerückgewinnung in Bereichen mit besonders hohen Anforderungen an die Raumluftqualität.

',\n\t\t},\n\t\tbutton: {\n\t\t\thref: 'https://www.google.com',\n\t\t\ttext: 'Call to Action',\n\t\t\ttarget: '_blank',\n\t\t\ttitle: 'Call to action',\n\t\t\ttype: 'primary-blue',\n\t\t},\n\t},\n};\n\n// As seen on the FHW search\nexport const MyMoleculeVideoOverlayLayout4: Component = {\n\tdata: {\n\t\tlayout: 4,\n\t\theadline: {\n\t\t\ttext: 'Fachpartner Headline',\n\t\t\tstyle: 1,\n\t\t},\n\t\tsubheadline: {\n\t\t\ttext: 'Hier eine flotte Subjeadline',\n\t\t\tstyle: 1,\n\t\t},\n\t\tcopy: {\n\t\t\ttext: '

Unternehmen Gmbh, Musterstadt

',\n\t\t},\n\t},\n};\n\n// As seen on the professional pages\nexport const MyMoleculeVideoOverlayLayout5: Component = {\n\tdata: {\n\t\t// no props, no design so just a play button?\n\t},\n};\n","import { MoleculeVideoOverlayProps, MyMoleculeVideoOverlayLayout1 } from 'wolf/components/molecules/m-video-overlay/m-video-overlay.data';\nimport { Component, StyleSettings } from '../../../../global/interfaces/component.interface';\nimport { AtomButtonProps } from '../../atoms/a-button/a-button.data';\nimport { v4 as uuidv4 } from 'uuid';\nimport { AtomImageProps } from 'wolf/components/atoms/a-image/a-image.data';\n\nconst videoPosterImage = require('../../../../global/assets/images/video-poster.jpg') as string;\n\nexport interface VideoData {\n\t/** The youtube video ID */\n\tvideoId: string;\n\t/** Player settings */\n\tsettings: VideoSettings;\n\t/** A placeholder poster image shown before the video is played */\n\tposter: AtomImageProps;\n\t/** A small video thumbnail. Used when the video is in a slideshow */\n\tthumb?: string;\n\t/** This needs to be like a unique uuid. Support for multiple videos of the same videoId on the same page */\n\tinstanceId?: string;\n}\ninterface VideoSettings {\n\t/** If true, the video will begin muted */\n\tmute: boolean;\n\t/** If true, the video controls will be shown */\n\tcontrols: boolean;\n\t/** If true, the video will play on a loop */\n\tloop: boolean;\n}\n/**\n * The cookie overlay\n * @todo - could be a molecule one day?\n */\ninterface CookieContentOverlayProps {\n\t/** The cookie consent headline */\n\theadline: string;\n\t/** The cookie consent message */\n\ttext: string;\n\t/** The button to give cookie consent */\n\tbuttonAccept: AtomButtonProps;\n\t/** If true, the cookie message will not show */\n\talreadyGivenConsent?: boolean;\n}\nexport interface OrganismVideoProps extends StyleSettings {\n\t/** The molecule headline text */\n\t// headline: AtomHeadlineProps;\n\t/** The molecule copy text */\n\t// copy: AtomCopyProps;\n\t/** The button in the text */\n\t// button?: AtomButtonProps;\n\n\toverlay: MoleculeVideoOverlayProps;\n\n\t/** Video consent cookie overlay */\n\tconsent: CookieContentOverlayProps;\n\t/** Main video data */\n\tvideo: VideoData;\n\n\toneTrust?: any;\n}\n\nconst poster = {\n\tsources: [\n\t\t{\n\t\t\tmediaQuery: '(max-width: 1920px)',\n\t\t\timage: 'https://picsum.photos/1920/1024',\n\t\t\twidth: 1920,\n\t\t\theight: 1024,\n\t\t},\n\t\t{\n\t\t\tmediaQuery: '(max-width: 1200px)',\n\t\t\timage: 'https://picsum.photos/1200/600',\n\t\t\twidth: 1200,\n\t\t\theight: 600,\n\t\t},\n\t\t{\n\t\t\tmediaQuery: '(max-width: 768px)',\n\t\t\timage: 'https://picsum.photos/768/480',\n\t\t\twidth: 768,\n\t\t\theight: 480,\n\t\t},\n\t],\n\talt: 'lorem ipsum test',\n\ttitle: 'lorem ipsum',\n\twidth: 1920,\n\theight: 1080,\n};\n\nexport const MyOrganismVideoDefault: Component = {\n\tdata: {\n\t\toverlay: MyMoleculeVideoOverlayLayout1.data,\n\t\tconsent: {\n\t\t\theadline: 'Notice about cookies which must be accepted first',\n\t\t\ttext: '

In order to watch the video you must accept cookies...Lorem ipsum dolor sit amet consectetur adipisicing elit. Explicabo, aspernatur nostrum, ipsam alias unde, vel cumque incidunt eius vitae ratione odio nobis ipsa error sequi harum architecto!

',\n\t\t\tbuttonAccept: {\n\t\t\t\thref: '#accept-consent',\n\t\t\t\ttext: 'Accept and show video',\n\t\t\t\ttitle: '',\n\t\t\t\ttype: 'default-blue',\n\t\t\t},\n\t\t},\n\t\tvideo: {\n\t\t\tinstanceId: uuidv4(),\n\t\t\tvideoId: 'tgdbb87PY9k',\n\t\t\t// videoId: '3x4Kgn-vICY', // YouTube\n\t\t\tsettings: {\n\t\t\t\t// autoplay: false,\n\t\t\t\tmute: false,\n\t\t\t\tcontrols: false,\n\t\t\t\tloop: false,\n\t\t\t},\n\t\t\tposter,\n\t\t},\n\t\tstyleSettings: {\n\t\t\tpaddingStyle: 'standard',\n\t\t\ttextColor: 'true-white',\n\t\t\theadlineColor: 'true-white',\n\t\t\tisEmbedded: true,\n\t\t},\n\t},\n};\n\nexport const MyOrganismVideoStyledContent: Component = {\n\tdata: {\n\t\t...MyOrganismVideoDefault.data,\n\t\t// headline: {\n\t\t// \ttext: 'Der Luftreiniger Der Profis',\n\t\t// \tstyle: 1,\n\t\t// },\n\t\tstyleSettings: {\n\t\t\tpaddingStyle: 'standard',\n\t\t\ttextColor: 'warning', // this comes from SCSS $colors and will color style the copy and play button\n\t\t\theadlineColor: 'danger',\n\t\t\tcopyColor: 'success',\n\t\t\tisEmbedded: true,\n\t\t},\n\t},\n};\n\nconst doesNotRequireConsent = JSON.parse(JSON.stringify(MyOrganismVideoDefault.data)) as OrganismVideoProps;\n// override consent check (shouldn't be used on Prod!)\ndoesNotRequireConsent.consent.alreadyGivenConsent = true;\nexport const MyOrganismVideoDoesNotRequireConsent: Component = {\n\tdata: doesNotRequireConsent,\n};\n","import { MyOrganismVideoDefault, OrganismVideoProps, VideoData } from 'wolf/components/organisms/o-video/o-video.data';\nimport { Component } from '../../../../global/interfaces/component.interface';\nimport { MyMoleculeVideoOverlayLayoutDefault } from '../m-video-overlay/m-video-overlay.data';\nimport { v4 as uuidv4 } from 'uuid';\nimport MyAtomEnergyBadge, { AtomEnergyBadgeProps } from 'wolf/components/atoms/a-energy-badge/a-energy-badge.data';\n\n// type ProductGalleryItemTypes = 'image' | 'video' | '360';\nexport enum ProductGalleryItemTypes {\n\tImage = 'image',\n\tVideo = 'video',\n\tThreeSixty = '360',\n}\n\nexport interface MoleculeProductGalleryProps {\n\t/** List of images, videos and 360 images */\n\tmediaItems: Array;\n\t/** The energy badge shown over the image and 360 slides (not video) */\n\tenergyBadge: AtomEnergyBadgeProps;\n\t/** The zero-indexed item which will be selected on load */\n\tcurrentlySelected?: number;\n\tfullscreen?: boolean;\n}\nconst fake360: IThreeSixtyItem = {\n\ttype: ProductGalleryItemTypes.ThreeSixty,\n\tthumb: 'https://scaleflex.ultrafast.io/https://scaleflex.airstore.io/demo/chair-360-36/chair_1.jpg?v1',\n\tfolder: 'https://scaleflex.ultrafast.io/https://scaleflex.airstore.io/demo/chair-360-36/',\n\tfilenamePattern: 'chair_{index}.jpg?v1',\n\tamountOfImages: 36,\n\tmagnifierZoom: 3,\n};\nconst fake360_2: IThreeSixtyItem = {\n\ttype: ProductGalleryItemTypes.ThreeSixty,\n\tthumb: 'https://test.main-demo.de.wolf.eu/demo-product-images-360/images/03_960x480/cha-1.png',\n\tfolder: 'https://test.main-demo.de.wolf.eu/demo-product-images-360/images/03_960x480/',\n\tfilenamePattern: 'cha-{index}.png',\n\tamountOfImages: 36,\n\tmagnifierZoom: 3,\n\tspinReverse: true,\n\tspeed: 75,\n\tautoplay: true,\n\tkeyboard: true,\n};\n// \n\nconst fakeImage1: IImageItem = {\n\ttype: ProductGalleryItemTypes.Image,\n\t// selected: true,\n\tthumb: 'https://picsum.photos/id/1000/280/244',\n\tlarge: 'https://picsum.photos/id/1000/1024/768',\n\tfull: 'https://picsum.photos/id/1000/2400/1800',\n};\nconst fakeImage2: IImageItem = {\n\ttype: ProductGalleryItemTypes.Image,\n\tthumb: 'https://picsum.photos/id/1047/280/269',\n\tlarge: 'https://picsum.photos/id/1047/1047/801',\n\tfull: 'https://picsum.photos/id/1047/2400/1800',\n};\nconst fakeImage3: IImageItem = {\n\ttype: ProductGalleryItemTypes.Image,\n\t// selected: true,\n\tthumb: 'https://picsum.photos/id/1042/280/251',\n\tlarge: 'https://picsum.photos/id/1042/1024/768',\n\tfull: 'https://picsum.photos/id/1042/2400/1800',\n};\nconst fakeImage4: IImageItem = {\n\ttype: ProductGalleryItemTypes.Image,\n\t// selected: true,\n\tthumb: 'https://picsum.photos/id/1043/292/259',\n\tlarge: 'https://picsum.photos/id/1043/1024/768',\n\tfull: 'https://picsum.photos/id/1043/2400/1800',\n};\nconst fakeImage5: IImageItem = {\n\ttype: ProductGalleryItemTypes.Image,\n\t// selected: true,\n\tthumb: 'https://picsum.photos/id/1044/281/251',\n\tlarge: 'https://picsum.photos/id/1044/1024/768',\n\tfull: 'https://picsum.photos/id/1044/2400/1800',\n};\n\nconst poster = {\n\tsources: [\n\t\t{\n\t\t\tmediaQuery: '(max-width: 1920px)',\n\t\t\timage: 'https://picsum.photos/1920/1024',\n\t\t\twidth: 1920,\n\t\t\theight: 1024,\n\t\t},\n\t\t{\n\t\t\tmediaQuery: '(max-width: 1200px)',\n\t\t\timage: 'https://picsum.photos/1200/600',\n\t\t\twidth: 1200,\n\t\t\theight: 600,\n\t\t},\n\t\t{\n\t\t\tmediaQuery: '(max-width: 768px)',\n\t\t\timage: 'https://picsum.photos/768/480',\n\t\t\twidth: 768,\n\t\t\theight: 480,\n\t\t},\n\t],\n\talt: 'lorem ipsum test',\n\ttitle: 'lorem ipsum',\n\twidth: 1920,\n\theight: 1080,\n};\n\nconst fakeVideo1: IVideoItem = {\n\ttype: ProductGalleryItemTypes.Video,\n\tvideo: {\n\t\toverlay: MyMoleculeVideoOverlayLayoutDefault.data,\n\t\tconsent: MyOrganismVideoDefault.data.consent,\n\t\tvideo: {\n\t\t\tinstanceId: uuidv4(),\n\t\t\tvideoId: 'tgdbb87PY9k',\n\t\t\tsettings: {\n\t\t\t\t// autoplay: false,\n\t\t\t\tmute: false,\n\t\t\t\tcontrols: false,\n\t\t\t\tloop: false,\n\t\t\t},\n\t\t\tposter, //: 'https://picsum.photos/id/1001/1024/768',\n\t\t\tthumb: 'https://picsum.photos/id/1001/140/128',\n\t\t},\n\t},\n};\nexport class ProductGalleryVideoItem implements IVideoItem {\n\ttype: ProductGalleryItemTypes.Video;\n\tvideo: OrganismVideoProps;\n\tconstructor(data: IVideoItem) {\n\t\tif (data) {\n\t\t\tthis.type = data.type;\n\t\t\tthis.video = data.video;\n\t\t\t// set a unique instance ID\n\t\t\tthis.video.video.instanceId = uuidv4();\n\t\t}\n\t}\n}\nconst fakeVideo2: IVideoItem = {\n\ttype: ProductGalleryItemTypes.Video,\n\tvideo: {\n\t\toverlay: MyMoleculeVideoOverlayLayoutDefault.data,\n\t\tconsent: MyOrganismVideoDefault.data.consent,\n\t\tvideo: {\n\t\t\tinstanceId: uuidv4(),\n\t\t\tvideoId: 'RvRhUHTV_8k',\n\t\t\tsettings: {\n\t\t\t\t// autoplay: false,\n\t\t\t\tmute: false,\n\t\t\t\tcontrols: false,\n\t\t\t\tloop: false,\n\t\t\t},\n\t\t\tposter,\n\t\t\tthumb: 'https://picsum.photos/id/1002/140/128',\n\t\t},\n\t},\n};\n\nconst fakeMediaItems: MoleculeProductGalleryProps['mediaItems'] = [\n\tfake360_2,\n\tfakeImage1,\n\tfakeImage2,\n\tfakeImage3,\n\tfakeVideo1,\n\tfakeVideo2,\n\tfake360_2,\n\tfakeImage4,\n\tfakeImage5,\n];\n\nexport const MyMoleculeProductGallery: Component = {\n\tdata: {\n\t\tmediaItems: fakeMediaItems,\n\t\tenergyBadge: MyAtomEnergyBadge.data,\n\t},\n};\n\nexport const MyMoleculeProductGalleryManyItems: Component = {\n\tdata: {\n\t\tmediaItems: [fakeVideo2, ...fakeMediaItems, fakeVideo2, ...fakeMediaItems, fakeVideo2, ...fakeMediaItems],\n\t\tenergyBadge: MyAtomEnergyBadge.data,\n\t},\n};\n\nexport const MyMoleculeProductGalleryFewItems: Component = {\n\tdata: {\n\t\tmediaItems: [...fakeMediaItems.slice(0, 2)],\n\t\tenergyBadge: MyAtomEnergyBadge.data,\n\t},\n};\n\nexport const MyMoleculeProductGallerySelectedIndex: Component = {\n\tdata: {\n\t\t...MyMoleculeProductGallery.data,\n\t\tcurrentlySelected: 1,\n\t},\n};\n\nexport const MyMoleculeProductGalleryFullScreen: Component = {\n\tdata: {\n\t\t...MyMoleculeProductGallery.data,\n\t\tfullscreen: true,\n\t},\n};\n\ninterface MediaItem {\n\t/** Which type the media is */\n\ttype: ProductGalleryItemTypes;\n\t/** If true, the item will show as the actively selected one. If no active one's, the first is active by default */\n\t// selected?: boolean;\n}\ninterface IImageItem extends MediaItem {\n\ttype: ProductGalleryItemTypes.Image;\n\t/** The thumb should be no less than 280px */\n\tthumb: string;\n\tlarge: string;\n\tfull: string;\n}\ninterface IVideoItem extends MediaItem {\n\ttype: ProductGalleryItemTypes.Video;\n\t// video: VideoData;\n\tvideo: OrganismVideoProps;\n}\n\n/** @demo https://codesandbox.io/s/6479n17j73?fontsize=14&module=/index.html&file=/index.html:529-1006 */\ninterface IThreeSixtyItem extends MediaItem {\n\ttype: ProductGalleryItemTypes.ThreeSixty;\n\tthumb: string;\n\t/**\n\t * The folder where the images are stored\n\t * Note: if the images have non-patternized filenames, use this:\n\t * @link https://github.com/scaleflex/js-cloudimage-360-view#data-image-list-or-image-list\n\t * @link https://github.com/scaleflex/js-cloudimage-360-view#table-of-contents\n\t */\n\tfolder: string;\n\tfilenamePattern: string;\n\tamountOfImages: number;\n\tmagnifierZoom: number;\n\tspinReverse?: boolean;\n\tspeed?: number;\n\tautoplay?: boolean;\n\tkeyboard?: boolean;\n}\n","import { Component } from '../../../../global/interfaces/component.interface';\n\nexport interface AtomEnergyBadgeProps {\n\t/* Array:\n label: Label for the Badge\n type: Icon for the selected Badge \n */\n\tenergyClasses: {\n\t\tlabel: 'A+++' | 'A++' | 'A+' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G';\n\t\ttype?: 'water' | 'heating' | 'solar';\n\t}[];\n}\n\nexport const MyAtomEnergyBadge: Component = {\n\tdata: {\n\t\tenergyClasses: [\n\t\t\t{\n\t\t\t\tlabel: 'A+++',\n\t\t\t\ttype: 'heating',\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tlabel: 'B',\n\t\t\t\ttype: 'water',\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tlabel: 'C',\n\t\t\t\ttype: 'solar',\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tlabel: 'G',\n\t\t\t},\n\t\t],\n\t},\n};\n// a-energy-badge\nexport default MyAtomEnergyBadge;\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'MoleculeProductGalleryEvents__';\n\n/** The type of custom events emitted */\nexport type MoleculeProductGalleryEventTypes = {\n\tthumbnailChanged: number;\n};\n\n/** The event names for the above events */\nexport const MoleculeProductGalleryEvents: ComponentEvents = {\n\t/** Event emitted when a thumbnail is selected */\n\tthumbnailChanged: EVENT_PREFIX + 'ThumbnailChanged',\n};\n","import { AtomPlayButtonEvents } from 'wolf/components/atoms/a-play-button/a-play-button.events';\nimport ControllerBase from './../../../../global/js/ControllerBase';\nimport { MoleculeVideoOverlayEvents, MoleculeVideoOverlayEventTypes } from './m-video-overlay.events';\n\ninterface ComponentRefs {\n\tplayButtonWrapper: 'playButtonWrapper';\n}\n\nexport default class ControllerVideoOverlay extends ControllerBase {\n\tprivate playButtonWrapper: HTMLDivElement;\n\tprivate playButton: HTMLButtonElement | null;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], [], true);\n\n\t\t// this.playButtonWrapper = this.$references.playButtonWrapper as HTMLDivElement;\n\t\tconst ref: ComponentRefs['playButtonWrapper'] = 'playButtonWrapper';\n\t\tconst exists = Array.from(this.$element.querySelectorAll('div[data-ref=' + ref + ']'));\n\t\tif (exists.length === 0) return;\n\n\t\tthis.playButtonWrapper = exists[0];\n\n\t\tif (this.playButtonWrapper) {\n\t\t\t// find play button and lister for clicks\n\t\t\tconst button = this.playButtonWrapper.querySelector<'button'>('button');\n\t\t\tthis.playButton = button;\n\t\t\tthis.observePlayButtonClick();\n\t\t}\n\t}\n\n\tprivate observePlayButtonClick(): void {\n\t\tthis.playButton &&\n\t\t\tthis.playButton.addEventListener(AtomPlayButtonEvents.playButtonClicked, (event) => {\n\t\t\t\tthis.dispatchCustomEvent(\n\t\t\t\t\t// play button was clicked in the atom\n\t\t\t\t\tMoleculeVideoOverlayEvents.playButtonClicked,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\t}\n}\n","import { ComponentEvents } from 'global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'MoleculeVideoOverlayEvents__';\n\n/** The type of custom events emitted */\nexport type MoleculeVideoOverlayEventTypes = {\n\tplayButtonClicked: true;\n};\n\nexport const MoleculeVideoOverlayEvents: ComponentEvents = {\n\t/** The custom event emitted when the button is clicked */\n\tplayButtonClicked: EVENT_PREFIX + 'buttonClicked',\n};\n","import { MoleculeFormStepResumeSliceProps } from 'wolf/components/molecules/m-formstep-resume-slice/m-formstep-resume-slice.data';\nimport { FormstepWarrantyStep2Events } from 'wolf/components/molecules/m-formstep-warranty-step-2/m-formstep-warranty-step-2.events';\nimport { FormstepWarrantyStep3Events } from 'wolf/components/molecules/m-formstep-warranty-step-3/m-formstep-warranty-step-3.events';\nimport { FormstepWarrantyWolfProductsEvents } from 'wolf/components/molecules/m-formstep-warranty-wolf-products/m-formstep-warranty-wolf-products.events';\nimport { ComponentEvents } from '../../../../global/interfaces/component.interface';\nimport { FormstepSelectImageEvents } from '../../molecules/m-formstep-select-image/m-formstep-select-image.events';\nimport { FormstepSelectIconEvents } from '../../molecules/m-formstep-select-icon/m-formstep-select-icon.events';\n\n/**\n * Support for differentiating between the type of successful\n * validation events triggered by FE or BE validation events\n * Note: treat as bitwise flags so we can set them!\n */\nexport enum FormStepperValidationEventClientServerEnum {\n\t/** Events carried out on the client, in the frontend controllers */\n\tFrontend = 1,\n\t/** Events carried out on the backend API */\n\tBackend = 2,\n\t// Another = 4,\n}\n\nexport interface FormStepperValidationEvent {\n\tonValidationSuccess: (validationLocation?: FormStepperValidationEventClientServerEnum, resumeSlice?: MoleculeFormStepResumeSliceProps) => void;\n\tonValidationError: (validationLocation?: FormStepperValidationEventClientServerEnum) => void;\n\tcurrentStep: number;\n}\n\nconst EVENT_PREFIX = 'FormStepperEvents__';\n\n/** The type of custom events emitted in event.detail */\nexport type OrganismFormStepperEventTypes = {\n\tDISABLE_GO_TO_NEXT_STEP: boolean;\n\tENABLE_GO_TO_NEXT_STEP: boolean;\n\tRECEIVE_RESUME_SLICE: ResumeSliceSummary[];\n\tREQUEST_GO_TO_STEP: number;\n\tRECEIVE_CONTROLLED_FORM_SLICE: ControlledFormSlice;\n\tREMOVE_CONTROLLED_FORM_SLICE: ControlledFormSlice;\n\tFORM_DATA_CHANGED_BY_STEP: number;\n\tRESET_VALIDATION_SCORE_BY_STEP: number;\n};\n\n/** The event names for the above events */\nexport const OrganismFormStepperEvents: ComponentEvents = {\n\t/** If true, the 'next step' button is disabled */\n\tDISABLE_GO_TO_NEXT_STEP: EVENT_PREFIX + 'DisableNextStep',\n\tENABLE_GO_TO_NEXT_STEP: EVENT_PREFIX + 'EnableNextStep',\n\tRECEIVE_RESUME_SLICE: EVENT_PREFIX + 'ReceiveResumeSlice',\n\tREQUEST_GO_TO_STEP: EVENT_PREFIX + 'RequestGoToStep',\n\tRECEIVE_CONTROLLED_FORM_SLICE: EVENT_PREFIX + 'ReceiveControlledFormSlice',\n\tREMOVE_CONTROLLED_FORM_SLICE: EVENT_PREFIX + 'RemoveControlledFormSlice',\n\tFORM_DATA_CHANGED_BY_STEP: EVENT_PREFIX + 'FormDataChangedByStep',\n\tRESET_VALIDATION_SCORE_BY_STEP: EVENT_PREFIX + 'ResetValidationScoreByStep',\n};\n\nexport interface ResumeSliceSummary {\n\tstep: number;\n\tresumeSlices: MoleculeFormStepResumeSliceProps[];\n}\n\nexport interface ControlledFormSlice {\n\tstepId: string;\n\tformSlice: Record;\n}\n\nexport type ValidationClientsideEventController =\n\t| 'm-formstep-warranty-wolf-products'\n\t| 'm-formstep-warranty-step-2'\n\t| 'm-formstep-warranty-step-3'\n\t| 'm-formstep-select-image'\n\t| 'm-formstep-select-icon';\n\nexport const ValidationEventMapper: Record = {\n\t'm-formstep-warranty-wolf-products': FormstepWarrantyWolfProductsEvents.REQUEST_VALIDATION,\n\t'm-formstep-warranty-step-2': FormstepWarrantyStep2Events.REQUEST_VALIDATION,\n\t'm-formstep-warranty-step-3': FormstepWarrantyStep3Events.REQUEST_VALIDATION,\n\t'm-formstep-select-image': FormstepSelectImageEvents.REQUEST_VALIDATION,\n\t'm-formstep-select-icon': FormstepSelectIconEvents.REQUEST_VALIDATION,\n};\n","import ControllerBase from '../../../../global/js/ControllerBase';\n\ninterface ComponentRefs {\n\tloadButton: 'loadButton';\n}\nexport default class ControllerGridContainer extends ControllerBase {\n\tprivate button: HTMLAnchorElement;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\t\tthis.button = this.$references.loadButton as HTMLAnchorElement;\n\n\t\tthis.displayAllElements();\n\n\t\tthis.paginationHandler();\n\t}\n\n\tprivate displayAllElements(): void {\n\t\tthis.button &&\n\t\t\tthis.button.addEventListener('click', (e) => {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst loadElement = this.button.parentElement?.dataset.identifierLoad;\n\n\t\t\t\tconst hiddenItems = this.$element.querySelectorAll(\n\t\t\t\t\t`.o-gridcontainer[data-identifier-load=\"${loadElement}\"] .o-grid-container__gridElement,uk-hidden`,\n\t\t\t\t);\n\n\t\t\t\thiddenItems &&\n\t\t\t\t\thiddenItems.forEach((e) => {\n\t\t\t\t\t\te.classList.remove('uk-hidden');\n\t\t\t\t\t});\n\n\t\t\t\tthis.button.classList.add('uk-hidden');\n\t\t\t});\n\t}\n\n\tprivate paginationHandler(): void {\n\t\tconst pagination = document.querySelectorAll('.uk-pagination li a');\n\t\tlet elementToGo = '0';\n\n\t\tpagination.forEach((element) => {\n\t\t\telement?.addEventListener('click', (e) => {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst clickedPag = (e.target).getAttribute('href')?.split('-')[1];\n\t\t\t\tconst currentElement = (document.querySelector('.o-grid-container .o-gridcontainer > div:not(.uk-hidden)')).getAttribute(\n\t\t\t\t\t'pagindex',\n\t\t\t\t);\n\n\t\t\t\tif (clickedPag != 'prev' && clickedPag != 'next') {\n\t\t\t\t\t//Updatge content\n\t\t\t\t\tdocument.querySelectorAll('.o-grid-container .o-gridcontainer > div').forEach((gridElement) => {\n\t\t\t\t\t\tif ((gridElement).getAttribute('pagindex') == clickedPag) {\n\t\t\t\t\t\t\t(gridElement).classList.remove('uk-hidden');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t(gridElement).classList.add('uk-hidden');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t//Update navigation active\n\t\t\t\t\tdocument.querySelectorAll('.uk-pagination li a').forEach((activeElement) => {\n\t\t\t\t\t\tif ((activeElement).getAttribute('href') == (e.target).getAttribute('href')) {\n\t\t\t\t\t\t\t(activeElement).parentElement?.classList.add('uk-active');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t(activeElement).parentElement?.classList.remove('uk-active');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (clickedPag == 'prev') {\n\t\t\t\t\t\tif (currentElement != '1') {\n\t\t\t\t\t\t\tif (currentElement) {\n\t\t\t\t\t\t\t\telementToGo = (parseInt(currentElement) - 1).toString();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcurrentElement != (document.querySelector('.o-grid-container .o-gridcontainer > div:last-child')).getAttribute('pagindex')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (currentElement) {\n\t\t\t\t\t\t\t\telementToGo = (parseInt(currentElement) + 1).toString();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//Update content\n\t\t\t\t\tdocument.querySelectorAll('.o-grid-container .o-gridcontainer > div').forEach((gridElement) => {\n\t\t\t\t\t\tif ((gridElement).getAttribute('pagindex') == elementToGo) {\n\t\t\t\t\t\t\t(gridElement).classList.remove('uk-hidden');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t(gridElement).classList.add('uk-hidden');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t//Update navigation active\n\t\t\t\t\tdocument.querySelectorAll('.uk-pagination li a').forEach((activeElement) => {\n\t\t\t\t\t\tif ((activeElement).getAttribute('href') == '#pag-' + elementToGo) {\n\t\t\t\t\t\t\t(activeElement).parentElement?.classList.add('uk-active');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t(activeElement).parentElement?.classList.remove('uk-active');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n","import ControllerBase from '../../../../global/js/ControllerBase';\n\ninterface ComponentRefs {\n\tscrollLeft: 'scrollLeft';\n\tscrollRight: 'scrollRight';\n}\nexport default class ControllerTeaserGrid extends ControllerBase {\n\tprivate readonly scrollLeftButton: HTMLSpanElement;\n\tprivate readonly scrollRightButton: HTMLSpanElement;\n\tprivate minHeight: number = 0;\n\n\tprivate static componentRefs: ComponentRefs = {\n\t\tscrollLeft: 'scrollLeft',\n\t\tscrollRight: 'scrollRight',\n\t};\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerTeaserGrid.componentRefs));\n\t\tthis.scrollLeftButton = this.$references.scrollLeft as HTMLSpanElement;\n\t\tthis.scrollRightButton = this.$references.scrollRight as HTMLSpanElement;\n\n\t\tthis.scrollLeftButton && this.scrollLeftButton.addEventListener('click', (e) => this.handleArrowClick(e, 'left'));\n\t\tthis.scrollRightButton && this.scrollRightButton.addEventListener('click', (e) => this.handleArrowClick(e, 'right'));\n\t\tthis.readMoreEvents();\n\t}\n\n\t/**\n\t * Depending the scroll position change the class to disable the arrow\n\t */\n\tprivate handleArrowClick(e: MouseEvent | PointerEvent, direction: string): void {\n\t\te.preventDefault();\n\n\t\tconst teaserWidth = 236;\n\n\t\t// Container that will scroll\n\t\tconst elementToScroll = this.$element.querySelector('.o-gridcontainer.js-grid-container');\n\n\t\tif (!elementToScroll) return;\n\n\t\tlet newPosition: number | null = elementToScroll.scrollLeft;\n\n\t\tif (direction === 'right') {\n\t\t\tnewPosition += teaserWidth;\n\t\t} else {\n\t\t\tnewPosition -= teaserWidth;\n\t\t}\n\n\t\tconst canScrollLeft = newPosition > 0;\n\t\tconst canScrollRight = newPosition + elementToScroll.clientWidth <= elementToScroll.scrollWidth;\n\n\t\tthis.scrollLeftButton.removeAttribute('disabled');\n\t\tthis.scrollRightButton.removeAttribute('disabled');\n\n\t\tif (!canScrollLeft) {\n\t\t\tthis.scrollLeftButton.setAttribute('disabled', '');\n\t\t}\n\t\tif (!canScrollRight) {\n\t\t\tthis.scrollRightButton.setAttribute('disabled', '');\n\t\t}\n\n\t\tnewPosition && elementToScroll.scrollTo(newPosition, 0);\n\t}\n\n\tprivate readMoreEvents(): void {\n\t\tconst parentElement = this.$element.querySelectorAll('.js-read-more');\n\t\tconst readMoreItems = this.$element.querySelectorAll('.js-read-more-child');\n\n\t\tparentElement.forEach((parent) => {\n\t\t\tconst elements = parent.querySelectorAll('.readMore-element .js-read-more-link');\n\t\t\telements.forEach((element) => {\n\t\t\t\tconsole.log(element);\n\n\t\t\t\telement?.addEventListener('click', (e) => {\n\t\t\t\t\telement.parentElement?.classList.add('open');\n\t\t\t\t\tthis.setHeight(readMoreItems);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate setHeight(items) {\n\t\titems.forEach((child) => {\n\t\t\tconst currentHeight = child.clientHeight;\n\t\t\tif (currentHeight > this.minHeight) {\n\t\t\t\tthis.minHeight = currentHeight;\n\t\t\t}\n\t\t});\n\n\t\titems.forEach((ch: HTMLDivElement) => {\n\t\t\tch.style.minHeight = this.minHeight + 'px';\n\t\t});\n\t}\n}\n","/**\n * OneTrust cookie service\n * @link https://www.onetrust.com/products/cookie-consent/\n */\nexport const OneTrustService: IOneTrustService = {\n\t// OnetrustActiveGroups: ',C0001,C0002,C0003,C0004,',\n\tToggleInfoDisplay: (): any => {\n\t\tconst _w = window as any;\n\t\tif (Object.prototype.hasOwnProperty.call(_w, 'OneTrust')) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(_w.OneTrust, 'ToggleInfoDisplay')) {\n\t\t\t\t_w.OneTrust.ToggleInfoDisplay();\n\t\t\t}\n\t\t}\n\t},\n\n\tOnConsentChanged: (e: any): any => {\n\t\t//return e;\n\t\tthrow new Error('Implement/override me in the component');\n\t},\n\n\t// hasGivenConsent(consentLevel: 'C0001'|'C0002'|'C0003'|'C0004'): boolean {\n\t// \tlet data: string[] = [];\n\t// \tif ((window as any).OnetrustActiveGroups) {\n\t// \t\tdata = (window as any).OnetrustActiveGroups.split(',');\n\t// \t}\n\t// \treturn consentLevel in data;\n\t// }\n\thasGivenConsent(): boolean {\n\t\tlet data: string[] = [];\n\t\tconst _w = window as any;\n\t\tif (_w && _w.OnetrustActiveGroups) {\n\t\t\tdata = _w.OnetrustActiveGroups.split(',');\n\t\t}\n\t\treturn data.indexOf('C0004') > -1;\n\t},\n\n\tGetDomainData(): OneTrustDomainData {\n\t\tconst data = [\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0002',\n\t\t\t\tPurposeId: 'XXXXXXXX-34B8-4A75-89D8-7BB3216F59D5',\n\t\t\t\tCustomGroupId: 'C0002',\n\t\t\t\tGroupId: '6c8a0b3c-4084-463d-a1ca-7734ce435047',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0003',\n\t\t\t\tPurposeId: 'XXXXXXXX-3A04-4FE7-8398-DBCB703A0DFB',\n\t\t\t\tCustomGroupId: 'C0003',\n\t\t\t\tGroupId: '486a5448-5ed1-41b9-928b-451ca2aa7d16',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0005',\n\t\t\t\tPurposeId: 'XXXXXXXX-B3C5-4331-B2A0-C43D713C9DD4',\n\t\t\t\tCustomGroupId: 'C0005',\n\t\t\t\tGroupId: 'ca46bf1f-69c9-4e9d-bb94-d5913e6bdaf5',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0004',\n\t\t\t\tPurposeId: 'XXXXXXXX-3A0E-40CE-9793-8C316662E14D',\n\t\t\t\tCustomGroupId: 'C0004',\n\t\t\t\tGroupId: '63fc57e8-4c97-4828-a9c6-bf0cb5e66c85',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0001',\n\t\t\t\tPurposeId: 'XXXXXXXX-44DA-405C-91B8-485C58EA9165',\n\t\t\t\tCustomGroupId: 'C0001',\n\t\t\t\tGroupId: 'db8b7d34-8503-48ac-9cd5-2dba23c138c1',\n\t\t\t\tStatus: 'always active',\n\t\t\t},\n\t\t];\n\t\treturn {\n\t\t\tGroups: data,\n\t\t};\n\t},\n\tsetConsentProfile(options: ContentProfileOptions): void {\n\t\tconst _w = window as any;\n\t\tif (options && options.purposes && options.purposes.length > 0) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(_w, 'OneTrust')) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(_w.OneTrust, 'UpdateConsent')) {\n\t\t\t\t\t// call one trust hook for enabling consent for cookie category C0004\n\t\t\t\t\t_w.OneTrust.UpdateConsent('Category', 'C0004:1');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n};\n\ninterface OneTrustGroups {\n\t/** The group ID, like \"C0002\" */\n\tCustomGroupId: string;\n\t/** like \"C0DFCC30-34B8-4A75-89D8-7BB3216F59D5\" */\n\tPurposeId: string;\n\t// ...loads more props here\n}\nexport interface OneTrustDomainData {\n\tGroups: OneTrustGroups[];\n\t// ...\n}\ninterface ContentProfileOptions {\n\tpurposes: {\n\t\tId: string;\n\t\tTransactionType: 'CONFIRMED'; // or others\n\t}[];\n}\n// to see the one trust API in the window, just open a live website and in the console type:\n// OneTrust.\n// and you will see the methods/props available\n// The below is just for Storybook so components can call external OneTrust window methods, which exist in on live but not on local\nexport interface IOneTrustService {\n\t// OnetrustActiveGroups: string;\n\tToggleInfoDisplay: () => any;\n\tOnConsentChanged: (e: any) => any;\n\thasGivenConsent: () => any;\n\tGetDomainData: () => OneTrustDomainData | undefined;\n\tsetConsentProfile: (options: ContentProfileOptions) => any;\n\t// ...\n}\n","import ControllerBase from './../../../../global/js/ControllerBase';\nimport { YouTubePlayer as YouTubePlayerPlayer, Options } from 'youtube-player/dist/types';\nimport { VideoData } from './o-video.data';\n\n// see https://github.com/gajus/youtube-player/blob/879eab4ac23ff12509cbfc1363d4c3cd138a1d03/examples/src/youtube-player.js\nimport YouTubePlayer from 'youtube-player';\nimport PlayerStates from 'youtube-player/dist/constants/PlayerStates';\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IOneTrustService, OneTrustDomainData, OneTrustService } from './o-video.cookieservice';\nimport { MoleculeVideoOverlayEvents, MoleculeVideoOverlayEventTypes } from 'wolf/components/molecules/m-video-overlay/m-video-overlay.events';\nimport { OrganismVideoEvents, OrganismVideoEventTypes } from './o-video.events';\nimport { ControllerUnmount } from 'global/interfaces/controller.interface';\nglobal ? (global['YouTubePlayer'] = YouTubePlayer) : undefined;\n\ninterface ComponentRefs {\n\tposterContainer: 'posterContainer';\n\tloadingOverlay: 'loadingOverlay';\n\tplayerContainer: 'playerContainer';\n\tbrickOverlay: 'brickOverlay';\n\tcookieOverlay: 'cookieOverlay';\n\tcookieButtonWrapper: 'cookieButtonWrapper';\n}\n/**\n * Youtube video player using the Youtube IFrame Player API\n * @url https://yarnpkg.com/package/youtube-player#examples\n * @types youtube-player\n * @example https://github.com/gajus/youtube-player/blob/879eab4ac23ff12509cbfc1363d4c3cd138a1d03/examples/src/playing-video/index.html\n *\n * OneTrust Cookie handling\n * 1. Check if 'C0004' exists in the window.OnetrustActiveGroups\n * 2a. If it does, initialize the video as normal (scripts load and user will see play button).\n * 2b. If it does not, show our custom overlay about cookies.\n * 3. When the user clicks our overlay button, toggle the OneTrust overlay: OneTrust.ToggleInfoDisplay()\n * 4. Listen for: OneTrust.OnConsentChanged callback. When the user accepts the cookies, hide the OneTrust overlay and load the video (like in 2a).\n */\nexport default class ControllerVideo extends ControllerBase implements ControllerUnmount {\n\tprivate static componentRefs: ComponentRefs = {\n\t\tposterContainer: 'posterContainer',\n\t\tloadingOverlay: 'loadingOverlay',\n\t\tplayerContainer: 'playerContainer',\n\t\tbrickOverlay: 'brickOverlay',\n\t\tcookieOverlay: 'cookieOverlay',\n\t\tcookieButtonWrapper: 'cookieButtonWrapper',\n\t};\n\n\t/** The container with poster bg, play and loading */\n\tprivate posterContainer: HTMLDivElement;\n\t/** The loading spinner */\n\tprivate loadingOverlay: HTMLDivElement;\n\t/** The main youtube video container */\n\tprivate playerContainer: HTMLDivElement;\n\t/** The custom design overlay for the feature */\n\tprivate brickOverlay: HTMLDivElement;\n\t/** The overlay which shows so user can consent to cookies */\n\tprivate cookieOverlay: HTMLDivElement;\n\t/** The cookie button wrapper */\n\tprivate cookieButtonWrapper: HTMLDivElement;\n\t/** The cookie button (for clicks to accept cookies) */\n\tprivate cookieButton: HTMLAnchorElement | HTMLButtonElement | undefined = undefined;\n\t/** The main player element */\n\tprivate runningInit: boolean;\n\n\tprivate globalVideoObject = 'ControllerVideo__videosList';\n\tprivate player: YouTubePlayerPlayer | undefined;\n\tprivate playerInstanceId: BehaviorSubject;\n\tprivate playerReady: BehaviorSubject;\n\t/** Event fired when this script has been injected into the page: https://www.youtube.com/iframe_api */\n\tprivate youtubeScriptLoaded: BehaviorSubject;\n\n\tprivate youtubeIframeApiReady: BehaviorSubject;\n\n\t/** The external video data */\n\tprivate readonly video: VideoData;\n\n\t/** Bypasses the need to consent to cookies */\n\tprivate cookieConsentBypass = false;\n\n\t/** Subscription management for cookie button click */\n\tprivate unsubscribeCookieClick: Subject;\n\n\t/** Subscription management */\n\tprivate _unsubscribeAll: Subject;\n\n\toneTrustService: IOneTrustService;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerVideo.componentRefs), true);\n\n\t\tthis.unsubscribeCookieClick = new Subject();\n\n\t\tthis.playerReady = new BehaviorSubject(false);\n\t\tthis.playerInstanceId = new BehaviorSubject('');\n\t\tthis.youtubeScriptLoaded = new BehaviorSubject(false);\n\t\tthis.youtubeIframeApiReady = new BehaviorSubject('');\n\t\tthis.runningInit = false;\n\n\t\t// this.playerInstanceId.next((1000 * Math.random()).toString().replace('.', ''));\n\n\t\t// handle subscriptions\n\t\tthis._unsubscribeAll = new Subject();\n\n\t\tthis.handleVideoPlayerReady = this.handleVideoPlayerReady.bind(this);\n\t\tthis.createNewPlayer = this.createNewPlayer.bind(this);\n\n\t\tthis.manuallyGetRefs();\n\n\t\t// check cookie consent status from data\n\t\tthis.cookieConsentBypass = Object.prototype.hasOwnProperty.call(this.$element.dataset, 'consent');\n\t\t//? this.$element.dataset.consent === 'true'\n\t\t//: false;\n\n\t\t// get video data from elem data attrib\n\t\tconst data = this.$element.dataset?.video || '';\n\t\tif (data) {\n\t\t\tthis.video = JSON.parse(this.$element.dataset?.video || '');\n\n\t\t\tconst _window = window as any;\n\n\t\t\tif (this.video.videoId) {\n\t\t\t\tif (_window.OneTrust) {\n\t\t\t\t\tthis.tryToInitVideo();\n\t\t\t\t} else {\n\t\t\t\t\twindow.addEventListener('load', (e) => {\n\t\t\t\t\t\tlet i = 0;\n\n\t\t\t\t\t\tconst refreshId = setInterval(() => {\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\tif (_window.OneTrust) {\n\t\t\t\t\t\t\t\tthis.tryToInitVideo();\n\t\t\t\t\t\t\t\tclearInterval(refreshId);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (i > 90) {\n\t\t\t\t\t\t\t\tclearInterval(refreshId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate tryToInitVideo(): void {\n\t\t// store the player instance as a unique ref to the video\n\t\tthis.playerInstanceId.next(this.video.videoId);\n\t\tthis.setPlayerEvents();\n\t\tthis.setCookieListeners();\n\t\t// observe pause-all/stop-all events (so external components can tell the video to stop)\n\t\tthis.observeExternalVideoEvents();\n\t\tthis.init();\n\t}\n\n\tprivate manuallyGetRefs(): void {\n\t\tfor (const key in ControllerVideo.componentRefs) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(ControllerVideo.componentRefs, key)) {\n\t\t\t\tconst ref = ControllerVideo.componentRefs[key];\n\t\t\t\tconst test = Array.from(this.$element.querySelectorAll('div[data-ref=' + ref + ']'));\n\t\t\t\tif (test.length > 0) {\n\t\t\t\t\tthis[ref] = test[0];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.cookieButtonWrapper) {\n\t\t\tconst cookieButtons = this.cookieButtonWrapper.querySelectorAll('.o-video .a-button');\n\t\t\tif (cookieButtons.length === 1) {\n\t\t\t\tthis.cookieButton = cookieButtons[0];\n\t\t\t}\n\t\t}\n\n\t\t// const _playerContainers = Array.from(this.$element.querySelectorAll('div[data-ref=' + ControllerVideo.componentRefs.playerContainer + ']'));\n\t\t// const playerContainer = _playerContainers.length > 0 ? _playerContainers[0] : undefined;\n\t\t// if (playerContainer) {\n\t\t// \tthis.playerContainer = playerContainer;\n\t\t// }\n\n\t\t// const _posterContainer = Array.from(this.$element.querySelectorAll('div[data-ref=' + ControllerVideo.componentRefs.posterContainer + ']'));\n\t\t// const posterContainer = _posterContainer.length > 0 ? _posterContainer[0] : undefined;\n\t\t// if (posterContainer) {\n\t\t// \tthis.posterContainer = posterContainer;\n\t\t// }\n\n\t\t// this.posterContainer = this.$references.posterContainer as HTMLDivElement;\n\t\t// this.loadingOverlay = this.$references.loadingOverlay as HTMLDivElement;\n\n\t\t// // this.playerContainer = this.$references.playerContainer as HTMLDivElement;\n\n\t\t// this.brickOverlay = this.$references.brickOverlay as HTMLDivElement;\n\t\t// this.cookieOverlay = this.$references.cookieOverlay as HTMLDivElement;\n\t\t// this.cookieButtonWrapper = this.$references.cookieButtonWrapper as HTMLDivElement;\n\t\t// if (this.cookieButtonWrapper) {\n\t\t// \tconst cookieButtons = this.cookieButtonWrapper.querySelectorAll<'a'>('a');\n\t\t// \tcookieButtons.length === 1 ? this.cookieButton = cookieButtons[0] : undefined;\n\t\t// }\n\t}\n\n\tprivate getVideoContainerName(videoId: VideoData['videoId'], instanceId: VideoData['instanceId']): string {\n\t\treturn ['video', videoId, instanceId || ''].join('_');\n\t}\n\n\tprivate setPlayerEvents(): void {\n\t\tfromEvent(window, OrganismVideoEvents.iframeAPIReady)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\tif (e && e.detail) {\n\t\t\t\t\tconst videosList: Record = (window as any)[this.globalVideoObject] || {};\n\t\t\t\t\t// load videos which are not there yet for this video ID only\n\t\t\t\t\tconst id = this.video.videoId;\n\t\t\t\t\tconst instanceId = this.video.instanceId || '';\n\t\t\t\t\tfor (const videoId in videosList) {\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(videosList, videoId)) {\n\t\t\t\t\t\t\tconst videoContainerName = this.getVideoContainerName(videoId, instanceId);\n\t\t\t\t\t\t\tconst videoContainer = document.getElementById(videoContainerName) as HTMLDivElement;\n\t\t\t\t\t\t\tif (videoContainer && videoContainer.children.length === 0 && videoId === id) {\n\t\t\t\t\t\t\t\t// console.log('loading video', videoId);\n\t\t\t\t\t\t\t\tthis.initVideoPlayer(videoContainer, (window as any)[this.globalVideoObject][videoId]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// console.log('load video?', this.playerInstanceId.getValue());\n\t\t\t\t\t// console.log(window[this.globalVideoObject]);\n\n\t\t\t\t\t// build video iframes\n\t\t\t\t\t// ID = \"video_RvRhUHTV_8k\";\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.youtubeScriptLoaded.pipe(takeUntil(this._unsubscribeAll)).subscribe((hasLoaded) => {\n\t\t\tif (hasLoaded) {\n\t\t\t\t// console.log('youtube script loaded');\n\t\t\t\t// this.handleVideoPlayerReady();\n\t\t\t}\n\t\t});\n\n\t\tthis.youtubeIframeApiReady.pipe(takeUntil(this._unsubscribeAll)).subscribe((isReady) => {\n\t\t\tif (isReady) {\n\t\t\t\t// console.log('onYouTubeIframeAPIReady iframe API is ready');\n\t\t\t\t// this.initVideoPlayer();\n\t\t\t}\n\t\t});\n\n\t\tthis.playerReady.pipe(takeUntil(this._unsubscribeAll)).subscribe((isReady) => {\n\t\t\tif (isReady) {\n\t\t\t\t// this.initVideoPlayer();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate setCookieListeners(): void {\n\t\tconst _window = window as any;\n\n\t\t// map global service API to local scoped functions\n\t\tif (OneTrustService) {\n\t\t\t// register service\n\t\t\tthis.oneTrustService = OneTrustService;\n\t\t\t// register callback for consent\n\n\t\t\tthis.oneTrustService.OnConsentChanged = (e) => this.consentChanged(e);\n\n\t\t\t// register callback for display\n\t\t\tthis.oneTrustService.ToggleInfoDisplay = () => this.toggleOneTrustOverlay();\n\t\t\tOneTrustService.OnConsentChanged = (e: any) => this.consentChanged(e);\n\n\t\t\tthis.oneTrustService.GetDomainData = () => this.getDomainData();\n\t\t}\n\n\t\t//override the window function for OnConsentChanged. This will be from Storybook or from OneTrust, depending on the env\n\t\tif (_window.OneTrust) {\n\t\t\t_window.OneTrust.OnConsentChanged((e) => {\n\t\t\t\tthis.consentChanged(e);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the user has given cookie consent\n\t * @tbc (Currently set from external data)\n\t * @returns boolean\n\t */\n\tprivate hasGivenCookieConsent = (): boolean => OneTrustService.hasGivenConsent();\n\n\t/**\n\t * Toggle the one trust overlay\n\t * @returns void\n\t */\n\tprivate toggleOneTrustOverlay(): void {\n\t\t// this comes from storybook preview-body.html scripts or live\n\t\twindow && (window as any).OneTrust && (window as any).OneTrust.ToggleInfoDisplay();\n\t}\n\n\tprivate getDomainData(): OneTrustDomainData | undefined {\n\t\tlet data: OneTrustDomainData | undefined = undefined;\n\t\tif (window && (window as any).OneTrust) {\n\t\t\tdata = (window as any).OneTrust.GetDomainData();\n\t\t}\n\t\treturn data;\n\t}\n\n\tprivate setConsentProfile(e: any): void {\n\t\twindow && (window as any).OneTrust && (window as any).OneTrust.setConsentProfile(e);\n\t}\n\n\t/**\n\t * Event triggered when the user interacts with OneTrust cookie settings on the UI\n\t * @param {any} e The event. e.detail is like: \",C0001,\" (if user only accepts necessary cookies) or; \",C0001,C0002,C0003,C0004,\" (if they accept all)\n\t * @returns void\n\t */\n\tprivate consentChanged(e: any): void {\n\t\tif (this.hasGivenCookieConsent()) {\n\t\t\tthis.init();\n\t\t}\n\t}\n\n\tprivate hasConsent(): boolean {\n\t\treturn this.cookieConsentBypass === true && this.hasGivenCookieConsent();\n\t}\n\n\tprivate init(): void {\n\t\tif (this.hasConsent()) {\n\t\t\t//console.log('Has cookie consent is true...');\n\t\t\t// hide overlay\n\t\t\tdocument.querySelectorAll('.o-video__cookieNotice').forEach((item) => {\n\t\t\t\titem.classList.add('uk-hidden');\n\t\t\t});\n\t\t\t// this.hide(this.cookieOverlay); // it hides cookie notice only on the first video\n\t\t\tthis.load();\n\t\t\tthis.dynamicLoadAdditionalPlayers();\n\t\t} else {\n\t\t\tif (this.runningInit) return;\n\t\t\tthis.runningInit = true;\n\t\t\t//console.log('Has cookie consent is false...');\n\t\t\t// show cookie message and wait for consent\n\t\t\tthis.show(this.cookieOverlay);\n\t\t\tthis.observeCookieAuthorise();\n\t\t\tdocument.querySelectorAll('.o-video__cookieNotice').forEach((item) => {\n\t\t\t\titem.classList.remove('uk-hidden');\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Load any video players which were not mounted, such as one's injected into the DOM after the youtube script loaded\n\t * @returns void\n\t */\n\tprivate dynamicLoadAdditionalPlayers(): void {\n\t\tif (this.playerContainer && this.playerContainer.children.length === 0) {\n\t\t\tthis.initVideoPlayer(this.playerContainer, (window as any)[this.globalVideoObject][this.video.videoId]);\n\t\t}\n\t\tlet c: Date;\n\t}\n\n\t/**\n\t * Listen for stop-all events on the window\n\t * @returns void\n\t */\n\tprivate observeExternalVideoEvents(): void {\n\t\tfromEvent(window, OrganismVideoEvents.stopAll)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\tif (e && e.detail) {\n\t\t\t\t\t// stop the video\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t});\n\n\t\tfromEvent(window, OrganismVideoEvents.pauseAll)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\tif (e && e.detail) {\n\t\t\t\t\t// pause the video\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// fromEvent(window, '')\n\t\t// .pipe(\n\t\t// \ttakeUntil(this._unsubscribeAll),\n\t\t// )\n\t\t// .subscribe((e: CustomEvent<\n\t\t// \tOrganismVideoEventTypes['stopAll']\n\t\t// >) => {\n\t\t// \tif (e && e.detail) {\n\t\t// \t\t// stop the video\n\t\t// \t\tthis.stop();\n\t\t// \t}\n\t\t// });\n\t}\n\n\t/**\n\t * Run once cookie consent has been given\n\t * @returns void\n\t */\n\tprivate load(): void {\n\t\t// setup script loaded listener\n\t\t// @todo - doesn't work?\n\t\t// window.addEventListener('onYoutubeScriptLoaded', () => {\n\t\t// \tconsole.log('onYoutubeScriptLoaded');\n\t\t// \tthis.youtubeScriptLoaded.next(true);\n\t\t// });\n\t\tif (!(window as any).onYouTubeIframeAPIReady) {\n\t\t\t/**\n\t\t\t * @link https://developers.google.com/youtube/iframe_api_reference\n\t\t\t * onYouTubeIframeAPIReady – The API will call this function when the page has finished downloading the JavaScript for the player API, which\n\t\t\t * enables you to then use the API on your page. Thus, this function might create the player objects that you want to display when the page loads.\n\t\t\t */\n\t\t\t(window as any).onYouTubeIframeAPIReady = () => {\n\t\t\t\tthis.dispatchCustomEvent(OrganismVideoEvents.iframeAPIReady, true, true, true);\n\n\t\t\t\t// _window.dispatchEvent(new CustomEvent(eventName));\n\t\t\t\t// this.youtubeIframeApiReady.next(this.playerInstanceId.getValue());\n\t\t\t};\n\t\t}\n\n\t\tconst newVideosList = Object.assign({}, window[this.globalVideoObject] || {});\n\t\tnewVideosList[this.playerInstanceId.getValue()] = this.video;\n\n\t\twindow[this.globalVideoObject] = newVideosList;\n\n\t\t// load video scripts\n\t\tthis.prepareVideoPlayerScripts();\n\t}\n\n\t/**\n\t * Listen for when a user gives cookie consent by clicking the consent button. On click, hide overlay and init the video\n\t * @returns void\n\t */\n\tprivate observeCookieAuthorise(): void {\n\t\tif (!this.cookieButton) return;\n\n\t\t// observe button clicks\n\t\tfromEvent(this.cookieButton, 'click')\n\t\t\t.pipe(takeUntil(this.unsubscribeCookieClick || this._unsubscribeAll))\n\t\t\t.subscribe((e) => {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (this.oneTrustService) {\n\t\t\t\t\t// rather than toggle the info display (e.g. the OneTrust panel) we can simply set the marketing cookie opt-in directly\n\t\t\t\t\tconst cookiesSet = this.confirmCookieVideoPrefs();\n\t\t\t\t\tif (cookiesSet) {\n\t\t\t\t\t\t// hide overlay\n\t\t\t\t\t}\n\t\t\t\t\t// show the OneTrust cookie overlay\n\t\t\t\t\t// this.oneTrustService.ToggleInfoDisplay();\n\n\t\t\t\t\t// stop observing\n\t\t\t\t\t// this.unsubscribeCookieClick.next(true);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprivate acceptAndShowVideo(): void {\n\t\tif ((window as any).OneTrust) {\n\t\t\t(window as any).OnetrustActiveGroups = ',C0001,C0002,C0003,C0004,';\n\t\t\t(window as any).OneTrust.OnConsentChanged({\n\t\t\t\tdetail: (window as any).OnetrustActiveGroups,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.oneTrustService.OnConsentChanged({\n\t\t\t\tdetail: ',C0001,C0002,C0003,C0004,',\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate confirmCookieVideoPrefs(): boolean {\n\t\tconst oneTrustDomainData = this.oneTrustService.GetDomainData();\n\t\tif (oneTrustDomainData && oneTrustDomainData.Groups && oneTrustDomainData.Groups.length > 0) {\n\t\t\tconst group = oneTrustDomainData.Groups.find((g) => g.CustomGroupId === 'C0004');\n\t\t\tif (!group) return false;\n\n\t\t\t// TODO: this section can be simplified since we do not need the purposeID anymore, just the customGroupId to set the cookie in the setConsentProfile function below\n\t\t\tconst { PurposeId } = group;\n\n\t\t\t// OneTrust.setConsentProfile({\"purposes\":[{\"Id\":\"7EF94F5E-23AF-4DB8-9A62-E96A07075D29\",\"TransactionType\":\"CONFIRMED\"}]})\n\t\t\t// console.log('Manually setting marketing cookie for the user');\n\n\t\t\ttry {\n\t\t\t\tthis.oneTrustService.setConsentProfile({\n\t\t\t\t\tpurposes: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tId: PurposeId,\n\t\t\t\t\t\t\tTransactionType: 'CONFIRMED',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\t// console.log('Called OneTrust hook so should trigger OnConsentChanged function');\n\n\t\t\t\tif ((window as any).OneTrust && (window as any).OneTrust.Init) {\n\t\t\t\t\t// user has consented, rerun onetrust init\n\t\t\t\t\t(window as any).OneTrust.Init();\n\t\t\t\t} else {\n\t\t\t\t\t// user has consented anyway, bypass\n\t\t\t\t\tthis.cookieConsentBypass = true;\n\t\t\t\t\tthis.acceptAndShowVideo();\n\t\t\t\t}\n\t\t\t\tthis.init();\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\t// console.log('Error manually setting cookie preferences');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t// console.log('Could not manually set marketing cookie for the user, the domain groups were empty!');\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add video scripts to the DOM and init iframe\n\t */\n\tprivate prepareVideoPlayerScripts(): void {\n\t\tif (!(window as any).YT) {\n\t\t\t// Append YouTube API Script if it's not already injected into the DOM\n\t\t\tthis.appendYoutubeScript();\n\t\t}\n\t}\n\n\t/**\n\t * Add youtube iframe script to the DOM\n\t * @return {HTMLScriptElement}\n\t */\n\tprivate appendYoutubeScript(): HTMLScriptElement {\n\t\tconst scriptId = 'youtube-script';\n\t\tlet script = document.getElementById(scriptId) as HTMLScriptElement;\n\n\t\tif (!script) {\n\t\t\t// add the script if it doesn't yet exist\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.setAttribute('id', scriptId);\n\n\t\t\tscript.src = 'https://www.youtube.com/iframe_api';\n\n\t\t\tconst firstScriptTag = document.getElementsByTagName('script')[0];\n\t\t\tif (firstScriptTag) {\n\t\t\t\tfirstScriptTag && firstScriptTag.parentNode?.insertBefore(script, firstScriptTag);\n\t\t\t}\n\t\t}\n\t\treturn script;\n\t}\n\n\t/**\n\t * Init video player from data\n\t */\n\tprivate initVideoPlayer(playerContainer: HTMLDivElement, videoData: VideoData): void {\n\t\tif (playerContainer) {\n\t\t\tconst id = videoData.videoId || this.video.videoId;\n\t\t\t// console.log('Init video instance', this.video.instanceId);\n\n\t\t\t// Create a new DOM element to initialize the youtube player iframe inside of the player container\n\t\t\tconst playerElement = document.createElement('div');\n\n\t\t\tplayerContainer.appendChild(playerElement);\n\n\t\t\tconst playerVars: Options['playerVars'] = {\n\t\t\t\t// autoplay: this.video.settings.autoplay ? 1 : 0,\n\t\t\t\tautoplay: 0,\n\t\t\t\t// @todo - this is the starting time of the video, in seconds\n\t\t\t\tstart: 0,\n\t\t\t\tcontrols: this.video.settings.controls ? 1 : 0,\n\t\t\t\tloop: this.video.settings.loop ? 1 : 0,\n\t\t\t\tmodestbranding: 1, // Gets overriden by YouTube to 0 whenever controls are deactivated\n\t\t\t};\n\t\t\tif (this.video.settings.loop) {\n\t\t\t\tplayerVars.playlist = id; // Video only loops if the player will be initalized as a playlist)\n\t\t\t}\n\n\t\t\t// setup player options\n\t\t\tconst playerOptions: Options = {\n\t\t\t\tvideoId: id,\n\t\t\t\tplayerVars: playerVars,\n\t\t\t\t// events: {\n\t\t\t\t// \t// ready: () => this.handleVideoPlayerReady(),\n\t\t\t\t// \t// stateChange: (e: any) => this.handleVideoStateChange(e),\n\t\t\t\t// \t// error: (e: any) => this.onVideoError(e),\n\t\t\t\t// }\n\t\t\t};\n\n\t\t\tthis.createNewPlayer(playerElement, playerOptions, videoData);\n\t\t}\n\t}\n\n\tprivate createNewPlayer(playerElement: HTMLDivElement, playerOptions: Options, videoData: VideoData): void {\n\t\t// console.log('youtube iframe ready');\n\t\tthis.player = YouTubePlayer(playerElement, playerOptions);\n\n\t\tthis.player.on('ready', (event) => this.handleVideoPlayerReady(videoData));\n\t\t// (this.player as any).on('onReady', (event) => this.handleVideoPlayerReady(event));\n\n\t\tthis.player.on('error', (event) => this.onVideoError(event));\n\n\t\t// // set a unique instance ID on the DOM container\n\t\t// const newInstanceId = new Date().getTime().toString();\n\t\t// this.playerContainer.dataset.instanceid = newInstanceId;\n\t\t// this.playerInstanceId.next(newInstanceId);\n\n\t\t// set up a state change callback\n\t\tthis.player.on('stateChange', (event: CustomEvent & { data: number }) => {\n\t\t\t// console.log(event)\n\t\t\tthis.handleVideoStateChange(event);\n\t\t});\n\t\tthis.playerReady.next(true);\n\t}\n\n\t// private createNewPlayer(playerElement: HTMLDivElement, playerOptions: Options): void {\n\t// \t// new player instance\n\t// \t// this.player = YouTubePlayer(playerElement, playerOptions);\n\n\t// \t// https://developers.google.com/youtube/player_parameters#Embedding_a_Player\n\t// \t(window as any).onYouTubePlayerAPIReady = () => {\n\t// \t\t// console.log('youtube iframe ready');\n\t// \t\tthis.player = YouTubePlayer(playerElement, playerOptions);\n\n\t// \t\tthis.player.on('ready', (event) => this.handleVideoPlayerReady(event));\n\t// \t\t// (this.player as any).on('onReady', (event) => this.handleVideoPlayerReady(event));\n\n\t// \t\tthis.player.on('error', (event) => this.onVideoError(event));\n\n\t// \t\t// // set a unique instance ID on the DOM container\n\t// \t\t// const newInstanceId = new Date().getTime().toString();\n\t// \t\t// this.playerContainer.dataset.instanceid = newInstanceId;\n\t// \t\t// this.playerInstanceId.next(newInstanceId);\n\n\t// \t\t// set up a state change callback\n\t// \t\tthis.player.on('stateChange', (event: CustomEvent & { data: number }) => {\n\t// \t\t\t// console.log(event)\n\t// \t\t\tthis.handleVideoStateChange(event);\n\t// \t\t});\n\t// \t\tthis.playerReady.next(true);\n\t// \t}\n\t// \t// if (!this.player) {\n\t// \t// }\n\t// }\n\n\t/**\n\t * Event listener for player state changes - e.g. when user interacts with the youtube iframe player, youtube fires a state change event\n\t * @param {CustomEvent&{data:number}} event\n\t * @returns void\n\t */\n\tprivate handleVideoStateChange(event: CustomEvent & { data: number }): void {\n\t\tswitch (event && event.data) {\n\t\t\tcase PlayerStates.PLAYING: {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase PlayerStates.PAUSED:\n\t\t\tcase PlayerStates.ENDED: {\n\t\t\t\t// show the brick overlay\n\t\t\t\tthis.show(this.brickOverlay);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * @todo - Intended for video loading errors\n\t * @param {CustomEvent} event\n\t * @returns void\n\t */\n\tprivate onVideoError(event: CustomEvent): void {\n\t\t// console.log('Video error', event);\n\t}\n\n\t/**\n\t * @todo\n\t * Callback to watch for YouTube video iframe ready\n\t * Set video player options and show play button\n\t */\n\tprivate handleVideoPlayerReady(videoData: VideoData): void {\n\t\t// Hide Loading Overlay\n\t\tsetTimeout(() => {\n\t\t\tthis.hide(this.loadingOverlay);\n\t\t}, 500);\n\n\t\t// since we didn't know the height of the video until it was loaded, set the height of the video wrapper\n\t\t// based on the width and height attribs of the iframe, now that it has loaded\n\t\t// @todo\n\n\t\t// Watch for playing on the inner molecule\n\t\tconst molecule = this.brickOverlay.querySelector('div.m-video-overlay');\n\t\tif (!molecule) return;\n\n\t\tfromEvent(molecule, MoleculeVideoOverlayEvents.playButtonClicked)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (e.detail) {\n\t\t\t\t\t// button was clicked\n\t\t\t\t\tthis.hide(this.brickOverlay);\n\t\t\t\t\tthis.hide(this.posterContainer);\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * Starts or resumes the video player\n\t * */\n\tprivate play(): void {\n\t\tthis.player && this.player.playVideo();\n\t}\n\n\tprivate stop(): void {\n\t\tthis.player && this.player.stopVideo();\n\t}\n\n\tprivate pause(): void {\n\t\tthis.player && this.player.pauseVideo();\n\t}\n\n\t/**\n\t * Show an element by reference by removing its uk-hidden class\n\t * @param {T} ref\n\t * @returns void\n\t */\n\tprivate show(ref: T): void {\n\t\t// const elem = this.$references[ref as string] as T;\n\t\tref && ref.classList.remove('uk-hidden');\n\t}\n\n\t/**\n\t * Hide an element by reference by adding a uk-hidden class\n\t * @param {T} ref\n\t * @returns void\n\t */\n\tprivate hide(ref: T): void {\n\t\t// const elem = this.$references[ref];\n\t\tref && ref.classList.add('uk-hidden');\n\t}\n\n\tpublic onControllerUnmount(): void {\n\t\t// console.log('Unmounting component');\n\t\tthis.player = undefined;\n\n\t\t// remove the player iframe from the DOM\n\t\tif (this.posterContainer) {\n\t\t\twhile (this.posterContainer.firstChild) {\n\t\t\t\tthis.posterContainer.removeChild(this.posterContainer.firstChild);\n\t\t\t}\n\t\t}\n\n\t\t// remove subscribers\n\t\tthis._unsubscribeAll.next();\n\t\tthis._unsubscribeAll.complete();\n\t}\n}\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'OrganismVideoEvents__';\n\n/** The type of custom events emitted */\nexport type OrganismVideoEventTypes = {\n\tiframeAPIReady: true;\n\tstopAll: true;\n\tpauseAll: true;\n};\n\n/** The event names for the above events */\nexport const OrganismVideoEvents: ComponentEvents = {\n\tiframeAPIReady: EVENT_PREFIX + 'IframeAPIReady',\n\t/** Event for listening out for \"stop all\" video events on the window */\n\tstopAll: EVENT_PREFIX + 'StopAll',\n\t/** Event for listening out for \"pause all\" video events on the window */\n\tpauseAll: EVENT_PREFIX + 'PauseAll',\n};\n","import ControllerBase from '../../../../global/js/ControllerBase';\n\nexport default class ControllerFhwProfileHeader extends ControllerBase {\n\tprivate shareButton: HTMLButtonElement;\n\tprivate installerUrl;\n\tprivate installerName;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element);\n\t\tthis.init();\n\t}\n\n\tprivate init(): void {\n\t\tthis.shareButton = this.$element?.querySelector('#share-button') as HTMLButtonElement;\n\t\tthis.installerUrl = this.$element.getAttribute('data-installer-url');\n\t\tthis.installerName = this.$element.getAttribute('data-installer-name');\n\t\tthis.registerEvents();\n\t}\n\n\tprivate registerEvents() {\n\t\tthis.shareButton?.addEventListener('click', () => this.shareHandler());\n\t}\n\n\t// Share URL\n\tprivate shareHandler() {\n\t\tconst windowNavigator = window.navigator;\n\t\tconst title = document.head?.querySelector('title')?.textContent || this.installerName;\n\t\tconst text = document.head?.querySelector('meta[name=\"description\"]')?.getAttribute('content') || 'Wolf Experte';\n\t\tconst shareData = {\n\t\t\ttitle,\n\t\t\ttext,\n\t\t\turl: this.installerUrl,\n\t\t};\n\n\t\tif (windowNavigator && windowNavigator.share) {\n\t\t\twindowNavigator\n\t\t\t\t.share(shareData)\n\t\t\t\t.then(() => console.log('Successful share'))\n\t\t\t\t.catch((error) => console.log('Error sharing', error));\n\t\t} else {\n\t\t\talert('Successfully copied to clipboard!');\n\t\t\twindowNavigator.clipboard.writeText(shareData.url);\n\t\t}\n\t}\n}\n","import ControllerButton from '../../components/atoms/a-button/a-button.controller';\nimport ControllerVideo from '../../components/organisms/o-video/o-video.controller';\nimport ControllerGridContainer from '../../components/organisms/o-grid-container/o-grid-container.controller';\nimport ControllerPagination from '../../components/molecules/m-pagination/m-pagination.controller';\nimport ControllerTeaserGrid from '../../components/organisms/o-teaser-grid/o-teaser-grid.controller';\nimport ControllerFhwProfileJumpToSection from '../../components/molecules/m-fhw-profile-jump-to-section/m-fhw-profile-jump-to-section.controller';\nimport ControllerProfileSliders from '../../components/molecules/m-fhw-profile-sliders/m-fhw-profile-sliders.controller';\nimport ControllerFhwProfileHeader from '../../components/molecules/m-fhw-profile-header/m-fhw-profile-header.controller';\nimport ControllerFinderSelectStep from '../../components/molecules/m-finder-select-step/m-finder-select-step.controller';\nimport ControllerProductGallery from '../../components/molecules/m-product-gallery/m-product-gallery.controller';\nimport ControllerPlayButton from '../../components/atoms/a-play-button/a-play-button.controller';\nimport ControllerVideoOverlay from '../../components/molecules/m-video-overlay/m-video-overlay.controller';\nimport ControllerFinderPopupForm from '../../components/molecules/m-finder-popup-form/m-finder-popup-form.controller';\nimport ControllerJobOfferArea from '../../components/molecules/m-job-offer-area/m-job-offer-area.controller';\nimport ControllerSystemComponent from '../../components/molecules/m-formstep-system-component/m-formstep-system-component.controller';\nimport ControllerFormStepResumeSlice from '../../components/molecules/m-formstep-resume-slice/m-formstep-resume-slice.controller';\nimport ControllerFhwContactForm from '../../components/molecules/m-fhw-contact-form/m-fhw-contact-form.controller';\nimport ControllerControlledForm from '../../components/molecules/m-form/m-form.controller';\nimport ControllerToggleSearchCategory from '../../components/molecules/m-category-toggle-selector/m-category-toggle-selector.controller';\nimport ControllerAccordionFilter from '../../components/molecules/m-filter-accordion/m-filter-accordion.controller';\n\n/** This is a list of controllers, which are called directly in other controllers due to updating the DOM manually! */\nexport default {\n\tControllerButton,\n\tControllerVideo,\n\tControllerGridContainer,\n\tControllerPagination,\n\tControllerTeaserGrid,\n\tControllerFhwProfileJumpToSection,\n\tControllerProfileSliders,\n\tControllerFhwProfileHeader,\n\tControllerFinderSelectStep,\n\tControllerProductGallery,\n\tControllerPlayButton,\n\tControllerVideoOverlay,\n\tControllerFinderPopupForm,\n\tControllerJobOfferArea,\n\tControllerSystemComponent,\n\tControllerFormStepResumeSlice,\n\tControllerFhwContactForm,\n\tControllerControlledForm,\n\tControllerToggleSearchCategory,\n\tControllerAccordionFilter,\n};\n","require(\"@base/models/component.twig\"); \nvar twig = require(\"twig\").twig;\nvar tpl = twig({\"allowInlineIncludes\":true,\"data\":[{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.extends\",\"stack\":[{\"type\":\"Twig.expression.type.string\",\"value\":\"src/base/models/component.twig\"}],\"position\":{\"start\":0,\"end\":43}},\"position\":{\"start\":0,\"end\":43}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":44,\"end\":45}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.set\",\"key\":\"config\",\"expression\":[{\"type\":\"Twig.expression.type.object.start\",\"value\":\"{\",\"match\":[\"{\"]},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"name\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"m-alert\"},{\"type\":\"Twig.expression.type.comma\"},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"tag\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"div\"},{\"type\":\"Twig.expression.type.comma\"},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"controller\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"\"},{\"type\":\"Twig.expression.type.object.end\",\"value\":\"}\",\"match\":[\"}\"]}],\"position\":{\"start\":45,\"end\":123}},\"position\":{\"start\":45,\"end\":123}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":124,\"end\":125}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.block\",\"blockName\":\"body\",\"position\":{\"start\":125,\"end\":141},\"output\":[{\"type\":\"raw\",\"value\":\"\\n\\t\",\"position\":{\"start\":142,\"end\":144}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.for\",\"keyVar\":null,\"valueVar\":\"item\",\"expression\":[{\"type\":\"Twig.expression.type.variable\",\"value\":\"data\",\"match\":[\"data\"]},{\"type\":\"Twig.expression.type.key.period\",\"key\":\"items\"}],\"position\":{\"start\":144,\"end\":172},\"output\":[{\"type\":\"raw\",\"value\":\"\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t

\",\"position\":{\"start\":267,\"end\":294}},{\"type\":\"output\",\"position\":{\"start\":294,\"end\":314},\"stack\":[{\"type\":\"Twig.expression.type.variable\",\"value\":\"item\",\"match\":[\"item\"],\"position\":{\"start\":294,\"end\":314}},{\"type\":\"Twig.expression.type.key.period\",\"position\":{\"start\":294,\"end\":314},\"key\":\"message\"},{\"type\":\"Twig.expression.type.filter\",\"value\":\"raw\",\"match\":[\"|raw\",\"raw\"],\"position\":{\"start\":294,\"end\":314}}]},{\"type\":\"raw\",\"value\":\"

\\n\\t\\t
\\n\\t\",\"position\":{\"start\":314,\"end\":329}}]},\"position\":{\"open\":{\"start\":144,\"end\":172},\"close\":{\"start\":329,\"end\":341}}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":342,\"end\":343}}]},\"position\":{\"open\":{\"start\":125,\"end\":141},\"close\":{\"start\":343,\"end\":357}}}],\"id\":\"src/wolf/components/molecules/m-alert/m-alert.template.twig\",\"rethrow\":true});\nmodule.exports = function(context) { return tpl.render(context); };\nmodule.exports.id = \"src/wolf/components/molecules/m-alert/m-alert.template.twig\";\nmodule.exports.default = module.exports;\n","require(\"@base/models/component.twig\");\nrequire(\"@components/atoms/a-button/a-button.template.twig\");\nrequire(\"@components/molecules/m-job-offer-item/m-job-offer-item.template.twig\"); \nvar twig = require(\"twig\").twig;\nvar tpl = twig({\"allowInlineIncludes\":true,\"data\":[{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.extends\",\"stack\":[{\"type\":\"Twig.expression.type.string\",\"value\":\"src/base/models/component.twig\"}],\"position\":{\"start\":0,\"end\":43}},\"position\":{\"start\":0,\"end\":43}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":44,\"end\":45}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.set\",\"key\":\"config\",\"expression\":[{\"type\":\"Twig.expression.type.object.start\",\"value\":\"{\",\"match\":[\"{\"]},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"name\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"m-job-offer-area-content\"},{\"type\":\"Twig.expression.type.comma\"},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"tag\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"div\"},{\"type\":\"Twig.expression.type.comma\"},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"controller\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"\"},{\"type\":\"Twig.expression.type.object.end\",\"value\":\"}\",\"match\":[\"}\"]}],\"position\":{\"start\":45,\"end\":140}},\"position\":{\"start\":45,\"end\":140}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":141,\"end\":142}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.block\",\"blockName\":\"body\",\"position\":{\"start\":142,\"end\":158},\"output\":[{\"type\":\"raw\",\"value\":\"\\t
\\n\\t\\t\",\"position\":{\"start\":248,\"end\":253}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.for\",\"keyVar\":null,\"valueVar\":\"job\",\"expression\":[{\"type\":\"Twig.expression.type.variable\",\"value\":\"data\",\"match\":[\"data\"]},{\"type\":\"Twig.expression.type.key.period\",\"key\":\"jobs\"}],\"position\":{\"start\":253,\"end\":279},\"output\":[{\"type\":\"raw\",\"value\":\"\\t\\t\\t\",\"position\":{\"start\":280,\"end\":283}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.include\",\"only\":4,\"ignoreMissing\":false,\"stack\":[{\"type\":\"Twig.expression.type.string\",\"value\":\"src/wolf/components/molecules/m-job-offer-item/m-job-offer-item.template.twig\"}],\"withStack\":[{\"type\":\"Twig.expression.type.object.start\",\"value\":\"{\",\"match\":[\"{\"]},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"data\"},{\"type\":\"Twig.expression.type.variable\",\"value\":\"job\",\"match\":[\"job\"]},{\"type\":\"Twig.expression.type.comma\"},{\"type\":\"Twig.expression.type.object.end\",\"value\":\"}\",\"match\":[\"}\"]}],\"position\":{\"start\":283,\"end\":400}},\"position\":{\"start\":283,\"end\":400}},{\"type\":\"raw\",\"value\":\"\\t\\t\",\"position\":{\"start\":401,\"end\":403}}]},\"position\":{\"open\":{\"start\":253,\"end\":279},\"close\":{\"start\":403,\"end\":415}}},{\"type\":\"raw\",\"value\":\"\\t
\\n\\n\\t\",\"position\":{\"start\":416,\"end\":426}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.if\",\"stack\":[{\"type\":\"Twig.expression.type.variable\",\"value\":\"data\",\"match\":[\"data\"]},{\"type\":\"Twig.expression.type.key.period\",\"key\":\"loadMore\"}],\"position\":{\"start\":426,\"end\":448},\"output\":[{\"type\":\"raw\",\"value\":\"\\t\\t
\\n\\t\\t\\t\",\"position\":{\"start\":478,\"end\":510}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.include\",\"only\":4,\"ignoreMissing\":false,\"stack\":[{\"type\":\"Twig.expression.type.string\",\"value\":\"src/wolf/components/atoms/a-button/a-button.template.twig\"}],\"withStack\":[{\"type\":\"Twig.expression.type.object.start\",\"value\":\"{\",\"match\":[\"{\"]},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"data\"},{\"type\":\"Twig.expression.type.variable\",\"value\":\"data\",\"match\":[\"data\"]},{\"type\":\"Twig.expression.type.key.period\",\"key\":\"loadMore\"},{\"type\":\"Twig.expression.type.object.end\",\"value\":\"}\",\"match\":[\"}\"]}],\"position\":{\"start\":510,\"end\":616}},\"position\":{\"start\":510,\"end\":616}},{\"type\":\"raw\",\"value\":\"\\t\\t
\\n\\t\",\"position\":{\"start\":617,\"end\":627}}]},\"position\":{\"open\":{\"start\":426,\"end\":448},\"close\":{\"start\":627,\"end\":638}}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":639,\"end\":640}}]},\"position\":{\"open\":{\"start\":142,\"end\":158},\"close\":{\"start\":640,\"end\":654}}}],\"id\":\"src/wolf/components/molecules/m-job-offer-area-content/m-job-offer-area-content.template.twig\",\"rethrow\":true});\nmodule.exports = function(context) { return tpl.render(context); };\nmodule.exports.id = \"src/wolf/components/molecules/m-job-offer-area-content/m-job-offer-area-content.template.twig\";\nmodule.exports.default = module.exports;\n","require(\"@base/models/component.twig\");\nrequire(\"@components/atoms/a-button/a-button.template.twig\");\nrequire(\"@components/atoms/a-headline/a-headline.template.twig\"); \nvar twig = require(\"twig\").twig;\nvar tpl = twig({\"allowInlineIncludes\":true,\"data\":[{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.extends\",\"stack\":[{\"type\":\"Twig.expression.type.string\",\"value\":\"src/base/models/component.twig\"}],\"position\":{\"start\":0,\"end\":43}},\"position\":{\"start\":0,\"end\":43}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":44,\"end\":45}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.set\",\"key\":\"config\",\"expression\":[{\"type\":\"Twig.expression.type.object.start\",\"value\":\"{\",\"match\":[\"{\"]},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"name\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"m-job-offer-item\"},{\"type\":\"Twig.expression.type.comma\"},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"tag\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"div\"},{\"type\":\"Twig.expression.type.comma\"},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"controller\"},{\"type\":\"Twig.expression.type.string\",\"value\":\"\"},{\"type\":\"Twig.expression.type.object.end\",\"value\":\"}\",\"match\":[\"}\"]}],\"position\":{\"start\":45,\"end\":132}},\"position\":{\"start\":45,\"end\":132}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":133,\"end\":134}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.set\",\"key\":\"sourcePath\",\"expression\":[{\"type\":\"Twig.expression.type.variable\",\"value\":\"icons_twig_alias_path\",\"match\":[\"icons_twig_alias_path\"]},{\"type\":\"Twig.expression.type.test\",\"filter\":\"defined\"},{\"type\":\"Twig.expression.type.variable\",\"value\":\"icons_twig_alias_path\",\"match\":[\"icons_twig_alias_path\"]},{\"type\":\"Twig.expression.type.string\",\"value\":\"/assets/icons\"},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\"?\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\"?\"}],\"position\":{\"start\":134,\"end\":231}},\"position\":{\"start\":134,\"end\":231}},{\"type\":\"raw\",\"value\":\"\\n\",\"position\":{\"start\":232,\"end\":233}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.block\",\"blockName\":\"body\",\"position\":{\"start\":233,\"end\":249},\"output\":[{\"type\":\"raw\",\"value\":\"\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\t\",\"position\":{\"start\":441,\"end\":448}},{\"type\":\"logic\",\"token\":{\"type\":\"Twig.logic.type.include\",\"only\":4,\"ignoreMissing\":false,\"stack\":[{\"type\":\"Twig.expression.type.string\",\"value\":\"src/wolf/components/atoms/a-headline/a-headline.template.twig\"}],\"withStack\":[{\"type\":\"Twig.expression.type.object.start\",\"value\":\"{\",\"match\":[\"{\"]},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\":\",\"precidence\":16,\"associativity\":\"rightToLeft\",\"operator\":\":\",\"key\":\"data\"},{\"type\":\"Twig.expression.type.variable\",\"value\":\"data\",\"match\":[\"data\"]},{\"type\":\"Twig.expression.type.key.period\",\"key\":\"headline\"},{\"type\":\"Twig.expression.type.object.end\",\"value\":\"}\",\"match\":[\"}\"]}],\"position\":{\"start\":448,\"end\":551}},\"position\":{\"start\":448,\"end\":551}},{\"type\":\"raw\",\"value\":\"\\t\\t\\t\\n\\t\\t\\t

\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\",\"position\":{\"start\":588,\"end\":625}},{\"type\":\"output\",\"position\":{\"start\":625,\"end\":675},\"stack\":[{\"type\":\"Twig.expression.type._function\",\"position\":{\"start\":625,\"end\":675},\"fn\":\"source\",\"params\":[{\"type\":\"Twig.expression.type.parameter.start\",\"value\":\"(\",\"match\":[\"(\"],\"position\":{\"start\":625,\"end\":675}},{\"type\":\"Twig.expression.type.variable\",\"value\":\"sourcePath\",\"match\":[\"sourcePath\"],\"position\":{\"start\":625,\"end\":675}},{\"type\":\"Twig.expression.type.string\",\"value\":\"/pin-outlined.svg\",\"position\":{\"start\":625,\"end\":675}},{\"type\":\"Twig.expression.type.operator.binary\",\"value\":\"~\",\"position\":{\"start\":625,\"end\":675},\"precidence\":6,\"associativity\":\"leftToRight\",\"operator\":\"~\"},{\"type\":\"Twig.expression.type.comma\",\"position\":{\"start\":625,\"end\":675}},{\"type\":\"Twig.expression.type.bool\",\"value\":true,\"position\":{\"start\":625,\"end\":675}},{\"type\":\"Twig.expression.type.parameter.end\",\"value\":\")\",\"match\":[\")\"],\"position\":{\"start\":625,\"end\":675},\"expression\":false}]}]},{\"type\":\"raw\",\"value\":\"\\n\\t\\t\\t\\t\\t\",\"position\":{\"start\":675,\"end\":688}},{\"type\":\"output\",\"position\":{\"start\":688,\"end\":711},\"stack\":[{\"type\":\"Twig.expression.type.variable\",\"value\":\"data\",\"match\":[\"data\"],\"position\":{\"start\":688,\"end\":711}},{\"type\":\"Twig.expression.type.key.period\",\"position\":{\"start\":688,\"end\":711},\"key\":\"location\"},{\"type\":\"Twig.expression.type.key.period\",\"position\":{\"start\":688,\"end\":711},\"key\":\"label\"}]},{\"type\":\"raw\",\"value\":\"\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\",\"position\":{\"start\":711,\"end\":742}},{\"type\":\"output\",\"position\":{\"start\":742,\"end\":765},\"stack\":[{\"type\":\"Twig.expression.type.variable\",\"value\":\"data\",\"match\":[\"data\"],\"position\":{\"start\":742,\"end\":765}},{\"type\":\"Twig.expression.type.key.period\",\"position\":{\"start\":742,\"end\":765},\"key\":\"location\"},{\"type\":\"Twig.expression.type.key.period\",\"position\":{\"start\":742,\"end\":765},\"key\":\"value\"}]},{\"type\":\"raw\",\"value\":\"\\n\\t\\t\\t\\t\\n\\t\\t\\t

\\n\\t\\t
\\n\\t\\t\\n\\t
\\n\\t
\\n\\n\",\"position\":{\"start\":989,\"end\":1003}}]},\"position\":{\"open\":{\"start\":233,\"end\":249},\"close\":{\"start\":1003,\"end\":1017}}}],\"id\":\"src/wolf/components/molecules/m-job-offer-item/m-job-offer-item.template.twig\",\"rethrow\":true});\nmodule.exports = function(context) { return tpl.render(context); };\nmodule.exports.id = \"src/wolf/components/molecules/m-job-offer-item/m-job-offer-item.template.twig\";\nmodule.exports.default = module.exports;\n"],"names":["ControllerButton","constructor","element","super","componentRefs","buttonClick","this","_unsubscribeAll","dataDownload","$element","getAttribute","share","observeButtonClick","addEventListener","windowNavigator","window","navigator","windowUrl","location","href","undefined","title","document","head","querySelector","textContent","copy","text","pos","innerText","indexOf","substr","pos2","shareData","url","file","then","console","info","catch","error","alert","clipboard","writeText","pipe","subscribe","e","dispatchCustomEvent","buttonClicked","spinnerHandler","onControllerUnmount","next","complete","spinner","setAttribute","isSpinning","setTimeout","AtomButtonEvents","ControllerPlayButton","removeEventListener","handleButtonClick","preventDefault","stopPropagation","playButtonClicked","AtomPlayButtonEvents","EVENT_PREFIX","MoleculeToggleCategoryEvents","UPDATE_FILTER_CATEGORY","UPDATE_TOGGLED_CATEGORY","ControllerToggleSearchCategory","Object","values","categoryWrapper","$references","categoryTriggers","querySelectorAll","categoryMobileSelector","observeCategoryTrigger","registerEvents","handleCategoryActiveState","currentCategory","forEach","elementCategory","dataset","category","classList","contains","add","remove","trigger","currentTarget","check","checkbox","value","event","detail","templateAlert","ControllerFhwContactForm","formAlertRef","submitButtonRef","form","formAlert","submitButton","init","handleFormPost","clearAlert","formData","FormData","target","endpoint","URL","action","fetch","toString","method","credentials","body","resp","json","showAlertMessage","message","disableSubmitButton","type","html","data","items","domUtils","renderDomElement","ControllerFhwProfileJumpToSection","getButtonEvent","bind","observeClick","buttonAtomComponents","Array","from","button","jumpto","section","getElementById","scrollIntoView","ControllerProfileSliders","activeSlide","imageWidths","stop","imageContainer","imageList","buttonLeft","scrollToSlide","buttonRight","buttonHandlear","getCurrentSlide","scrollLeft","width","key","parseInt","checkButtons","sliderWidth","containerWidth","slice","reduce","acc","cur","scrollTo","sliderButtons","clientWidth","push","sliderWidthExceptLast","length","ControllerAccordionFilter","filters","change","Event","wrappers","wrapper","drop","labelContainer","activeCounter","inputs","hiddenInput","singleOptions","active","labels","idList","open","el","id","index","inputsChecked","checky","checked","splice","innerHTML","JSON","stringify","join","dispatchEvent","alertTemplate","SubmitButtonUseCases","ControllerFinderPopupForm","alertWrapper","formWrapper","submitBtn","spinnerWrapper","submitText","doneWrapper","componentEvents","success","failure","observeFormSubmissions","formUrl","formurl","eventNameSuccess","eventNameFailure","getForm","getSubmitButton","getSpinnerWrapper","getSubmitText","getDoneWrapper","handleDisableSubmitButton","Disable","submitForm","response","Enable","Done","showSubmissionAlert","disable","removeAttribute","submitUrl","getFormSubmitUrl","selector","getFormData","p","of","input","name","alertDiv","alertHtml","ControllerFinderSelectStep","back","backButton","backMobile","backButtonMobile","products","productsButton","nextButton","options","isMobile","step","start","clicked","additionalId","option","emitEvent","Number","searchId","toggle","test","userAgent","MyMoleculeFinderSelectStepEvents","ControllerControlledForm","formValidity","translations","parse","lastControlKeyUp","lastcontrolinvalidevent","warn","validateFields","listenForChanges","observeValidationUpdateRequests","observeFormValidationErrors","getFields","prototype","hasOwnProperty","call","currentFormElement","emitOnlyOnChanged","FORM_DATA_CHANGED_BY_STEP","clearValidationErrors","showHTML5ValidationErrors","validity","runValidation","currentValidState","validStateChanged","VALIDATION_RAN","valid","currentValidity","invalidInputs","elInv","tagName","toUpperCase","onKeyup","currentElementWithKeyupListener","clearTimeout","currentTimer","previousValidState","elem","RERUN_VALIDATION","DISPLAY_VALIDATION_ERRORS","updateValidationErrors","errors","inputUtils","addErrorsToFieldset","formElement","addOrRemoveFormValidationError","required","fieldIsRequired","MoleculeFormEvents","ResumeSliceEvents","ControllerFormStepResumeSlice","ctaEditStep","stepToVisit","observeRemoveFormPartRequest","handleEditStep","ctaEditStepData","ctaOriginalStep","stepIdx","resumeSliceId","sliceId","currentSwitcher","activeStep","getElementsByClassName","REQUEST_GO_TO_STEP","TOGGLE_SLICE_FOR_INPUTS","FormstepSelectIconEvents","REQUEST_VALIDATION","FormstepSelectImageEvents","SELECT_OPTION_CHANGED","SELECT_IMAGE","ControllerSystemComponent","removalButton","componentRemovalButton","exitEditModeButton","componentSubmitButton","serialNumberInput","shortDescriptionInput","initApp","observeShortDescriptionSubmission","observeElementEvents","observeExitEditModeRequest","requestExitEditMode","observeSubmitFormPartRequest","requestSubmitSystemComponent","removeFormPartFromDom","elementId","REQUEST_ADD_SYSTEM_COMPONENT","EXIT_EDIT_MODE","REMOVE_SYSTEM_COMPONENT","FormstepSystemComponentEvents","FormstepWarrantyStep2Events","FormstepWarrantyStep3Events","FormstepWarrantyWolfProductsEvents","jobOfferAreaContentTemplate","ControllerJobOfferArea","loadBtn","jobsArea","jobFiltersContainer","areaTypeName","areaName","jobsAreaUrl","filterValues","selects","search","loadMoreOffers","setFilterData","getJobs","areaContent","loadNewContent","err","areaToRender","renderDomElementInHTMLElement","searchParams","append","filter","ControllerProductGallery","galleryItems","slides","sliderWrapperWidth","sliderListWidth","sliderListWidth2","sliderListElements","sliderListElements2","sliderWrapperHeight","galleryWrapper","sliderWrapper","clientHeight","sliderList","galleryPositionHandler","openModalButton","galleryPositionHandlerFullwidth","observeSlideThumbClicks","slide","slideClick","currentAnchor","thumbIndex","currentThumbIndexSelected","updateSelectedThumb","updateVisibleGalleryItem","thumbnailChanged","Image","Video","ThreeSixty","CI360","destroy","log","newSelected","thumb","newIndex","item","hasAttribute","children","modalProducGallery","sliderList2","MyMoleculeVideoOverlayLayoutDefault","MyOrganismVideoDefault","overlay","layout","headline","style","consent","buttonAccept","video","instanceId","videoId","settings","mute","controls","loop","poster","sources","mediaQuery","image","height","alt","styleSettings","paddingStyle","textColor","headlineColor","isEmbedded","copyColor","alreadyGivenConsent","ProductGalleryItemTypes","fake360_2","folder","filenamePattern","amountOfImages","magnifierZoom","spinReverse","speed","autoplay","keyboard","fakeImage1","large","full","fakeImage2","fakeImage3","fakeImage4","fakeImage5","fakeVideo1","ProductGalleryVideoItem","fakeMediaItems","MyMoleculeProductGallery","mediaItems","energyBadge","energyClasses","label","currentlySelected","fullscreen","MoleculeProductGalleryEvents","ControllerVideoOverlay","exists","playButtonWrapper","playButton","observePlayButtonClick","MoleculeVideoOverlayEvents","FormStepperValidationEventClientServerEnum","OrganismFormStepperEvents","DISABLE_GO_TO_NEXT_STEP","ENABLE_GO_TO_NEXT_STEP","RECEIVE_RESUME_SLICE","RECEIVE_CONTROLLED_FORM_SLICE","REMOVE_CONTROLLED_FORM_SLICE","RESET_VALIDATION_SCORE_BY_STEP","ValidationEventMapper","ControllerGridContainer","loadButton","displayAllElements","paginationHandler","loadElement","parentElement","identifierLoad","hiddenItems","pagination","elementToGo","clickedPag","split","currentElement","gridElement","activeElement","ControllerTeaserGrid","minHeight","scrollLeftButton","scrollRightButton","scrollRight","handleArrowClick","readMoreEvents","direction","elementToScroll","newPosition","canScrollLeft","canScrollRight","scrollWidth","readMoreItems","parent","setHeight","child","currentHeight","ch","OneTrustService","ToggleInfoDisplay","_w","OneTrust","OnConsentChanged","Error","hasGivenConsent","OnetrustActiveGroups","GetDomainData","Groups","OptanonGroupId","PurposeId","CustomGroupId","GroupId","Status","setConsentProfile","purposes","UpdateConsent","g","ControllerVideo","ControllerBase","cookieButton","globalVideoObject","cookieConsentBypass","hasGivenCookieConsent","unsubscribeCookieClick","Subject","playerReady","BehaviorSubject","playerInstanceId","youtubeScriptLoaded","youtubeIframeApiReady","runningInit","handleVideoPlayerReady","createNewPlayer","manuallyGetRefs","_window","tryToInitVideo","i","refreshId","setInterval","clearInterval","setPlayerEvents","setCookieListeners","observeExternalVideoEvents","ref","cookieButtonWrapper","cookieButtons","getVideoContainerName","fromEvent","iframeAPIReady","takeUntil","videosList","videoContainerName","videoContainer","initVideoPlayer","hasLoaded","isReady","oneTrustService","consentChanged","toggleOneTrustOverlay","getDomainData","hasConsent","load","dynamicLoadAdditionalPlayers","show","cookieOverlay","observeCookieAuthorise","playerContainer","stopAll","pauseAll","pause","onYouTubeIframeAPIReady","newVideosList","assign","getValue","prepareVideoPlayerScripts","confirmCookieVideoPrefs","acceptAndShowVideo","oneTrustDomainData","group","find","Id","TransactionType","Init","YT","appendYoutubeScript","scriptId","script","createElement","src","firstScriptTag","getElementsByTagName","parentNode","insertBefore","videoData","playerElement","appendChild","playerVars","modestbranding","playlist","playerOptions","player","on","onVideoError","handleVideoStateChange","brickOverlay","hide","loadingOverlay","molecule","posterContainer","play","playVideo","stopVideo","pauseVideo","firstChild","removeChild","OrganismVideoEvents","ControllerFhwProfileHeader","shareButton","installerUrl","installerName","shareHandler","ControllerPagination","tpl","twig","module","exports","context","render"],"sourceRoot":""}