brewlog/templates/partials/lists/cafe_list.html
Jon Seager 2473e1f377
fix(templates): wrap flag and country in span for correct mobile flex layout
The flag emoji and country name were separate flex items inside mobile
card td cells, causing the flag to float away from the country text.
Wrapping them in a single span keeps them together as one flex item.
2026-02-09 20:20:12 +00:00

130 lines
4.8 KiB
HTML

{% import "partials/lists/table.html" as table %}
{% import "partials/icons.html" as icons %}
<div id="cafe-list" class="mt-6" data-star-scope="cafes">
{% if cafes.items.is_empty() && !navigator.has_search() %}
<div
class="rounded-lg border border-dashed px-4 py-6 text-sm text-text-secondary"
>
<p class="text-center">
{% if is_authenticated %}
No cafes added yet. Click Add to add the first cafe.
{% else %}
No cafes added yet.
{% endif %}
</p>
</div>
{% else %}
<section
class="rounded-lg border bg-surface"
{% if cafes.has_next() %}
data-infinite-scroll
data-next-url="{{ navigator.fragment_page_href(cafes.next_page().unwrap())|safe }}"
data-target="#cafe-list"
{% endif %}
>
{{ table::search_header(navigator, "#cafe-list") }}
<div class="overflow-x-auto">
<table
class="responsive-table min-w-full divide-y text-left text-sm text-text"
>
<thead
class="bg-surface-alt text-xs font-semibold text-text-secondary"
>
<tr>
{{ table::sortable_header("Added", "created-at", navigator, "#cafe-list") }}
{{ table::sortable_header("Name", "name", navigator, "#cafe-list") }}
{{ table::sortable_header("Country", "country", navigator, "#cafe-list") }}
{{ table::sortable_header("City", "city", navigator, "#cafe-list") }}
<th scope="col" class="actions-col px-4 py-3 text-right"></th>
</tr>
</thead>
<tbody class="divide-y/70">
{% for cafe in cafes.items %}
<tr
data-star-key="{{ cafe.id }}"
data-sort-created-at="{{ cafe.created_at_sort_key }}"
data-sort-name="{{ cafe.name }}"
data-sort-country="{{ cafe.country }}"
data-sort-city="{{ cafe.city }}"
class="transition hover:bg-surface-alt"
onclick="window.location.href='{{ cafe.detail_path }}'"
>
<td
data-label="Added"
class="card-date whitespace-nowrap px-4 py-3 font-medium text-text-secondary"
>
<div>{{ cafe.created_date }}</div>
<div
class="hidden md:block text-xs font-normal text-text-muted"
>
{{ cafe.created_time }}
</div>
</td>
<td
data-label="Name"
class="card-title px-4 py-3 font-medium text-text"
>
{{ cafe.name }}
</td>
<td
data-label="Location"
class="px-4 py-3 whitespace-nowrap md:hidden"
>
<span
>{% if !cafe.country_flag.is_empty() %}
<span class="mr-1">{{ cafe.country_flag }}</span>
{% endif %}{{ cafe.country }}</span
>
</td>
<td
data-label="City"
class="px-4 py-3 whitespace-nowrap md:hidden"
>
{{ cafe.city }}
</td>
<td
data-label="Country"
class="mobile-hidden px-4 py-3 whitespace-nowrap"
>
<span
>{% if !cafe.country_flag.is_empty() %}
<span class="mr-1">{{ cafe.country_flag }}</span>
{% endif %}{{ cafe.country }}</span
>
</td>
<td
data-label="City"
class="mobile-hidden px-4 py-3 whitespace-nowrap"
>
{{ cafe.city }}
</td>
<td data-label="" class="card-actions px-4 py-3 text-right">
<a
href="{{ cafe.detail_path }}"
aria-label="View {{ cafe.name }}"
class="inline-flex h-8 w-8 items-center justify-center rounded-md text-text-muted transition hover:text-accent hover:bg-surface-alt"
>
{{ icons::chevron_right("h-5 w-5") }}
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if cafes.items.is_empty() %}
<div class="p-8 text-center text-text-muted">
No cafes match the search.
</div>
{% endif %}
{{ table::pagination_header(cafes, navigator, "#cafe-list") }}
{% if cafes.has_next() %}
<div
class="infinite-scroll-sentinel h-4 md:hidden"
aria-hidden="true"
></div>
{% endif %}
</section>
{% endif %}
</div>