Korrekturen von Shahnam und Vincent für die Navigation zusammengeführt
Produktübersicht und Pakete unverändert aus den Fehlerbehebungsbranches kombiniert. Laufende lokale Navigationsarbeiten bleiben außerhalb dieses Commits.S-V-Navigation
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 324 KiB |
|
After Width: | Height: | Size: 682 KiB |
|
After Width: | Height: | Size: 751 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
|
@ -2,11 +2,11 @@
|
||||||
// Markiert das gewählte Paket visuell und stellt die Auswahl bereit,
|
// Markiert das gewählte Paket visuell und stellt die Auswahl bereit,
|
||||||
// damit US-01-03 (Pakete online buchen) später darauf aufbauen kann.
|
// damit US-01-03 (Pakete online buchen) später darauf aufbauen kann.
|
||||||
|
|
||||||
|
// US-01-02 Leistungsübersicht
|
||||||
document.addEventListener("DOMContentLoaded", async () => {
|
document.addEventListener("DOMContentLoaded", async () => {
|
||||||
const section = document.getElementById("leistungen");
|
const section = document.getElementById("leistungen");
|
||||||
if (!section) return;
|
if (!section) return;
|
||||||
|
|
||||||
// Integration: Der Datenpfad muss zum vorhandenen JSON-Ordner passen.
|
|
||||||
let daten;
|
let daten;
|
||||||
try {
|
try {
|
||||||
const response = await fetch("json/pakete.json");
|
const response = await fetch("json/pakete.json");
|
||||||
|
|
@ -18,45 +18,65 @@ document.addEventListener("DOMContentLoaded", async () => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Elemente aus dem HTML holen
|
|
||||||
const titel = section.querySelector(".pakete__titel");
|
const titel = section.querySelector(".pakete__titel");
|
||||||
const text = section.querySelector(".pakete__text");
|
const text = section.querySelector(".pakete__text");
|
||||||
const grid = section.querySelector(".pakete__grid");
|
const grid = section.querySelector(".pakete__grid");
|
||||||
|
|
||||||
// Intro mit Daten aus JSON füllen
|
|
||||||
titel.textContent = daten.intro.titel;
|
titel.textContent = daten.intro.titel;
|
||||||
text.textContent = daten.intro.text;
|
text.textContent = daten.intro.text;
|
||||||
|
|
||||||
// Vorhandenen Inhalt entfernen
|
|
||||||
grid.innerHTML = "";
|
grid.innerHTML = "";
|
||||||
|
|
||||||
// Für jedes Paket eine Karte erstellen
|
// Mappe Bild-Platzhalter zu den Paketen
|
||||||
daten.pakete.forEach(paket => {
|
const bilderMap = {
|
||||||
|
"Starter": "images/paket-starter.jpg",
|
||||||
|
"STANDART": "images/paket-standard.jpg",
|
||||||
|
"Rundum Sorglos Paket": "images/paket-premium.jpg"
|
||||||
|
};
|
||||||
|
|
||||||
// Artikel erstellen
|
daten.pakete.forEach(paket => {
|
||||||
const karte = document.createElement("article");
|
const karte = document.createElement("article");
|
||||||
karte.classList.add("paket-karte");
|
karte.classList.add("paket-karte");
|
||||||
|
|
||||||
// Empfohlenes Paket bekommt zusätzliche Klasse
|
|
||||||
if (paket.empfohlen) {
|
if (paket.empfohlen) {
|
||||||
karte.classList.add("paket-karte--empfohlen");
|
karte.classList.add("paket-karte--empfohlen");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Badge nur erstellen, wenn eines vorhanden ist
|
// --- 1. Bildbereich (Platzhalter) ---
|
||||||
if (paket.badge) {
|
const imgContainer = document.createElement("div");
|
||||||
const badge = document.createElement("p");
|
imgContainer.classList.add("paket-karte__image-wrapper");
|
||||||
badge.classList.add("paket-karte__badge");
|
|
||||||
badge.textContent = paket.badge;
|
const img = document.createElement("img");
|
||||||
karte.appendChild(badge);
|
img.src = bilderMap[paket.name] || "images/paket-placeholder.jpg";
|
||||||
}
|
img.alt = `Vorschau ${paket.name}`;
|
||||||
|
img.classList.add("paket-karte__image");
|
||||||
|
imgContainer.appendChild(img);
|
||||||
|
|
||||||
|
karte.appendChild(imgContainer);
|
||||||
|
|
||||||
|
// --- Content-Container für sauberes Layout ---
|
||||||
|
const content = document.createElement("div");
|
||||||
|
content.classList.add("paket-karte__content");
|
||||||
|
|
||||||
|
// --- 2. Header: Paketname + Badge nebeneinander ---
|
||||||
|
const header = document.createElement("div");
|
||||||
|
header.classList.add("paket-karte__header");
|
||||||
|
|
||||||
// Name
|
|
||||||
const name = document.createElement("h3");
|
const name = document.createElement("h3");
|
||||||
name.classList.add("paket-karte__name");
|
name.classList.add("paket-karte__name");
|
||||||
name.textContent = paket.name;
|
name.textContent = paket.name;
|
||||||
karte.appendChild(name);
|
header.appendChild(name);
|
||||||
|
|
||||||
// Preis
|
if (paket.badge) {
|
||||||
|
const badge = document.createElement("span");
|
||||||
|
badge.classList.add("paket-karte__badge");
|
||||||
|
badge.textContent = paket.badge;
|
||||||
|
header.appendChild(badge);
|
||||||
|
}
|
||||||
|
|
||||||
|
content.appendChild(header);
|
||||||
|
|
||||||
|
// --- 3. Preis ---
|
||||||
const preis = document.createElement("p");
|
const preis = document.createElement("p");
|
||||||
preis.classList.add("paket-karte__preis");
|
preis.classList.add("paket-karte__preis");
|
||||||
|
|
||||||
|
|
@ -70,15 +90,15 @@ document.addEventListener("DOMContentLoaded", async () => {
|
||||||
|
|
||||||
preis.appendChild(betrag);
|
preis.appendChild(betrag);
|
||||||
preis.appendChild(zeitraum);
|
preis.appendChild(zeitraum);
|
||||||
karte.appendChild(preis);
|
content.appendChild(preis);
|
||||||
|
|
||||||
// Beschreibung
|
// --- 4. Beschreibung ---
|
||||||
const beschreibung = document.createElement("p");
|
const beschreibung = document.createElement("p");
|
||||||
beschreibung.classList.add("paket-karte__beschreibung");
|
beschreibung.classList.add("paket-karte__beschreibung");
|
||||||
beschreibung.textContent = paket.beschreibung;
|
beschreibung.textContent = paket.beschreibung;
|
||||||
karte.appendChild(beschreibung);
|
content.appendChild(beschreibung);
|
||||||
|
|
||||||
// Leistungen
|
// --- 5. Leistungsliste ---
|
||||||
const liste = document.createElement("ul");
|
const liste = document.createElement("ul");
|
||||||
liste.classList.add("paket-karte__leistungen");
|
liste.classList.add("paket-karte__leistungen");
|
||||||
|
|
||||||
|
|
@ -88,9 +108,9 @@ document.addEventListener("DOMContentLoaded", async () => {
|
||||||
liste.appendChild(punkt);
|
liste.appendChild(punkt);
|
||||||
});
|
});
|
||||||
|
|
||||||
karte.appendChild(liste);
|
content.appendChild(liste);
|
||||||
|
|
||||||
// Button
|
// --- 6. Button ---
|
||||||
const button = document.createElement("button");
|
const button = document.createElement("button");
|
||||||
button.classList.add("paket-karte__cta");
|
button.classList.add("paket-karte__cta");
|
||||||
button.type = "button";
|
button.type = "button";
|
||||||
|
|
@ -98,7 +118,6 @@ document.addEventListener("DOMContentLoaded", async () => {
|
||||||
button.dataset.paket = paket.dataPaket;
|
button.dataset.paket = paket.dataPaket;
|
||||||
button.setAttribute("aria-pressed", "false");
|
button.setAttribute("aria-pressed", "false");
|
||||||
|
|
||||||
// Die Paketauswahl aus der ersten Version auch nach dem JSON-Rendering erhalten.
|
|
||||||
button.addEventListener("click", () => {
|
button.addEventListener("click", () => {
|
||||||
grid.querySelectorAll(".paket-karte").forEach(andereKarte => {
|
grid.querySelectorAll(".paket-karte").forEach(andereKarte => {
|
||||||
andereKarte.classList.remove("paket-karte--ausgewaehlt");
|
andereKarte.classList.remove("paket-karte--ausgewaehlt");
|
||||||
|
|
@ -111,9 +130,9 @@ document.addEventListener("DOMContentLoaded", async () => {
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
karte.appendChild(button);
|
content.appendChild(button);
|
||||||
|
karte.appendChild(content);
|
||||||
|
|
||||||
// Karte ins Grid einfügen
|
|
||||||
grid.appendChild(karte);
|
grid.appendChild(karte);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||