Packages
tableau
0.24.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/document.ex
defmodule Tableau.Document do
@moduledoc false
alias Tableau.Graph.Nodable
defmodule Helper do
@moduledoc "Helper functions for Tableau documents."
@doc """
A macro for rendering nested content within a layout.
Please see the `Tableau.Layout` docs for more info.
"""
defmacro render(inner_content) do
quote do
case unquote(inner_content) do
[{module, page_assigns, assigns} | rest] ->
Nodable.template(module, Map.merge(assigns, %{page: page_assigns, inner_content: rest}))
[] ->
nil
end
end
end
end
def render(graph, module, assigns, page) do
[root | mods] =
case Graph.dijkstra(graph, module, :root) do
path when is_list(path) ->
path
|> Enum.reverse()
|> tl()
nil ->
raise "Failed to find layout path for #{inspect(module)}"
end
page_assigns = (Nodable.opts(module) || []) |> Map.new() |> Map.merge(page)
mods = for mod <- mods, do: {mod, page_assigns, assigns}
Nodable.template(root, Map.merge(assigns, %{inner_content: mods, page: page_assigns}))
end
end