From 7c050cb410942aab11b8385caee76f5d1fd5d4f8 Mon Sep 17 00:00:00 2001 From: mathieu Date: Fri, 21 Aug 2026 11:25:48 +0200 Subject: [PATCH] =?UTF-8?q?Coche=20toute=20la=20bibliographie=20visible,?= =?UTF-8?q?=20et=20montre=20ce=20qu'on=20ne=20poss=C3=A8de=20pas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit « Tout cocher » vit à côté du filtre et non dans la barre de sélection : celle-ci n'apparaît qu'une fois une case cochée, c'est-à-dire trop tard pour rendre service. « Tout » signifie ce qui est actuellement visible — après filtre, et selon que les masquées sont affichées. Cocher les deux cents notices remontées alors que l'écran n'en montre que trente serait précisément ce que les compteurs par bouton cherchent à éviter. La couverture d'une œuvre non possédée n'est rendue qu'au dépliage : une bibliographie compte des dizaines de lignes, et les charger d'avance ferait payer des images que personne ne regarde. Sans ISBN, pas de couverture et on n'en invente pas : la vignette retombe sur son substitut à initiale. Co-Authored-By: Claude Opus 5 --- MaBibli.Client/Pages/Bibliographie.razor | 79 ++++++++++++++++++++---- MaBibli.Client/wwwroot/css/app.css | 1 + 2 files changed, 69 insertions(+), 11 deletions(-) diff --git a/MaBibli.Client/Pages/Bibliographie.razor b/MaBibli.Client/Pages/Bibliographie.razor index 223e206..d547494 100644 --- a/MaBibli.Client/Pages/Bibliographie.razor +++ b/MaBibli.Client/Pages/Bibliographie.razor @@ -7,7 +7,9 @@ @if (_bibliographie is null && _erreur is null) {

Bibliographie

-

Interrogation de la BnF…

+ @* L1 : une bibliographie coûte ~1 s par page, et jusqu'à dix pages pour les nouveautés. + Sans indicateur, l'écran se lit comme planté — et l'on reclique, donc on relance. *@ + } else if (_erreur is not null) { @@ -172,6 +174,24 @@ else if (_bibliographie is { } biblio) vous » sont trois façons de restreindre la même liste. Les chercher en bas d'un écran qui défile sur cinquante lignes n'avait pas de sens. *@ + + @* + I1 : « Tout cocher » vit ICI et non dans la barre de sélection, qui n'apparaît + qu'une fois une case cochée — c'est-à-dire trop tard pour rendre service. + + ⚠️ « Tout » signifie ce qui est ACTUELLEMENT VISIBLE, donc après filtre et selon + que les masquées sont affichées ou non. Cocher les 200 notices remontées, dont + l'écran n'en montre que trente, serait exactement ce que les compteurs par + bouton cherchent à éviter. + *@ + @if (ACocher(biblio).Count is var aCocher and > 0) + { + + } @if (_filtresOuverts) @@ -314,16 +334,33 @@ else if (_bibliographie is { } biblio) @if (_oeuvresOuvertes.Contains(oeuvre.Titre)) { -

- @if (!string.IsNullOrWhiteSpace(oeuvre.Isbn)) - { - ISBN : @FormatageIsbn.Afficher(oeuvre.Isbn) - } - @if (oeuvre.NombreEditions > 1) - { - @oeuvre.NombreEditions éditions recensées - } -

+ @* + I2 : la vignette n'est rendue qu'ICI, au dépliage. Une + bibliographie compte des dizaines de lignes : les charger + toutes d'avance ferait payer des images que personne ne + regarde. Les œuvres possédées, elles, ont déjà la leur par + CarteLivre. + + ⚠️ « Sans ISBN, pas de couverture, et on n'en invente pas » : + la formule OpenLibrary s'applique à l'ISBN repris du + dc:identifier de la notice, et le substitut à initiale sert + de repli quand la notice n'en porte aucun. + *@ +
+ + +

+ @if (!string.IsNullOrWhiteSpace(oeuvre.Isbn)) + { + ISBN : @FormatageIsbn.Afficher(oeuvre.Isbn) + } + @if (oeuvre.NombreEditions > 1) + { + @oeuvre.NombreEditions éditions recensées + } +

+
} } @@ -403,6 +440,26 @@ else if (_bibliographie is { } biblio) private int NombreFiltres => (_modePossession == 0 ? 0 : 1) + (_masquees > 0 && !_afficherMasquees ? 1 : 0); + /// + /// URL de couverture d'une œuvre non possédée, ou null quand la notice n'a pas + /// d'ISBN — auquel cas la vignette retombe sur son substitut à initiale. + /// + private static string? CouvertureDe(OeuvreBibliographie oeuvre) => + string.IsNullOrWhiteSpace(oeuvre.Isbn) ? null : IsbnUtils.UrlCouverture(oeuvre.Isbn); + + /// Les œuvres visibles qui ne sont pas encore cochées. + private List ACocher(BibliographieDto biblio) => + Affichees(biblio).Where(o => !_selection.Contains(o.Titre)).ToList(); + + /// Coche tout ce qui est visible — jamais ce que le filtre écarte. + private void CocherTout(BibliographieDto biblio) + { + foreach (var oeuvre in ACocher(biblio)) + { + _selection.Add(oeuvre.Titre); + } + } + /// Les œuvres cochées qui peuvent effectivement rejoindre la liste d'envies. private List SelectionADecouvrir(BibliographieDto biblio) => biblio.Oeuvres.Where(o => _selection.Contains(o.Titre) && o.ADecouvrir).ToList(); diff --git a/MaBibli.Client/wwwroot/css/app.css b/MaBibli.Client/wwwroot/css/app.css index d15514b..eb04867 100644 --- a/MaBibli.Client/wwwroot/css/app.css +++ b/MaBibli.Client/wwwroot/css/app.css @@ -983,6 +983,7 @@ body { .detail-oeuvre { display: flex; flex-wrap: wrap; + align-items: flex-start; gap: 0.5rem; margin: 0.25rem 0 0; }