site.toml [administration] adresse : l'accueil affiche un bouton « Connexion » vers l'interface. Celle-ci peut tourner derrière le serveur web du site (rtg interface --proxy --prefixe /admin) : adresses préfixées, mot de passe obligatoire, visiteur identifié par X-Forwarded-For, cookie Secure limité au préfixe quand le site est en HTTPS. Exemples nginx et Apache dans le README. Le bouton Arrêter ne remplace plus le bloc de la tâche en même temps que la relève. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
95 lines
4.5 KiB
HTML
95 lines
4.5 KiB
HTML
<div class="analyse">
|
|
{% if not a.details_traces %}
|
|
<p class="vide">Aucune trace GPS. Indiquez où elles se trouvent dans l'onglet <a href="#sources">Sources</a>.</p>
|
|
{% else %}
|
|
<div class="carte" data-couches='{{ couches|tojson }}'></div>
|
|
|
|
{% if non_datees %}
|
|
<div class="encart attention">
|
|
<h3>{{ non_datees|length }} trace{{ 's' if non_datees|length > 1 }} à rattacher à un jour</h3>
|
|
<p class="aide">Ces traces n'ont pas d'heures (itinéraire préparé, par exemple) et leur nom ne contient pas de date au format AAAA-MM-JJ.
|
|
Choisissez le jour de chacune ; les traces en pointillé sur la carte sont celles-ci.</p>
|
|
<table>
|
|
<tbody>
|
|
{% for nom in non_datees %}
|
|
{% set d = a.details_traces|selectattr("nom", "equalto", nom)|first %}
|
|
<tr>
|
|
<td><code>{{ nom }}</code> <span class="discret">{{ d.km|round|int }} km</span></td>
|
|
<td>
|
|
<form class="en-ligne" hx-post="{{ base }}/voyage/date" hx-target="#analyse">
|
|
<input type="hidden" name="v" value="{{ v.chemin }}"><input type="hidden" name="fichier" value="{{ nom }}">
|
|
<input type="date" name="jour" required><button>OK</button>
|
|
</form>
|
|
</td>
|
|
<td>
|
|
{% set s = suggestions.get(nom) %}
|
|
{% if s and s[0] %}
|
|
<button class="petit" hx-post="{{ base }}/voyage/date" hx-target="#analyse"
|
|
hx-vals='{{ {"v": v.chemin, "fichier": nom, "jour": s[0].isoformat()}|tojson }}'
|
|
title="{{ s[1] }} photo(s) ou vidéo(s) de ce jour prises le long de la trace">Le {{ s[0]|date_longue }} ?</button>
|
|
{% else %}<span class="discret">pas de suggestion</span>{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% if non_datees|length > 1 %}
|
|
<form class="en-ligne" hx-post="{{ base }}/voyage/dates-suite" hx-target="#analyse">
|
|
<input type="hidden" name="v" value="{{ v.chemin }}">
|
|
Ou bien, dans l'ordre des noms, un jour par trace à partir du <input type="date" name="debut" required>
|
|
<button>Répartir</button>
|
|
</form>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<h3>{{ jours|length }} journée{{ 's' if jours|length > 1 }} · {{ total_km|round|int }} km</h3>
|
|
<table class="jours">
|
|
<thead><tr><th>Jour</th><th class="num">km</th><th>Traces</th></tr></thead>
|
|
<tbody>
|
|
{% for j in jours %}
|
|
<tr><td><span class="puce" style="background: {{ j.couleur }}"></span> {{ j.date|date_longue }}</td>
|
|
<td class="num">{{ j.km|round|int }}</td>
|
|
<td class="discret">{{ j.traces|join(", ") }}</td></tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
|
|
<details>
|
|
<summary>Les {{ a.details_traces|length }} fichier{{ 's' if a.details_traces|length > 1 }} de traces et leur jour</summary>
|
|
<p class="aide">Un jour imposé ici remplace celui que RTG déduit des heures ou du nom du fichier.</p>
|
|
<table>
|
|
<thead><tr><th>Fichier</th><th>Jour(s) retenu(s)</th><th>Jour imposé</th></tr></thead>
|
|
<tbody>
|
|
{% for d in a.details_traces %}
|
|
<tr>
|
|
<td><code title="{{ d.fichier }}">{{ d.nom }}</code>{% if d.erreur %} <span class="pastille attention" title="{{ d.erreur }}">illisible</span>{% endif %}</td>
|
|
<td>{% for j in d.jours %}{{ j|date_courte }}{{ ", " if not loop.last }}{% else %}<span class="discret">—</span>{% endfor %}</td>
|
|
<td>
|
|
<form class="en-ligne" hx-post="{{ base }}/voyage/date" hx-target="#analyse">
|
|
<input type="hidden" name="v" value="{{ v.chemin }}"><input type="hidden" name="fichier" value="{{ d.nom }}">
|
|
<input type="date" name="jour" value="{{ d.impose.isoformat() if d.impose else '' }}">
|
|
<button class="petit">{{ "Changer" if d.impose else "Imposer" }}</button>
|
|
</form>
|
|
{% if d.impose %}
|
|
<button class="petit" hx-post="{{ base }}/voyage/date" hx-target="#analyse"
|
|
hx-vals='{{ {"v": v.chemin, "fichier": d.nom, "jour": ""}|tojson }}'>Annuler</button>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</details>
|
|
{% endif %}
|
|
|
|
{% set autres = a.a_verifier|reject("commence_par", "Trace à rattacher")|list %}
|
|
{% if autres %}
|
|
<div class="encart attention">
|
|
<h3>À vérifier</h3>
|
|
<ul>{% for m in autres %}<li>{{ m }}</li>{% endfor %}</ul>
|
|
</div>
|
|
{% endif %}
|
|
<p class="discret">Photos trouvées : {{ a.photos|length }} · Vidéos trouvées : {{ a.videos|length }}</p>
|
|
</div>
|