Files
matrix-authentication-service/templates/components/field.html
T
2024-09-10 14:28:55 +02:00

89 lines
2.5 KiB
HTML

{#
Copyright 2024 New Vector Ltd.
Copyright 2021-2024 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE in the repository root for full details.
-#}
{% set cnt = counter() %}
{% macro new_id() -%}
form-{{- cnt.next() -}}
{%- endmacro %}
{% macro attributes(field, default_value=None) -%}
{%- set value = field.value | default(default_value) -%}
name="{{ field.name }}" id="{{ field.id }}"
{%- if field.errors is not empty %} data-invalid{% endif %}
{%- if value %} value="{{ value }}" {% endif %}
{%- endmacro %}
{% macro field(label, name, form_state=false, class="", inline=false) %}
{% set field_id = new_id() %}
{% if not form_state %}
{% set form_state = {"fields": {}} %}
{% endif %}
{% set state = form_state.fields[name] | default({"errors": [], "value": ""}) %}
{% set field = {
"id": new_id(),
"name": name,
"errors": state.errors,
"value": state.value,
} %}
<div class="{% if inline %}cpd-form-inline-field{% else %}cpd-form-field{% endif %} {{ class }}">
{% if not inline %}
<label class="cpd-form-label" for="{{ field.id }}"
{%- if field.errors is not empty %} data-invalid{% endif -%}
>{{ label }}</label>
{{ caller(field) }}
{% else %}
<div class="cpd-form-inline-field-control">
{{ caller(field) }}
</div>
<div class="cpd-form-inline-field-body">
<label class="cpd-form-label" for="{{ field.id }}"
{%- if field.errors is not empty %} data-invalid{% endif -%}
>{{ label }}</label>
{% endif %}
{% if field.errors is not empty %}
{% for error in field.errors %}
{% if error.kind != "unspecified" %}
<div class="cpd-form-message cpd-form-error-message">
{% if error.kind == "required" %}
{{ _("mas.errors.field_required") }}
{% elif error.kind == "exists" and field.name == "username" %}
{{ _("mas.errors.username_taken") }}
{% elif error.kind == "policy" %}
{{ _("mas.errors.denied_policy", policy=error.message) }}
{% elif error.kind == "password_mismatch" %}
{{ _("mas.errors.password_mismatch") }}
{% else %}
{{ error.kind }}
{% endif %}
</div>
{% endif %}
{% endfor %}
{% endif %}
{% if inline %}
</div>
{% endif %}
</div>
{% endmacro %}
{% macro separator() %}
<div class="separator">
<hr />
<p>{{ _("mas.or_separator") }}</p>
<hr />
</div>
{% endmacro %}