From e91cd8572e4855f001c85bcff8a2aa28e9836be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Estelle=20K=C3=B6hler?= Date: Sun, 12 Apr 2026 15:37:31 +0200 Subject: [PATCH] fix: proper umlauts across all files, simplify gallery upload, fix Menu spelling, show local events in overview --- css/event_create.css | 64 +++++++++++++++++++++++++++++++++++++++++++ css/my_profil.css | 6 ++-- data/events.json | 4 +-- event_create.html | 9 ++++++ js/event_create.js | 65 ++++++++++++++++++++++++++++++++++++++++++-- js/event_detail.js | 14 +++++----- js/event_overview.js | 12 ++++---- js/index-carousel.js | 14 +++++----- js/landingpage.js | 4 +-- js/login.js | 10 +++---- js/my_profil.js | 34 +++++++++++------------ js/navigation.js | 10 +++---- js/signup.js | 10 +++---- 13 files changed, 194 insertions(+), 62 deletions(-) diff --git a/css/event_create.css b/css/event_create.css index 6ebf2f4..6180ba1 100644 --- a/css/event_create.css +++ b/css/event_create.css @@ -562,6 +562,70 @@ textarea:focus { margin-top: var(--space-2); } +/* Gallery Upload */ +.gallery-upload { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.75rem; +} + +.gallery-preview { + display: contents; +} + +.gallery-thumb { + position: relative; + width: 5.5rem; + height: 5.5rem; + border-radius: var(--radius-sm, 0.5rem); + overflow: hidden; + flex-shrink: 0; +} + +.gallery-thumb img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.gallery-thumb-remove { + position: absolute; + top: 0.2rem; + right: 0.2rem; + width: 1.4rem; + height: 1.4rem; + border: 0; + border-radius: 50%; + background: rgba(0, 0, 0, 0.6); + color: #fff; + font-size: 0.85rem; + line-height: 1; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; +} + +.gallery-add-btn { + width: 5.5rem; + height: 5.5rem; + border: 2px dashed var(--color-border-strong); + border-radius: var(--radius-sm, 0.5rem); + background: transparent; + font-size: 2rem; + color: var(--color-muted); + cursor: pointer; + flex-shrink: 0; + transition: border-color 0.15s, color 0.15s; +} + +.gallery-add-btn:hover { + border-color: var(--olive); + color: var(--olive); +} + .site-footer { width: min(100% - 2rem, var(--max-width)); margin: 0 auto; diff --git a/css/my_profil.css b/css/my_profil.css index 28c9e15..3e7095f 100644 --- a/css/my_profil.css +++ b/css/my_profil.css @@ -1,4 +1,4 @@ -.profile-page { +.profile-page { /* Reserve a large safe zone below sticky nav so title/actions are never covered. */ margin-top: 0; padding-top: 6.5rem; @@ -76,7 +76,7 @@ color: var(--white); } -/* Konsistentes Karten-Layout fuer alle Profilsektionen. */ +/* Konsistentes Karten-Layout für alle Profilsektionen. */ .profile-panel { background: rgba(255, 255, 255, 0.88); border-radius: var(--radius-lg); @@ -113,7 +113,7 @@ gap: var(--space-2); } -/* Einzelne Eventkarte fuer "Meine Events" und "Meine Anmeldungen". */ +/* Einzelne Eventkarte für "Meine Events" und "Meine Anmeldungen". */ .profile-event-card { border: 1px solid rgba(107, 107, 5, 0.25); border-radius: var(--radius-md); diff --git a/data/events.json b/data/events.json index 8019ea7..270a96a 100644 --- a/data/events.json +++ b/data/events.json @@ -1,4 +1,4 @@ -[ +[ { "id": 1, "title": "Italienische Tavolata", @@ -15,7 +15,7 @@ }, "hostMessage": [ "Ciao zusammen! Ich liebe die italienische Küche, nicht nur wegen des Essens, sondern wegen des Gefühls: Alle sitzen an einem langen Tisch, teilen sich grosse Platten und geniessen die Zeit.", - "Genau das möchte ich mit euch teilen. Ich bereite dafuer eine klassische Tavolata vor, bei der verschiedene Gerichte in die Mitte des Tisches kommen und sich jeder bedient." + "Genau das möchte ich mit euch teilen. Ich bereite dafür eine klassische Tavolata vor, bei der verschiedene Gerichte in die Mitte des Tisches kommen und sich jeder bedient." ], "menu": [ "Bruschetta-Variationen und Antipasti", diff --git a/event_create.html b/event_create.html index 39acc1c..4b2aeba 100644 --- a/event_create.html +++ b/event_create.html @@ -285,6 +285,15 @@ + +
+ + +
diff --git a/js/event_create.js b/js/event_create.js index 51d81ec..608c422 100644 --- a/js/event_create.js +++ b/js/event_create.js @@ -1,4 +1,4 @@ -// ============================= +// ============================= // SETUP: Wichtige HTML-Elemente holen // Diese Konstanten verbinden unser JavaScript mit dem HTML. // So können wir später Buttons, Formularfelder und Bereiche steuern. @@ -428,9 +428,9 @@ function buildStoredEvent() { ? [] : getCheckboxValues("allergies").split(", ").filter(Boolean), allergiesNote: form.elements.allergiesOther.value.trim(), - // Host wird separat gefuehrt und nicht als angemeldeter Gast gezaehlt. + // Host wird separat geführt und nicht als angemeldeter Gast gezählt. participants: [], - gallery: [], + gallery: [...galleryImages], createdAt: new Date().toISOString(), source: "local" }; @@ -737,6 +737,64 @@ function focusFieldByName(fieldName) { } +// ============================= +// STEP 8b: Galerie-Upload (Fotos hinzufügen) +// ============================= +const galleryImages = []; + +function registerGalleryHandlers() { + const addBtn = document.getElementById("galleryAddBtn"); + const fileInput = document.getElementById("galleryFileInput"); + const preview = document.getElementById("galleryPreview"); + + if (!addBtn) return; + + // Klick auf + öffnet direkt den Datei-Dialog + addBtn.addEventListener("click", () => { + fileInput.click(); + }); + + // Datei(en) hochladen + fileInput.addEventListener("change", () => { + Array.from(fileInput.files).forEach(file => { + if (!file.type.startsWith("image/")) return; + const reader = new FileReader(); + reader.onload = (e) => { + addGalleryImage(e.target.result); + }; + reader.readAsDataURL(file); + }); + fileInput.value = ""; + }); + + function addGalleryImage(src) { + galleryImages.push(src); + renderGalleryPreview(); + } + + function removeGalleryImage(index) { + galleryImages.splice(index, 1); + renderGalleryPreview(); + } + + function renderGalleryPreview() { + preview.innerHTML = ""; + galleryImages.forEach((src, i) => { + const thumb = document.createElement("div"); + thumb.className = "gallery-thumb"; + thumb.innerHTML = ` + Foto ${i + 1} + + `; + thumb.querySelector(".gallery-thumb-remove").addEventListener("click", () => { + removeGalleryImage(i); + }); + preview.appendChild(thumb); + }); + } +} + + // ============================= // STEP 9: Alles starten // Hier werden alle Event Listener registriert @@ -765,6 +823,7 @@ function initEventCreationFlow() { registerMenuBulletHandler(); registerValidationFeedbackHandlers(); registerReviewEditHandlers(); + registerGalleryHandlers(); // Browser-Zurück-Taste: vorherigen Schritt wiederherstellen window.addEventListener("popstate", (e) => { diff --git a/js/event_detail.js b/js/event_detail.js index ea7d0aa..a83870e 100644 --- a/js/event_detail.js +++ b/js/event_detail.js @@ -1,4 +1,4 @@ -document.addEventListener('DOMContentLoaded', async () => { +document.addEventListener('DOMContentLoaded', async () => { const EVENTS_STORAGE_KEY = 'socialCookingEvents'; const CURRENT_USER_KEY = 'socialCookingCurrentUser'; const REGISTRATION_STORAGE_KEY = 'socialCookingRegistrations'; @@ -152,13 +152,13 @@ document.addEventListener('DOMContentLoaded', async () => { return userEmail === hostEmail; } - // Fallback fuer aeltere Datensaetze ohne hostEmail. + // Fallback für ältere Datensätze ohne hostEmail. const userFirstName = String(user.vorname || '').trim().toLowerCase(); const hostName = String(event.host?.name || '').trim().toLowerCase(); return Boolean(userFirstName && hostName && userFirstName === hostName); } - // Prueft, ob der aktuelle Benutzer bereits in der Teilnehmerliste des Events steht. + // Prüft, ob der aktuelle Benutzer bereits in der Teilnehmerliste des Events steht. function isUserListedInEventParticipants(event, user) { if (!event || !user || !Array.isArray(event.participants)) { return false; @@ -258,7 +258,7 @@ document.addEventListener('DOMContentLoaded', async () => { : ['Der Host hat für dieses Event noch keine Nachricht hinterlegt.']; const menuItems = Array.isArray(event.menu) && event.menu.length > 0 ? event.menu - : ['Menü wird in Kuerze bekannt gegeben.']; + : ['Menü wird in Kürze bekannt gegeben.']; const specifications = Array.isArray(event.specifications) && event.specifications.length > 0 ? event.specifications : []; @@ -329,7 +329,7 @@ document.addEventListener('DOMContentLoaded', async () => { ${event.location} -

${displayDate} | ${displayTime} | ${confirmedGuests}/${totalGuests} Gaeste

+

${displayDate} | ${displayTime} | ${confirmedGuests}/${totalGuests} Gäste

${event.title}

@@ -349,7 +349,7 @@ document.addEventListener('DOMContentLoaded', async () => {
-

Menue

+

Menu

    ${menuItems.map(item => `
  • ${item}
  • `).join('')}
@@ -393,7 +393,7 @@ document.addEventListener('DOMContentLoaded', async () => { ${event.location} - | ${displayDate} | ${displayTime} | ${confirmedGuests}/${totalGuests} Gaeste + | ${displayDate} | ${displayTime} | ${confirmedGuests}/${totalGuests} Gäste ${event.title}
diff --git a/js/event_overview.js b/js/event_overview.js index a749cec..b3bff24 100644 --- a/js/event_overview.js +++ b/js/event_overview.js @@ -1,4 +1,4 @@ -document.addEventListener('DOMContentLoaded', () => { +document.addEventListener('DOMContentLoaded', () => { const EVENTS_STORAGE_KEY = 'socialCookingEvents'; const CURRENT_USER_KEY = 'socialCookingCurrentUser'; const REGISTRATION_STORAGE_KEY = 'socialCookingRegistrations'; @@ -28,7 +28,7 @@ document.addEventListener('DOMContentLoaded', () => { } } - // Prueft, ob ein Event dem aktuellen Benutzer gehoert. + // Prüft, ob ein Event dem aktuellen Benutzer gehört. function isEventOwnedByCurrentUser(event, user) { if (!event || !user) { return false; @@ -198,7 +198,7 @@ document.addEventListener('DOMContentLoaded', () => { : `${timeString} Uhr`; } - // Baut aus Eventdatum/-zeit ein Date-Objekt fuer Fristlogik und Vergleiche. + // Baut aus Eventdatum/-zeit ein Date-Objekt für Fristlogik und Vergleiche. function parseEventDateTime(event) { if (!event?.date) { return null; @@ -252,7 +252,7 @@ document.addEventListener('DOMContentLoaded', () => { return new Date(year, month - 1, day, hours, minutes, 0, 0); } - // Zaehlt eindeutige Registrierungen eines Events ueber alle Benutzer. + // Zählt eindeutige Registrierungen eines Events über alle Benutzer. function countRegistrationsForEvent(registrationMap, eventId) { return Object.values(registrationMap).reduce((count, ids) => { const hasEvent = Array.isArray(ids) @@ -385,7 +385,7 @@ document.addEventListener('DOMContentLoaded', () => { ${event.location} -

${displayDate} | ${displayTime} | ${bookedSeats}/${totalCapacity} Gaeste

+

${displayDate} | ${displayTime} | ${bookedSeats}/${totalCapacity} Gäste

${event.title}

@@ -444,7 +444,7 @@ document.addEventListener('DOMContentLoaded', () => { } } - // Anmeldung: Benutzer zum Event hinzufuegen und Snackbar anzeigen. + // Anmeldung: Benutzer zum Event hinzufügen und Snackbar anzeigen. if (action === 'register' && !isFull && !isRegistrationClosed) { idSet.add(Number(event.id)); const snackbar = document.getElementById('snackbar'); diff --git a/js/index-carousel.js b/js/index-carousel.js index 8d6221d..68699c8 100644 --- a/js/index-carousel.js +++ b/js/index-carousel.js @@ -1,4 +1,4 @@ -// ============================================= +// ============================================= // Galerie-Karussell (Startseite) // Diese Datei steuert die Foto-Galerie mit Pfeilen. // ============================================= @@ -9,7 +9,7 @@ const prevArrow = document.querySelector('.gallery__arrow--prev'); const nextArrow = document.querySelector('.gallery__arrow--next'); const dotsContainer = document.querySelector('.gallery__dots'); -// Nur ausfuehren, wenn die Galerie auf der Seite vorhanden ist. +// Nur ausführen, wenn die Galerie auf der Seite vorhanden ist. if (carouselTrack) { // Alle einzelnen Karten/Bilder im Track sammeln. const items = Array.from(carouselTrack.querySelectorAll('.gallery__item')); @@ -62,7 +62,7 @@ if (carouselTrack) { updateTrack(); } - // Geht zur naechsten Seite (mit Wrap-around am Ende). + // Geht zur nächsten Seite (mit Wrap-around am Ende). function showNext() { activePage = (activePage + 1) % pageCount; updateTrack(); @@ -80,13 +80,13 @@ if (carouselTrack) { if (nextArrow) nextArrow.addEventListener('click', showNext); if (prevArrow) prevArrow.addEventListener('click', showPrev); - // Tastatur-Support fuer Barrierefreiheit. + // Tastatur-Support für Barrierefreiheit. document.addEventListener('keydown', function(event) { if (event.key === 'ArrowRight') showNext(); if (event.key === 'ArrowLeft') showPrev(); }); - // Reagiert auf Bildschirmgroessen-Aenderungen. + // Reagiert auf Bildschirmgrössen-Änderungen. window.addEventListener('resize', function() { var newPerPage = getItemsPerPage(); if (newPerPage !== itemsPerPage) { @@ -99,7 +99,7 @@ if (carouselTrack) { }); // ============================================= - // Lightbox: Bild vergroessern bei Klick + // Lightbox: Bild vergrössern bei Klick // ============================================= const lightbox = document.getElementById('gallery-lightbox'); const lightboxImage = lightbox ? lightbox.querySelector('.lightbox__image') : null; @@ -119,7 +119,7 @@ if (carouselTrack) { lightboxImage.src = ''; } - // Klick auf Galerie-Bild oeffnet die Lightbox. + // Klick auf Galerie-Bild öffnet die Lightbox. items.forEach(function(item) { var img = item.querySelector('img'); if (img) { diff --git a/js/landingpage.js b/js/landingpage.js index 46c015c..0ca19c5 100644 --- a/js/landingpage.js +++ b/js/landingpage.js @@ -1,4 +1,4 @@ -// ============================================= +// ============================================= // Mini-Galerie auf der Landingpage // Diese Datei hebt immer ein Bild hervor und // erlaubt Navigation mit Pfeilen/Tastatur. @@ -38,7 +38,7 @@ function showPrev() { if (nextBtn) nextBtn.addEventListener('click', showNext); if (prevBtn) prevBtn.addEventListener('click', showPrev); -// Tastatursteuerung fuer bessere Bedienbarkeit. +// Tastatursteuerung für bessere Bedienbarkeit. document.addEventListener('keydown', (event) => { if (event.key === 'ArrowRight') { showNext(); diff --git a/js/login.js b/js/login.js index ad1c486..fc1414e 100644 --- a/js/login.js +++ b/js/login.js @@ -1,4 +1,4 @@ -// ============================================= +// ============================================= // Login-Logik // Diese Datei validiert die Eingaben, sucht den // Benutzer im localStorage und legt die Session an. @@ -25,12 +25,12 @@ function getStoredUsers() { } } -// Speichert den aktiven Benutzer fuer nachfolgende Seiten. +// Speichert den aktiven Benutzer für nachfolgende Seiten. function setCurrentUser(user) { localStorage.setItem(CURRENT_USER_KEY, JSON.stringify(user)); } -// Erstellt einen Demo-Benutzer, falls fuer die E-Mail noch kein Account existiert. +// Erstellt einen Demo-Benutzer, falls für die E-Mail noch kein Account existiert. function createFallbackUser(email, passwort) { const localPart = email.split('@')[0] || 'Gast'; const normalized = localPart.replace(/[._-]/g, ' ').trim(); @@ -86,7 +86,7 @@ function validateForm(event) { passwortGroup.classList.remove('has-error'); } - // Wenn alle Validierungen bestanden, pruefen wir: + // Wenn alle Validierungen bestanden, prüfen wir: // 1) gibt es den Benutzer schon? // 2) ist das Passwort korrekt? // Danach speichern wir die aktive Session. @@ -103,7 +103,7 @@ function validateForm(event) { const userToLogin = matchedUser || createFallbackUser(emailValue, passwortValue); setCurrentUser(userToLogin); - // Snackbar anzeigen und dann zur Event-Uebersicht weiterleiten. + // Snackbar anzeigen und dann zur Event-Übersicht weiterleiten. var snackbar = document.getElementById('snackbar'); if (snackbar) { snackbar.classList.add('snackbar--visible'); diff --git a/js/my_profil.js b/js/my_profil.js index b92d1c9..5ad8c9d 100644 --- a/js/my_profil.js +++ b/js/my_profil.js @@ -1,10 +1,10 @@ -document.addEventListener('DOMContentLoaded', () => { +document.addEventListener('DOMContentLoaded', () => { const EVENTS_STORAGE_KEY = 'socialCookingEvents'; const USERS_STORAGE_KEY = 'socialCookingUsers'; const CURRENT_USER_KEY = 'socialCookingCurrentUser'; const REGISTRATION_STORAGE_KEY = 'socialCookingRegistrations'; - // Zentrale DOM-Referenzen fuer klare, testbare Funktionen. + // Zentrale DOM-Referenzen für klare, testbare Funktionen. const loggedOutState = document.getElementById('logged-out-state'); const loggedInContent = document.getElementById('logged-in-content'); const profileHeadline = document.getElementById('profile-headline'); @@ -109,7 +109,7 @@ document.addEventListener('DOMContentLoaded', () => { profileSubline.textContent = 'Bitte logge dich ein, um deinen Bereich zu sehen.'; } - // Fuellt Ueberschriften und Formular mit den aktuellen Benutzerdaten. + // Füllt Überschriften und Formular mit den aktuellen Benutzerdaten. function renderLoggedInState(user) { loggedOutState.classList.add('hidden'); loggedInContent.classList.remove('hidden'); @@ -154,7 +154,7 @@ document.addEventListener('DOMContentLoaded', () => { }); } - // Globale Funktionen fuer das Logout-Modal. + // Globale Funktionen für das Logout-Modal. window.closeLogoutModal = function() { const logoutModal = document.getElementById('logoutModal'); logoutModal.classList.remove('show'); @@ -305,7 +305,7 @@ document.addEventListener('DOMContentLoaded', () => { }); setStoredEvents(nextStoredEvents); - // Event-ID fuer alle Benutzer aus den Anmeldungen entfernen. + // Event-ID für alle Benutzer aus den Anmeldungen entfernen. const registrationMap = getRegistrationMap(); Object.keys(registrationMap).forEach(email => { const ids = Array.isArray(registrationMap[email]) @@ -366,12 +366,12 @@ document.addEventListener('DOMContentLoaded', () => { return isValid; } - // Speichert Profilaenderungen lokal und synchronisiert auch den Benutzerkatalog. + // Speichert Profiländerungen lokal und synchronisiert auch den Benutzerkatalog. function handleProfileSubmit(event) { event.preventDefault(); if (!validateProfileForm()) { - profileFeedback.textContent = 'Bitte pruefe die markierten Felder.'; + profileFeedback.textContent = 'Bitte prüfe die markierten Felder.'; return; } @@ -389,7 +389,7 @@ document.addEventListener('DOMContentLoaded', () => { localStorage.setItem(CURRENT_USER_KEY, JSON.stringify(nextUser)); syncUserInUserStore(previousEmail, nextUser); - // Falls sich die E-Mail geaendert hat, verschieben wir bestehende Anmeldungen auf die neue E-Mail. + // Falls sich die E-Mail geändert hat, verschieben wir bestehende Anmeldungen auf die neue E-Mail. migrateRegistrationEmail(previousEmail, nextUser.email); passwortInput.value = ''; @@ -450,7 +450,7 @@ document.addEventListener('DOMContentLoaded', () => { }); } - // Ermittelt angemeldete Events ueber die Registration-Map. + // Ermittelt angemeldete Events über die Registration-Map. function getMyRegisteredEvents(events, user) { const registrationMap = getRegistrationMap(); const registeredIds = Array.isArray(registrationMap[user.email]) ? registrationMap[user.email] : []; @@ -459,7 +459,7 @@ document.addEventListener('DOMContentLoaded', () => { return events.filter(event => idSet.has(Number(event.id))); } - // Rendert gehostete Events inkl. Zaehler. + // Rendert gehostete Events inkl. Zähler. function renderMyEvents(events, user) { const hostedEvents = getMyHostedEvents(events, user); myEventsCount.textContent = String(hostedEvents.length); @@ -471,7 +471,7 @@ document.addEventListener('DOMContentLoaded', () => { }, 'hosting'); } - // Rendert angemeldete Events inkl. Zaehler. + // Rendert angemeldete Events inkl. Zähler. function renderMyRegistrations(events, user) { const registeredEvents = getMyRegisteredEvents(events, user); myRegistrationsCount.textContent = String(registeredEvents.length); @@ -483,7 +483,7 @@ document.addEventListener('DOMContentLoaded', () => { }, 'registrations'); } - // Baut die Eventkarten fuer beide Listen in einheitlichem Markup. + // Baut die Eventkarten für beide Listen in einheitlichem Markup. function renderEventCards(container, events, emptyStateConfig, mode) { container.innerHTML = ''; @@ -538,7 +538,7 @@ document.addEventListener('DOMContentLoaded', () => { }); } - // Gibt true zurueck, wenn ein Event innerhalb der naechsten 12 Stunden startet. + // Gibt true zurück, wenn ein Event innerhalb der nächsten 12 Stunden startet. function isAddressVisibleWindow(event) { const eventDateTime = parseEventDateTime(event); if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) { @@ -551,7 +551,7 @@ document.addEventListener('DOMContentLoaded', () => { return msUntilStart >= 0 && msUntilStart <= twelveHoursInMs; } - // Parse fuer ISO- und lokalisierte Datumsformate aus den Eventdaten. + // Parse für ISO- und lokalisierte Datumsformate aus den Eventdaten. function parseEventDateTime(event) { if (!event?.date) { return null; @@ -605,7 +605,7 @@ document.addEventListener('DOMContentLoaded', () => { return new Date(year, month - 1, day, hours, minutes, 0, 0); } - // Formatiert ein Eventdatum konsistent fuer die Profilkarten. + // Formatiert ein Eventdatum konsistent für die Profilkarten. function formatEventDate(dateString) { if (!dateString) { return 'Kein Datum'; @@ -620,7 +620,7 @@ document.addEventListener('DOMContentLoaded', () => { return dateString; } - // Vereinheitlicht die Zeitanzeige fuer die Profilseite. + // Vereinheitlicht die Zeitanzeige für die Profilseite. function formatEventTime(timeString) { if (!timeString) { return 'Keine Uhrzeit'; @@ -629,7 +629,7 @@ document.addEventListener('DOMContentLoaded', () => { return timeString.includes('UHR') ? timeString.replace('UHR', 'Uhr').trim() : timeString; } - // Normalisiert Vergleichswerte fuer robuste String-Matches. + // Normalisiert Vergleichswerte für robuste String-Matches. function normalizeText(value) { return String(value || '').trim().toLowerCase(); } diff --git a/js/navigation.js b/js/navigation.js index ab840b3..0b7f8c5 100644 --- a/js/navigation.js +++ b/js/navigation.js @@ -1,6 +1,6 @@ -// ============================================= +// ============================================= // Dynamische Navigation -// Je nach Login-Status wird die Kopfzeile fuer +// Je nach Login-Status wird die Kopfzeile für // alle Seiten mit passendem Markup aufgebaut. // ============================================= @@ -9,7 +9,7 @@ document.addEventListener('DOMContentLoaded', () => { const navContainers = document.querySelectorAll('.nav-tab-links'); const currentPage = (window.location.pathname.split('/').pop() || 'index.html').toLowerCase(); - // Beendet frueh, falls auf einer Seite keine Hauptnavigation vorhanden ist. + // Beendet früh, falls auf einer Seite keine Hauptnavigation vorhanden ist. if (!navContainers.length) { return; } @@ -25,7 +25,7 @@ document.addEventListener('DOMContentLoaded', () => { } } - // Baut die Navigation fuer ausgeloggte Besucher. + // Baut die Navigation für ausgeloggte Besucher. function buildLoggedOutNavigation() { const loginIsActive = currentPage === 'login.html'; const signupIsActive = currentPage === 'signup.html'; @@ -64,7 +64,7 @@ document.addEventListener('DOMContentLoaded', () => { `; } - // Baut die Navigation fuer eingeloggte Benutzer. + // Baut die Navigation für eingeloggte Benutzer. function buildLoggedInNavigation(user) { const initial = (user.vorname || 'U').charAt(0).toUpperCase(); const isEventOverview = currentPage === 'event_overview.html'; diff --git a/js/signup.js b/js/signup.js index 98f066b..9329f96 100644 --- a/js/signup.js +++ b/js/signup.js @@ -1,4 +1,4 @@ -// ============================================= +// ============================================= // Signup-Logik // Diese Datei validiert das Formular, speichert // neue Benutzer lokal und startet direkt die Session. @@ -31,7 +31,7 @@ function setStoredUsers(users) { localStorage.setItem(USERS_STORAGE_KEY, JSON.stringify(users)); } -// Speichert den aktiven Benutzer fuer nachfolgende Seiten. +// Speichert den aktiven Benutzer für nachfolgende Seiten. function setCurrentUser(user) { localStorage.setItem(CURRENT_USER_KEY, JSON.stringify(user)); } @@ -49,7 +49,7 @@ function closeWelcomeModal() { window.location.href = 'event_overview.html'; } -// Hauptfunktion fuer Formularvalidierung und Speicherung. +// Hauptfunktion für Formularvalidierung und Speicherung. function validateForm(event) { event.preventDefault(); @@ -110,8 +110,8 @@ function validateForm(event) { passwortGroup.classList.remove('has-error'); } - // Wenn alles gueltig ist: - // 1) auf doppelte E-Mail pruefen + // Wenn alles gültig ist: + // 1) auf doppelte E-Mail prüfen // 2) neuen Benutzer speichern // 3) als aktuellen Benutzer einloggen if (isValid) {