Gestion de bibliothèque personnelle auto-hébergée : catalogue, prêts, scan de code-barres, consultation hors-ligne. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
75 lines
2.9 KiB
Plaintext
75 lines
2.9 KiB
Plaintext
@*
|
|
Le catalogue contient déjà quelque chose de semblable.
|
|
|
|
⚠️ C'est un AVERTISSEMENT, jamais un refus : posséder deux exemplaires est légitime — on
|
|
garde le sien et on prête l'autre — et le rapprochement se trompe dans les deux sens (il
|
|
confond le poche et le grand format, il rate une réédition retitrée). L'écran montre donc
|
|
les fiches en cause plutôt que de les décrire, et laisse la décision à l'utilisateur.
|
|
|
|
Les fiches sont des LIENS : la question qui se pose vraiment est « est-ce bien le même
|
|
livre ? », et on n'y répond qu'en regardant celui qui est déjà là.
|
|
*@
|
|
<div class="message-avertissement" role="alert">@Doublons.Message</div>
|
|
|
|
<ul class="liste-livres">
|
|
@foreach (var livre in Doublons.Livres)
|
|
{
|
|
<li class="carte-livre" @key="livre.Id">
|
|
<Couverture Url="@livre.CoverUrl" Titre="@livre.Titre" Classe="couverture-petite" />
|
|
|
|
<div class="carte-corps">
|
|
<a class="carte-titre" href="@($"livres/{livre.Id}")">@livre.Titre</a>
|
|
|
|
@if (livre.Auteurs.Count > 0)
|
|
{
|
|
<p class="carte-auteur">@string.Join(", ", livre.Auteurs.Select(a => a.Nom))</p>
|
|
}
|
|
|
|
<p class="carte-details">
|
|
@if (livre.Format == Format.Numerique)
|
|
{
|
|
<span class="etiquette">@Libelles.Format(livre.Format)</span>
|
|
}
|
|
|
|
@* Un exemplaire dehors est justement une raison d'en vouloir un second. *@
|
|
@if (livre.PreteA is { } emprunteur)
|
|
{
|
|
<span class="etiquette etiquette-prete">Prêté à @emprunteur</span>
|
|
}
|
|
|
|
@if (!string.IsNullOrWhiteSpace(livre.Editeur))
|
|
{
|
|
<span>@livre.Editeur</span>
|
|
}
|
|
|
|
@if (!string.IsNullOrWhiteSpace(livre.Isbn))
|
|
{
|
|
<span class="code-isbn">@FormatageIsbn.Afficher(livre.Isbn)</span>
|
|
}
|
|
</p>
|
|
</div>
|
|
</li>
|
|
}
|
|
</ul>
|
|
|
|
<div class="actions-formulaire">
|
|
<button type="button" class="bouton bouton-principal" disabled="@EnCours" @onclick="OnConfirmer">
|
|
@(EnCours ? "Ajout…" : "Ajouter quand même")
|
|
</button>
|
|
<button type="button" class="bouton bouton-discret" disabled="@EnCours" @onclick="OnRenoncer">
|
|
Ne pas ajouter
|
|
</button>
|
|
</div>
|
|
|
|
@code {
|
|
[Parameter, EditorRequired] public DoublonsLivre Doublons { get; set; } = default!;
|
|
|
|
/// <summary>Ajout confirmé : second exemplaire, autre édition, ou rapprochement à côté.</summary>
|
|
[Parameter] public EventCallback OnConfirmer { get; set; }
|
|
|
|
/// <summary>Retour en arrière : le livre était bien déjà là.</summary>
|
|
[Parameter] public EventCallback OnRenoncer { get; set; }
|
|
|
|
[Parameter] public bool EnCours { get; set; }
|
|
}
|