{% extends "auctions/htmx_table_view.html" %} {% block title %}Speaker directory{% endblock %} {% comment %} The speaker directory. Extends the shared htmx table page so the filter box, chips and pagination behave like every other table on the site, and adds two things on top: * a map of the same filtered set, kept in sync by an out-of-band payload the htmx table response carries (see partials/speaker_table.html) * a detail panel that slides in from the right on desktop and covers the screen on mobile, pushing the speaker's own URL so it can be copied and shared {% endcomment %} {% block htmx_table_ribbon %}

Speakers

Add a speaker
{% comment %} Nudge to add the club's own members, since the club knows who speaks and the site doesn't. Deliberately not a row of per-member buttons: naming people who haven't said they give talks reads as putting words in their mouth, and the list would be mostly wrong. {% endcomment %} {% if has_unlisted_members %}
Do any of your club members give talks?

They aren't in the directory yet, and adding them lets every other NEC club find them. Add them here.

{% endif %} {% endblock %} {% comment %}Empty on purpose: the search box is rendered by speaker_table_header.html, above the topic and filter menus. Rendering the crispy form here as well would put a second, unwired copy of it on the page.{% endcomment %} {% block htmx_table_filter_form %}{% endblock %} {% block htmx_table %} {% comment %}Directly above the results, not tucked up beside the heading: switching to the map is the second thing people want from this page and it was easy to miss up there.{% endcomment %}
{% if unmapped_count %} {% endif %}
{{ block.super }}
{% comment %} The detail panel: offcanvas-style column on desktop, full screen on mobile. {% endcomment %} {% endblock %} {% block extra_js %} {{ block.super }} {% comment %} Wrapped in a div because hx-swap-oob needs an element it can replace wholesale; the htmx table response ships the same wrapper so filtering redraws the map markers. {% endcomment %}
{{ speakers_json|json_script:"speaker-map-data" }}
{% if google_maps_api_key %} {% else %} {% endif %} {% endblock %}