Traiter le lot A d'IDEES.md : CSS onglets, pastilles, identité visuelle, couverture cassée, cache couvertures

- A1 : forcer la revalidation HTTP (Cache-Control: no-cache) sur les fichiers statiques,
  pour empêcher un navigateur de garder indéfiniment un CSS/JS périmé quand le service
  worker ne s'active pas.
- A2 : le filtre du catalogue (statut, type de document) reprend les mêmes pastilles
  colorées que les cartes (Libelles.ClasseStatut / nouvelle Libelles.ClasseTypeDocument).
- A3 : remplacement du logo par défaut de Blazor par un pictogramme de livre ouvert
  (favicon, icônes PWA, logo du bandeau, logo mabibli_ynh).
- A4 : une couverture cassée désactive aussi son bouton d'agrandissement.
- A5 : cache IndexedDB des couvertures pour la consultation hors-ligne, sans ralentir
  l'affichage en ligne (mise en cache en tâche de fond). L'allègement (redimensionnement,
  WebP) reste hors scope, à mesurer avant de s'y engager.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
LIMONIER Mathieu
2026-08-20 13:03:14 +02:00
co-authored by Copilot
parent ce58294fd1
commit 5d45eb492e
16 changed files with 318 additions and 74 deletions
+8 -60
View File
@@ -116,69 +116,17 @@ sans rapport.
## Lot A — L'habillage : la navigation ne ressemble à rien
Le lot qui se voit à chaque écran, et le seul dont le défaut ressemble à une régression.
**A1 à A4 traités le 2026-08-20** (voir `CLAUDE.md`, section « Habillage — retours d'usage du
2026-08-19 traités »). Reste ouvert :
### A1. Les six onglets s'affichent en liens bruts (anomalie, pas une demande)
### A5. Alléger les couvertures (redimensionnement / WebP)
Constaté sur la capture du 2026-08-19 : `CatalogueAuteursSériesRevuesPrêtsEnvies` s'affiche en
bas de page, en bleu souligné, collés les uns aux autres — c'est-à-dire **sans aucune des règles
de `MainLayout.razor.css`** : ni `position: fixed`, ni `display: flex`, ni les libellés espacés.
Le cache hors-ligne des couvertures est fait (voir `CLAUDE.md`), mais chaque affichage en ligne
retélécharge toujours l'image OpenLibrary à sa taille d'origine — rien n'est redimensionné à la
taille réellement affichée, ni converti en WebP.
⚠️ **Ce n'est probablement pas un défaut de mise en forme à refaire, mais une feuille de style
périmée.** Sur la même capture, le bandeau supérieur **est** bleu foncé — or `.bandeau` et
`.onglets` vivent dans le **même fichier** scopé. Une moitié appliquée et l'autre pas ne
s'explique pas par le CSS lui-même : elle s'explique par un `MaBibli.Client.styles.css` **d'avant
l'ajout des onglets**, servi à côté d'un WASM à jour (le balisage, lui, montre bien les six
onglets).
Hypothèse à vérifier **avant** de toucher au style, sous peine de « corriger » du code sain :
1. le nom `MaBibli.Client.styles.css` est **stable** (les empreintes sont désactivées, voir
`CLAUDE.md`) — rien d'autre que le service worker ne le fait expirer ;
2. or le service worker **ne s'enregistre pas** dans certains contextes, et un onglet resté
ouvert diffère l'activation d'un nouveau worker.
Contrôles qui trancheraient : ouvrir `/MaBibli.Client.styles.css` sur le serveur et y chercher
`.onglets` ; comparer avec le fichier du dernier publish ; recharger en vidant le cache.
Si la règle **est** présente et pourtant sans effet, alors seulement chercher du côté de
l'attribut de portée (`b-xxxxx`) que `NavLink` doit relayer via ses attributs additionnels.
### A2. Les filtres reprennent le vocabulaire visuel des cartes
Les états *À lire / En cours / Lu* et les types *Roman / BD* s'affichent en pastilles colorées
sur les cartes du catalogue, mais en segments neutres dans le panneau « Filtrer ». Demander la
**même pastille** dans le filtre, pour qu'on reconnaisse ce qu'on filtre.
### A3. Une identité visuelle : trois images, trois emplacements distincts
À ne pas confondre, les trois ne vivent pas au même endroit :
| Où | Quoi | Porté par |
|---|---|---|
| Catalogue d'applications YunoHost | logo de l'app | `mabibli_ynh` (`doc/`, manifeste) |
| Bandeau de l'application | petit logo à côté de « MaBibli » | `MaBibli.Client/wwwroot` |
| Installation PWA (téléphone, PC) | icône d'accueil et écran de démarrage | `manifest.webmanifest` + icônes 192/512 |
⚠️ La troisième est la seule qui a des contraintes dures (tailles, `purpose: maskable`), et
c'est aussi la seule que le service worker met en cache — donc celle dont un changement se voit
le plus tard.
### A4. Couvertures : ne pas agrandir ce qui n'existe pas
Cliquer une vignette absente ne doit rien ouvrir. `CLAUDE.md` affirme que le bouton n'est rendu
que lorsqu'une `CoverUrl` existe — **le cas remonté est donc probablement l'image *cassée*** :
URL présente, mais 502 ou 404 d'OpenLibrary (intermittence documentée). Le `onerror` remplace
l'image ; il devrait aussi **retirer le déclencheur d'agrandissement**.
### A5. Garder les couvertures en cache, et les alléger
Aujourd'hui chaque affichage retélécharge l'image chez OpenLibrary — donc rien hors-ligne, et
des vignettes manquantes au gré des 502. Piste : stocker l'image (IndexedDB, à côté des
instantanés) et la réduire à la taille réellement affichée.
⚠️ À peser : c'est le premier contenu **binaire et volumineux** du cache hors-ligne, dont
`CLAUDE.md` note qu'il pèse aujourd'hui ~2,4 Ko pour 10 livres. Une conversion (WebP) n'a de sens
que si la mesure montre un gain — même règle que pour l'AOT.
⚠️ À peser avant de s'y engager, même règle que pour l'AOT : une conversion n'a de sens que si la
mesure montre un gain réel. Pas encore mesuré à l'échelle d'un vrai fonds.
---