{% extends "base.html" %} {% from "_provenance.html" import provenance %} {% from "_lifetime.html" import lifetime %} {% from "_dates.html" import dates %} {# THE DESK (R2 C4). The index triaged by what needs the operator: needs you, then new since you looked, then everything else — always in that order, and the ORDER WITHIN each is decided in app.index, never here. A section with no booths renders nothing at all: no heading, no empty box (the negative half of the kept-lane pair this replaces). #} {# The first four images, the originals shown small. A blurred one stays blurred (`blurred-thumb`, the cover's rule). A booth with no images shows the kind placeholder the cards used to. #} {% macro preview(b) -%} {%- endmacro %} {% macro row(b, section) -%}
{{ preview(b) }}
{# The manifest title leads when there is one; the directory name stays beside it because it is what the URL says. #} {%- if b.manifest and not b.manifest.error and b.manifest.title and b.manifest.title != b.name -%} {{ b.manifest.title }} {{ b.name }} {%- else -%}{{ b.name }}{%- endif -%} {{ provenance(b.manifest) }} {# Facts only: counts and dates. The lifetime is state (the pill) and the controls are actions (the cluster); neither lives here. #}
{{ b.count }} item{{ '' if b.count == 1 else 's' }} {%- if b.flags %} · {{ b.flags }} flagged{% endif %} {{- dates(b.created_at, b.landed_at, now) }}
{# The right column: badges, then the LIFETIME PILL, always visible — state, not a control, so it stays when the controls hide, and down the Desk it reads as one column of kept / held / counting (operator: "make it obvious which are kept and which are ephemeral"). #}
{% if b.marks_open %}? {{ b.marks_open }} open {% elif b.hold == "unreadable" %}marks unreadable {% elif section == 'new' %}new{% endif %} {% if b.uploaded %}⬆ pickup{% endif %} {# r2b D2b: a fogged strip says why. Information, not the control. #} {% if b.booth_blurred %}◉ blurred{% endif %} {{ lifetime(b.kept, b.hold, b.expires_in) }}
{# The row's controls, LAST in the markup so the booth's name comes first in tab order (heid bug-hunt: wipe used to be reachable before the booth it acts on). Where a real hover exists they float over the strip's top-right corner — covering pictures, never information — and appear only on hover or keyboard focus (operator: "download, keep and release buttons only appear on mouseover"; x hides too, his answer). Anywhere else they are the row's last line, visible: hover-only would mean no controls at all on touch. Order: zip, keep or release, then wipe set apart — zip out of the middle (operator), release still next to x. #}
⬇ zip {%- if b.kept %}
{%- else %}
{%- endif %}
{%- endmacro %} {% block content %}
{% if needs %}

Needs you oldest question first

{% for b in needs %}{{ row(b, 'needs') }}{% endfor %}
{% endif %} {% if new %}

New since you looked newest first

{% for b in new %}{{ row(b, 'new') }}{% endfor %}
{% endif %} {% if rest %}

Everything else last updated first

{% for b in rest %}{{ row(b, 'rest') }}{% endfor %}
{% endif %} {% if not needs and not new and not rest %}
No booths yet. Drop a folder into {{ data_dir }}, or upload files for pickup.
{% endif %}
{% endblock %}