chore(release): obfuscate and hash production assets [skip ci]
This commit is contained in:
@@ -1,239 +0,0 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
function initFaqAccordion() {
|
||||
const faqItems = document.querySelectorAll(".faq-item");
|
||||
faqItems.forEach(faqItem => {
|
||||
const faqQuestion = faqItem.querySelector(".faq-question");
|
||||
const faqAnswer = faqItem.querySelector(".faq-answer");
|
||||
const faqToggle = faqItem.querySelector(".faq-toggle");
|
||||
faqQuestion.addEventListener("click", function () {
|
||||
const isOpen = faqItem.classList.contains("open");
|
||||
faqItems.forEach(otherItem => {
|
||||
if (otherItem !== faqItem) {
|
||||
otherItem.classList.remove("open");
|
||||
const otherAnswer = otherItem.querySelector(".faq-answer");
|
||||
const otherToggle = otherItem.querySelector(".faq-toggle");
|
||||
otherAnswer.style.maxHeight = null;
|
||||
otherToggle.textContent = "+";
|
||||
}
|
||||
});
|
||||
if (isOpen) {
|
||||
faqItem.classList.remove("open");
|
||||
faqAnswer.style.maxHeight = null;
|
||||
faqToggle.textContent = "+";
|
||||
} else {
|
||||
faqItem.classList.add("open");
|
||||
faqAnswer.style.maxHeight = faqAnswer.scrollHeight + "px";
|
||||
faqToggle.textContent = "−";
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
function initContactForm() {
|
||||
const contactForm = document.getElementById("contactForm");
|
||||
if (!contactForm) {
|
||||
return;
|
||||
}
|
||||
contactForm.addEventListener("submit", function (submitEvent) {
|
||||
submitEvent.preventDefault();
|
||||
const formData = new FormData(contactForm);
|
||||
const payload = {};
|
||||
for (let [key, value] of formData.entries()) {
|
||||
payload[key] = value;
|
||||
}
|
||||
if (!validateFormData(payload)) {
|
||||
return;
|
||||
}
|
||||
const submitButton = contactForm.querySelector("button[type=\"submit\"]");
|
||||
const originalButtonText = submitButton.textContent;
|
||||
submitButton.textContent = "Wird gesendet...";
|
||||
submitButton.disabled = true;
|
||||
const requestOptions = {
|
||||
method: "POST",
|
||||
body: formData
|
||||
};
|
||||
fetch("contact-handler.php", requestOptions).then(response => response.json()).then(result => {
|
||||
submitButton.textContent = originalButtonText;
|
||||
submitButton.disabled = false;
|
||||
if (result.success) {
|
||||
contactForm.reset();
|
||||
showNotification(result.message, "success");
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
showNotification(result.message, "error");
|
||||
if (result.missing_fields) {
|
||||
result.missing_fields.forEach(missingFieldId => {
|
||||
const missingField = document.getElementById(missingFieldId);
|
||||
if (missingField) {
|
||||
missingField.style.borderColor = "#ff4d6d";
|
||||
setTimeout(() => {
|
||||
missingField.style.borderColor = "";
|
||||
}, 3000);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error("Error:", error);
|
||||
showNotification("Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.", "error");
|
||||
submitButton.textContent = originalButtonText;
|
||||
submitButton.disabled = false;
|
||||
});
|
||||
});
|
||||
}
|
||||
function validateFormData(formValues) {
|
||||
const requiredKeys = ["firstName", "lastName", "email", "subject", "message"];
|
||||
const errors = [];
|
||||
requiredKeys.forEach(fieldName => {
|
||||
if (!formValues[fieldName] || formValues[fieldName].trim() === "") {
|
||||
errors.push("Das Feld \"" + getFieldLabel(fieldName) + "\" ist erforderlich.");
|
||||
}
|
||||
});
|
||||
if (formValues.email && !isValidEmail(formValues.email)) {
|
||||
errors.push("Bitte geben Sie eine gültige E-Mail-Adresse ein.");
|
||||
}
|
||||
if (!formValues.privacy) {
|
||||
errors.push("Sie müssen der Datenschutzerklärung zustimmen.");
|
||||
}
|
||||
if (errors.length > 0) {
|
||||
showNotification(errors.join("\n"), "error");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function getFieldLabel(keyName) {
|
||||
const fieldLabels = {
|
||||
firstName: "Vorname",
|
||||
lastName: "Nachname",
|
||||
email: "E-Mail-Adresse",
|
||||
subject: "Betreff",
|
||||
message: "Nachricht"
|
||||
};
|
||||
return fieldLabels[keyName] || keyName;
|
||||
}
|
||||
function isValidEmail(email) {
|
||||
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
return emailPattern.test(email);
|
||||
}
|
||||
function showNotification(message, type = "info") {
|
||||
if (window.HexaHost && window.HexaHost.showNotification) {
|
||||
window.HexaHost.showNotification(message, type);
|
||||
} else {
|
||||
alert(message);
|
||||
}
|
||||
}
|
||||
window.openLiveChat = function () {
|
||||
showNotification("Live Chat wird geöffnet... (Demo-Funktion)", "info");
|
||||
};
|
||||
function prefillFromQueryParams() {
|
||||
const queryParams = new URLSearchParams(window.location.search);
|
||||
const packageParam = queryParams.get("package");
|
||||
const productParam = queryParams.get("product");
|
||||
if (packageParam || productParam) {
|
||||
const subjectField = document.getElementById("subject");
|
||||
const messageField = document.getElementById("message");
|
||||
if (packageParam) {
|
||||
const packageLabels = {
|
||||
"vpc-starter": "Virtual Private Container - Starter Paket",
|
||||
"vpc-business": "Virtual Private Container - Business Paket",
|
||||
"vpc-professional": "Virtual Private Container - Professional Paket",
|
||||
"vpc-enterprise": "Virtual Private Container - Enterprise Paket",
|
||||
"vps-basic": "Virtual Private Server - Basic Paket",
|
||||
"vps-standard": "Virtual Private Server - Standard Paket",
|
||||
"vps-premium": "Virtual Private Server - Premium Paket",
|
||||
"vps-enterprise": "Virtual Private Server - Enterprise Paket",
|
||||
"mail-starter": "Mail Gateway - Starter Paket",
|
||||
"mail-business": "Mail Gateway - Business Paket",
|
||||
"mail-professional": "Mail Gateway - Professional Paket",
|
||||
"mail-enterprise": "Mail Gateway - Enterprise Paket",
|
||||
"web-starter": "Webhosting - Starter Paket",
|
||||
"web-business": "Webhosting - Business Paket",
|
||||
"web-professional": "Webhosting - Professional Paket",
|
||||
"web-enterprise": "Webhosting - Enterprise Paket"
|
||||
};
|
||||
if (packageLabels[packageParam]) {
|
||||
messageField.value = "Hallo,\n\nich interessiere mich für das " + packageLabels[packageParam] + ".\n\nBitte senden Sie mir weitere Informationen und ein individuelles Angebot.\n\nVielen Dank!";
|
||||
if (packageParam.startsWith("vpc-")) {
|
||||
subjectField.value = "vpc-anfrage";
|
||||
} else if (packageParam.startsWith("vps-")) {
|
||||
subjectField.value = "vps-anfrage";
|
||||
} else if (packageParam.startsWith("mail-")) {
|
||||
subjectField.value = "mail-gateway-anfrage";
|
||||
} else if (packageParam.startsWith("web-")) {
|
||||
subjectField.value = "webhosting-anfrage";
|
||||
}
|
||||
}
|
||||
} else if (productParam) {
|
||||
const productSubjects = {
|
||||
vpc: "vpc-anfrage",
|
||||
vps: "vps-anfrage",
|
||||
"mail-gateway": "mail-gateway-anfrage",
|
||||
webhosting: "webhosting-anfrage"
|
||||
};
|
||||
if (productSubjects[productParam]) {
|
||||
subjectField.value = productSubjects[productParam];
|
||||
messageField.value = "Hallo,\n\nich interessiere mich für Ihre " + productParam.replace("-", " ") + " Lösungen.\n\nBitte kontaktieren Sie mich für eine persönliche Beratung.\n\nVielen Dank!";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function initFieldUiEnhancements() {
|
||||
const inputElements = document.querySelectorAll("input, select, textarea");
|
||||
inputElements.forEach(inputEl => {
|
||||
inputEl.addEventListener("focus", function () {
|
||||
this.parentElement.classList.add("focused");
|
||||
});
|
||||
inputEl.addEventListener("blur", function () {
|
||||
if (!this.value) {
|
||||
this.parentElement.classList.remove("focused");
|
||||
}
|
||||
});
|
||||
if (inputEl.value) {
|
||||
inputEl.parentElement.classList.add("focused");
|
||||
}
|
||||
});
|
||||
const phoneInput = document.getElementById("phone");
|
||||
if (phoneInput) {
|
||||
phoneInput.addEventListener("input", function () {
|
||||
let digitsOnly = this.value.replace(/\D/g, "");
|
||||
if (digitsOnly.startsWith("49")) {
|
||||
digitsOnly = "+" + digitsOnly;
|
||||
} else if (digitsOnly.startsWith("0")) {
|
||||
digitsOnly = "+49" + digitsOnly.substring(1);
|
||||
}
|
||||
this.value = digitsOnly;
|
||||
});
|
||||
}
|
||||
}
|
||||
function initAccessibility() {
|
||||
const requiredInputs = document.querySelectorAll("input[required], select[required], textarea[required]");
|
||||
requiredInputs.forEach(requiredInput => {
|
||||
requiredInput.setAttribute("aria-required", "true");
|
||||
});
|
||||
const faqQuestions = document.querySelectorAll(".faq-question");
|
||||
faqQuestions.forEach(questionEl => {
|
||||
questionEl.setAttribute("tabindex", "0");
|
||||
questionEl.setAttribute("role", "button");
|
||||
questionEl.setAttribute("aria-expanded", "false");
|
||||
questionEl.addEventListener("keydown", function (keyboardEvent) {
|
||||
if (keyboardEvent.key === "Enter" || keyboardEvent.key === " ") {
|
||||
keyboardEvent.preventDefault();
|
||||
this.click();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
initFaqAccordion();
|
||||
initContactForm();
|
||||
prefillFromQueryParams();
|
||||
initFieldUiEnhancements();
|
||||
initAccessibility();
|
||||
setTimeout(() => {
|
||||
showNotification("💬 Haben Sie Fragen? Wir helfen gerne!", "info");
|
||||
}, 2000);
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user