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; }