{# partials/components/mobile_card_macros.html Wiederverwendbare Bausteine für modulspezifische Mobile-Karten ({modul}/partials/mobile_cards.html). Nutzen dieselben CSS-Klassen wie der generische Fallback (partials/lists/mobile_cards_generic.html) -- .m-card, .m-card-header, .m-card-meta, .m-card-meta-row, .m-card-footer, siehe app.css "Mobile Karten"-Abschnitt. Zweck: eigene, feinabgestimmte Karten pro Modul (statt des generischen, aber undifferenzierten Fallbacks), ohne dass jede mobile_cards.html das Karten-Markup komplett neu erfindet. Verwendung (Beispiel): {% import 'partials/components/mobile_card_macros.html' as mc %} {% for item_id, item in cfg.items() %} {% set _footer %} {{ mc.m_card_actions_default(module, item_id, item, container_id, loading_id) }} {% endset %} {% call mc.m_card(item.description or item_id, status=item.get('last_status'), footer=_footer) %} {{ mc.m_card_row('Ziel', item.get('target_path')) }} {% endcall %} {% endfor %} Wichtig: footer wird als ECHTES Kind-Element von .m-card gerendert (nicht als Sibling-Div daneben) -- Aktions-Buttons sollen sichtbar Teil der Karte sein, nicht nur optisch per CSS angeglichen. #} {% import 'partials/components/ui_macros.html' as ui %} {# Karten-Wrapper: Titel + optionaler Status im Header, caller() liefert die Meta-Zeilen (via m_card_row). Ohne caller-Body wird kein .m-card-meta gerendert (z.B. wenn eine Karte nur Header+Footer braucht). footer (vorgerenderter, bereits escapeter HTML-String -- z.B. via {% set %}... {% endset %} oder m_card_actions_default()) landet als .m-card-footer INNERHALB derselben Karte, nicht als separates Sibling-Element. #} {% macro m_card(title, status=none, enabled=True, footer=none) %}