Files
baumer/js/main.js

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'
});
}
});
});