Serveur web local sans dépendance nouvelle (http.server, Jinja2, htmx et Leaflet fournis). Écrans : Mes voyages, nouveau voyage, un voyage (journées avec carte, rattachement des traces sans heures à un jour avec suggestion d'après les photos, sources avec choix de dossier, infos et récit, génération avec avancement et arrêt), réglages du site et vérification des outils. Chaîne : jours imposés ([dates_traces] dans voyage.toml), arrêt propre de la compression, suivi des étapes, état structuré (site.tableau_etat), titre du voyage repris de voyage.toml sur l'accueil. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
95 lines
4.4 KiB
HTML
95 lines
4.4 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="/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="/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="/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="/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="/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>
|