Packages
fermo
0.14.0
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/sitemap.ex
defmodule Fermo.Sitemap do
@xml_header ~s(<?xml version="1.0" encoding="UTF-8"?>\n)
@open_tag ~S(<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">)
@close_tag ~S(</urlset>)
@file_impl Application.get_env(:fermo, :file_impl, File)
@template Application.get_env(:fermo, :template, Fermo.Template)
def build(config)
def build(%{sitemap: sitemap} = config) do
root = config.base_url
build_path = config[:build_path] || "build"
sitemap_pathname = build_path <> "/sitemap.xml"
datetime = DateTime.utc_now()
lastmod = DateTime.to_iso8601(datetime, :extended)
config_defaults = %{
lastmod: lastmod,
change_frequency: sitemap[:default_change_frequency] || "weekly",
priority: sitemap[:default_priority] || 0.5
}
@file_impl.write!(sitemap_pathname, @xml_header)
@file_impl.write!(sitemap_pathname, @open_tag, [:append])
Stream.map(config.pages, fn page ->
module = @template.module_for_template(page.template)
page_defaults = module.defaults()
|> Enum.into(%{}, fn {k, v} -> {String.to_atom(k), v} end)
values = Map.merge(config_defaults, page_defaults)
if !page_defaults[:hide_from_sitemap] do
loc = "#{root}#{page.path}"
~s(
<url>
<loc>#{loc}</loc>
<lastmod>#{values.lastmod}</lastmod>
<changefreq>#{values.change_frequency}</changefreq>
<priority>#{values.priority}</priority>
</url>
)
end
end)
|> Stream.filter(&(&1))
|> Stream.into(@file_impl.stream!(sitemap_pathname, [:append, :utf8]))
|> Stream.run()
@file_impl.write!(sitemap_pathname, @close_tag, [:append])
put_in(config, [:stats, :sitemap_built], Time.utc_now)
end
def build(config), do: config
end