{# core/templates/partials/create_edit/create_edit_modal.html Variablen: schema – Liste der Felder aus schema.yaml (kann type:section-Einträge enthalten) item – bestehende Werte (Edit) oder None (Create) item_id – ID des Items (Edit) oder None (Create) id_field – Schema-Definition des ID-Feldes (nur Create, optional) submit_url – Ziel-URL (POST für Create, PUT für Edit) method – "post" oder "put" title – Titel des Dialogs modal_width – Breite des Modals in px (default: 620) loading_id – HTMX-Indikator Schema-Felder können enthalten: type: section – Gruppenüberschrift (label, cols) span: N – Feld belegt N Spalten im Section-Grid #} {% extends "dialog_form.html" %} {% from "partials/components/ui_macros.html" import form_group, form_input %} {% set enabled_field = schema | selectattr('name', 'equalto', 'enabled') | list | first %} {% set enabled_val = (values if values is mapping else (item if item is mapping else {})).get('enabled', True) %} {% block dialog_width %}{{ modal_width | default(620) }}{% endblock %} {% block form_id %}create-edit-form{% endblock %} {% block form_method %}{{ method }}{% endblock %} {% block form_action %}{{ submit_url }}{% endblock %} {% block form_style %}display:flex; flex-direction:column; gap:14px;{% endblock %} {% block form_attrs %}hx-indicator="#{{ loading_id }}" onsubmit="return createEditValidate(this)"{% endblock %} {% block dialog_body %} {% if prefill_template %}
{% include prefill_template %}
{% endif %} {% if error %}
{{ error }}
{% endif %} {% set values = values if values is mapping else (item if item is mapping else {}) %} {% set render_fields = schema | rejectattr('name', 'equalto', 'enabled') | list %} {% set has_sections = render_fields | selectattr('type', 'equalto', 'section') | list | length > 0 %} {# ── ID-Feld (nur beim Anlegen) ─────────────────────────────────────── #} {% if id_field and not item %} {%- set _attrs -%} {%- if id_field.max %}maxlength="{{ id_field.max }}"{% endif -%} {%- endset -%} {% call form_group(id_field.label, required=True) %} {{ form_input(id_field.name, required=True, placeholder=id_field.placeholder | default(''), attrs=_attrs) }} {% endcall %} {% endif %} {% if has_sections %} {% set ns = namespace(grid_open=False, first_section=True) %} {% for field in render_fields %} {% if field.get('type') == 'section' %} {% if ns.grid_open %}{% endif %}
{{ field.label }}
{% set ns.first_section = False %}
{% set ns.grid_open = True %} {% else %} {% if not ns.grid_open %}
{% set ns.grid_open = True %} {% endif %} {% set field_span = field.get('span', 1) %} {% if field_span > 1 %}
{% include "partials/create_edit/field_renderer.html" %}
{% else %} {% include "partials/create_edit/field_renderer.html" %} {% endif %} {% endif %} {% endfor %} {% if ns.grid_open %}
{% endif %} {% else %} {% set rows = render_fields | groupby("row", default=0) %} {% for row, fields in rows %}
{% for field in fields %} {% include "partials/create_edit/field_renderer.html" %} {% endfor %}
{% endfor %} {% endif %} {% endblock %} {% block dialog_footer %} {% endblock %} {% block dialog_scripts %} {% endblock %}