# -*- coding: utf-8 -*- """Baut aus content_html und faq eine Elementor-Struktur (_elementor_data). Der Artikel wird an den H2-Grenzen in einzelne Text-Editor-Widgets zerlegt, damit er im Builder abschnittsweise bearbeitbar bleibt. Das FAQ wird zu einem nested-accordion mit aktiviertem faq_schema, also demselben Widget, das die Leistungsseiten von skrift.de bereits verwenden. """ import json, re, secrets def eid(): return secrets.token_hex(4)[:7] def text_widget(html): return {"id": eid(), "elType": "widget", "settings": {"editor": html}, "elements": [], "widgetType": "text-editor"} def container(kinder, innen=False): s = {"content_width": "full"} if innen: s.update({"_title": "Element", "padding": {"unit": "px", "top": "8", "right": "8", "bottom": "8", "left": "8", "isLinked": True}, "flex_gap": {"column": "20", "row": "20", "isLinked": True, "unit": "px", "size": 20}}) c = {"id": eid(), "elType": "container", "settings": s, "elements": kinder} if innen: c["isInner"] = True c["isLocked"] = True return c def accordion(faq, titel="Häufige Fragen"): """nested-accordion: settings.items und elements laufen parallel.""" items, kinder = [], [] for f in faq: if not f.get("frage"): continue items.append({"item_title": f["frage"], "_id": eid()}) kinder.append(container([text_widget(f"
{f.get('antwort', '')}
")], innen=True)) return { "id": eid(), "elType": "widget", "widgetType": "nested-accordion", "settings": {"items": items, "faq_schema": "yes", "default_state": "all_collapsed"}, "elements": kinder, } def teile_an_h2(html): """Zerlegt den Artikel an{artikel["kurzantwort"]}