mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 10:11:09 -05:00
94 lines
5.1 KiB
HTML
94 lines
5.1 KiB
HTML
{% extends "base/base.html" %}
|
|
{% load static %}
|
|
|
|
{% block title %}Parks{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container mx-auto px-4 py-6">
|
|
<!-- Consolidated Search and View Controls Bar -->
|
|
<div class="bg-gray-800 rounded-lg p-4 mb-6">
|
|
<div class="flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4">
|
|
<!-- Search Section -->
|
|
<div class="flex-1 max-w-2xl">
|
|
<div class="relative">
|
|
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
|
<svg class="h-5 w-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
|
</svg>
|
|
</div>
|
|
<input
|
|
type="text"
|
|
name="search"
|
|
value="{{ search_query }}"
|
|
placeholder="Search parks by name, location, or features..."
|
|
class="block w-full pl-10 pr-3 py-2 border border-gray-600 rounded-md leading-5 bg-gray-700 text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
hx-get="{% url 'parks:park_list' %}"
|
|
hx-trigger="keyup changed delay:300ms"
|
|
hx-target="#park-results"
|
|
hx-include="[name='view_mode']"
|
|
hx-indicator="#search-spinner"
|
|
/>
|
|
<div id="search-spinner" class="absolute inset-y-0 right-0 pr-3 flex items-center htmx-indicator">
|
|
<svg class="animate-spin h-5 w-5 text-gray-400" fill="none" viewBox="0 0 24 24">
|
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Results Count and View Controls -->
|
|
<div class="flex items-center gap-4">
|
|
<!-- Results Count -->
|
|
<div class="text-gray-300 text-sm whitespace-nowrap">
|
|
<span class="font-medium">Parks</span>
|
|
{% if total_results %}
|
|
<span class="text-gray-400">({{ total_results }} found)</span>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<!-- View Mode Toggle -->
|
|
<div class="flex bg-gray-700 rounded-lg p-1">
|
|
<input type="hidden" name="view_mode" value="{{ view_mode }}" />
|
|
|
|
<!-- Grid View Button -->
|
|
<button
|
|
type="button"
|
|
class="p-2 rounded-md transition-colors duration-200 {% if view_mode == 'grid' %}bg-blue-600 text-white{% else %}text-gray-400 hover:text-white{% endif %}"
|
|
title="Grid View"
|
|
hx-get="{% url 'parks:park_list' %}?view_mode=grid"
|
|
hx-target="#park-results"
|
|
hx-include="[name='search']"
|
|
hx-push-url="true"
|
|
>
|
|
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z"></path>
|
|
</svg>
|
|
</button>
|
|
|
|
<!-- List View Button -->
|
|
<button
|
|
type="button"
|
|
class="p-2 rounded-md transition-colors duration-200 {% if view_mode == 'list' %}bg-blue-600 text-white{% else %}text-gray-400 hover:text-white{% endif %}"
|
|
title="List View"
|
|
hx-get="{% url 'parks:park_list' %}?view_mode=list"
|
|
hx-target="#park-results"
|
|
hx-include="[name='search']"
|
|
hx-push-url="true"
|
|
>
|
|
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16"></path>
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Results Container -->
|
|
<div id="park-results">
|
|
{% include "parks/partials/park_list.html" %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|