Packages
fermo
0.19.1
0.20.1
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.4
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A static site generator
Current section
Files
Jump to
Current section
Files
lib/fermo/simple.ex
defmodule Fermo.Simple do
@moduledoc """
Transform non-localized files.
This module is the simplest case of tranformation:
it locates all SLIM files not handled by other modules
and adds them to the transformation queue.
"""
import Fermo.Compilers, only: [templates: 1]
@source_path "priv/source"
@doc """
Add a SLIM HTML template to the build
"""
@callback add(map()) :: map()
def add(config) do
exclude = Map.get(config, :exclude, []) ++ ["partials/*"]
exclude_matchers =
Enum.map(exclude, fn glob ->
single = String.replace(glob, "?", ".")
multiple = String.replace(single, "*", ".*")
Regex.compile!(multiple)
end)
extensions_and_paths =
@source_path
|> templates()
|> Enum.map(fn {extension, path} ->
{extension, Path.relative_to(path, @source_path)}
end)
Enum.reduce(extensions_and_paths, config, fn {extension, template}, config ->
skip =
Enum.any?(exclude_matchers, fn exclude ->
Regex.match?(exclude, template)
end)
if skip do
config
else
is_html = String.ends_with?(template, ".html.#{extension}")
filename = Fermo.Paths.template_to_filename(template, as_index_html: is_html)
Fermo.Config.add_page!(config, template, filename, %{})
end
end)
end
end