197 lines
6.9 KiB
JavaScript
197 lines
6.9 KiB
JavaScript
// Aktuelles Jahr im Footer setzen
|
|
document.getElementById('year').textContent = new Date().getFullYear();
|
|
|
|
// URL-Parameter für Erfolgs-/Fehlermeldungen prüfen (Kontaktformular)
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
|
|
// Erfolgsmeldung anzeigen
|
|
if (urlParams.get('success') === '1') {
|
|
const successAlert = document.getElementById('alertSuccess');
|
|
if (successAlert) {
|
|
successAlert.classList.remove('d-none');
|
|
// Formular leeren
|
|
const form = document.getElementById('contactForm');
|
|
if (form) form.reset();
|
|
// Nach oben scrollen
|
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
}
|
|
}
|
|
|
|
// Fehlermeldung anzeigen
|
|
if (urlParams.get('error') === '1') {
|
|
const errorAlert = document.getElementById('alertError');
|
|
if (errorAlert) {
|
|
errorAlert.classList.remove('d-none');
|
|
const reason = urlParams.get('reason');
|
|
if (reason === 'rate_limit') {
|
|
errorAlert.innerHTML = '<i class="bi bi-exclamation-triangle-fill"></i> <strong>Zu viele Anfragen!</strong> Bitte warten Sie einen Moment, bevor Sie erneut versuchen.';
|
|
}
|
|
// Nach oben scrollen
|
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
}
|
|
}
|
|
|
|
// Kontaktformular: Maschine aus URL Parameter vorausfüllen
|
|
const maschine = urlParams.get('maschine');
|
|
const maschineInput = document.getElementById('maschine');
|
|
if (maschine && maschineInput) {
|
|
maschineInput.value = decodeURIComponent(maschine);
|
|
}
|
|
|
|
// Submit-Button Feedback
|
|
const contactForm = document.getElementById('contactForm');
|
|
if (contactForm) {
|
|
contactForm.addEventListener('submit', function() {
|
|
const submitBtn = document.getElementById('submitBtn');
|
|
if (submitBtn) {
|
|
submitBtn.disabled = true;
|
|
submitBtn.innerHTML = '<span class="spinner-border spinner-border-sm me-2"></span>Wird gesendet...';
|
|
}
|
|
});
|
|
}
|
|
|
|
// Maschinen laden
|
|
loadMaschinen();
|
|
});
|
|
|
|
// Maschinen laden und anzeigen
|
|
async function loadMaschinen() {
|
|
try {
|
|
const response = await fetch('data/maschinen.json');
|
|
const data = await response.json();
|
|
|
|
// Baumaschinen anzeigen
|
|
displayMaschinen(data.baumaschinen, 'baumaschinen-container');
|
|
|
|
// Gartengeräte anzeigen
|
|
displayMaschinen(data.gartengeraete, 'gartengeraete-container');
|
|
} catch (error) {
|
|
console.error('Fehler beim Laden der Maschinen:', error);
|
|
}
|
|
}
|
|
|
|
// Maschinen-Karten erstellen und anzeigen
|
|
function displayMaschinen(maschinen, containerId) {
|
|
const container = document.getElementById(containerId);
|
|
if (!container) return;
|
|
|
|
container.innerHTML = '';
|
|
|
|
maschinen.forEach(maschine => {
|
|
const card = createMaschinenCard(maschine);
|
|
container.appendChild(card);
|
|
});
|
|
}
|
|
|
|
// Einzelne Maschinen-Karte erstellen
|
|
function createMaschinenCard(maschine) {
|
|
const col = document.createElement('div');
|
|
col.className = 'col-md-6 col-lg-4';
|
|
|
|
// Besonderheiten als Liste
|
|
let besonderheitenHTML = '';
|
|
if (maschine.besonderheiten && maschine.besonderheiten.length > 0) {
|
|
besonderheitenHTML = '<ul class="list-unstyled mt-3">';
|
|
maschine.besonderheiten.forEach(item => {
|
|
besonderheitenHTML += `<li><i class="bi bi-check-circle-fill text-success"></i> ${item}</li>`;
|
|
});
|
|
besonderheitenHTML += '</ul>';
|
|
}
|
|
|
|
// Spezifikationen
|
|
let specsHTML = '<div class="specs mt-3 mb-3">';
|
|
if (maschine.gewicht) {
|
|
specsHTML += `<span class="badge bg-secondary me-2 mb-2"><i class="bi bi-weight"></i> ${maschine.gewicht}</span>`;
|
|
}
|
|
if (maschine.leistung) {
|
|
specsHTML += `<span class="badge bg-secondary me-2 mb-2"><i class="bi bi-lightning-charge"></i> ${maschine.leistung}</span>`;
|
|
}
|
|
if (maschine.arbeitsbreite) {
|
|
specsHTML += `<span class="badge bg-secondary me-2 mb-2"><i class="bi bi-arrows-expand"></i> ${maschine.arbeitsbreite}</span>`;
|
|
}
|
|
specsHTML += '</div>';
|
|
|
|
// Lieferung Info
|
|
let lieferungHTML = '';
|
|
if (maschine.lieferung) {
|
|
lieferungHTML = `
|
|
<div class="alert alert-info mt-3 mb-0">
|
|
<small><i class="bi bi-truck"></i> <strong>Lieferung:</strong> ${maschine.lieferung}</small>
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
// Mehrtagiger Preis
|
|
let mehrtagigHTML = '';
|
|
if (maschine.preisMehrtagig) {
|
|
mehrtagigHTML = `<p class="text-muted small mb-2">${maschine.preisMehrtagig}</p>`;
|
|
}
|
|
|
|
// Bild HTML
|
|
let imageHTML = '';
|
|
if (maschine.image) {
|
|
imageHTML = `<img src="${maschine.image}" class="card-img-top" alt="${maschine.title}">`;
|
|
}
|
|
|
|
col.innerHTML = `
|
|
<div class="card h-100 shadow-sm hover-card">
|
|
${imageHTML}
|
|
<div class="card-header bg-primary text-white">
|
|
<h5 class="card-title mb-0">${maschine.title}</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<p class="card-text">${maschine.beschreibung}</p>
|
|
|
|
${specsHTML}
|
|
${besonderheitenHTML}
|
|
|
|
<div class="preis-box mt-auto">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<span class="text-muted">Preis:</span>
|
|
<span class="h4 mb-0 text-primary fw-bold">${maschine.preis}</span>
|
|
</div>
|
|
${mehrtagigHTML}
|
|
</div>
|
|
|
|
${lieferungHTML}
|
|
</div>
|
|
<div class="card-footer bg-transparent border-top-0">
|
|
<a href="kontakt.html?maschine=${encodeURIComponent(maschine.title)}" class="btn btn-outline-primary w-100">
|
|
<i class="bi bi-envelope"></i> Anfrage senden
|
|
</a>
|
|
</div>
|
|
</div>
|
|
`;
|
|
|
|
return col;
|
|
}
|
|
|
|
// Beim Laden der Seite
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
loadMaschinen();
|
|
|
|
// Kontaktformular: Maschine aus URL Parameter vorausfüllen
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
const maschine = urlParams.get('maschine');
|
|
const maschineInput = document.getElementById('maschine');
|
|
|
|
if (maschine && maschineInput) {
|
|
maschineInput.value = decodeURIComponent(maschine);
|
|
}
|
|
});
|
|
|
|
// Smooth Scroll für Anker-Links
|
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
anchor.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
const target = document.querySelector(this.getAttribute('href'));
|
|
if (target) {
|
|
target.scrollIntoView({
|
|
behavior: 'smooth',
|
|
block: 'start'
|
|
});
|
|
}
|
|
});
|
|
});
|