Pratique pour les ouvrages techniques, manuel, etc et connaissance pour les encyclopédies, livres d'art, etc
109 lines
4.7 KiB
C#
109 lines
4.7 KiB
C#
using MaBibli.Shared.Entites;
|
|
|
|
namespace MaBibli.Client.Composants;
|
|
|
|
/// <summary>Libellés français des énumérations, au même endroit pour toute l'interface.</summary>
|
|
public static class Libelles
|
|
{
|
|
public static string Format(Format format) => format switch
|
|
{
|
|
MaBibli.Shared.Entites.Format.Physique => "Physique",
|
|
MaBibli.Shared.Entites.Format.Numerique => "Numérique",
|
|
_ => format.ToString(),
|
|
};
|
|
|
|
/// <summary>
|
|
/// Libellé du type de document. <b>« Non précisé » ne s'affiche pas sur une fiche</b> :
|
|
/// c'est l'absence de choix, et l'interface ne montre que ce qui a été choisi. Le libellé
|
|
/// existe pour les boutons de saisie et de filtre, où il faut bien nommer l'option.
|
|
/// </summary>
|
|
public static string TypeDocument(TypeDocument type) => type switch
|
|
{
|
|
MaBibli.Shared.Entites.TypeDocument.NonPrecise => "Non précisé",
|
|
MaBibli.Shared.Entites.TypeDocument.Roman => "Roman",
|
|
MaBibli.Shared.Entites.TypeDocument.BandeDessinee => "BD",
|
|
MaBibli.Shared.Entites.TypeDocument.Pratique => "Pratique",
|
|
MaBibli.Shared.Entites.TypeDocument.Connaissance => "Connaissance",
|
|
_ => type.ToString(),
|
|
};
|
|
|
|
/// <summary>
|
|
/// Libellé d'un rôle d'auteur. « Non précisé » ne s'affiche jamais sur une fiche : c'est
|
|
/// l'absence de choix, pas une information.
|
|
/// </summary>
|
|
public static string RoleAuteur(RoleAuteur role) => role switch
|
|
{
|
|
MaBibli.Shared.Entites.RoleAuteur.NonPrecise => "Non précisé",
|
|
MaBibli.Shared.Entites.RoleAuteur.Scenario => "Scénario",
|
|
MaBibli.Shared.Entites.RoleAuteur.Dessin => "Dessin",
|
|
MaBibli.Shared.Entites.RoleAuteur.Couleurs => "Couleurs",
|
|
_ => role.ToString(),
|
|
};
|
|
|
|
public static string Statut(Statut statut) => statut switch
|
|
{
|
|
MaBibli.Shared.Entites.Statut.ALire => "À lire",
|
|
MaBibli.Shared.Entites.Statut.EnCours => "En cours",
|
|
MaBibli.Shared.Entites.Statut.Lu => "Lu",
|
|
_ => statut.ToString(),
|
|
};
|
|
|
|
/// <summary>Classe CSS associée au statut, pour la pastille de couleur.</summary>
|
|
public static string ClasseStatut(Statut statut) => statut switch
|
|
{
|
|
MaBibli.Shared.Entites.Statut.ALire => "statut-a-lire",
|
|
MaBibli.Shared.Entites.Statut.EnCours => "statut-en-cours",
|
|
MaBibli.Shared.Entites.Statut.Lu => "statut-lu",
|
|
_ => string.Empty,
|
|
};
|
|
|
|
/// <summary>
|
|
/// Classe CSS associée au type de document, pour la pastille de couleur (A2, CLAUDE.md) :
|
|
/// le filtre doit reprendre le même vocabulaire visuel que la carte, pas des segments neutres.
|
|
/// « Non précisé » n'a pas de couleur : ce n'est pas une valeur choisie.
|
|
/// </summary>
|
|
public static string ClasseTypeDocument(TypeDocument type) => type switch
|
|
{
|
|
MaBibli.Shared.Entites.TypeDocument.Roman => "type-roman",
|
|
MaBibli.Shared.Entites.TypeDocument.BandeDessinee => "type-bd",
|
|
MaBibli.Shared.Entites.TypeDocument.Pratique => "type-pratique",
|
|
MaBibli.Shared.Entites.TypeDocument.Connaissance => "type-connaissance",
|
|
_ => string.Empty,
|
|
};
|
|
|
|
/// <summary>
|
|
/// Ce qu'annonce un bloc de série au catalogue : ce qui y est affiché, ce qu'on possède, et
|
|
/// ce que la série compte de tomes.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// ⚠️ <b>Le compte d'un bloc changeait avec le filtre</b> : « 3 tomes » devenait « 1 tome »
|
|
/// dès qu'une recherche écartait les autres, et se lisait alors comme « cette série n'a qu'un
|
|
/// tome ». Le nombre affiché ne disait pas de quoi il parlait.
|
|
/// <para>
|
|
/// Trois nombres seraient du bruit quand ils coïncident : les égalités se replient donc.
|
|
/// Un fonds complet et non filtré redit simplement « 3 tomes », comme avant.
|
|
/// </para>
|
|
/// </remarks>
|
|
/// <param name="affiches">Tomes de ce bloc actuellement à l'écran, filtre appliqué.</param>
|
|
/// <param name="possedes">Tomes de cette série présents au catalogue, descendance comprise.</param>
|
|
/// <param name="total">Tomes recensés dans la série, ceux qui manquent compris.</param>
|
|
public static string CompteBloc(int affiches, int possedes, int total)
|
|
{
|
|
var tomes = total > 1 ? "tomes" : "tome";
|
|
|
|
if (affiches == possedes && possedes == total)
|
|
{
|
|
return $"{total} {tomes}";
|
|
}
|
|
|
|
if (affiches == possedes)
|
|
{
|
|
return $"{possedes} sur {total} {tomes}";
|
|
}
|
|
|
|
return possedes == total
|
|
? $"{affiches} affiché{(affiches > 1 ? "s" : "")} sur {total} {tomes}"
|
|
: $"{affiches} affiché{(affiches > 1 ? "s" : "")} · {possedes} sur {total} {tomes}";
|
|
}
|
|
}
|