diff --git a/templates/trips.html b/templates/trips.html
index 7b4e2f4..664c49e 100644
--- a/templates/trips.html
+++ b/templates/trips.html
@@ -2,6 +2,8 @@
{% from "macros.html" import display_date_no_year, conference_row, accommodation_row, flight_row, train_row with context %}
+{% set row = { "flight": flight_row, "train": train_row } %}
+
{% block style %}
{% set conference_column_count = 6 %}
{% set accommodation_column_count = 7 %}
@@ -34,42 +36,50 @@
{% endblock %}
+{% macro section(heading, item_list, badge) %}
+ {% if item_list %}
+
{{ heading }}
+ {% for trip in item_list %}
+ {% set end = trip.end %}
+
+
{{ trip.title }} ({{ trip.start.strftime("%b %Y") }})
+
Countries: {{ trip.countries_str }}
+ {% if end %}
+
Dates: {{ display_date_no_year(trip.start) }} to {{ display_date_no_year(end) }}
+ {% else %}
+
Start: {{ display_date_no_year(trip.start) }} (end date missing)
+ {% endif %}
+
+ {% for conf in trip.conferences %}
+ {{ conference_row(conf, "going") }}
+ {% endfor %}
+
+
+
+ {% for conf in trip.accommodation %}
+ {{ accommodation_row(conf, "going") }}
+ {% endfor %}
+
+
+
+ {% for item in trip.travel %}
+ {{ row[item.type](item) }}
+ {% endfor %}
+
+
+ {% endfor %}
+ {% endif %}
+{% endmacro %}
+
+
{% block content %}
- {% set row = { "flight": flight_row, "train": train_row } %}
Trips
- {% for trip in trips %}
- {% set end = trip.end %}
-
-
{{ trip.title }} ({{ trip.start.strftime("%b %Y") }})
-
Countries: {{ trip.countries_str }}
- {% if end %}
-
Dates: {{ display_date_no_year(trip.start) }} to {{ display_date_no_year(end) }}
- {% else %}
-
Start: {{ display_date_no_year(trip.start) }} (end date missing)
- {% endif %}
-
- {% for conf in trip.conferences %}
- {{ conference_row(conf, "going") }}
- {% endfor %}
-
-
-
- {% for conf in trip.accommodation %}
- {{ accommodation_row(conf, "going") }}
- {% endfor %}
-
-
-
- {% for item in trip.travel %}
- {{ row[item.type](item) }}
- {% endfor %}
-
-
- {% endfor %}
+ {{ section("Current", current, "attending") }}
+ {{ section("Future", future, "going") }}
+ {{ section("Past", past|reverse, "went") }}
{% endblock %}
-
diff --git a/web_view.py b/web_view.py
index 758ba3b..5cc1d89 100755
--- a/web_view.py
+++ b/web_view.py
@@ -164,9 +164,8 @@ def load_travel(travel_type: str) -> list[StrDict]:
return items
-@app.route("/trip")
-def trip_list() -> str:
- """Page showing a list of trips."""
+def build_trip_list() -> list[Trip]:
+ """Generate list of trips."""
trips: dict[date, Trip] = {}
data_dir = app.config["PERSONAL_DATA"]
@@ -190,11 +189,30 @@ def trip_list() -> str:
trips[start] = Trip(start=start)
getattr(trips[start], key).append(item)
- trip_list = [trip for _, trip in sorted(trips.items(), reverse=True)]
+ return [trip for _, trip in sorted(trips.items())]
+
+
+@app.route("/trip")
+def trip_list() -> str:
+ """Page showing a list of trips."""
+ trip_list = build_trip_list()
+
+ today = date.today()
+ current = [
+ item
+ for item in trip_list
+ if item.start <= today and (item.end or item.start) >= today
+ ]
+
+ past = [item for item in trip_list if (item.end or item.start) < today]
+ future = [item for item in trip_list if item.start > today]
return flask.render_template(
"trips.html",
- trips=trip_list,
+ current=current,
+ past=past,
+ future=future,
+ today=today,
get_country=agenda.get_country,
format_list_with_ampersand=format_list_with_ampersand,
)