import re from ..clause_list_codec import decode_clauses def _control_value(el, control): """Lit la valeur actuelle d'un réglage à partir de l'élément stocké (content / attributs / style), avec repli sur sa valeur par défaut.""" ctype = control["type"] style = el.get("style") or {} if ctype == "clause_list": attrs = el.get("attributes") or {} clauses, combinateur = decode_clauses( attrs, control["clauses_attr"], control["combinator_attr"], legacy_prefix=control.get("legacy_prefix"), ) return {"clauses": clauses, "combinateur": combinateur} if ctype == "preset": # Trié par nombre de propriétés NON VIDES exigées, décroissant : une # option comme "Visible normalement" (visibility_control.py), dont # les critères ({"visibility": ""}) ne portent QUE sur "visibility" # (par choix assumé, pour ne jamais toucher "display" — voir son # commentaire), matchait sinon TOUJOURS en premier dès que # "visibility" est absent, MÊME quand "display:none" (posé par # "Masqué", un critère plus spécifique à 1 propriété non vide contre # 0 pour "Visible") est également présent -- le panneau affichait # alors "Visible normalement" sélectionné sur un élément en réalité # masqué, et comme un