Rend le panneau "Nouvel objet" compact — lignes de tableau, pas des cartes

Chaque champ prenait une grosse carte (~250px de haut : libellés Bulma
pleine taille, "Retirer ce champ" en texte) — inutilisable pour un objet
à 10+ champs, ce qui est pourtant l'usage visé par ce panneau.

Remplacé par une vraie ligne de tableau dense, sur le même principe que
"Champs existants" dans object_edit.html (déjà compact et sobre dans le
reste de l'outil) : une ligne = un champ, colonnes Nom/Type/Objet
lié/Mini/Maxi/Obligatoire, action "Retirer" réduite à une icône. Les
colonnes conditionnelles (Objet lié pour une relation, Mini/Maxi pour un
nombre) restent TOUJOURS présentes — sans quoi les colonnes de lignes
différentes ne s'aligneraient plus — seul leur contenu bascule entre le
vrai champ de saisie et un espace réservé "—", au lieu de masquer toute
la cellule comme avant.

object_form.js adapté en conséquence : bounds désormais 2 cibles
séparées (mini/maxi, chacune dans sa propre cellule) au lieu d'une seule
enveloppe commune, et chaque bascule s'accompagne de celle de son
espace réservé.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-08-27 11:04:13 +02:00
co-authored by Claude Sonnet 5
parent d875557254
commit e1216e99d5
2 changed files with 74 additions and 71 deletions
+20 -4
View File
@@ -17,12 +17,28 @@
var NUMERIC_FIELD_TYPES = ['nombre_entier', 'nombre_decimal'];
function wireRow(row) {
// Ligne de TABLEAU dense (une ligne = un champ, comme "Champs
// existants" dans object_edit.html) : "Objet lié" et "Mini"/"Maxi"
// gardent toujours leur colonne (jamais masquée, sinon les colonnes
// des différentes lignes ne s'alignent plus) — seul leur CONTENU
// bascule entre le vrai champ de saisie et un espace réservé "—"
// quand il ne s'applique pas au type choisi.
var typeSelect = row.querySelector('.fieldTypeSelect');
var relationWrap = row.querySelector('.relationTarget');
var boundsWrap = row.querySelector('.boundsTarget');
var relationTarget = row.querySelector('.relationTarget');
var relationPlaceholder = row.querySelector('.relationPlaceholder');
var boundsTargets = row.querySelectorAll('.boundsTarget');
var boundsPlaceholders = row.querySelectorAll('.boundsPlaceholder');
function toggle(target, placeholder, visible) {
target.style.display = visible ? '' : 'none';
placeholder.style.display = visible ? 'none' : '';
}
function syncFieldTypeVisibility() {
relationWrap.style.display = typeSelect.value === 'relation' ? 'block' : 'none';
if (boundsWrap) boundsWrap.style.display = NUMERIC_FIELD_TYPES.includes(typeSelect.value) ? 'flex' : 'none';
var isRelation = typeSelect.value === 'relation';
var isNumeric = NUMERIC_FIELD_TYPES.includes(typeSelect.value);
toggle(relationTarget, relationPlaceholder, isRelation);
boundsTargets.forEach(function (el, i) { toggle(el, boundsPlaceholders[i], isNumeric); });
}
typeSelect.addEventListener('change', syncFieldTypeVisibility);
syncFieldTypeVisibility();