feat: Add detailed park and ride pages with HTMX integration

- Implemented park detail page with dynamic content loading for rides and weather.
- Created park list page with filters and search functionality.
- Developed ride detail page showcasing ride stats, reviews, and similar rides.
- Added ride list page with filtering options and dynamic loading.
- Introduced search results page with tabs for parks, rides, and users.
- Added HTMX tests for global search functionality.
This commit is contained in:
pacnpal
2025-12-19 19:53:20 -05:00
parent bf04e4d854
commit b9063ff4f8
154 changed files with 4536 additions and 2570 deletions

View File

@@ -0,0 +1,9 @@
<div class="htmx-confirm" role="dialog" aria-modal="true">
<div class="confirm-body">
<p>{{ message|default:"Are you sure?" }}</p>
<div class="confirm-actions">
<button hx-post="{{ confirm_url }}" hx-vals='{"confirm": true}'>Confirm</button>
<button hx-trigger="click" hx-swap="none">Cancel</button>
</div>
</div>
</div>

View File

@@ -0,0 +1,4 @@
<div class="htmx-error" role="alert" aria-live="assertive">
<strong>{{ title|default:"Error" }}</strong>
<p>{{ message|default:"An error occurred. Please try again." }}</p>
</div>

View File

@@ -0,0 +1,4 @@
<span class="filter-badge" role="status">
{{ label }}
<button hx-get="{{ remove_url }}" hx-swap="outerHTML">×</button>
</span>

View File

@@ -0,0 +1,4 @@
<div class="inline-edit-field" data-editable-name="{{ name }}">
<div class="display">{{ value }}</div>
<button hx-get="{{ edit_url }}" hx-target="closest .inline-edit-field" hx-swap="outerHTML">Edit</button>
</div>

View File

@@ -0,0 +1,3 @@
<div class="htmx-loading-indicator" aria-hidden="true">
<div class="spinner">Loading…</div>
</div>

View File

@@ -0,0 +1,9 @@
<nav class="htmx-pagination" role="navigation" aria-label="Pagination">
{% if page_obj.has_previous %}
<button hx-get="{{ request.path }}?page={{ page_obj.previous_page_number }}" hx-swap="#results">Previous</button>
{% endif %}
<span>Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</span>
{% if page_obj.has_next %}
<button hx-get="{{ request.path }}?page={{ page_obj.next_page_number }}" hx-swap="#results">Next</button>
{% endif %}
</nav>

View File

@@ -0,0 +1,3 @@
<div class="htmx-success" role="status" aria-live="polite">
<p>{{ message }}</p>
</div>