Packages
tableau
0.19.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 struct allows you to create pages as data structures and manually insert them into the Graph.
"""
defstruct [:parent, :permalink, :template, :opts]
defimpl Tableau.Graph.Nodable do
def template(nodable, assigns) do
nodable.template.(assigns)
end
def type(_nodable), do: {:ok, :page}
def parent(nodable), do: {:ok, nodable.parent}
def opts(nodable), do: nodable.opts
def permalink(nodable), do: nodable.permalink
end
@doc """
The page template.
"""
@callback template(assigns()) :: template()
defmacro __using__(opts) do
layout = Keyword.fetch!(opts, :layout)
permalink = Keyword.fetch!(opts, :permalink)
quote do
@behaviour unquote(__MODULE__)
def __tableau_type__, do: :page
def __tableau_parent__, do: unquote(layout)
def __tableau_permalink__, do: unquote(permalink)
def __tableau_opts__, do: unquote(opts)
end
end
end