{# 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 %} {% set _loading = loading_state if loading_state is defined else (_state.loading_state|default(none)) %} {% set _database_snapshot = database_snapshot if database_snapshot is defined else (_state.database_snapshot|default(false)) %} {% set _database_label = database_label if database_label is defined else (_state.database_label|default("authoritative")) %} {% set _phase = _loading.phase.value if _loading and _loading.phase is defined else none %} {% set _stage = _loading.stage.value if _loading and _loading.stage is defined and _loading.stage else none %} {% set _candidate_total = _loading.candidate_count if _loading and _loading.candidate_count is defined else 0 %} {% set _candidate_done = _loading.completed_candidates if _loading and _loading.completed_candidates is defined else 0 %} {% if _disabled %} auto-refresh off{% if _database_snapshot %} · {{ _database_label }}{% elif _database_label == "preview" %} · preview{% endif %} {% elif _phase == "failed" %} Refresh failed{% if _database_label != "authoritative" %} · {{ _database_label }}{% endif %} {% else %} {% if _in_progress %} {% if _phase == "previewing" %}loading preview{% elif _phase == "discovering" %}discovering logs{% else %}refreshing{% if _stage %} · loading {{ _stage }}{% endif %}{% endif %}{% if _candidate_total %} ({{ _candidate_done }}/{{ _candidate_total }} files){% endif %}… {% elif _notify %} ✓ refreshed{% if _database_label != "authoritative" %} · {{ _database_label }}{% endif %} {% elif _database_snapshot %} {{ _database_label }} · Last refreshed {{ _relative }} {% elif _database_label == "preview" %} preview · Last refreshed {{ _relative }} {% else %} Last refreshed {{ _relative }} {% endif %}
{% endif %}