{# Top-nav refresh indicator. Rendered both: - inline via {% include %} from base.html (uses request.app.state) - as an HTMX fragment from POST /refresh and GET /refresh-status (uses handler-passed vars) The handler always passes `disabled`, `in_progress`, `relative`, `window`. For the base.html include path we fall back to reading request.app.state directly and computing `relative` via the `format_relative` Jinja global. While `in_progress` is truthy, the span self-polls GET /refresh-status so the "refreshing…" label flips to "Last refreshed …" once the background rebuild completes without the user having to click again. #} {% set _state = request.app.state %} {% set _disabled = disabled if disabled is defined else (_state.refresh_trigger is not defined or _state.refresh_trigger is none) %} {% set _in_progress = in_progress if in_progress is defined else (_state.refresh_in_progress|default(false)) %} {% set _last = last_refreshed_at if last_refreshed_at is defined else _state.last_refreshed_at|default(none) %} {% set _relative = relative if relative is defined else format_relative(_last) %} {% set _window = window if window is defined else (_state.refresh_window|default("30")) %} {% set _poll_delay_ms = poll_delay_ms if poll_delay_ms is defined else 1000 %} {% set _notify = notify if notify is defined else false %} {% if _disabled %} auto-refresh off {% else %} {% if _in_progress %} refreshing… {% elif _notify %} ✓ refreshed {% else %} Last refreshed {{ _relative }} {% endif %}
{% endif %}