Page « À propos » (/a-propos) : manuel annoncé à venir, contact, site de l'auteur, version publiée avec sa date de build, et licence AGPL v3 avec le lien vers le dépôt — l'AGPL attend que les utilisateurs d'un service en réseau puissent en obtenir la source, ce lien n'est donc pas un ornement. L'application ne connaissait pas sa version : elle vivait dans le manifeste du paquet et dans les tags git, jamais dans le binaire. `build/publier-release.sh` pose désormais `-p:Version` et `-p:MaBibliDateBuild` ; l'API rend les deux par `GET /api/version`. ⚠️ L'horodatage est le TÉMOIN de l'injection, et rien ne le calcule côté MSBuild. Sans lui, la version lue serait le « 1.0.0 » que le SDK pose par défaut : il se lirait comme une vraie version alors qu'il ne désigne rien, et c'est exactement la valeur qu'on ira chercher pour diagnostiquer un appareil au cache dépareillé. Mieux vaut ne rien annoncer — un binaire compilé à la main se déclare « version de développement », ce qui est vrai. Autres décisions : - l'entrée du menu est DÉTACHÉE des six destinations, par un filet au-dessus sur téléphone et à gauche en rangée sur PC : « À propos » est une annexe, pas une septième destination. Ses règles vivent en feuille GLOBALE, comme tout le menu — une règle scopée n'atteint pas ce que rend un NavLink ; - le « mailto: » reste un lien même hors-ligne : il ne charge aucune page et passe la main au client de messagerie, qui sait mettre un message en attente. Le site et le dépôt, eux, basculent en boutons désactivés portant leur motif, comme les liens d'export des envies ; - la version est un sixième instantané hors-ligne : on la lit justement quand quelque chose ne va pas, et un appareil qu'on soupçonne est souvent celui qui n'a plus de réseau. L'écran dit alors que c'est la dernière version vue du serveur. Le point de rupture de 40 rem reste identique dans les deux feuilles, et /a-propos est inscrite dans la table de remontée des routes. Vérifié en exécution, l'API lancée : sans injection `{"numero":null,"publiee":false}`, avec `-p:Version=0.4.1 -p:MaBibliDateBuild=…` `{"numero":"0.4.1","publiee":true}`. Le rendu des écrans n'a PAS été vérifié en navigateur. 618 tests au vert (605 avant). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
151 lines
5.1 KiB
Plaintext
151 lines
5.1 KiB
Plaintext
@page "/a-propos"
|
|
@inject ServiceLivresApi Api
|
|
@inject EtatReseau Reseau
|
|
@implements IDisposable
|
|
|
|
@*
|
|
Ce que l'application dit d'elle-même : à qui écrire, où trouver de l'aide, quelle version
|
|
tourne réellement, et sous quelle licence elle est distribuée.
|
|
|
|
⚠️ Ce n'est pas une page d'ornement. Elle porte la version, c'est-à-dire la première chose
|
|
qu'on demande à quelqu'un dont l'application se comporte bizarrement — le projet a déjà connu
|
|
un appareil au cache dépareillé, où seule une version affichée aurait tranché. Et elle porte
|
|
le lien vers la source, que l'AGPL v3 attend qu'un service en réseau offre à ses utilisateurs.
|
|
*@
|
|
|
|
<PageTitle>MaBibli — à propos</PageTitle>
|
|
|
|
<h1 class="titre-page">À propos</h1>
|
|
|
|
<section class="bloc-apropos">
|
|
<h2 class="titre-section">Manuel</h2>
|
|
<p class="message-discret">
|
|
Un manuel d'utilisation est <strong>à venir</strong>. En attendant, chaque écran porte ses
|
|
explications à l'endroit où elles servent.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="bloc-apropos">
|
|
<h2 class="titre-section">Contact</h2>
|
|
@*
|
|
⚠️ Le « mailto: » reste un lien même hors-ligne, et c'est délibéré : il ne charge aucune
|
|
page, il passe la main au client de messagerie de l'appareil, lequel sait mettre un
|
|
message en attente d'envoi. Le désactiver empêcherait précisément d'écrire « ça ne marche
|
|
pas, je n'ai plus de réseau ».
|
|
*@
|
|
<p><a href="mailto:info@limonier.be">info@limonier.be</a></p>
|
|
|
|
@*
|
|
Le site, lui, est une vraie navigation vers l'extérieur : hors-ligne elle finirait sur la
|
|
page d'erreur du navigateur, hors de l'application. Un <a> ne se désactivant pas, il
|
|
bascule en bouton inerte portant sa raison — même règle que les liens d'export des envies.
|
|
*@
|
|
@if (Reseau.EnLigne)
|
|
{
|
|
<p>
|
|
<a href="@Site" target="_blank" rel="noopener">www.limonier.be</a>
|
|
</p>
|
|
}
|
|
else
|
|
{
|
|
<p>
|
|
<button type="button" class="bouton bouton-discret" disabled
|
|
title="@EtatReseau.MotifHorsLigne">www.limonier.be</button>
|
|
</p>
|
|
}
|
|
</section>
|
|
|
|
<section class="bloc-apropos">
|
|
<h2 class="titre-section">Version</h2>
|
|
@if (_version is null)
|
|
{
|
|
<p class="message-discret">Chargement…</p>
|
|
}
|
|
else if (_version.Publiee)
|
|
{
|
|
<p>
|
|
<strong>@_version.Numero</strong>
|
|
<span class="message-discret"> — compilée @Quand(_version.DateBuild!.Value)</span>
|
|
</p>
|
|
|
|
@if (!Reseau.EnLigne)
|
|
{
|
|
<p class="message-discret">
|
|
Hors ligne : c'est la dernière version annoncée par le serveur, pas forcément
|
|
celle qui y tourne en ce moment.
|
|
</p>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
@*
|
|
⚠️ Ne JAMAIS afficher ici le « 1.0.0 » que le SDK .NET pose par défaut : il se lirait
|
|
comme une vraie version. Mieux vaut ne rien annoncer que d'annoncer un faux numéro,
|
|
surtout sur la valeur qui sert à diagnostiquer.
|
|
*@
|
|
<p class="message-discret">
|
|
Version de développement : ce binaire n'a pas été produit par la chaîne de
|
|
publication, il n'a donc pas de numéro de version à annoncer.
|
|
</p>
|
|
}
|
|
</section>
|
|
|
|
<section class="bloc-apropos">
|
|
<h2 class="titre-section">Licence</h2>
|
|
<p>
|
|
MaBibli est distribuée sous licence <strong>GNU AGPL v3</strong>.
|
|
</p>
|
|
@*
|
|
Le lien vers le dépôt n'est pas un ornement : l'AGPL demande que les utilisateurs d'un
|
|
service accessible par le réseau puissent en obtenir le code source.
|
|
*@
|
|
@if (Reseau.EnLigne)
|
|
{
|
|
<p>
|
|
Son code source est disponible :
|
|
<a href="@Depot" target="_blank" rel="noopener">@Depot</a>
|
|
</p>
|
|
}
|
|
else
|
|
{
|
|
<p>
|
|
Son code source est disponible à l'adresse <code>@Depot</code>
|
|
<button type="button" class="bouton bouton-discret" disabled
|
|
title="@EtatReseau.MotifHorsLigne">Ouvrir le dépôt</button>
|
|
</p>
|
|
}
|
|
</section>
|
|
|
|
@code {
|
|
/// <summary>Site de l'auteur, ouvert dans une autre fenêtre.</summary>
|
|
private const string Site = "https://www.limonier.be";
|
|
|
|
/// <summary>Dépôt du code — ce que l'AGPL attend qu'on rende accessible.</summary>
|
|
private const string Depot = "https://git.akbar.nohost.me/mathieu/mabibli";
|
|
|
|
private VersionApplication? _version;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
Reseau.Change += SurChangementReseau;
|
|
_version = await Api.ObtenirVersionAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Au retour du réseau, la version se redemande : hors-ligne on affichait la dernière connue.
|
|
/// </summary>
|
|
private void SurChangementReseau() => _ = InvokeAsync(async () =>
|
|
{
|
|
_version = await Api.ObtenirVersionAsync();
|
|
StateHasChanged();
|
|
});
|
|
|
|
private static string Quand(DateTimeOffset instant)
|
|
{
|
|
var local = instant.ToLocalTime();
|
|
return $"le {local:dd/MM/yyyy} à {local:HH:mm}";
|
|
}
|
|
|
|
public void Dispose() => Reseau.Change -= SurChangementReseau;
|
|
}
|