Replie les blocs de série au catalogue, cycle par cycle
Le catalogue ne rangeait un livre que sous sa série directe : il n'y avait qu'un seul niveau, donc rien à replier « à chaque niveau ». Le regroupement devient un arbre — un cycle coiffe ses séries, comme sur /series — et chaque nœud porte sa bascule. Tout reste déplié par défaut ; un bloc replié annonce ce qu'il contient, et l'état de repli appartient à l'écran, sans quoi une frappe dans la recherche le perdrait. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3320,6 +3320,50 @@ n'apparaît qu'une fois et toujours sous la même, la liste plate sans séries,
|
||||
tome, et le filtre qui ne se laisse pas défaire. C'est le même parti que `FiltreLivresLocal` :
|
||||
ce qui tient une règle sort du balisage.
|
||||
|
||||
### Les blocs se replient, et un cycle replie chacun de ses niveaux (2026-08-22)
|
||||
|
||||
Demandé dans la foulée : « pouvoir réduire les groupes et ne garder que le nom de la série ; si
|
||||
plusieurs niveaux, permettre de réduire chaque niveau ».
|
||||
|
||||
⚠️ **Le catalogue ne connaissait qu'un seul niveau** : le regroupement rangeait chaque livre sous
|
||||
sa série *directe*, sans jamais remonter au cycle. Il n'y avait donc pas de « chaque niveau » à
|
||||
replier — c'est le regroupement lui-même qui a dû devenir un arbre, `EntreeCatalogue` portant
|
||||
désormais des `SousEntrees`. Un cycle se lit maintenant au catalogue comme sur `/series`.
|
||||
|
||||
| Décision | Pourquoi |
|
||||
|---|---|
|
||||
| **Tout est déplié par défaut**, on replie ce dont on ne veut pas | Règle déjà tenue par l'arbre des séries. L'inverse obligerait à ouvrir chaque bloc pour retrouver un livre qu'on voyait très bien avant |
|
||||
| Le bloc **replié annonce toujours son compte** (« 3 tomes ») | Sans lui, le compteur du haut (« 6 livres ») paraîtrait mentir |
|
||||
| L'état de repli vit dans l'**écran**, pas dans les blocs | Le catalogue se relit **à chaque frappe** dans la recherche : un état porté par les composants se perdrait à chaque caractère. Vérifié — le repli survit à une recherche et à son effacement |
|
||||
| Non persistant d'une visite à l'autre | Confort de lecture, pas propriété de la série — même règle que `/series` |
|
||||
| Le cycle se place à la place du **premier tome de sa descendance** | Prolongement exact de la règle de placement déjà actée : l'ordre général du catalogue ne bouge pas |
|
||||
| Les sous-séries suivent leur **ordre de lecture** (`Serie.Position`), les tomes le leur | Deux écrans ne doivent pas donner deux ordres |
|
||||
|
||||
⚠️ **Seuls les niveaux qui portent quelque chose existent.** Un cycle de cinq séries dont une
|
||||
seule a un tome au catalogue ne produit pas quatre nœuds vides : on ne crée que la chaîne qui
|
||||
mène aux livres présents. Un niveau vide serait une indentation qui ne se replierait sur rien —
|
||||
et le titre d'une série dont on ne possède rien.
|
||||
|
||||
⚠️ La remontée de parenté est **bornée par le nombre de séries**, comme celle du serveur : une
|
||||
boucle résiduelle en base ferait sinon tourner le regroupement sans fin. Mieux vaut un bloc rangé
|
||||
un cran trop haut qu'un catalogue qui ne s'affiche plus. Un test le verrouille.
|
||||
|
||||
⚠️ **La bascule est un `<button>` À CÔTÉ du lien, jamais dedans** : un bouton imbriqué dans un
|
||||
`<a>` n'est pas du HTML valide, et le clic partirait vers la série au lieu de replier. Le nom
|
||||
reste un vrai lien vers `/series/{id}`.
|
||||
|
||||
⚠️ **`aria-expanded="@Deplie"` ne fait pas ce qu'on croit** : Blazor traite un booléen comme un
|
||||
attribut de *présence* et rend `aria-expanded=""`, que les lecteurs d'écran ne savent pas lire.
|
||||
L'état doit être écrit en toutes lettres (`@(Deplie ? "true" : "false")`). Constaté ici, mesuré
|
||||
dans le navigateur — **le même défaut subsiste ailleurs** (`ArbreSerie`, le bouton « Filtrer » du
|
||||
catalogue), non corrigé faute d'être dans la demande.
|
||||
|
||||
**Vérifié en exécution** (375 px puis 320 px) : le cycle *La Légende de Drizzt* coiffe ses deux
|
||||
sous-séries, chaque niveau se replie et se déplie indépendamment, l'état d'un sous-niveau survit
|
||||
au repli de son cycle, le compteur reste « 6 livres » dans tous les cas, le repli survit à une
|
||||
recherche (« salvatore ») et à son effacement, le nom mène toujours à `/series/6`, aucun
|
||||
débordement horizontal (`scrollWidth` = 320) et aucune erreur de console. 627 tests au vert.
|
||||
|
||||
**Vérifié en exécution** (320 px puis 1280 px, base de développement garnie de trois tomes et
|
||||
d'un livre hors série) : blocs « L'Elfe noir » (2 tomes, dans l'ordre de **lecture** — l'inverse
|
||||
de l'alphabet) et « La Trilogie des Elfes noirs » (1 tome) posés à la place de leur premier tome,
|
||||
|
||||
Reference in New Issue
Block a user