feat: Polish labels, RSVP button on calendar list view
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
- Month names: sty, lut, mar... instead of Jan, Feb, Mar - Event types: Spotkanie, Networking, Webinar, Inne - RSVP "Wezmę udział" button directly on event list cards - Grid legend labels also in Polish Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
8c187ea0b3
commit
3f524b3a14
@ -321,6 +321,8 @@
|
||||
.badge-type.networking { background: #fef3c7; color: #92400e; }
|
||||
.badge-type.other { background: #f3e8ff; color: #7c3aed; }
|
||||
|
||||
.rsvp-list-btn { min-width: 110px; }
|
||||
|
||||
/* Responsywność */
|
||||
@media (max-width: 768px) {
|
||||
.calendar-toolbar {
|
||||
@ -350,6 +352,9 @@
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% set pl_months = {'Jan':'sty','Feb':'lut','Mar':'mar','Apr':'kwi','May':'maj','Jun':'cze','Jul':'lip','Aug':'sie','Sep':'wrz','Oct':'paź','Nov':'lis','Dec':'gru'} %}
|
||||
{% set pl_types = {'meeting':'Spotkanie','networking':'Networking','webinar':'Webinar','other':'Inne','conference':'Konferencja','workshop':'Warsztaty'} %}
|
||||
|
||||
{% block content %}
|
||||
<div class="calendar-header">
|
||||
<h1>Kalendarz wydarzeń</h1>
|
||||
@ -420,10 +425,10 @@
|
||||
|
||||
<!-- Legenda typów wydarzeń -->
|
||||
<div style="margin-top: var(--spacing-lg); display: flex; gap: var(--spacing-lg); flex-wrap: wrap; font-size: var(--font-size-sm); color: var(--text-secondary);">
|
||||
<span><span class="badge-type meeting">meeting</span> Rada/Spotkanie</span>
|
||||
<span><span class="badge-type networking">networking</span> Networking</span>
|
||||
<span><span class="badge-type webinar">webinar</span> Webinar</span>
|
||||
<span><span class="badge-type other">other</span> Inne</span>
|
||||
<span><span class="badge-type meeting">Spotkanie</span></span>
|
||||
<span><span class="badge-type networking">Networking</span></span>
|
||||
<span><span class="badge-type webinar">Webinar</span></span>
|
||||
<span><span class="badge-type other">Inne</span></span>
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
@ -438,14 +443,14 @@
|
||||
<div class="event-card {% if event.is_featured %}featured{% endif %}">
|
||||
<div class="event-date-box">
|
||||
<div class="day">{{ event.event_date.day }}</div>
|
||||
<div class="month">{{ event.event_date.strftime('%b') }}</div>
|
||||
<div class="month">{{ pl_months.get(event.event_date.strftime('%b'), event.event_date.strftime('%b')) }}</div>
|
||||
</div>
|
||||
<div class="event-info">
|
||||
<div class="event-title">
|
||||
<a href="{{ url_for('calendar.calendar_event', event_id=event.id) }}">{{ event.title }}</a>{% if event.access_level == 'admin_only' %} <span style="display:inline-block;background:#ef4444;color:#fff;font-size:10px;padding:1px 5px;border-radius:3px;font-weight:600;vertical-align:middle;">UKRYTE</span>{% elif event.access_level == 'rada_only' %} <span style="display:inline-block;background:#f59e0b;color:#92400e;font-size:10px;padding:1px 5px;border-radius:3px;font-weight:600;vertical-align:middle;">IZBA</span>{% endif %}
|
||||
</div>
|
||||
<div class="event-meta">
|
||||
<span class="badge-type {{ event.event_type }}">{{ event.event_type }}</span>
|
||||
<span class="badge-type {{ event.event_type }}">{{ pl_types.get(event.event_type, event.event_type) }}</span>
|
||||
{% if event.time_start %}
|
||||
<span>{{ event.time_start.strftime('%H:%M') }}{% if event.time_end %} - {{ event.time_end.strftime('%H:%M') }}{% endif %}</span>
|
||||
{% endif %}
|
||||
@ -462,7 +467,12 @@
|
||||
</div>
|
||||
<div class="event-actions">
|
||||
<span class="attendee-count">{{ event.attendee_count }} uczestników</span>
|
||||
<a href="{{ url_for('calendar.calendar_event', event_id=event.id) }}" class="btn btn-primary btn-sm">Szczegoly</a>
|
||||
{% if event.can_user_attend(current_user) %}
|
||||
<button class="btn btn-primary btn-sm rsvp-list-btn" data-event-id="{{ event.id }}" data-attending="{{ 'true' if event.attendees|selectattr('user_id','equalto',current_user.id)|list else 'false' }}" onclick="toggleListRSVP(this)">
|
||||
{% if event.attendees|selectattr('user_id','equalto',current_user.id)|list %}Zapisano{% else %}Wezmę udział{% endif %}
|
||||
</button>
|
||||
{% endif %}
|
||||
<a href="{{ url_for('calendar.calendar_event', event_id=event.id) }}" class="btn btn-outline btn-sm">Szczegóły</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
@ -482,14 +492,14 @@
|
||||
<div class="event-card past">
|
||||
<div class="event-date-box" style="background: var(--secondary);">
|
||||
<div class="day">{{ event.event_date.day }}</div>
|
||||
<div class="month">{{ event.event_date.strftime('%b') }}</div>
|
||||
<div class="month">{{ pl_months.get(event.event_date.strftime('%b'), event.event_date.strftime('%b')) }}</div>
|
||||
</div>
|
||||
<div class="event-info">
|
||||
<div class="event-title">
|
||||
<a href="{{ url_for('calendar.calendar_event', event_id=event.id) }}">{{ event.title }}</a>
|
||||
</div>
|
||||
<div class="event-meta">
|
||||
<span class="badge-type {{ event.event_type }}">{{ event.event_type }}</span>
|
||||
<span class="badge-type {{ event.event_type }}">{{ pl_types.get(event.event_type, event.event_type) }}</span>
|
||||
{% if event.location %}
|
||||
<span>{{ event.location }}</span>
|
||||
{% endif %}
|
||||
@ -505,3 +515,32 @@
|
||||
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_js %}
|
||||
var csrfToken = '{{ csrf_token() }}';
|
||||
async function toggleListRSVP(btn) {
|
||||
var eventId = btn.dataset.eventId;
|
||||
btn.disabled = true;
|
||||
try {
|
||||
var resp = await fetch('/kalendarz/' + eventId + '/rsvp', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', 'X-CSRFToken': csrfToken}
|
||||
});
|
||||
var data = await resp.json();
|
||||
if (data.success) {
|
||||
if (data.action === 'added') {
|
||||
btn.textContent = 'Zapisano';
|
||||
btn.classList.remove('btn-primary');
|
||||
btn.classList.add('btn-secondary');
|
||||
} else {
|
||||
btn.textContent = 'Wezmę udział';
|
||||
btn.classList.remove('btn-secondary');
|
||||
btn.classList.add('btn-primary');
|
||||
}
|
||||
var countEl = btn.parentElement.querySelector('.attendee-count');
|
||||
if (countEl) countEl.textContent = data.attendee_count + ' uczestników';
|
||||
}
|
||||
} catch(e) {}
|
||||
btn.disabled = false;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user