Packages
tableau
0.4.0
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/page.ex
defmodule Tableau.Page do
@moduledoc ~s'''
A tableau page.
A page is a basic unit of a static site.
```elixir
defmodule MySite.HomePage do
use Tableau.Page,
layout: MySite.RootLayout,
permalink: "/"
def template(assigns) do
"""
<h1>My Site</h1>
<p>
Welcome to my site!
</p>
"""
end
end
```
'''
@type assigns :: map()
@type template :: any()
@doc """
The page template.
"""
@callback template(assigns()) :: template()
defmacro __using__(opts) do
opts = Keyword.validate!(opts, [:layout, :permalink])
page =
quote do
def __tableau_type__, do: :page
end
parent =
quote do
def __tableau_parent__, do: unquote(opts[:layout])
end
permalink =
quote do
def __tableau_permalink__, do: unquote(opts[:permalink])
end
postlude =
quote do
@behaviour unquote(__MODULE__)
end
[page, parent, permalink, postlude]
end
end