Skip to content

Commit 751aaf3

Browse files
committed
Improves site navigation and information access, closes #223
Adds a burger menu for easier access to all main pages. Introduces a human-readable sitemap page, providing a structured overview of the website's content. Simplifies the footer navigation by moving less frequently used links to the burger menu and sitemap.
1 parent 66aa6f8 commit 751aaf3

File tree

8 files changed

+164
-11
lines changed

8 files changed

+164
-11
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
- **Temporal extent contribution** - Users can now contribute temporal extent (start/end dates) in addition to spatial extent. Works can be published with either spatial, temporal, or both extents. Supports flexible date formats: YYYY, YYYY-MM, YYYY-MM-DD.
88
- **Complete status workflow documentation** - Documented all 6 publication statuses (Draft, Harvested, Contributed, Published, Testing, Withdrawn) with workflow transitions and visibility rules in README.md.
9+
- **Burger menu navigation** - Added top bar hamburger menu (☰) next to user icon with dropdown links to all main pages including Home, Browse Works, Contribute, Data & API, Feeds, About, Contact, Accessibility, and GitHub code repository.
10+
- **Human-readable sitemap** - New `/pages` endpoint showing organized list of all pages with descriptions, categorized into Main Pages, Data & Technical, Information & Help, User Pages, and Development sections.
911
- **Custom error pages** - Added styled 404 and 500 error pages matching application design with navigation links and help information directing users to About and Accessibility pages.
1012
- **Map popup enhancement** - Added "View Publication Details" button to map popups linking to work landing pages.
1113
- **Admin unpublish functionality** - Admins can unpublish works, changing status from Published to Draft.
@@ -24,6 +26,7 @@
2426
- **Contribute page layout refactored** - Fixed text overflow issues with proper CSS containment strategy.
2527
- **Flexible publishing requirements** - Harvested publications with geometry can be published directly without requiring user contribution.
2628
- **Contribute page login button improved** - Changed to informational disabled button with clear text: "Please log in to contribute (user menu at top right)".
29+
- **Simplified footer navigation** - Footer now contains only Sitemap, About/Contact/Imprint, Privacy, and data license. Other page links moved to burger menu and sitemap.
2730

2831
### Fixed
2932

publications/static/css/main.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ main {
6262
height: 50px;
6363
}
6464

