defmodule Tableau do
@moduledoc """
## Global Site Configuration
* `:include_dir` - string - Directory that is just copied to the output directory. Defaults to `extra`.
* `:out_dir` - string - The directory to output your website to. Defaults to `_site`.
* `:timezone` - string - Timezone to use when parsing date times. Defaults to `Etc/UTC`.
* `:base_path` - string - Development server root. Defaults to '/'.
* `:url` - string (required) - The URL of your website.
* `:converters` - mapping of file extensions to converter module. Defaults to `[md: Tableau.MDExConverter]`
* `:markdown` - keyword
* `:mdex` - keyword - Options to pass to `MDEx.to_html/2`
### Example
```elixir
# configs/config.exs
config :tableau, :config,
url: "http://localhost:8080",
timezone: "America/Indiana/Indianapolis",
converters: [
md: Tableau.MDExConverter,
dj: MySite.DjotConverter
],
markdown: [
mdex: [
extension: [
table: true,
header_ids: "",
tasklist: true,
strikethrough: true,
autolink: true,
alerts: true,
footnotes: true
],
render: [unsafe: true],
syntax_highlight: [formatter: {:html_inline, theme: "neovim_dark"}]
]
]
```
"""
@doc """
Component to connect to the development server via websocket to broadcast that the page should reload.
By default, connects to `'ws://' + location.host + '/ws'`.
See `WebDevUtils.Components.live_reload/1` for configuration options.
"""
defdelegate live_reload(assigns), to: WebDevUtils.Components
@doc """
Convert markdown content to HTML using `MDEx.to_html!/2`.
Will use the globally configured options, but you can also pass it overrides.
"""
def markdown(content, overrides \\ []) do
{:ok, config} = Tableau.Config.get()
MDEx.to_html!(content, Keyword.merge(config.markdown[:mdex], overrides))
end
end