- base.html: #modal-detaliu (role=dialog, aria-modal) + #detaliu-modal-body swap target; focus-trap, inert+aria-hidden pe <main>, Esc/backdrop/x inchid, listener trimiteriChanged (R5/R7) - _coada.html: ancora modal in afara #submissions-wrap; sters #trimitere-detaliu inert vechi - _submissions.html: randul declanseaza modalul; sters tr.detaliu-rand sibling (R3) - _trimitere_detaliu.html: script rescris pentru modal, fara marcheazaDetaliuDeschis/scrollIntoView (R4) - teste: test_web_modal.py nou (3); test_web_detaliu_inline.py sters; test_acasa_trimiteri.py curatat (R3) - gates: pytest PASS (suita completa 819). Browser E2E + design-review deferate la VERIFY. Salvat manual: iteratiile Ralph 2-12 au ramas fara turns (30) inainte de commit. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
94 lines
3.7 KiB
HTML
94 lines
3.7 KiB
HTML
{% if rows %}
|
|
{# US-011: form de stergere bulk. Selectia opereaza DOAR pe randuri blocate
|
|
(gestionabil); sent/sending/queued nu au checkbox (read-only). #}
|
|
<form id="bulk-trimiteri"
|
|
hx-post="/trimiteri/sterge-bulk"
|
|
hx-target="#submissions-wrap"
|
|
hx-swap="innerHTML"
|
|
hx-confirm="Stergi definitiv trimiterile selectate?"
|
|
hx-disinherit="hx-confirm"
|
|
style="margin:0;">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<div style="display:flex; justify-content:flex-end; margin-bottom:8px;">
|
|
<button type="submit" id="bulk-sterge-btn"
|
|
style="background:var(--card); color:var(--err); border-color:var(--err); font-size:13px; padding:4px 10px;">
|
|
Sterge selectate
|
|
</button>
|
|
</div>
|
|
<div class="tablewrap tabel-trimiteri">
|
|
<table>
|
|
<thead><tr>
|
|
<th class="col-chk"><span class="muted" title="Selecteaza randuri blocate">✓</span></th>
|
|
<th class="col-id">#</th>
|
|
<th class="col-stare">Stare</th>
|
|
<th class="col-vehicul">Vehicul</th>
|
|
<th class="col-operatie">Operatie</th>
|
|
<th class="col-data">Data prestatie</th>
|
|
<th class="col-rar">Nr. prezentare RAR</th>
|
|
<th class="col-actualizat">Actualizat</th>
|
|
</tr></thead>
|
|
<tbody>
|
|
{% for r in rows %}
|
|
{# PRD 5.9 US-003: randul declanseaza deschiderea MODALULUI global (#detaliu-modal-body),
|
|
nu un rand-sibling. Clickabil/focusabil (role=button); Enter/Space deschid modalul
|
|
(JS in base.html). Vechiul rand-sibling de detaliu a fost eliminat. #}
|
|
<tr id="trimitere-row-{{ r.id }}"
|
|
class="trimitere-row"
|
|
data-detaliu-id="{{ r.id }}"
|
|
hx-get="/_fragments/trimitere/{{ r.id }}"
|
|
hx-target="#detaliu-modal-body"
|
|
hx-swap="innerHTML"
|
|
role="button" tabindex="0"
|
|
aria-haspopup="dialog"
|
|
style="cursor:pointer;"
|
|
title="Click pentru detaliul complet">
|
|
<td class="col-chk" onclick="event.stopPropagation();">
|
|
{% if r.gestionabil %}
|
|
<input type="checkbox" name="submission_id" value="{{ r.id }}"
|
|
aria-label="Selecteaza trimiterea #{{ r.id }} pentru stergere">
|
|
{% endif %}
|
|
</td>
|
|
<td class="col-id muted" data-eticheta="#">{{ r.id }}</td>
|
|
<td class="col-stare" data-eticheta="Stare">
|
|
<span class="pill {{ r.stare_css }}" title="{{ r.stare_text }}">{{ r.stare_scurt }}</span>
|
|
</td>
|
|
<td class="col-vehicul" data-eticheta="Vehicul">
|
|
{{ r.prez.vehicul_nr }}
|
|
{% if r.prez.vin_scurt and r.prez.vin_scurt != '—' %}
|
|
<span class="muted" style="font-size:12px;">{{ r.prez.vin_scurt }}</span>
|
|
{% endif %}
|
|
</td>
|
|
<td class="col-operatie" data-eticheta="Operatie">
|
|
<div>{{ r.prez.operatie }}</div>
|
|
{% if r.prez.cod_rar and r.prez.cod_rar != '—' %}
|
|
<div class="muted cod-rar-sub">cod RAR: {{ r.prez.cod_rar }}</div>
|
|
{% else %}
|
|
<div class="muted cod-rar-sub">nemapat</div>
|
|
{% endif %}
|
|
</td>
|
|
<td class="col-data" data-eticheta="Data prestatie">{{ r.prez.data_prestatie }}</td>
|
|
<td class="col-rar" data-eticheta="Nr. prezentare RAR">{{ r.id_prezentare or '—' }}</td>
|
|
<td class="col-actualizat muted" data-eticheta="Actualizat">{{ r.updated_at }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</form>
|
|
{% elif filtru_activ %}
|
|
<div class="empty">
|
|
Nimic pe filtrul curent.
|
|
<a href="#"
|
|
onclick="var f=document.getElementById('filtre-trimiteri'); if(f) f.reset(); return true;"
|
|
hx-get="/_fragments/submissions" hx-target="#submissions-wrap" hx-swap="innerHTML">
|
|
sterge filtrele
|
|
</a>
|
|
</div>
|
|
{% else %}
|
|
<div class="empty">
|
|
Nicio trimitere inca —
|
|
<a href="/?tab=acasa">incepe cu un import</a>
|
|
sau trimite o prezentare prin API.
|
|
</div>
|
|
{% endif %}
|