Packages
tableau
0.15.3
0.30.0
0.29.0
0.28.0
0.27.1
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.1
0.17.0
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
Static site generator for elixir
Current section
Files
Jump to
Current section
Files
lib/tableau/layout.ex
defmodule Tableau.Layout do
@moduledoc ~s'''
A tableau layout.
Layouts will render `@inner_content` using the `Tableau.Document.Helper.render/1` macro.
```elixir
defmodule MySite.SidebarLayout do
use Tableau.Page,
layout: MySite.RootLayout
def template(assigns) do
"""
<nav>
<a href="/home">
<a href="/about">
</nav>
<p>
<%= render @inner_content %>
</p>
"""
end
end
```
'''
@type assigns :: map()
@type template :: any()
@doc """
The layout template.
"""
@callback template(assigns()) :: template()
defmacro __using__(opts) do
opts = Keyword.validate!(opts, [:layout])
page =
quote do
def __tableau_type__, do: :layout
end
parent =
quote do
def __tableau_parent__, do: unquote(opts[:layout] || :root)
end
postlude =
quote do
@behaviour unquote(__MODULE__)
import Tableau.Document.Helper
end
[page, parent, postlude]
end
end