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
+67
View File
@@ -3146,6 +3146,73 @@ n'affirme rien — comparer avec `RangDesEnvies`, qui avait dû reconduire un or
**618 tests au vert** (506 au début de la série), aucun avertissement de compilation.
## Les articles à la une se saisissent un par un — champ à séparateur retiré (2026-08-21)
Défaut remonté en usage sur le champ « À la une (titres séparés par des points-virgules) » :
« impossible de taper des espaces, des `;`, se comporte très bizarrement ».
### ⚠️ Le séparateur d'un champ relié à chaque frappe est INTAPABLE — et ce n'est pas propre aux unes
`AjoutNumeroRevue.ArticlesTexte` était une vue « une seule ligne » : son *getter* recomposait
(`ListeSaisie.Joindre`) ce que son *setter* venait de découper (`Decouper`). Reliée en
`@bind:event="oninput"`, elle **réécrivait la saisie à chaque caractère** :
| Ce qu'on tape | Ce que la propriété rend | Ce qu'on voit |
|---|---|---|
| `Ukraine ;` | `;` ouvre une entrée **vide**, élaguée par `RemoveEmptyEntries` | le `;` **disparaît** |
| `Ukraine ; ` | `TrimEntries` rogne l'espace de fin | l'espace **disparaît** |
| `Ukraine ; L` | `Joindre` repose son propre `« ; »` | le curseur **saute** |
Autrement dit : **le seul caractère qu'on ne pouvait pas taper dans ce champ était son propre
séparateur**. Le lot O2 avait longuement tranché *quel* séparateur employer (le point-virgule,
parce qu'un titre contient souvent une virgule) sans voir qu'aucun ne pouvait fonctionner par
cette mécanique.
⚠️ **Deux champs voisins ont exactement la même mécanique et donc le même défaut** :
`EnregistrementLivre.ThemesTexte` et `EnregistrementLivre.Auteur`, tous deux reliés sur
`oninput` à une propriété qui découpe puis recompose. Non corrigés — le retour d'usage ne
portait que sur les unes — mais ce sont les mêmes symptômes, et `Auteur` porte en plus la
reprise des rôles.
### Ce que l'écran fait maintenant
Un titre, `Entrée`, et il rejoint une liste où chaque ligne porte **Modifier** et **Supprimer**
(demandé tel quel par l'utilisateur). `Modifier` **reprend le titre dans le champ**, là où on
l'a écrit, et le bouton devient « Enregistrer » avec un « Annuler » à côté.
- **La liste est la donnée** : plus de propriété texte intermédiaire, plus de découpage, donc
plus rien à ne pas pouvoir taper — ni `;`, ni virgule, ni deux-points.
- **`Entrée` ne remonte pas à `OnEntree`** (qui enregistre le numéro entier) : sinon on ne
pourrait jamais saisir deux titres.
- **Le doublon reste refusé au sens de la normalisation**, avec un message plutôt qu'en silence.
- ⚠️ **Le composant se remet à zéro quand le parent change de `Saisie`** (numéro enregistré,
autre numéro ouvert en modification), en comparant la **référence** : sans cela, le titre resté
dans le champ appartiendrait au numéro d'avant.
- ⚠️ `min-width: 0` sur le titre de la ligne, encore une fois : sans lui, un titre long pousse
« Supprimer » hors d'un écran de 320 px.
`ArticlesTexte` a disparu, et avec lui le paramètre `virguleAussi` de `ListeSaisie` — il
n'existait que pour ce champ. `ListeSaisie` ne sert plus qu'aux **thèmes**, où la virgule reste
acceptée en repli.
### Vérifié en exécution (navigateur, 375 puis 320 px)
Frappe caractère par caractère de `Ukraine, deux ans après ; le retour du train` : **la valeur
reste exactement ce qui a été tapé**, espaces et `;` compris. `Entrée` la range telle quelle,
le champ se vide. Un doublon de casse est refusé avec son message ; Modifier reprend le titre,
Enregistrer le remplace, Supprimer le retire. Numéro 44 créé puis relu par l'API avec ses deux
titres **intacts**, un article ajouté à un numéro existant par l'écran d'édition, et la liste
qui se recharge bien d'un numéro à l'autre. Aucun débordement horizontal à 320 px
(`scrollWidth` = 320).
⚠️ **Défaut voisin constaté au passage, NON corrigé** : le bouton « Ajouter ce numéro » vit dans
`Revue.razor` alors que le champ « Numéro » vit dans `ChampsNumeroRevue`. Une frappe ne
re-rendant que le composant qui l'a traitée, le bouton **reste désactivé** tant que le parent ne
se redessine pas — seul `Entrée` (qui appelle `OnEntree`, donc le parent) enregistre le numéro.
À traiter.
617 tests au vert (618 avant : le test du découpage des unes n'a plus d'objet).
## La 7ᵉ série vérifiée en navigateur — trois défauts, tous invisibles aux tests (2026-08-21)
La série Q à Y s'était close sur un aveu : « **aucun** écran n'a été regardé s'afficher ». Le