Rend enfin tapable le champ où l'on écrit ce qu'un numéro annonce

Le champ « À la une » se reliait à chaque frappe sur une propriété qui
découpait puis recomposait la ligne : le point-virgule tapé ouvrait une
entrée vide aussitôt élaguée, et l'espace qui le suit était rogné. Le seul
caractère qu'on ne pouvait pas y taper était son propre séparateur.

Un titre s'ajoute maintenant seul, par Entrée, et se modifie ou se retire
depuis la liste. Plus rien ne découpe, donc plus rien n'est intapable.

ArticlesTexte disparaît, et avec lui le paramètre virguleAussi de
ListeSaisie, qui n'existait que pour ce champ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-21 23:37:31 +02:00
co-authored by Claude Opus 5
parent abaa520f59
commit fe36091bf0
7 changed files with 298 additions and 55 deletions
+11 -10
View File
@@ -1,18 +1,19 @@
namespace MaBibli.Shared.Textes;
/// <summary>
/// Découpage d'un champ texte qui porte <b>plusieurs valeurs</b> : thèmes d'un livre, articles
/// à la une d'un numéro de revue.
/// Découpage du champ texte qui porte <b>plusieurs thèmes</b> d'un livre.
/// </summary>
/// <remarks>
/// <b>Le séparateur est le point-virgule</b>, comme celui des auteurs
/// (<c>EnregistrementLivre.SeparateurAuteurs</c>) : trois champs voisins du même formulaire ne
/// doivent pas se saisir de trois façons.
/// (<c>EnregistrementLivre.SeparateurAuteurs</c>) : deux champs voisins du même formulaire ne
/// doivent pas se saisir de deux façons. La virgule reste acceptée en repli — elle était le
/// séparateur jusqu'au 2026-08-21, et un thème (« dark fantasy ») n'en contient jamais.
/// <para>
/// ⚠️ <b>La virgule n'est acceptée que là où elle ne peut rien couper de travers.</b> Un thème
/// (« dark fantasy ») n'en contient jamais, et l'accepter évite de désapprendre une habitude ;
/// un <b>titre d'article</b> en contient souvent (« Ukraine, deux ans après »), et la virgule y
/// couperait le titre en deux. D'où le paramètre plutôt qu'une règle unique.
/// ⚠️ <b>Ce découpage ne convient pas à tout champ à valeurs multiples.</b> Les articles à la
/// une d'un numéro y sont passés jusqu'au 2026-08-21 et en sont sortis : un titre contient
/// souvent une virgule, et surtout un champ relié à chaque frappe sur une propriété qui découpe
/// puis recompose <b>réécrit la saisie sous les doigts</b> — le parateur lui-même devient
/// intapable. Ils se saisissent maintenant un par un.
/// </para>
/// </remarks>
public static class ListeSaisie
@@ -28,14 +29,14 @@ public static class ListeSaisie
/// normalisation</b> — « Fantasy » et « fantasy » sont la même étiquette, et le premier
/// libellé tapé est celui qui reste.
/// </summary>
public static List<string> Decouper(string? saisie, bool virguleAussi)
public static List<string> Decouper(string? saisie)
{
if (string.IsNullOrWhiteSpace(saisie))
{
return [];
}
char[] separateurs = virguleAussi ? [Separateur, ','] : [Separateur];
char[] separateurs = [Separateur, ','];
var vus = new HashSet<string>(StringComparer.Ordinal);
return saisie