From ad3803e12e4ded69ae4bc948bee6e41c5089dbd5 Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Sat, 7 Nov 2026 23:52:53 +0100 Subject: starting point for climb browser --- asset-sources/theme.scss | 25 ++++ fietsboek/routes.py | 1 + fietsboek/static/theme.css | 20 +++ fietsboek/static/theme.css.map | 2 +- fietsboek/templates/climb_browse.jinja2 | 227 ++++++++++++++++++++++++++++++++ fietsboek/templates/details.jinja2 | 1 + fietsboek/templates/layout.jinja2 | 3 + fietsboek/views/climb.py | 17 +++ 8 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 fietsboek/templates/climb_browse.jinja2 diff --git a/asset-sources/theme.scss b/asset-sources/theme.scss index fbb836e..684b075 100644 --- a/asset-sources/theme.scss +++ b/asset-sources/theme.scss @@ -241,6 +241,31 @@ strong { } /* */ +/* */ +.climb-browse-card { + .card-body { + padding: 0; + display: grid; + grid-template-areas: + "map stats" + "map profile"; + grid-template-rows: 190px 110px; + } + + .climb-profile { + grid-area: profile; + width: 300px; + height: 110px; + } +} + +.climb-browse-list { + display: flex; + flex-wrap: wrap; + gap: 1rem; +} +/* */ + .count-field { width: 50px; display: inline-block; diff --git a/fietsboek/routes.py b/fietsboek/routes.py index da9ed04..636c62a 100644 --- a/fietsboek/routes.py +++ b/fietsboek/routes.py @@ -70,6 +70,7 @@ def includeme(config): "/climb/{climb_id}/profile", factory="fietsboek.models.Climb.factory", ) + config.add_route("climb-browse", "/climb/") config.add_route("journey-list", "/journey/") config.add_route( diff --git a/fietsboek/static/theme.css b/fietsboek/static/theme.css index 6b9e1c2..d1e63fb 100644 --- a/fietsboek/static/theme.css +++ b/fietsboek/static/theme.css @@ -232,6 +232,26 @@ strong { } /* */ +/* */ +.climb-browse-card .card-body { + padding: 0; + display: grid; + grid-template-areas: "map stats" "map profile"; + grid-template-rows: 190px 110px; +} +.climb-browse-card .climb-profile { + grid-area: profile; + width: 300px; + height: 110px; +} + +.climb-browse-list { + display: flex; + flex-wrap: wrap; + gap: 1rem; +} + +/* */ .count-field { width: 50px; display: inline-block; diff --git a/fietsboek/static/theme.css.map b/fietsboek/static/theme.css.map index 30b9235..b499ab1 100644 --- a/fietsboek/static/theme.css.map +++ b/fietsboek/static/theme.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../asset-sources/theme.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAlCJ;EAqCE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACI;;;AAGJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAIA;EACE;;;AAGJ;AAEA;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;;AAEF;EACE;;AACA;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;EACA;;AACA;EACE;;AAIJ;EACE;EACA;;;AAKF;EACE;EACA;EAEA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;EACA;;AAEA;EAJF;IAKI,eACE;;;AAIJ;EACE;;AAGF;EACE;;AAEA;EAHF;IAII;;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;;;AAIJ;EACE;;;AAGF;AACA;EACE;EACA;AACA;AAAA;AAAA;EAGA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE","file":"theme.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../asset-sources/theme.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAlCJ;EAqCE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACI;;;AAGJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAIA;EACE;;;AAGJ;AAEA;AAEE;EACE;EACA;EACA,qBACE;EAEF;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;;AAEF;AAEA;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;;AAEF;EACE;;AACA;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;EACA;;AACA;EACE;;AAIJ;EACE;EACA;;;AAKF;EACE;EACA;EAEA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;EACA;;AAEA;EAJF;IAKI,eACE;;;AAIJ;EACE;;AAGF;EACE;;AAEA;EAHF;IAII;;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;;;AAIJ;EACE;;;AAGF;AACA;EACE;EACA;AACA;AAAA;AAAA;EAGA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE","file":"theme.css"} \ No newline at end of file diff --git a/fietsboek/templates/climb_browse.jinja2 b/fietsboek/templates/climb_browse.jinja2 new file mode 100644 index 0000000..d754c46 --- /dev/null +++ b/fietsboek/templates/climb_browse.jinja2 @@ -0,0 +1,227 @@ +{% extends "layout.jinja2" %} +{% block content %} +
+

{{ _("page.climb_browse.title") }}

+
+
+
+
+
+ + +
+
+
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + + km +
+
+ +
+ {{ _("page.browse.filter.length_boundaries") }} +
+ +
+
+ + + km +
+
+ +
+
+ + + m +
+
+ +
+ {{ _("page.browse.filter.uphill_boundaries") }} +
+ +
+
+ + + m +
+
+ +
+
+ + +
+
+ +
+ {{ _("page.browse.filter.date_boundaries") }} +
+ +
+
+ + +
+
+ +
+
+ + +
+ + {% if request.identity %} +
+ + +
+ {% endif %} +
+
+ {% if request.identity %} + {% macro render_switch(id, name, value, text) %} +
+ + +
+ {% endmacro %} + {{ render_switch("switchOnlyMyTracks", "show-only[]", "mine", _("page.browse.filter.my_tracks.only")) }} + {{ render_switch("switchOnlyFriendsTracks", "show-only[]", "friends", _("page.browse.filter.friends_tracks_only")) }} + {{ render_switch("switchOnlyMeTagged", "show-only[]", "user-tagged", _("page.browse.filter.me_tagged_only")) }} + {% endif %} +
+ +
+ +
+
+ + + + {{ _("page.browse.filters.clear_all") }} + + +
+
+ +
+
+
+
+ {% if climbs %} +
+ {% for climb in climbs %} +
+
+ + {{ climb.display_name() }} + + {% if climb.category is not none %} +
+ {% if climb.category == 0 %} + HC + {% else %} + {{ climb.category }} + {% endif %} +
+ {% endif %} +
+
+ + + + + + + + + + + + + + + + + + +
{{ _("page.details.climb.length") }}{{ (climb.length / 1000) | round(2) | format_decimal }} km
{{ _("page.details.climb.average_grade") }}{{ (climb.avg_grade * 100) | round(2) | format_decimal }} %
{{ _("page.details.climb.lowest_elevation") }}{{ climb.lowest_elevation | round(2) | format_decimal }} m
{{ _("page.details.climb.highest_elevation") }}{{ climb.highest_elevation | round(2) | format_decimal }} m
+ +
+
+ {% endfor %} +
+ + + + {% elif used_filters %} +

{{ _("page.climb_browse.no_results") }}

+ {% else %} +

{{ _("page.climb_browse.no_climbs") }}

+ {% endif %} +
+{% endblock %} diff --git a/fietsboek/templates/details.jinja2 b/fietsboek/templates/details.jinja2 index 210e301..0fd7d30 100644 --- a/fietsboek/templates/details.jinja2 +++ b/fietsboek/templates/details.jinja2 @@ -199,6 +199,7 @@
{% for climb in track.climbs %}
+
{{ climb.display_name() | default(_("page.details.climbs.climb"), true) }} {% if climb.category is not none %} diff --git a/fietsboek/templates/layout.jinja2 b/fietsboek/templates/layout.jinja2 index 3058553..d7f8086 100644 --- a/fietsboek/templates/layout.jinja2 +++ b/fietsboek/templates/layout.jinja2 @@ -60,6 +60,9 @@ const Legende = false; + {% if request.identity is not none %}