Aufgabenverwaltung angepasst, Eventseite weiter bearbeitet
Some checks failed
Host-Based Deploy (Java 21 Fix) / build-and-run (push) Has been cancelled

This commit is contained in:
2026-04-14 22:04:47 +02:00
parent e35b095c18
commit fdc0cfce95
43 changed files with 861 additions and 370 deletions

View File

@@ -445,6 +445,9 @@ function renderPage() {
${isOwner ? `<button class="btn" style="font-size:0.8rem;" onclick="openEventModal()">+ Veranstaltung erstellen</button>` : ''}
</div>
<div class="event-list" id="eventList"><p style="color:var(--color-muted);font-size:0.9rem;">Wird geladen…</p></div>
<div id="allEventsLinkWrap" style="display:none;margin-top:0.75rem;">
<a id="allEventsLink" href="#" class="btn" style="display:inline-block;font-size:0.85rem;background:var(--color-secondary);color:var(--color-text);text-decoration:none;padding:0.45rem 1rem;border-radius:6px;">Alle Events anzeigen →</a>
</div>
<div id="pastEventsSection" style="display:none;">
<div class="section-title" style="margin-top:1.5rem;">Vergangene Veranstaltungen</div>
<div class="event-list" id="pastEventList"></div>
@@ -517,8 +520,8 @@ function renderPage() {
${locHeaderHtml}
${hoursHtml}
${gallerySection}
${feedSection}
${eventsSection}`;
${eventsSection}
${feedSection}`;
}
}
@@ -587,15 +590,27 @@ async function loadEvents() {
if (!list) return;
const now = new Date();
const future = events.filter(e => new Date(e.startAt) >= now);
const future = events.filter(e => new Date(e.startAt) >= now)
.sort((a, b) => new Date(a.startAt) - new Date(b.startAt));
const past = events.filter(e => new Date(e.startAt) < now)
.slice(-5) // letzte 5
.slice(-3) // letzte 3
.reverse(); // neueste zuerst
list.innerHTML = future.length
? future.map(e => buildEventCard(e, false)).join('')
const preview = future.slice(0, 3);
list.innerHTML = preview.length
? preview.map(e => buildEventCard(e, false)).join('')
: '<p style="color:var(--color-muted);font-size:0.9rem;">Keine bevorstehenden Veranstaltungen.</p>';
const linkWrap = document.getElementById('allEventsLinkWrap');
if (linkWrap) {
if (future.length > 3) {
document.getElementById('allEventsLink').href = `/community/location-events.html?id=${locationId}`;
linkWrap.style.display = '';
} else {
linkWrap.style.display = 'none';
}
}
const pastSection = document.getElementById('pastEventsSection');
if (past.length && pastSection) {
document.getElementById('pastEventList').innerHTML = past.map(e => buildEventCard(e, true)).join('');
@@ -1358,11 +1373,15 @@ function renderLocPost(p) {
<button class="post-action-btn post-delete" onclick="event.stopPropagation();deleteLocPost('${p.postId}')" title="Löschen">🗑</button>
</div>` : '';
const authorUrl = p.posterType === 'LOCATION'
? `/community/location-detail.html?id=${p.locationId || p.authorId}`
: `/community/benutzer.html?userId=${p.authorId}`;
return `<div class="post-card${clickableClass}" id="lp-${p.postId}"${onClickAttr}>
<div class="post-header">
<div class="post-avatar">${avHtml}</div>
<div class="post-avatar"><a href="${authorUrl}" onclick="event.stopPropagation()" style="display:contents;">${avHtml}</a></div>
<div>
<div class="post-author">${escHtml(p.authorName || p.locationName || '')}</div>
<div class="post-author"><a href="${authorUrl}" style="color:inherit;text-decoration:none;" onclick="event.stopPropagation()">${escHtml(p.authorName || p.locationName || '')}</a></div>
<div class="post-meta">${dateStr}${editedHtml}</div>
</div>
${adminBtns}
@@ -1401,11 +1420,15 @@ function openLpLb(postId) {
+ ' ' + new Date(p.createdAt).toLocaleTimeString('de-DE', { hour:'2-digit', minute:'2-digit' });
const editedHtml = p.editedAt ? ' <span style="font-size:0.7rem;color:var(--color-muted);">(bearbeitet)</span>' : '';
const lbAuthorUrl = p.posterType === 'LOCATION'
? `/community/location-detail.html?id=${p.locationId || p.authorId}`
: `/community/benutzer.html?userId=${p.authorId}`;
document.getElementById('lbPostBody').innerHTML = `
<div class="post-header">
<div class="post-avatar">${avHtml}</div>
<div class="post-avatar"><a href="${lbAuthorUrl}" style="display:contents;">${avHtml}</a></div>
<div>
<div class="post-author">${escHtml(p.authorName || p.locationName || '')}</div>
<div class="post-author"><a href="${lbAuthorUrl}" style="color:inherit;text-decoration:none;">${escHtml(p.authorName || p.locationName || '')}</a></div>
<div class="post-meta">${dateStr}${editedHtml}</div>
</div>
</div>