diff --git a/db/__init__.py b/db/__init__.py index 909df00f..34505ce3 100644 --- a/db/__init__.py +++ b/db/__init__.py @@ -80,6 +80,7 @@ from .supports.create_support import create_support from .supports.delete_support import delete_support from .supports.get_document_theme import get_document_theme from .supports.list_supports import list_supports +from .supports.remove_document_theme import remove_document_theme from .supports.set_document_theme import set_document_theme from .supports.support_dir import support_dir from .supports.support_meta import support_meta @@ -122,6 +123,7 @@ __all__ = [ "support_meta", "delete_support", "get_document_theme", + "remove_document_theme", "set_document_theme", "ONBOARDING_TYPES", "DEFAULT_ONBOARDING_TYPE", diff --git a/db/supports/__init__.py b/db/supports/__init__.py index be218a81..a9ff3448 100644 --- a/db/supports/__init__.py +++ b/db/supports/__init__.py @@ -9,6 +9,7 @@ from .delete_support import delete_support from .ensure_document_pages_schema import ensure_document_pages_schema from .get_document_theme import get_document_theme from .list_supports import list_supports +from .remove_document_theme import remove_document_theme from .set_document_theme import set_document_theme from .support_connection import connect_support, install_support_teardown_safety_net from .support_dir import support_dir @@ -25,6 +26,7 @@ __all__ = [ "get_document_theme", "install_support_teardown_safety_net", "list_supports", + "remove_document_theme", "set_document_theme", "split_slug", "support_dir", diff --git a/db/supports/remove_document_theme.py b/db/supports/remove_document_theme.py new file mode 100644 index 00000000..572178e6 --- /dev/null +++ b/db/supports/remove_document_theme.py @@ -0,0 +1,15 @@ +from .support_connection import connect_support + + +def remove_document_theme(slug: str) -> None: + """Retire le thème appliqué (retour utilisateur du 26/09/2026 : + "aucun modèle" dans la modale doit "revenir à un document de base") + — supprime la LIGNE `_meta` plutôt que d'y stocker une valeur vide, + pour que get_document_theme continue de renvoyer `None` (son + contrat documenté : "aucun thème n'a jamais été appliqué"), jamais + une chaîne vide qui violerait silencieusement ce contrat pour tout + appelant qui compare à `None`.""" + conn = connect_support(slug) + conn.execute("DELETE FROM _meta WHERE key = 'theme'") + conn.commit() + conn.close() diff --git a/docs/plan/AUDIT_MISE_EN_FORME.md b/docs/plan/AUDIT_MISE_EN_FORME.md index 5ad1ebf5..f56ea0cb 100644 --- a/docs/plan/AUDIT_MISE_EN_FORME.md +++ b/docs/plan/AUDIT_MISE_EN_FORME.md @@ -298,7 +298,163 @@ sinon d'un état neutre. Bénéficie automatiquement à TOUS les éléments qui utilisent déjà ce module (Titre/Paragraphe/Image/Bouton), aucune modification nécessaire ailleurs. -### 4. Liste à puces / numérotée — à faire +### 4. Liste à puces / numérotée — ✅ audité et validé (commité) + +**Portée actée avec l'utilisateur avant implémentation** (question +posée explicitement, deux catégories du tableau impliquaient de +transformer `items` — une simple liste de chaînes — en objets +structurés) : style sur la LISTE ENTIÈRE uniquement, jamais par élément +individuel ni de sous-listes imbriquées (chantier bien plus lourd, +différé à une demande séparée si besoin). Seule exception actée : un +padding UNIFORME appliqué à chaque élément (`item_padding`), pas encore +réglable individuellement. + +Implémenté : gras/italique/souligné, police (liste déroulante web-safe, +`FORGE_DOC_FONT_FAMILY_OPTIONS` réutilisé), taille de police, hauteur de +ligne, couleur du texte, style de puce (`list_style_type`, options +propres à chaque kind — disque/cercle/carré/aucune pour puces, +1-2-3/01-02-03/i-ii-iii/I-II-III/a-b-c/A-B-C/aucune pour numérotée), +position de la puce (intérieure/extérieure), couleur et taille de puce +indépendantes du texte, puce personnalisée (icône SVG, liste à puces +uniquement — encodée en URI de données pour `list-style-image`), +espacement intérieur par élément (`item_padding`, **"6px" par défaut, +retour utilisateur explicite : "il faut un padding de base par élément +de liste car y en a pas aujourd'hui"** — n'existait pas du tout avant), +espacement entre éléments réglable (`item_spacing`), tous les attributs +de boîte partagés sur la liste entière (padding/margin/fond/bordure/ +ombre/opacité/position du bloc). + +Mécanisme technique notable : `marker_color`/`marker_size`/ +`item_padding`/`item_spacing` ne peuvent pas passer par un style inline +classique sur le `