from .apply_ctx import _apply_ctx from .auto_id import _auto_id def _visible_attrs(el, meta, ctx=None): attrs = { k: (_apply_ctx(v, ctx) if isinstance(v, str) else v) for k, v in (el.get("attributes") or {}).items() if not k.startswith("_") } attrs.update(meta.get("fixed_attrs", {})) attrs.setdefault("id", _auto_id(el)) attrs["data-element-id"] = el["id"] if el.get("parent_id"): # Élément posé à l'intérieur d'un conteneur/répéteur/groupe de # champs : pas de cadre de positionnement séparé autour de lui (voir # element_style_filter.py) — sa propre balise EST déjà tout # l'élément, donc c'est elle que la timeline d'animation doit viser. # Un élément posé directement sur un écran, lui, porte ce marqueur # sur son cadre (.canvasElement / .playElement) à la place — voir # les gabarits screen_edit.html et play.html. attrs["data-anim-target"] = el["id"] return attrs