wip: use of form macro

This commit is contained in:
Hannaeko 2025-06-22 18:01:06 +01:00
parent 07b4b37a0a
commit e7fdecdacc
2 changed files with 101 additions and 71 deletions

View file

@ -1,8 +1,9 @@
{% macro input(id, name, value, type="text", description="", errors, error_msg_id, label, label_attributes, attributes) %} {% macro input(id, name, value, type="text", description="", errors, errors_keys, error_msg_id, label, label_attributes, attributes) %}
{% set filtered_errors = [] %} {% set filtered_errors = [] %}
{% for error in errors %} {% for error_key in errors_keys %}
{% set error = errors | get(key=error_key, default="") %}
{% if error %} {% if error %}
{% set_global filtered_errors = filtered_errors | concat(with=error) %} {% set_global filtered_errors = filtered_errors | concat(with=error) %}
{% endif %} {% endif %}

View file

@ -6,8 +6,6 @@
<h3>{{ tr(msg="record-config-section-web", attr="servers", lang=lang) }}</h3> <h3>{{ tr(msg="record-config-section-web", attr="servers", lang=lang) }}</h3>
<input name="addresses[_exist]" type="hidden" value="true"> <input name="addresses[_exist]" type="hidden" value="true">
{% set ttl_error = errors | get(key="/addresses/ttl", default="") %}
<div class="form-input"> <div class="form-input">
{{ {{
form::input( form::input(
@ -15,7 +13,8 @@
name="addresses[ttl]", name="addresses[ttl]",
value=address.address | default(value=""), value=address.address | default(value=""),
type="number", type="number",
errors=[ ttl_error ], errors=errors,
errors_keys=[ "/addresses/ttl" ],
error_msg_id="record-input-ttl", error_msg_id="record-input-ttl",
description=tr(msg="record-input-ttl", attr="help", lang=lang), description=tr(msg="record-input-ttl", attr="help", lang=lang),
label=tr(msg="record-input-ttl", attr="input-label", lang=lang), label=tr(msg="record-input-ttl", attr="input-label", lang=lang),
@ -25,10 +24,7 @@
}} }}
</div> </div>
</div> </div>
{% set global_address_error = errors | get(key="/addresses/data", default="") %}
{% for address in input_data.addresses.data.addresses | default(value=[""]) %} {% for address in input_data.addresses.data.addresses | default(value=[""]) %}
{% set address_error = errors | get(key="/addresses/data/addresses/" ~ loop.index0 ~ "/address", default="") %}
<div class="form-input" data-new-item-template="address"> <div class="form-input" data-new-item-template="address">
{{ {{
form::input( form::input(
@ -36,9 +32,10 @@
name="addresses[data][addresses][" ~loop.index0 ~ "][address]", name="addresses[data][addresses][" ~loop.index0 ~ "][address]",
value=address.address | default(value=""), value=address.address | default(value=""),
type="text", type="text",
errors=[ errors=errors,
global_address_error, errors_keys=[
address_error, "/addresses/data",
"/addresses/data/addresses/" ~ loop.index0 ~ "/address",
], ],
error_msg_id="record-input-addresses", error_msg_id="record-input-addresses",
label=tr(msg="record-input-addresses", attr="input-label", index=loop.index, lang=lang), label=tr(msg="record-input-addresses", attr="input-label", index=loop.index, lang=lang),
@ -75,15 +72,21 @@
<input name="mailservers[_exist]" type="hidden" value="true"> <input name="mailservers[_exist]" type="hidden" value="true">
<div class="form-input"> <div class="form-input">
<label for="mailservers-ttl"> {{
{{ tr(msg="record-input-ttl", attr="input-label", lang=lang) }} form::input(
</label> id="mailservers-ttl",
<div> name="mailservers[ttl]",
<input name="mailservers[ttl]" id="mailservers-ttl" type="text" value="{{ input_data.mailservers.ttl | default(value="") }}" aria-describedby="mailservers-ttl"> value=input_data.mailservers.ttl | default(value=""),
<p class="help" id="mailservers-ttl-help"> type="number",
{{ tr(msg="record-input-ttl", attr="help", lang=lang) }} errors=errors,
</p> errors_keys=[ "/mailservers/ttl" ],
</div> error_msg_id="record-input-ttl",
description=tr(msg="record-input-ttl", attr="help", lang=lang),
label=tr(msg="record-input-ttl", attr="input-label", lang=lang),
label_attributes=[],
attributes=[],
)
}}
</div> </div>
{% for mailserver in input_data.mailservers.data.mailservers | default(value=[""]) %} {% for mailserver in input_data.mailservers.data.mailservers | default(value=[""]) %}
@ -92,43 +95,55 @@
{{ tr(msg="record-input-mailservers", attr="legend", index=loop.index, lang=lang) }} {{ tr(msg="record-input-mailservers", attr="legend", index=loop.index, lang=lang) }}
</legend> </legend>
<div class="form-input"> <div class="form-input">
<label {{
for="mailserver-mail_exchanger-{{ loop.index0 }}" form::input(
data-new-item-template-attr="for" id="mailserver-mail_exchanger-" ~ loop.index0,
data-template-for="mailserver-mail_exchanger-{i}" name="mailservers[data][mailservers][" ~loop.index0 ~ "][mail_exchanger]",
> value=mailserver.mail_exchanger | default(value=""),
{{ tr(msg="record-input-mailservers", attr="input-label-server-name", lang=lang) }} type="text",
</label> errors=errors,
<div> errors_keys=[
<input "/mailservers/data",
name="mailservers[data][mailservers][{{ loop.index0 }}][mail_exchanger]" "/mailservers/data/mailservers/" ~ loop.index0 ~ "/mail_exchanger",
id="mailserver-mail_exchanger-{{ loop.index0 }}" ],
data-new-item-template-attr="name id" error_msg_id="record-input-mailservers",
data-template-name="mailservers[data][mailservers][{i}][mail_exchanger]" label=tr(msg="record-input-mailservers", attr="input-label-server-name", lang=lang),
data-template-id="mailserver-mail_exchanger-{i}" label_attributes=[
type="text" "data-new-item-template-attr", "for",
value="{{ mailserver.mail_exchanger | default(value="") }}" "data-template-for", "mailserver-mail_exchanger-{i}",
> ],
</div> attributes=[
"data-new-item-template-attr", "name id",
"data-template-name", "mailservers[data][mailservers][{i}][mail_exchanger]",
"data-template-id", "mailserver-mail_exchanger-{i}",
]
)
}}
<label {{
for="mailserver-preference-{{ loop.index0 }}" form::input(
data-new-item-template-attr="for" id="mailserver-preference-" ~ loop.index0,
data-template-for="mailserver-preference-{i}" name="mailservers[data][mailservers][" ~loop.index0 ~ "][preference]",
> value=mailserver.preference | default(value=""),
{{ tr(msg="record-input-mailservers", attr="input-label-preference", lang=lang) }} type="text",
</label> errors=errors,
<div> errors_keys=[
<input "/mailservers/data",
name="mailservers[data][mailservers][{{ loop.index0 }}][preference]" "/mailservers/data/mailservers/" ~ loop.index0 ~ "/preference",
id="mailserver-preference-{{ loop.index0 }}" ],
data-new-item-template-attr="name id" error_msg_id="record-input-mailservers",
data-template-name="mailservers[data][mailservers][{i}][preference]" label=tr(msg="record-input-mailservers", attr="input-label-preference", lang=lang),
data-template-id="mailserver-preference-{i}" label_attributes=[
type="text" "data-new-item-template-attr", "for",
value="{{ mailserver.preference | default(value="") }}" "data-template-for", "mailserver-preference-{i}",
> ],
</div> attributes=[
"data-new-item-template-attr", "name id",
"data-template-name", "mailservers[data][mailservers][{i}][preference]",
"data-template-id", "mailserver-preference-{i}",
]
)
}}
</div> </div>
</fieldset> </fieldset>
{% endfor %} {% endfor %}
@ -144,22 +159,36 @@
<fieldset> <fieldset>
<legend>{{ tr(msg="record-input-spf", attr="legend", lang=lang) }}</legend> <legend>{{ tr(msg="record-input-spf", attr="legend", lang=lang) }}</legend>
<div class="form-input"> <div class="form-input">
<label for="spf-policy"> {{
{{ tr(msg="record-input-spf", attr="input-label", lang=lang) }} form::input(
</label> id="spf-policy",
<div> name="spf[data][policy]",
<input name="spf[data][policy]" id="spf-policy" type="text" value="{{ input_data.spf.data.policy | default(value="") }}"> value=input_data.spf.data.policy | default(value=""),
</div> type="number",
errors=errors,
errors_keys=[ "/spf/data/policy" ],
error_msg_id="record-input-spf",
label=tr(msg="record-input-spf", attr="input-label", lang=lang),
label_attributes=[],
attributes=[],
)
}}
<label for="spf-ttl"> {{
{{ tr(msg="record-input-ttl", attr="input-label", lang=lang) }} form::input(
</label> id="spf-ttl",
<div> name="spf[ttl]",
<input name="spf[ttl]" id="spf-ttl" type="text" value="{{ input_data.spf.ttl | default(value="") }}" aria-describedby="spf-ttl-help"> value=input_data.spf.ttl | default(value=""),
<p class="help" id="spf-ttl-help"> type="number",
{{ tr(msg="record-input-ttl", attr="help", lang=lang) }} errors=errors,
</p> errors_keys=[ "/spf/ttl" ],
</div> error_msg_id="record-input-ttl",
description=tr(msg="record-input-ttl", attr="help", lang=lang),
label=tr(msg="record-input-ttl", attr="input-label", lang=lang),
label_attributes=[],
attributes=[],
)
}}
</div> </div>
</fieldset> </fieldset>