65+
.bg-primary {
66+
background-color: #158F9B !important;
67+
}
68+
6569
.alert-primary {
6670
color: #000000;
6771
background-color: rgba(21, 143, 155, 0.2);

publications/templates/base.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@
6868
>
6969
</div>
7070

71-
{% block navbar %}{% endblock %}
71+
<ul class="nav navbar-nav ml-auto">
72+
{% include "burger_menu_snippet.html" %}
73+
{% block navbar %}{% endblock %}
74+
</ul>
7275
</div>
7376
</nav>
7477

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<li class="nav-item dropdown">
2+
<a
3+
class="nav-link dropdown-toggle"
4+
href="#"
5+
id="burgerMenuDropdown"
6+
role="button"
7+
data-toggle="dropdown"
8+
aria-expanded="false"
9+
aria-label="Main menu">
10+
<i class="fa-solid fa-bars fa-3x"></i>
11+
</a>
12+
<ul
13+
class="dropdown-menu dropdown-menu-right"
14+
aria-labelledby="burgerMenuDropdown"
15+
style="min-width: 250px; margin-top: 1rem;">
16+
<li><a class="dropdown-item" href="/"><i class="fas fa-home"></i> Home</a></li>
17+
<li><a class="dropdown-item" href="{% url 'optimap:works' %}"><i class="fas fa-list"></i> Browse Works</a></li>
18+
<li><a class="dropdown-item" href="{% url 'optimap:contribute' %}"><i class="fas fa-hands-helping"></i> Contribute</a></li>
19+
<div class="dropdown-divider"></div>
20+
<li><a class="dropdown-item" href="{% url 'optimap:data' %}"><i class="fas fa-database"></i> Data & API</a></li>
21+
<li><a class="dropdown-item" href="{% url 'optimap:feeds' %}"><i class="fas fa-rss"></i> Feeds</a></li>
22+
<div class="dropdown-divider"></div>
23+
<li><a class="dropdown-item" href="{% url 'optimap:about' %}"><i class="fas fa-info-circle"></i> About</a></li>
24+
<li><a class="dropdown-item" href="{% url 'optimap:contact' %}"><i class="fas fa-envelope"></i> Contact</a></li>
25+
<li><a class="dropdown-item" href="{% url 'optimap:accessibility' %}"><i class="fas fa-universal-access"></i> Accessibility</a></li>
26+
<div class="dropdown-divider"></div>
27+
<li><a class="dropdown-item" href="https://github.com/GeoinformationSystems/optimap" target="_blank" rel="noopener"><i class="fas fa-code"></i> Code on GitHub</a></li>
28+
</ul>
29+
</li>

publications/templates/footer.html

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@
22
<div class="footer-copyright text-center text-white py-3">
33
<p class="mb-0 list-unstyled">
44
<span class="px-3">&copy;&nbsp;{% now 'Y' %}&nbsp;<a class="text-white" title="OPTIMETA project website" href="https://projects.tib.eu/optimeta">OPTIMETA</a> &amp; <a class="text-white" title="KOMET project website" href="https://projects.tib.eu/komet">KOMET</a></span>
5-
<a class="px-2 text-white" title="Privacy information / Datenschutzerklärung" href="{% url 'optimap:privacy' %}">Privacy</a>
6-
<a class="px-2 text-white" title="Accessibility / Barrierefreiheit" href="{% url 'optimap:accessibility' %}">Accessibility</a>
7-
<a class="px-2 text-white" title="Data & API documentation and browser" href="{% url 'optimap:data' %}">Data & API</a>
8-
<a class="px-3 text-white" title="Feeds" href="{% url 'optimap:feeds' %}">Feeds</a>
9-
<a class="px-2 text-white" title="Help contribute geolocation data to publications" href="{% url 'optimap:contribute' %}">Contribute</a>
10-
<a class="px-2 text-white" title="Link to source code project" href="https://github.com/GeoinformationSystems/optimap">Code&nbsp;(v{{ optimap_version }})</a>
5+
<a class="px-2 text-white" title="Sitemap - overview of all pages" href="{% url 'optimap:sitemap-page' %}">Sitemap</a>
116
<a class="px-2 text-white" title="About / Contact / Imprint" href="{% url 'optimap:about' %}">About / Contact / Imprint</a>
7+
<a class="px-2 text-white" title="Privacy information / Datenschutzerklärung" href="{% url 'optimap:privacy' %}">Privacy</a>
128
<span class="px-3">Data license: <a class="text-white" title="Publication metadata license" href='https://creativecommons.org/publicdomain/zero/1.0/'>CC-0</a></span>
139
</p>
1410
</div>
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{% extends "base.html" %}
2+
3+
{% block title %}Sitemap - {% endblock %}
4+
5+
{% block navbar %}
6+
<ul class="nav navbar-nav">
7+
{% if request.user.is_authenticated %}
8+
{% include "authenticated_menu_snippet.html" %}
9+
{% else %}
10+
{% include "menu_snippet.html" %}
11+
{% endif %}
12+
</ul>
13+
{% endblock %}
14+
15+
{% block content %}
16+
<div class="row justify-content-center">
17+
<div class="col-md-10 col-lg-8 py-5">
18+
<h1 class="mb-4">Sitemap</h1>
19+
<p class="lead">Find your way around OPTIMAP with this overview of all available pages.</p>
20+
21+
<div class="card mb-3">
22+
<div class="card-header bg-primary text-white">
23+
<h5 class="mb-0"><i class="fas fa-compass"></i> Main Pages</h5>
24+
</div>
25+
<ul class="list-group list-group-flush">
26+
<li class="list-group-item">
27+
<a href="/"><strong><i class="fas fa-home"></i> Home</strong></a>
28+
<p class="text-muted mb-0 small">Interactive map showing all published research with geospatial metadata</p>
29+
</li>
30+
<li class="list-group-item">
31+
<a href="{% url 'optimap:works' %}"><strong><i class="fas fa-list"></i> Browse Works</strong></a>
32+
<p class="text-muted mb-0 small">List of all published scientific works with spatial and temporal metadata</p>
33+
</li>
34+
<li class="list-group-item">
35+
<a href="{% url 'optimap:contribute' %}"><strong><i class="fas fa-hands-helping"></i> Contribute</strong></a>
36+
<p class="text-muted mb-0 small">Help improve OPTIMAP by contributing geospatial and temporal metadata</p>
37+
</li>
38+
</ul>
39+
</div>
40+
41+
<div class="card mb-3">
42+
<div class="card-header bg-primary text-white">
43+
<h5 class="mb-0"><i class="fas fa-database"></i> Data & Technical</h5>
44+
</div>
45+
<ul class="list-group list-group-flush">
46+
<li class="list-group-item">
47+
<a href="{% url 'optimap:data' %}"><strong><i class="fas fa-database"></i> Data & API</strong></a>
48+
<p class="text-muted mb-0 small">Download datasets and access the OPTIMAP API for programmatic access</p>
49+
</li>
50+
<li class="list-group-item">
51+
<a href="{% url 'optimap:feeds' %}"><strong><i class="fas fa-rss"></i> Feeds</strong></a>
52+
<p class="text-muted mb-0 small">Subscribe to RSS, Atom, and GeoRSS feeds for updates on new publications</p>
53+
</li>
54+
</ul>
55+
</div>
56+
57+
<div class="card mb-3">
58+
<div class="card-header bg-primary text-white">
59+
<h5 class="mb-0"><i class="fas fa-info-circle"></i> Information & Help</h5>
60+
</div>
61+
<ul class="list-group list-group-flush">
62+
<li class="list-group-item">
63+
<a href="{% url 'optimap:about' %}"><strong><i class="fas fa-info-circle"></i> About & Imprint</strong></a>
64+
<p class="text-muted mb-0 small">Learn about OPTIMAP, our mission, team, licenses, and legal information</p>
65+
</li>
66+
<li class="list-group-item">
67+
<a href="{% url 'optimap:contact' %}"><strong><i class="fas fa-envelope"></i> Contact</strong></a>
68+
<p class="text-muted mb-0 small">Get in touch with the OPTIMAP team for questions and support</p>
69+
</li>
70+
<li class="list-group-item">
71+
<a href="{% url 'optimap:accessibility' %}"><strong><i class="fas fa-universal-access"></i> Accessibility</strong></a>
72+
<p class="text-muted mb-0 small">Information about accessibility features and our commitment to inclusive design</p>
73+
</li>
74+
<li class="list-group-item">
75+
<a href="{% url 'optimap:privacy' %}"><strong><i class="fas fa-shield-alt"></i> Privacy</strong></a>
76+
<p class="text-muted mb-0 small">Privacy policy and information about how we handle your data</p>
77+
</li>
78+
</ul>
79+
</div>
80+
81+
{% if request.user.is_authenticated %}
82+
<div class="card mb-3">
83+
<div class="card-header bg-primary text-white">
84+
<h5 class="mb-0"><i class="fas fa-user"></i> User Pages</h5>
85+
</div>
86+
<ul class="list-group list-group-flush">
87+
<li class="list-group-item">
88+
<a href="{% url 'optimap:usersettings' %}"><strong><i class="fas fa-cog"></i> Settings</strong></a>
89+
<p class="text-muted mb-0 small">Manage your account settings and preferences</p>
90+
</li>
91+
<li class="list-group-item">
92+
<a href="{% url 'optimap:subscriptions' %}"><strong><i class="fas fa-bell"></i> Subscriptions</strong></a>
93+
<p class="text-muted mb-0 small">Manage your notification subscriptions for new publications</p>
94+
</li>
95+
</ul>
96+
</div>
97+
{% endif %}
98+
99+
<div class="card mb-3">
100+
<div class="card-header bg-primary text-white">
101+
<h5 class="mb-0"><i class="fas fa-code"></i> Development</h5>
102+
</div>
103+
<ul class="list-group list-group-flush">
104+
<li class="list-group-item">
105+
<a href="https://github.com/GeoinformationSystems/optimap" target="_blank" rel="noopener"><strong><i class="fas fa-code-branch"></i> GitHub Repository</strong></a>
106+
<p class="text-muted mb-0 small">View the source code, report issues, and contribute to OPTIMAP development</p>
107+
</li>
108+
</ul>
109+
</div>
110+
</div>
111+
</div>
112+
{% endblock %}

publications/urls.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
2525
path('api/schema/ui/', SpectacularRedocView.as_view(url_name='optimap:schema'), name='redoc'),
2626
path('download/geojson/', views.download_geojson, name='download_geojson'),
27-
path("works/", views.works_list, name="works-list"),
27+
path("works/", views.works_list, name="works"),
2828
# ID-based URLs (for publications without DOI)
2929
path("work/<int:pub_id>/contribute-geometry/", views_geometry.contribute_geometry_by_id, name="contribute-geometry-by-id"),
3030
path("work/<int:pub_id>/publish/", views_geometry.publish_work_by_id, name="publish-work-by-id"),
@@ -44,13 +44,14 @@
4444
path("finalize-delete/", views.finalize_account_deletion, name="finalize_delete"),
4545
path("about/", views.about, name="about"),
4646
path("accessibility/", views.accessibility, name="accessibility"),
47+
path("pages/", views.sitemap_page, name="sitemap-page"),
4748
path("addsubscriptions/", views.add_subscriptions, name="addsubscriptions"),
4849
path("changeuser/", views.change_useremail, name="changeuser"),
4950
path("confirm-delete/<str:token>/", views.confirm_account_deletion, name="confirm_delete"),
5051
path("confirm-email/<str:token>/<str:email_new>/", views.confirm_email_change, name="confirm_email_change"),
51-
path("contact/", RedirectView.as_view(pattern_name='about', permanent=True)),
52+
path("contact/", RedirectView.as_view(pattern_name='optimap:about', permanent=True), name="contact"),
5253
path("data/", views.data, name="data"),
53-
path("imprint/", RedirectView.as_view(pattern_name='about', permanent=True)),
54+
path("imprint/", RedirectView.as_view(pattern_name='optimap:about', permanent=True)),
5455
path("login/<str:token>", views.authenticate_via_magic_link, name="magic_link"),
5556
path("loginconfirm/", views.confirmation_login, name="loginconfirm"),
5657
path("loginres/", views.loginres, name="login_response"),

publications/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,4 +801,9 @@ def custom_404(request, exception=None):
801801

802802
def custom_500(request):
803803
"""Custom 500 error handler"""
804-
return render(request, '500.html', status=500)
804+
return render(request, '500.html', status=500)
805+
806+
807+
def sitemap_page(request):
808+
"""Human-readable sitemap page"""
809+
return render(request, 'sitemap_page.html')

0 commit comments

Comments
 (0)