Propriedades adaptáveis do campo de bloco do Forms

Este documento resume como o esquema JSON mapeia para o HTML renderizado em blocks/form/form.js, com foco em como os campos são identificados e renderizados, padrões comuns e diferenças específicas de campo.

Como Os Campos (fieldType) São Identificados?

Cada campo no esquema JSON tem uma propriedade fieldType que determina como ele é renderizado. O fieldType pode ser:

  • Um tipo especial
    Exemplos: drop-down, radio-group, checkbox-group, panel, plain-text, image, heading, etc.
  • Um tipo de entrada HTML válido
    Exemplos: text, number, email, date, password, tel, range, file, etc.
  • Um tipo com um sufixo -input
    Exemplos: text-input, number-input, etc. (normalizado para o tipo base como text, number).

Se o fieldType corresponder a um tipo especial, será usado um renderizador personalizado. Caso contrário, será tratado como um tipo de entrada padrão.

Consulte as seções abaixo para obter a estrutura completa do HTML e as propriedades para cada tipo de campo.

Propriedades comuns usadas por campos

Abaixo estão as propriedades usadas pela maioria dos campos:

  • id: especifica a ID do elemento e oferece suporte à acessibilidade.
  • name: Define o atributo name para elementos de entrada, seleção ou conjunto de campos.
  • label.value, label.richText, label.visible: especifica o texto do rótulo/legenda, o conteúdo do HTML e a visibilidade.
  • value: representa o valor atual do campo.
  • required: Adiciona o atributo required ou os dados de validação.
  • readOnly, enabled: Controla se o campo é editável ou está desabilitado.
  • description: Exibe o texto de ajuda abaixo do campo.
  • tooltip: define o atributo title para entradas.
  • constraintMessages: Fornece mensagens de erro personalizadas como atributos de dados.

Estrutura comum do HTML

A maioria dos campos é renderizada em um invólucro que inclui um rótulo e um texto de ajuda opcional. O trecho a seguir demonstra a estrutura:

<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>

Para grupos (opção/caixa de seleção) e painéis, um <fieldset> com um <legend> é usado em vez de um <div>/<label>. O texto de ajuda

está presente somente se description estiver definida.

Exibição de mensagem de erro

Mensagens de erro são exibidas no mesmo elemento .field-description usado para texto de ajuda, que é atualizado dinamicamente.

Quando um campo é inválido:

Quando o campo se tornar válido:

As mensagens de erro personalizadas podem ser definidas usando a propriedade constraintMessages no JSON.
Eles são adicionados como data-<constraint>ErrorMessage atributos no invólucro (por exemplo, data-requiredErrorMessage).

Tipos de Entrada Padrão (HTML Input ou *-input)

Se fieldType não for um tipo especial, será tratado como um tipo de entrada padrão do HTML ou como <type>-input, por exemplo, text, number, email, date, text-input, number-input.

Restrições para tipos de entrada padrão

Restrições são adicionadas como atributos no elemento de entrada com base nas propriedades JSON.

Propriedade JSON
Atributo do HTML
Aplica-se a
maxLength
maxlength
texto, email, senha, tel
minLength
minlength
texto, email, senha, tel
padrão
padrão
texto, email, senha, tel
máximo
máx
número, intervalo, data
mínimo
min.
número, intervalo, data
etapa
etapa
número, intervalo, data
Aceitar
Aceitar
arquivo
múltiplo
múltiplo
arquivo
maxOccur
data-max
painel
minOccur
data-min
painel
NOTE
multiple é uma propriedade booleana. Se true, o atributo multiple será adicionado.

Esses atributos são definidos automaticamente pelo renderizador de formulário com base na definição JSON do campo.

Exemplo: estrutura do HTML com restrições

O exemplo a seguir demonstra como um campo numérico é renderizado com restrições de validação e atributos de manipulação de erros.

<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>

Cada parte da estrutura do HTML desempenha um papel na vinculação de dados, validação e exibição de mensagens de ajuda ou erro.

Propriedades específicas do campo e suas estruturas do HTML

Suspenso

Propriedades Extras:

Exemplo:

<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>

Texto sem formatação

Propriedades Extras:

Exemplo:

<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>

Caixa de seleção

Propriedades Extras:

Exemplo:

<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>

Botão

Propriedades Extras:

Exemplo:

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

Entrada multilinha

Propriedades Extras:

Exemplo:

<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>

Painel

Propriedades Extras:

Exemplo:

<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>

Opções

Propriedades Extras:

Exemplo:

<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>

Grupo radial

Propriedades Extras:

Exemplo:

<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>

Grupo de caixas de seleção

Propriedades Extras:

Exemplo:

<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>

Imagem

Propriedades Extras:

Exemplo:

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

Cabeçalho

Propriedades Extras:

Exemplo:

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

Para obter mais detalhes, consulte a implementação em blocks/form/form.js e blocks/form/util.js.

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