# `FrappeUIPhx.Markdown`
[🔗](https://github.com/moacirbishopcamata/frappe_ui_phx/blob/v0.3.1/lib/frappe_ui_phx/markdown.ex#L1)

Subconjunto **seguro** de Markdown usado pelo Editor: `## título`, listas
(`- ` e `1. `), parágrafos, `**negrito**`, `_itálico_`, `` `código` `` e
`[texto](https://url)`.

Todo texto é escapado *antes* de qualquer marcação, e só links `http(s)`,
`mailto:` ou relativos (`/...`) viram `<a>`: nada de HTML vindo do usuário
chega ao DOM. É por isso que o Editor guarda Markdown, não HTML.

# `safe_url?`

```elixir
@spec safe_url?(String.t()) :: boolean()
```

A URL é segura para `href`? (`http(s)://`, `mailto:` ou caminho relativo `/…`)

# `to_html`

```elixir
@spec to_html(String.t() | nil) :: String.t()
```

Markdown → HTML seguro (string).

# `to_safe`

```elixir
@spec to_safe(String.t() | nil) :: Phoenix.HTML.safe()
```

Markdown → HTML seguro, já marcado como seguro para o HEEx (`{FrappeUIPhx.Markdown.to_safe(@texto)}`).
Evita o escape duplo de passar a string de `to_html/1` direto ao template.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
