Anpassungen zu der Darstellung von Messages und Adresse im Profil. Disable Button wenn keine Abmeldung mehr möglich ist.
This commit is contained in:
parent
ae631cd463
commit
f4463bbd9a
@ -471,12 +471,20 @@ label {
|
|||||||
transition: background-color 0.2s ease, border-color 0.2s ease;
|
transition: background-color 0.2s ease, border-color 0.2s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-primary-abmelden:hover,
|
.button-primary-abmelden:hover:not(:disabled),
|
||||||
.button-primary-abmelden:focus-visible {
|
.button-primary-abmelden:focus-visible:not(:disabled) {
|
||||||
background: var(--blue-dark);
|
background: var(--blue-dark);
|
||||||
border-color: var(--blue-dark);
|
border-color: var(--blue-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button-primary-abmelden:disabled {
|
||||||
|
background-color: var(--blue);
|
||||||
|
border-color: var(--blue);
|
||||||
|
color: var(--butter-light);
|
||||||
|
opacity: 0.6;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
.button-primary-eigener-event{
|
.button-primary-eigener-event{
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0.375rem 1.5rem;
|
padding: 0.375rem 1.5rem;
|
||||||
|
|||||||
@ -286,28 +286,42 @@
|
|||||||
day = Number(isoDateMatch[3]);
|
day = Number(isoDateMatch[3]);
|
||||||
} else {
|
} else {
|
||||||
const monthMap = {
|
const monthMap = {
|
||||||
JAN: 1,
|
jan: 1,
|
||||||
FEB: 2,
|
januar: 1,
|
||||||
'MÄR': 3,
|
feb: 2,
|
||||||
MRZ: 3,
|
februar: 2,
|
||||||
APR: 4,
|
'mär': 3,
|
||||||
MAI: 5,
|
mrz: 3,
|
||||||
JUN: 6,
|
mar: 3,
|
||||||
JUL: 7,
|
maerz: 3,
|
||||||
AUG: 8,
|
märz: 3,
|
||||||
SEP: 9,
|
apr: 4,
|
||||||
OKT: 10,
|
april: 4,
|
||||||
NOV: 11,
|
mai: 5,
|
||||||
DEZ: 12
|
jun: 6,
|
||||||
|
juni: 6,
|
||||||
|
jul: 7,
|
||||||
|
juli: 7,
|
||||||
|
aug: 8,
|
||||||
|
august: 8,
|
||||||
|
sep: 9,
|
||||||
|
sept: 9,
|
||||||
|
september: 9,
|
||||||
|
okt: 10,
|
||||||
|
oktober: 10,
|
||||||
|
nov: 11,
|
||||||
|
november: 11,
|
||||||
|
dez: 12,
|
||||||
|
dezember: 12
|
||||||
};
|
};
|
||||||
const localizedMatch = dateValue.match(/^(\d{1,2})\.\s*([A-ZÄÖÜ]{3})\.\s*(\d{4})$/);
|
const localizedMatch = dateValue.match(/^(\d{1,2})\.\s*([A-Za-zÄÖÜäöü]{3,9})\.?\s*(\d{4})$/);
|
||||||
|
|
||||||
if (!localizedMatch) {
|
if (!localizedMatch) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
day = Number(localizedMatch[1]);
|
day = Number(localizedMatch[1]);
|
||||||
month = monthMap[localizedMatch[2]];
|
month = monthMap[String(localizedMatch[2]).toLowerCase()];
|
||||||
year = Number(localizedMatch[3]);
|
year = Number(localizedMatch[3]);
|
||||||
|
|
||||||
if (!month) {
|
if (!month) {
|
||||||
@ -473,7 +487,9 @@
|
|||||||
const actionMarkup = isOwnEvent
|
const actionMarkup = isOwnEvent
|
||||||
? '<button class="button-primary-eigener-event" type="button" data-registration-action="own" disabled>Dein Event!</button>'
|
? '<button class="button-primary-eigener-event" type="button" data-registration-action="own" disabled>Dein Event!</button>'
|
||||||
: isRegistered
|
: isRegistered
|
||||||
? '<button class="button-primary button-primary-abmelden" type="button" data-registration-action="unregister">Abmelden</button>'
|
? (isRegistrationClosed
|
||||||
|
? '<button class="button-primary button-primary-abmelden" type="button" disabled>Abmeldung geschlossen</button>'
|
||||||
|
: '<button class="button-primary button-primary-abmelden" type="button" data-registration-action="unregister">Abmelden</button>')
|
||||||
: isRegistrationClosed
|
: isRegistrationClosed
|
||||||
? '<button class="button-primary" button-plaetze" type="button" data-registration-action="closed" disabled>Anmeldung geschlossen</button>'
|
? '<button class="button-primary" button-plaetze" type="button" data-registration-action="closed" disabled>Anmeldung geschlossen</button>'
|
||||||
: isFull
|
: isFull
|
||||||
|
|||||||
@ -494,6 +494,16 @@
|
|||||||
}, 'registrations');
|
}, 'registrations');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gibt true zurück, wenn die Abmeldung gesperrt ist (innerhalb von 24h oder in der Vergangenheit).
|
||||||
|
function isDeregistrationClosed(event) {
|
||||||
|
const eventDateTime = parseEventDateTime(event);
|
||||||
|
if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const msUntilStart = eventDateTime.getTime() - Date.now();
|
||||||
|
return msUntilStart <= 24 * 60 * 60 * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
// Baut die Eventkarten für beide Listen in einheitlichem Markup.
|
// Baut die Eventkarten für beide Listen in einheitlichem Markup.
|
||||||
function renderEventCards(container, events, emptyStateConfig, mode) {
|
function renderEventCards(container, events, emptyStateConfig, mode) {
|
||||||
container.innerHTML = '';
|
container.innerHTML = '';
|
||||||
@ -515,6 +525,11 @@
|
|||||||
const card = document.createElement('article');
|
const card = document.createElement('article');
|
||||||
card.className = 'profile-event-card profile-event-card-clickable';
|
card.className = 'profile-event-card profile-event-card-clickable';
|
||||||
card.setAttribute('data-event-id', String(event.id));
|
card.setAttribute('data-event-id', String(event.id));
|
||||||
|
let addressMessage = 'Vielen Dank für die Anmeldung! Die Adresse für diesen Event wird 24 Stunden vorher genau hier sichtbar sein.';
|
||||||
|
if (isEventPastAddressWindow(event)) {
|
||||||
|
addressMessage = 'Vielen Dank, dass du an diesem Event teilgenommen hast.';
|
||||||
|
}
|
||||||
|
|
||||||
const addressMarkup = mode === 'registrations' && event.address
|
const addressMarkup = mode === 'registrations' && event.address
|
||||||
? (isAddressVisibleWindow(event)
|
? (isAddressVisibleWindow(event)
|
||||||
? `
|
? `
|
||||||
@ -526,17 +541,25 @@
|
|||||||
: `
|
: `
|
||||||
<div class="profile-event-address-block" aria-label="Hinweis zur Adresse">
|
<div class="profile-event-address-block" aria-label="Hinweis zur Adresse">
|
||||||
<p class="profile-event-address-label">Adresse</p>
|
<p class="profile-event-address-label">Adresse</p>
|
||||||
<p class="profile-event-address">Vielen Dank für die Anmeldung! Die Adresse für diesen Event wird 24 Stunden vorher genau hier sichtbar sein.</p>
|
<p class="profile-event-address">${addressMessage}</p>
|
||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
|
const isDeregClosed = isDeregistrationClosed(event);
|
||||||
|
|
||||||
const actionMarkup = mode === 'registrations'
|
const actionMarkup = mode === 'registrations'
|
||||||
|
? (isDeregClosed
|
||||||
? `
|
? `
|
||||||
|
<div class="event-side">
|
||||||
|
<button class="button-primary-abmelden" type="button" disabled>Abmeldung geschlossen</button>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
: `
|
||||||
<div class="event-side">
|
<div class="event-side">
|
||||||
<button class="button-primary-abmelden" type="button" data-unregister-id="${event.id}">Abmelden</button>
|
<button class="button-primary-abmelden" type="button" data-unregister-id="${event.id}">Abmelden</button>
|
||||||
</div>
|
</div>
|
||||||
`
|
`)
|
||||||
: `
|
: `
|
||||||
<div class="event-side">
|
<div class="event-side">
|
||||||
<button class="button-primary-eigener-event" type="button" data-cancel-event-id="${event.id}">Event absagen</button>
|
<button class="button-primary-eigener-event" type="button" data-cancel-event-id="${event.id}">Event absagen</button>
|
||||||
@ -556,17 +579,23 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gibt true zurück, wenn ein Event innerhalb der nächsten 24 Stunden startet.
|
// Gibt true zurück, wenn die Adresse sichtbar sein soll (24h vor bis 1h nach Start).
|
||||||
function isAddressVisibleWindow(event) {
|
function isAddressVisibleWindow(event) {
|
||||||
const eventDateTime = parseEventDateTime(event);
|
const eventDateTime = parseEventDateTime(event);
|
||||||
if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) {
|
if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) return false;
|
||||||
return false;
|
const now = Date.now();
|
||||||
|
const start = eventDateTime.getTime();
|
||||||
|
const revealStart = start - (24 * 60 * 60 * 1000);
|
||||||
|
const revealEnd = start + (1 * 60 * 60 * 1000);
|
||||||
|
return now >= revealStart && now <= revealEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
const msUntilStart = eventDateTime.getTime() - Date.now();
|
// Gibt true zurück, wenn ein Event bereits vorbei ist (1h nach Start).
|
||||||
const twentyfourHoursInMs = 24 * 60 * 60 * 1000;
|
function isEventPastAddressWindow(event) {
|
||||||
|
const eventDateTime = parseEventDateTime(event);
|
||||||
return msUntilStart >= 0 && msUntilStart <= twentyfourHoursInMs;
|
if (!eventDateTime || Number.isNaN(eventDateTime.getTime())) return false;
|
||||||
|
const revealEnd = eventDateTime.getTime() + (1 * 60 * 60 * 1000);
|
||||||
|
return Date.now() > revealEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse für ISO- und lokalisierte Datumsformate aus den Eventdaten.
|
// Parse für ISO- und lokalisierte Datumsformate aus den Eventdaten.
|
||||||
@ -587,28 +616,42 @@
|
|||||||
day = Number(isoDateMatch[3]);
|
day = Number(isoDateMatch[3]);
|
||||||
} else {
|
} else {
|
||||||
const monthMap = {
|
const monthMap = {
|
||||||
JAN: 1,
|
jan: 1,
|
||||||
FEB: 2,
|
januar: 1,
|
||||||
'MÄR': 3,
|
feb: 2,
|
||||||
MRZ: 3,
|
februar: 2,
|
||||||
APR: 4,
|
'mär': 3,
|
||||||
MAI: 5,
|
mrz: 3,
|
||||||
JUN: 6,
|
mar: 3,
|
||||||
JUL: 7,
|
maerz: 3,
|
||||||
AUG: 8,
|
märz: 3,
|
||||||
SEP: 9,
|
apr: 4,
|
||||||
OKT: 10,
|
april: 4,
|
||||||
NOV: 11,
|
mai: 5,
|
||||||
DEZ: 12
|
jun: 6,
|
||||||
|
juni: 6,
|
||||||
|
jul: 7,
|
||||||
|
juli: 7,
|
||||||
|
aug: 8,
|
||||||
|
august: 8,
|
||||||
|
sep: 9,
|
||||||
|
sept: 9,
|
||||||
|
september: 9,
|
||||||
|
okt: 10,
|
||||||
|
oktober: 10,
|
||||||
|
nov: 11,
|
||||||
|
november: 11,
|
||||||
|
dez: 12,
|
||||||
|
dezember: 12
|
||||||
};
|
};
|
||||||
const localizedMatch = dateValue.match(/^(\d{1,2})\.\s*([A-ZÄÖÜ]{3})\.\s*(\d{4})$/);
|
const localizedMatch = dateValue.match(/^(\d{1,2})\.\s*([A-Za-zÄÖÜäöü]{3,9})\.?\s*(\d{4})$/);
|
||||||
|
|
||||||
if (!localizedMatch) {
|
if (!localizedMatch) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
day = Number(localizedMatch[1]);
|
day = Number(localizedMatch[1]);
|
||||||
month = monthMap[localizedMatch[2]];
|
month = monthMap[String(localizedMatch[2]).toLowerCase()];
|
||||||
year = Number(localizedMatch[3]);
|
year = Number(localizedMatch[3]);
|
||||||
|
|
||||||
if (!month) {
|
if (!month) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user