#!/usr/bin/env python3 """Page d'accueil listant tous les voyages du site. Usage : ./genere_index_general.py [racine_du_site] Un voyage est reconnu à la présence de son fichier mini.html (la carte miniature produite par genere_carte.py). """ import os import re import sys import html from urllib.parse import quote EXCLURE = {'html', 'Scripts', '__pycache__', '.git', 'node_modules', 'videos', 'photos', 'rushs', 'routes'} OUTPUT_FILE = "index.html" def cle_de_tri(nom): """Trie du plus récent au plus ancien quand un millésime est détecté dans le nom du dossier, alphabétiquement sinon.""" m = re.search(r'(19|20)\d{2}', nom) annee = int(m.group(0)) if m else 0 return (-annee, nom.lower()) def lien(trip, suffixe=""): """URL sûre : les espaces et les & des noms de dossier sont encodés.""" return html.escape(quote(trip) + suffixe) def generer_index_general(racine="."): road_trips = [] for d in sorted(os.listdir(racine)): if d in EXCLURE or d.startswith('.'): continue chemin = os.path.join(racine, d) if os.path.isdir(chemin) and os.path.exists(os.path.join(chemin, 'mini.html')): road_trips.append(d) road_trips.sort(key=cle_de_tri) cartes = [] for trip in road_trips: # Le nom est échappé : un dossier « rando & vercors » produisait # sinon du HTML invalide (& non échappé) et un lien cassé. titre = html.escape(trip.replace('-', ' ').replace('_', ' ')) cartes.append(f"""

{titre}

Voir le voyage
""") if road_trips: corps = '
\n' + "\n".join(cartes) + '\n
' sous_titre = f"{len(road_trips)} voyage" + ("s" if len(road_trips) > 1 else "") else: corps = ('

Aucun voyage pour l\'instant.
' 'Lance genere_site.sh pour en générer.

') sous_titre = "" # Pas d'espace avant : la version précédente commençait par # un saut de ligne et de l'indentation, ce qui bascule certains navigateurs # en mode « quirks » et fausse la mise en page. html_content = f""" Nos Road-Trips

🌍 Nos Road-Trips

{sous_titre}
{corps}
""" sortie = os.path.join(racine, OUTPUT_FILE) with open(sortie, "w", encoding="utf-8") as f: f.write(html_content) print(f"🌍 Index général : {len(road_trips)} voyage(s) → {sortie}") if __name__ == "__main__": racine = sys.argv[1] if len(sys.argv) > 1 else "." generer_index_general(racine)