{"version":3,"sources":["ui.js"],"names":["initRecaptcha","element","window","grecaptcha","render","sitekey","getAttribute","fillServicesField","checkedAreas","document","querySelectorAll","servicesField","querySelector","length","innerHTML","setServicesBadges","forEach","category","count","setAttribute","removeAttribute","setAdvancedSearchBadge","valuesSet","validateLocationField","input","checkValidity","validity","valueMissing","tooShort","setCustomValidity","patternMismatch","tooLong","initIndexPage","on","event","requestAnimationFrame","target","stopImmediatePropagation","toggleClass","initResultsPage","replaceMainWithUrl","url","payload","arguments","undefined","xhr","XMLHttpRequest","onload","status","html","DOMParser","parseFromString","responseText","oldMain","newMain","remove","initDatePicker","replaceWith","open","send","isMainVisible","getComputedStyle","display","matchingParent","detail","collapse","preventDefault","classList","add","call","el","this","href","contains","match","FormData","initServicesBadges","initShared","parentNode","_flatpickr","clear","setDate","value","addEventListener"],"mappings":"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","file":"ui.js","sourcesContent":["\"use strict\";\n\nfunction initRecaptcha(element) {\n window.grecaptcha.render(element, {\n 'sitekey': element.getAttribute('data-sitekey')\n });\n}\n\nfunction fillServicesField() {\n var checkedAreas = document.querySelectorAll(\".service:checked ~ label\");\n var servicesField = document.querySelector(\".services-field\");\n\n switch (checkedAreas.length) {\n case 0:\n servicesField.innerHTML = \"\";\n break;\n\n case 1:\n servicesField.innerHTML = checkedAreas[0].innerHTML;\n break;\n\n default:\n servicesField.innerHTML = checkedAreas.length + \" Leistungen\";\n }\n\n setServicesBadges();\n}\n\nfunction setServicesBadges() {\n var categories = document.querySelectorAll(\"form .service-category\");\n categories.forEach(function (category) {\n var count = category.querySelectorAll(\".service:checked\").length;\n\n if (count > 0) {\n category.querySelector(\"h4\").setAttribute(\"data-value\", count);\n } else {\n category.querySelector(\"h4\").removeAttribute(\"data-value\");\n }\n });\n}\n\nfunction setAdvancedSearchBadge() {\n var valuesSet = 0;\n var categories = document.querySelectorAll(\"form .service-category\");\n categories.forEach(function (category) {\n valuesSet += category.querySelectorAll(\".service:checked\").length;\n });\n\n if (valuesSet > 0) {\n document.querySelector(\".advanced-search\").setAttribute(\"data-value\", valuesSet);\n } else {\n document.querySelector(\".advanced-search\").removeAttribute(\"data-value\");\n }\n}\n\nfunction validateLocationField(input) {\n input.checkValidity();\n\n if (input.validity.valueMissing || input.validity.tooShort) {\n input.setCustomValidity(\"Bitte geben Sie mindestens die ersten drei Ziffern einer Postleitzahl ein.\");\n } else if (input.validity.patternMismatch) {\n input.setCustomValidity(\"Bitte geben Sie nur Ziffern ein.\");\n } else if (input.validity.tooLong) {\n input.setCustomValidity(\"Bitte geben Sie höchstens fünf Ziffern ein.\");\n } else {\n input.setCustomValidity(\"\");\n }\n}\n\nfunction initIndexPage() {\n // Hier ist requestAnimationFrame() nötig, weil Gecko sonst ggf. die Validierung ausführt, bevor der neue Wert für die Validierungslogik\n // sichtbar ist. Das ist insbesondere dann der Fall, wenn der Wert aus einem Autocomplete-Menü ausgewählt wurde.\n document.on(\"input\", \".location-field\", function (event) {\n return requestAnimationFrame(function () {\n return validateLocationField(event.target);\n });\n });\n validateLocationField(document.querySelector(\".location-field\"));\n document.on(\"click\", \".advanced-search\", function (event) {\n event.stopImmediatePropagation();\n document.querySelector(\".advanced-search-container\").toggleClass(\"collapsed\");\n });\n document.on(\"change\", \".advanced-search-container input\", setAdvancedSearchBadge);\n setAdvancedSearchBadge();\n}\n\nfunction initResultsPage() {\n document.on(\"input\", \".location-field\", function (event) {\n return requestAnimationFrame(function () {\n return validateLocationField(event.target);\n });\n });\n validateLocationField(document.querySelector(\".location-field\"));\n document.on(\"click\", \"main\", function (event) {\n if (event.target.matchingParent(\".result-detail\") === null && event.target.matchingParent(\".result\") === null) {\n var detail = document.querySelector(\".result-detail\");\n detail && detail.collapse();\n }\n });\n document.on(\"click\", \".open-refine-search-link\", function (event) {\n event.preventDefault();\n document.querySelector(\".sidebar-mode-search\").classList.add(\"active\");\n document.querySelector(\".sidebar-mode-results\").classList.remove(\"active\");\n });\n\n function replaceMainWithUrl(url) {\n var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var xhr = new XMLHttpRequest();\n\n xhr.onload = function (event) {\n if (event.target.status < 200 || event.target.status >= 300) {\n return;\n }\n\n var parser = new DOMParser();\n var html = parser.parseFromString(event.target.responseText, \"text/html\");\n var oldMain = document.querySelector(\"main\");\n var newMain = html.querySelector(\"main\");\n newMain.remove();\n newMain.querySelectorAll(\"input[type=date]\").forEach(initDatePicker);\n oldMain.replaceWith(newMain);\n newMain.querySelectorAll(\".g-recaptcha\").forEach(initRecaptcha);\n };\n\n xhr.open(payload ? \"POST\" : \"GET\", url);\n xhr.send(payload);\n }\n\n function isMainVisible() {\n return window.getComputedStyle(document.querySelector(\"main\"), null).display !== \"none\";\n }\n\n document.on(\"click\", \".result\", function (event) {\n if (!isMainVisible()) {\n return;\n }\n\n event.preventDefault();\n [].forEach.call(document.querySelectorAll(\".result.active\"), function (el) {\n el.classList.remove(\"active\");\n });\n this.classList.add(\"active\");\n replaceMainWithUrl(this.getAttribute(\"href\"));\n });\n document.on(\"click\", \"main a\", function (event) {\n var href = this.getAttribute(\"href\"); // Nur Links, die kein Schema nach RFC 3986 spezifizieren. So erkennen wir interne Links.\n\n if (!this.classList.contains(\"no-main\") && !href.match(/^[a-z][a-z0-9.+-]*:/i) && isMainVisible()) {\n event.preventDefault();\n replaceMainWithUrl(href);\n }\n });\n document.on(\"click\", \".imprint-container a\", function (event) {\n if (isMainVisible()) {\n event.preventDefault();\n replaceMainWithUrl(this.getAttribute(\"href\"));\n }\n });\n document.on(\"submit\", \"main form\", function (event) {\n if (isMainVisible()) {\n event.preventDefault();\n replaceMainWithUrl(this.getAttribute(\"action\"), new FormData(this));\n }\n });\n}\n\nfunction initServicesBadges() {\n document.on(\"change\", \".service\", setServicesBadges);\n setServicesBadges();\n}\n\nfunction initShared() {\n document.querySelectorAll(\"input[type=date]\").forEach(initDatePicker);\n document.on(\"click\", \".clear-delivery-date\", function (event) {\n event.preventDefault();\n\n event.target.parentNode.querySelector(\".delivery-date-field\")._flatpickr.clear();\n });\n document.on(\"blur\", \".delivery-date-field.input\", function (event) {\n event.target.parentNode.querySelector(\"input[type=hidden]\")._flatpickr.setDate(event.target.value);\n });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n if (document.querySelector(\"html.index\") !== null) {\n initIndexPage();\n }\n\n if (document.querySelector(\"html.results\") !== null) {\n initResultsPage();\n }\n\n if (document.querySelector(\"form .service-category\") !== null) {\n initServicesBadges();\n }\n\n initShared();\n});"]}