{# 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) container_id – Fallback (wird nicht mehr für hx-target genutzt) loading_id – HTMX-Indikator Schema-Felder können enthalten: type: section – Gruppenüberschrift (label, cols) span: N – Feld belegt N Spalten im Section-Grid #} {% from "partials/components/ui_macros.html" import modal_title, modal_footer %}
{{ modal_title(is_edit=item is not none, title=title) }} {% if prefill_template %}
{% include prefill_template %}
{% endif %}
{# ── ID-Feld (nur beim Anlegen) ─────────────────────────────────────── #} {% if id_field and not item %}
{% endif %} {# ── Felder vorbereiten ─────────────────────────────────────────────── #} {% set values = values if values is mapping else (item if item is mapping else {}) %} {% set enabled_field = schema | selectattr('name', 'equalto', 'enabled') | list | first %} {% set enabled_val = values.get('enabled', True) if values is mapping else True %} {% set render_fields = schema | rejectattr('name', 'equalto', 'enabled') | list %} {# ── Entscheide: neues Section-Rendering vs. altes row-Rendering ────── #} {% set has_sections = render_fields | selectattr('type', 'equalto', 'section') | list | length > 0 %} {% if has_sections %} {# ── Neues Section-basiertes Rendering ──────────────────────────── #} {% set ns = namespace(grid_open=False, first_section=True) %} {% for field in render_fields %} {% if field.get('type') == 'section' %} {# Vorheriges Grid schließen #} {% if ns.grid_open %}
{% endif %} {# Section-Header (wie nav-group-label / settings-section-label) #}
{{ field.label }}
{% set ns.first_section = False %} {# Neues Grid öffnen #}
{% set ns.grid_open = True %} {% else %} {# Erstes Feld vor einer Section → 1-spaltiges Stacking #} {% if not ns.grid_open %}
{% set ns.grid_open = True %} {% endif %} {# Feld mit optionalem span #} {% 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 %} {# ── Altes row-basiertes Rendering (Rückwärtskompatibilität) ──────── #} {% 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 %} {{ modal_footer(enabled=enabled_val, enabled_id='modal-enabled', save_label='Speichern' if item else 'Erstellen', has_toggle=enabled_field, save_id='create-edit-submit', save_type='button') }}