Desk Entrar

Pipeline de renderizado Markdown (Desk)

Documentación técnica Actualizado 24 jun 2026

Resumen

Doble pipeline: servidor (Python-Markdown + bleach) para páginas públicas; cliente (marked.js + DOMPurify) para preview staff.

Server-side

Archivo: apps/desk/services/markdown.py

  1. Preprocess strikethrough: <del>text</del><del> vía regex _STRIKE_RE.
  2. markdown.markdown() con extensiones fenced_code, nl2br, sane_lists.
  3. bleach.clean() whitelist:
ALLOWED_TAGS = p, a, strong, em, code, pre, ul, ol, li, h1-h3, blockquote, del
ALLOWED_ATTRIBUTES = {a: [href, title]}
ALLOWED_PROTOCOLS = http, https, mailto

Client-side

desk-wiki-editor.js: marked.parse(md, {gfm:true, breaks:true})DOMPurify.sanitize().

Regla de paridad

El cliente no debe ser más permisivo que el servidor. Tests en wiki_preview_parity.py.

Edge case: strikethrough

Server pre-convierte ~~; marked en client puede divergir si hay espacios internos — documentado en parity fixtures.

Ver también