{# Server-rendered month grid. No calendar library: prev/next and day selection are plain hx-get requests whose response carries nothing but out-of-band blocks, hence hx-swap="none". #} {% set weekdays = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'] %} {# Every link keeps the board's span, so changing the day never silently widens it back to all-day. #} {% set time_params = selected_time.allDay ? {} : { from: selected_time.start, to: selected_time.end } %}
{{ month_start|format_datetime(pattern: 'LLLL y') }}
{% for weekday in weekdays %}
{{ weekday }}
{% endfor %}
{% for week in weeks %} {% for day in week %} {% set classes = 'relative h-12 rounded-md border text-sm flex flex-col items-center justify-center' %} {% if day.is_selected %} {% set classes = classes ~ ' border-primary bg-primary text-white font-bold' %} {% elseif not day.in_month %} {% set classes = classes ~ ' border-transparent text-gray-300' %} {% elseif day.is_past %} {# Dashed rather than the weekend's grey fill: the two states must not be confusable, and the day stays clickable -- looking back at a past plan is legitimate, only booking it is not. #} {% set classes = classes ~ ' border-dashed border-gray-200 text-gray-400' %} {% elseif day.is_weekend %} {% set classes = classes ~ ' border-transparent bg-gray-50 text-gray-400' %} {% else %} {% set classes = classes ~ ' border-gray-200 hover:bg-gray-50' %} {% endif %} {% if day.is_today and not day.is_selected %} {% set classes = classes ~ ' ring-1 ring-primary' %} {% endif %} {% endfor %} {% endfor %}
eigene Buchung
gestrichelt = vergangen, nicht mehr buchbar
Zahl = belegte Plätze{{ selected_time.allDay ? ' an dem Tag' : ' zwischen ' ~ selected_time.start ~ ' und ' ~ selected_time.end }}