#!/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
Aucun voyage pour l\'instant.
'
'Lance genere_site.sh pour en générer.