Propriétés de champ de bloc de Forms adaptatif

Ce document résume la manière dont le schéma JSON est mappé à HTML rendu dans blocks/form/form.js, en se concentrant sur la manière dont les champs sont identifiés et rendus, les modèles courants et les différences spécifiques aux champs.

Comment Les Champs (fieldType) Sont-Ils Identifiés ?

Chaque champ du schéma JSON possède une propriété fieldType qui détermine son rendu. Le fieldType peut être :

  • Un type spécial
    Exemples : drop-down, radio-group, checkbox-group, panel, plain-text, image, heading, etc.
  • Type d’entrée HTML valide
    Exemples : text, number, email, date, password, tel, range, file, etc.
  • Type avec un suffixe -input
    Exemples : text-input, number-input, etc. (normalisé sur le type de base tel que text, number).

Si le fieldType correspond à un type spécial, un moteur de rendu personnalisé est utilisé. Dans le cas contraire, il est traité comme un type d’entrée par défaut.

Consultez les sections ci-dessous pour connaître la structure et propriétés HTML complètes pour chaque type de champ.

Propriétés courantes utilisées par les champs

Vous trouverez ci-dessous les propriétés utilisées par la plupart des champs :

  • id : spécifie l’ID de l’élément et prend en charge l’accessibilité.
  • name : définit l’attribut name pour les éléments d’entrée, de sélection ou d’ensemble de champs.
  • label.value, label.richText, label.visible : indique le texte du libellé/de la légende, le contenu HTML et la visibilité.
  • value : représente la valeur actuelle du champ.
  • required : ajoute l’attribut required ou les données de validation.
  • readOnly, enabled : contrôle si le champ est modifiable ou désactivé.
  • description : affiche le texte d’aide sous le champ.
  • tooltip : définit l’attribut title pour les entrées.
  • constraintMessages : fournit des messages d’erreur personnalisés en tant qu’attributs de données.

Structure commune d’HTML

La plupart des champs sont rendus dans un wrapper qui comprend un libellé et un texte d’aide facultatif. Le fragment de code suivant illustre la structure :

<div class="<fieldType>-wrapper field-wrapper field-<name>" data-id="<id>">
<label for="<id>" class="field-label">Label</label>
<!-- Field-specific input/element here -->
<div class="field-description" id="<id>-description">Description or error
message</div>
</div>

Pour les groupes (case d’option/case à cocher) et les panneaux, un <fieldset> avec un <legend> est utilisé au lieu d’un <div>/<label>. Texte d’aide

n’est présent que si la description est définie.

Affichage du message d’erreur

Les messages d’erreur s’affichent dans le même élément de .field-description que celui utilisé pour le texte d’aide, qui est mis à jour dynamiquement.

Lorsqu’un champ n’est pas valide :

Lorsque le champ devient valide :

Les messages d’erreur personnalisés peuvent être définis à l’aide de la propriété constraintMessages dans le fichier JSON.
Ils sont ajoutés en tant qu’attributs data-<constraint>ErrorMessage sur le wrapper (par exemple, data-requiredErrorMessage).

Types d’entrée par défaut (entrée HTML ou *-input)

Si fieldType n’est pas un type spécial, il est traité comme un type d’entrée HTML standard ou comme <type>-input, par exemple text, number, email, date, text-input, number-input.

Contraintes pour les types d’entrée par défaut

Les contraintes sont ajoutées en tant qu’attributs sur l’élément d’entrée en fonction des propriétés JSON.

Propriété JSON
Attribut HTML
Application
maxLength
maxlength
texte, e-mail, mot de passe, tél
minLength
minlength
texte, e-mail, mot de passe, tél
pattern
pattern
texte, e-mail, mot de passe, tél
maximum
max.
nombre, période, date
minimum
min.
nombre, période, date
étape
étape
nombre, période, date
accept
accept
Fichier
multiple
multiple
Fichier
maxOccur
data-max
panel
minOccur
data-min
panel
NOTE
multiple est une propriété booléenne. Si la valeur est true, l’attribut multiple est ajouté.

Ces attributs sont définis automatiquement par le moteur de rendu de formulaire en fonction de la définition JSON du champ.

Exemple : structure HTML avec contraintes

L’exemple suivant illustre la manière dont un champ numérique est rendu avec des contraintes de validation et des attributs de gestion des erreurs.

