nomilo/templates/macros/form.html
2026-06-24 11:45:51 +02:00

84 lines
2.9 KiB
HTML

{% macro input(id, name, value, type="text", description="", options="", errors, errors_keys, error_msg_id, extra_errors="", label, label_attributes, delete_button_msg="", delete_button_msg_template="", attributes) -%}
{%- set filtered_errors = [] -%}
{%- for error_key in errors_keys -%}
{%- set error = errors | get(key=error_key, default="") -%}
{%- if error -%}
{%- set_global filtered_errors = filtered_errors | concat(with=error) -%}
{%- endif -%}
{%- endfor -%}
<div>
<label
for="{{ id }}"
{%- for i in range(start=0, end=label_attributes|length, step_by=2) %}
{{ label_attributes[i] }}="{{ label_attributes | nth(n=i+1) }}"
{%- endfor %}
>
{{ label }}
</label>
{% if delete_button_msg %}
<button type="button" class="icon" data-delete-item>
{{ icons::trash() }}
<span class="visually-hidden" data-new-item-template-content="{{ delete_button_msg_template }}">
{{ delete_button_msg }}
</span>
</button>
{% endif %}
</div>
<div>
{%- if type == "textarea" -%}
<textarea
{%- elif type == "select" -%}
<select
{%- else -%}
<input
{%- endif -%}
{%- if type != "textarea" -%}
{%- if type == "number" %} type="text" inputmode="numeric"
{%- else %} type="{{ type }}"
{%- endif -%}
{%- endif %}
name="{{ name }}"
id="{{ id }}"
{%- for i in range(start=0, end=attributes|length, step_by=2) %}
{{ attributes[i] }}="{{ attributes | nth(n=i+1) }}"
{%- endfor %}
aria-describedby="{% for error in filtered_errors %} {{ id }}-error-{{ loop.index0 }}{% endfor %}{% if description %} {{ id }}-description{% endif %} {{ extra_errors }}"
{% if filtered_errors or extra_errors %}aria-invalid="true"{% endif %}
{% if type != "textarea" and type != "select" %}value="{{ value }}"{% endif %}
>
{%- if type == "textarea" -%}
{{- value -}}
</textarea>
{%- elif type == "select" -%}
{%- for i in range(start=0, end=options|length, step_by=2) -%}
<option
value="{{ options[i]}}"
{% if options[i] == value %}selected{% endif %}
>
{{ options | nth(n=i+1) }}
</option>
{%- endfor -%}
</select>
{%- endif -%}
{%- for error in filtered_errors -%}
<p class="error" id="{{ id }}-error-{{ loop.index0 }}" data-new-item-skip>
{{ tr(
msg=error_msg_id,
attr="error-" ~ error.code | replace(from=":", to="-"),
extra_args=error | get(key="details", default=""),
lang=lang) }}
</p>
{%- endfor -%}
{%- if description -%}
<p class="help" id="{{ id }}-description">
{{ description }}
</p>
{%- endif -%}
</div>
{%- endmacro %}