- per-run checkbox when embedding HTML exists; cap at 2 selected - sticky 'compare selected' button opens /compare?a=&b= in new tab - selection state persists across the 3s htmx poll via a Set keyed by stem - /compare stub validates stems, renders scaffolding (three.js UI next)
75 lines
3.1 KiB
HTML
75 lines
3.1 KiB
HTML
{#
|
|
Partial: runs list (right column).
|
|
Expects: runs (list of normalised view dicts), optional just_submitted (id)
|
|
#}
|
|
{% if not runs %}
|
|
<div class="empty">No runs yet. Dispatch one from the form on the left.</div>
|
|
{% else %}
|
|
<ul class="runs">
|
|
{% for r in runs %}
|
|
<li class="run {% if just_submitted is defined and r.id == just_submitted %}just-submitted{% endif %}">
|
|
{% if r.emb_exists %}
|
|
<input type="checkbox" class="compare-cb" data-stem="{{ r.emb_file[:-5] }}" aria-label="select run for comparison" />
|
|
{% else %}
|
|
<span class="compare-cb-slot" aria-hidden="true"></span>
|
|
{% endif %}
|
|
<div class="stamp">
|
|
{% if r.runtime %}<span class="rt">{{ r.runtime }}</span>{% endif %}
|
|
{% if r.start %}{{ r.start[:10] }}<br/>{{ r.start[11:19] }}{% else %} {% endif %}
|
|
<span class="id">#{{ r.short_id }}</span>
|
|
</div>
|
|
<div class="body">
|
|
<div class="line1">
|
|
<span class="badge {{ r.state_type|lower }}">{{ r.state_name }}</span>
|
|
<span class="recipe">
|
|
<span class="embedder">{{ r.embedder_short or "?" }}</span>
|
|
<em>on</em>
|
|
<span class="generator">{{ r.generator_short or "?" }}</span>
|
|
</span>
|
|
</div>
|
|
|
|
{% if r.params %}
|
|
<div class="paramline">
|
|
<span><span class="k">N</span> {{ r.params.get('num_points', '?') }}</span>
|
|
<span><span class="k">T</span> {{ r.params.get('num_timesteps', r.params.get('num_snapshots', '?')) }}</span>
|
|
<span><span class="k">J</span> {{ r.params.get('jitter_scale', '?') }}</span>
|
|
<span><span class="k">s</span> {{ r.params.get('seed', '?') }}</span>
|
|
{% set ea = r.params.get('embed_args') or {} %}
|
|
{% if ea %}
|
|
{% for k, v in ea.items() %}
|
|
{% if k not in ('n_components','n_dims','random_state') %}
|
|
<span><span class="k">{{ k }}</span> {{ v }}</span>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div class="outputs">
|
|
<span class="tag">fig</span>
|
|
{% if r.ref_file %}
|
|
{% if r.ref_exists %}
|
|
<a href="/figs/{{ r.ref_file }}" target="_blank" rel="noopener">reference</a>
|
|
{% else %}
|
|
<a aria-disabled="true">reference</a>
|
|
{% endif %}
|
|
{% else %}
|
|
<span style="color:var(--faint);font-style:italic">reference: n/a</span>
|
|
{% endif %}
|
|
|
|
{% if r.emb_file %}
|
|
{% if r.emb_exists %}
|
|
<a href="/figs/{{ r.emb_file }}" target="_blank" rel="noopener">embedding</a>
|
|
{% else %}
|
|
<a aria-disabled="true">embedding</a>
|
|
{% endif %}
|
|
{% else %}
|
|
<span style="color:var(--faint);font-style:italic">embedding: n/a</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% endif %}
|