<div class="number-wrapper field-wrapper field-age" data-id="age"
data-required="true"
data-minimumErrorMessage="Too small" data-maximumErrorMessage="Too large">
<label for="age" class="field-label">Age</label>
<input type="number"
id="age" name="age"
value="30" required min="18"
max="99" step="1"
placeholder="Enter your age" />
<div class="field-description" id="age-description"> Description or error message
</div>
</div>

Chaque partie de la structure d’HTML joue un rôle dans la liaison des données, la validation et l’affichage des messages d’aide ou d’erreur.

Propriétés spécifiques au champ et leurs structures HTML

Liste déroulante

Propriétés supplémentaires :

Exemple :

<div class="drop-down-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true"
data-requiredErrorMessage="This field is required">
<label for="<id>" class="field-label">Label</label>
<select id="<id>" name="<name>" required title="Tooltip" multiple>
<option disabled selected value="">Placeholder</option>
<option value="opt1">Option 1</option>
<option value="opt2">Option 2</option>
</select>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Texte brut

Propriétés supplémentaires :

Exemple :

<div class="plain-text-wrapper field-wrapper field-<name>" data-id="<id>">
<label for="<id>" class="field-label">Label</label>
<p>Text or <a href="..." target="_blank">link</a></p>
</div>

Case à cocher

Propriétés supplémentaires :

Exemple :

<div class="checkbox-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true"
data-requiredErrorMessage="Please check this box">
<label for="<id>" class="field-label">Label</label>
<input type="checkbox"
id="<id>"
name="<name>" value="on"
required
data-unchecked-value="off" />
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Bouton

Propriétés supplémentaires :

Exemple :

<div class="button-wrapper field-wrapper field-<name>" data-id="<id>">
<button id="<id>" name="<name>" type="submit" class="button"> Label
</button>
</div>

Entrée Multiligne

Propriétés supplémentaires :

Exemple :

<div class="multiline-wrapper field-wrapper field-<name>" data-id="<id>"
data-minLengthErrorMessage="Too short" data-maxLengthErrorMessage="Too long">
<label for="<id>" class="field-label">Label</label>
<textarea id="<id>"
name="<name>" required
minlength="2"
maxlength="100"
pattern="[A-Za-z]+"
placeholder="Type here..."></textarea>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Panneau

Propriétés supplémentaires :

Exemple :

<fieldset class="panel-wrapper field-wrapper field-<name>" data-id="<id>"
name="<name>"
data-repeatable="true" data-index="0">
<legend class="field-label">Label</legend>
<!-- Nested fields here -->
<button type="button" class="add">Add</button>
<button type="button" class="remove">Remove</button>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Case d’option

Propriétés supplémentaires :

Exemple :

<div class="radio-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true">
<label for="<id>" class="field-label">Label</label>
<input type="radio" id="<id>" name="<name>" value="opt1" required />
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Groupe de cases d’option

Propriétés supplémentaires :

Exemple :

<fieldset class="radio-group-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true">
<legend class="field-label">Label</legend>
<div>
<input type="radio" id="<id>-0" name="<name>" value="opt1" required />
<label for="<id>-0">Option 1</label>
</div>
<div>
<input type="radio" id="<id>-1" name="<name>" value="opt2" />
<label for="<id>-1">Option 2</label>
</div>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Groupe de cases à cocher

Propriétés supplémentaires :

Exemple :

<fieldset class="checkbox-group-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true" data-minItems="1"
data-maxItems="3">
<legend class="field-label">Label</legend>
<div>
<input type="checkbox" id="<id>-0" name="<name>" value="opt1" required />
<label for="<id>-0">Option 1</label>
</div>
<div>
<input type="checkbox" id="<id>-1" name="<name>" value="opt2" />
<label for="<id>-1">Option 2</label>
</div>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Image

Propriétés supplémentaires :

Exemple :

<div class="image-wrapper field-wrapper field-<name>" data-id="<id>">
<picture>
<img src="..." alt="..." />
<!-- Optimized sources -->
</picture>
</div>

En-tête

Propriétés supplémentaires :

Exemple :

<div class="heading-wrapper field-wrapper field-<name>" data-id="<id>">
<h2 id="<id>">Heading Text</h2>
</div>

Pour plus d’informations, consultez la mise en œuvre dans blocks/form/form.js et blocks/form/util.js.

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab