diff sat_templates/templates/bulma/calendar/daily.html @ 358:271b38ccd217

bulma (calendar): calendar and its daily view, first draft
author Goffi <goffi@goffi.org>
date Thu, 30 Mar 2023 17:06:02 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sat_templates/templates/bulma/calendar/daily.html	Thu Mar 30 17:06:02 2023 +0200
@@ -0,0 +1,69 @@
+{# daily calendar view
+    @variable events(list[dict]): events to display
+    @variable calendar_start(float): calendar start timestamp
+    @variable calendar_end(float): calendar end timestamp
+#}
+
+{% if not embedded %}{% extends 'base/base.html' %}{% endif %}
+{% import 'components/block.html' as block with context %}
+
+{% block body %}
+{{ icon_defs('calendar') }}
+
+<section class="section">
+
+    <div class="content has-items-centered is-flex">
+        {{ component.action_button(url_event_new) }}
+    </div>
+
+
+    <h1 class="title has-text-centered">{{ calendar_start|date_fmt('full', date_only=True) }}</h1>
+    <div class="columns">
+        <div class="column">
+            <div class="time-and-events">
+                <div class="time-rows" aria-hidden="true">
+                    {% for hour in range(calendar_start|timestamp_to_hour, calendar_end|timestamp_to_hour + 1) %}
+                        {% for minute in [0, 30] %}
+                        <div class="time-row {% if minute == 0 %}hour-row{% else %}half-hour-row{% endif %}">
+                            <span class="time-text" >{{ "%02d:%02d"|format(hour, minute) }}</span>
+                            <div class="line"></div>
+                        </div>
+                    {% endfor %}
+                {% endfor %}
+                </div>
+                {% if events %}
+                    {% for event in events %}
+                        {% if event.end > calendar_start and event.start < calendar_end %}
+                            {% set event_start = event.start|date_fmt(tz_name=tz_name) %}
+                            {% set event_end = event.end|date_fmt(tz_name=tz_name) %}
+                            {% set event_duration = event.start|delta_to_human(event.end) %}
+                            {% set ns = namespace(event_classes = []) %}
+                            {% if event.start < calendar_start %}
+                                {% set ns.event_classes = ns.event_classes + ['already-started'] %}
+                            {% endif %}
+                            {% if event.end > calendar_end %}
+                                {% set ns.event_classes = ns.event_classes + ['not-finished'] %}
+                            {% endif %}
+                            {% for other_event in events %}
+                                {% if event != other_event and event.start < other_event.end and event.end > other_event.start %}
+                                    {% set ns.event_classes = ns.event_classes + ['is-conflicting'] %}
+                                {% endif %}
+                            {% endfor %}
+                            {% set event_top = [(((event.start - calendar_start) / 1800 * 30) + 15), 0]|max|int %}
+                            {% set event_height = [((event.end - event.start) / 1800 * 30), ]|min|int %}
+                            <div class="event-box {{ ns.event_classes|join(' ') }}" style="top: {{ event_top }}px; height: {{ event_height }}px; max-height: calc(100% - {{event_top}}px);">
+                                <span class="event-name">{{ event.name[""] }}</span>
+                                <br>
+                                {{ event_start }} - {{ event_end }} ({{ event_duration }})
+                            </div>
+                        {% endif %}
+                    {% endfor %}
+                {% endif %}
+                <div id="current-time-line" aria-hidden="true" hidden></div>
+            </div>
+        </div>
+    </div>
+
+
+</section>
+{% endblock body %}