/** * Panneau de détail : édition précise d'une phase. * * Le panneau applique les changements au fil de la saisie plutôt qu'à la * validation d'un formulaire. La frise se met à jour en direct, et la * sauvegarde debouncée de storage.js absorbe la fréquence des modifications. * * C'est aussi ici qu'on saisit une date exacte : le glisser sur la frise * s'accroche au lundi, ce panneau est le recours quand une phase doit démarrer * un jeudi précis. * * Le panneau n'est **pas modal** : rien ne recouvre la frise pendant qu'il est * ouvert. Voir docs/decisions.md, section 17. */ import { STATUTS, dateValide, modifierPhase } from './model.js'; import { creerBlocNotes } from './notes.js'; /** * Les champs de la phase, et la forme de leur contrôle. * * Une seule liste, parcourue par tout ce qui traite les champs en bloc : * l'affichage, le rafraîchissement et la comparaison. Ajouter `fixed` avait * demandé quatre retouches dispersées, dont on ne savait qu'en les cherchant * qu'elles allaient ensemble ; il n'y a plus qu'une ligne à ajouter ici, et le * cas particulier à écrire s'il y en a un. * * `notes` n'y est pas : son contrôle est bâti par `notes.js` et se remplit par * lui, jamais en écrivant directement dans le `textarea` — l'aperçu markdown ne * suivrait pas. Il reste comparé à part, pour la même raison. */ const CHAMPS = [ { nom: 'name' }, { nom: 'start' }, { nom: 'end' }, { nom: 'status' }, { nom: 'milestone', case: true }, { nom: 'fixed', case: true }, ]; export function creerPanneau(refs, rappels) { const { panneau, formulaire, titre, erreur, champDates, champFin, notes, supprimer, fermer } = refs; // Le bloc pose lui-même un `