アダプティブ Forms ブロックのフィールドプロパティ
このドキュメントでは、フィールドの識別方法とレンダリング方法、共通のパターン、フィールド固有の違いに重点を置いて、JSON スキーマが blocks/form/form.js でレンダリングされたHTMLにどのようにマッピングされるかを要約します。
フィールド(fieldType)の識別方法
JSON スキーマの各フィールドには、レンダリング方法を決定する fieldType プロパティがあります。 fieldType は次になることができます。
- 特殊タイプ
例:drop-down、radio-group、checkbox-group、panel、plain-text、image、headingなど - 有効なHTML入力タイプ
例:text、number、email、date、password、tel、range、fileなど -inputサフィックスを持つ型
例:text-input、number-inputなど (text、numberなどの基本型に正規化されます)。
fieldType が特殊な型と一致する場合、カスタムレンダラー が使用されます。 それ以外の場合は、デフォルトの入力タイプ として扱われます。
各フィールドタイプの 完全なHTML構造とプロパティ については、以下の節を参照してください。
フィールドで使用される共通プロパティ
ほとんどのフィールドで使用されるプロパティを以下に示します。
id:要素 ID を指定し、アクセシビリティをサポートします。name:input、select、または fieldset 要素のname属性を定義します。label.value、label.richText、label.visible: ラベル/凡例のテキスト、HTMLのコンテンツ、表示/非表示を指定します。value: フィールドの現在の値を表します。required:required属性または検証データを追加します。readOnly、enabled: フィールドを編集可能と無効のどちらにするかを制御します。description: フィールドの下にヘルプテキストを表示します。tooltip:入力のtitle属性を設定します。constraintMessages:カスタムのエラーメッセージをデータ属性として提供します。
共通のHTML構造
ほとんどのフィールドは、ラベルとオプションのヘルプテキストを含むラッパー内でレンダリングされます。 次のスニペットは、構造の例を示しています。
<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>
グループ(ラジオ/チェックボックス)およびパネルの場合、<fieldset> の代わりに、<legend> が付いた <div>/<label> が使用されます。 ヘルプテキスト
は、説明が設定されている場合にのみ存在します。
エラーメッセージの表示
エラーメッセージは、ヘルプテキストに使用されているのと同じ .field-description 要素に表示され、動的に更新されます。
フィールドが無効な場合:
- ラッパー(
.field-wrapperなど)には、クラス.field-invalidが割り当てられます。 .field-descriptionのコンテンツは、対応するエラーメッセージに置き換えられます。
フィールドが有効になると:
.field-invalidクラスは削除されます。.field-descriptionは元のヘルプテキスト(使用可能な場合)に復元されるか、存在しない場合は削除されます。
カスタムエラーメッセージは、JSON の constraintMessages プロパティを使用して定義できます。
これらは、ラッパーの data-<constraint>ErrorMessage 属性として追加されます(例:data-requiredErrorMessage)。
デフォルトの入力タイプ(HTML入力または *-input)
fieldType が特殊な型でない場合は、標準のHTML入力型または <type>-input として扱われます。例えば、text、number、email、date、text-input、number-input などです。
- サフィックス
-inputは削除され、基本型が入力のtype属性として使用されます。 - これらのタイプは、
renderField()でデフォルトで処理されます。
一般的なデフォルトの入力タイプは、text、number、email、date、password、tel、range、fileなどです。 また、基本型に正規化されたtext-input、number-inputなども受け入れます。
デフォルトの入力タイプの制約
制約は、JSON プロパティに基づいて、入力要素の属性として追加されます。
multiple はブール値プロパティです。 true の場合、multiple 属性が追加されます。これらの属性は、フィールドの JSON 定義に基づいて、フォームレンダラーによって自動的に設定されます。
例:制約を含むHTML構造
次の例は、検証制約とエラー処理属性を使用して数値フィールドをレンダリングする方法を示しています。
<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>
HTML構造の各部分は、データの連結、検証およびヘルプまたはエラーメッセージの表示に関与します。
フィールド固有のプロパティとそのHTML構造
ドロップダウン
追加のプロパティ:
enum/enumNames: ドロップダウンのオプション値とその表示ラベルを定義します。type:arrayに設定されている場合、複数選択を有効にします。placeholder:選択前にユーザーをガイドする、無効なプレースホルダーオプションを追加します。
例:
<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>
プレーンテキスト
追加のプロパティ:
richText:true の場合、HTMLを段落にレンダリングします。
例:
<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>
チェックボックス
追加のプロパティ:
enum:チェックボックスのオン/オフの状態に関する値を定義します。properties.variant / properties.alignment: スイッチスタイルのチェックボックスの表示スタイルと配置を指定します。
例:
<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>
ボタン
追加のプロパティ:
buttonType:ボタンのタイプ(ボタン、送信、リセット)を設定して、ボタンの動作を指定します。
例:
<div class="button-wrapper field-wrapper field-<name>" data-id="<id>">
<button id="<id>" name="<name>" type="submit" class="button"> Label
</button>
</div>
マルチライン入力
追加のプロパティ:
minLength: テキストまたはテキスト領域入力で許可される最小文字数を指定します。maxLength: テキストまたはテキスト領域入力で許可される最大文字数を指定します。pattern:入力値が有効であると見なすために一致する必要がある正規表現を定義します。placeholder:値が入力されるまで、入力またはテキスト領域内にプレースホルダーテキストを表示します。
例:
<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>
パネル
追加のプロパティ:
repeatable: パネルを動的に繰り返すことができるかどうかを指定します。minOccur:必要なパネルインスタンスの最小数を設定します。 maxOccurd:許可されるパネルインスタンスの最大数を設定します。properties.variant:パネルの表示スタイルまたはバリアントを定義します。properties.colspan: パネルがグリッドレイアウト内に広がる列数を指定します。index:親コンテナ内でのパネルの位置を示します。fieldset:凡例またはラベル付きの<fieldset>要素の下の関連フィールドをグループ化します。
例:
<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>
ラジオ
追加のプロパティ:
enum:各ラジオボタンオプションの値属性として使用される、ラジオフィールドに指定できる値のセットを定義します。
例:
<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>
ラジオグループ
追加のプロパティ:
enum:各ラジオボタンの値として使用される、ラジオグループのオプション値のリストを定義します。enumNames:列挙の順序に一致するラジオボタンの表示ラベルを提供します。
例:
<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>
チェックボックスグループ
追加のプロパティ:
enum:各チェックボックスの値として使用される、チェックボックスグループのオプション値のリストを定義します。enumNames:列挙の順序に一致する、チェックボックスの表示ラベルを提供します。minItems:有効にするために選択する必要があるチェックボックスの最小数を設定します。maxItems: エラーをトリガーするまでに選択できるチェックボックスの最大数を設定します。
例:
<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>
画像
追加のプロパティ:
value / properties['fd:repoPath']:画像をレンダリングするための画像のソースパスまたはリポジトリーパスを定義します。altText:アクセシビリティを向上させるために、画像(alt 属性)の代替テキストを提供します。
例:
<div class="image-wrapper field-wrapper field-<name>" data-id="<id>">
<picture>
<img src="..." alt="..." />
<!-- Optimized sources -->
</picture>
</div>
見出し
追加のプロパティ:
value:見出し要素内に表示するテキストコンテンツ(例:<h2>)を指定します。
例:
<div class="heading-wrapper field-wrapper field-<name>" data-id="<id>">
<h2 id="<id>">Heading Text</h2>
</div>
詳しくは、blocks/form/form.js および blocks/form/util.js の実装を参照してください。