diff --git a/lib/ex_doc/formatter/html.ex b/lib/ex_doc/formatter/html.ex
index e14fdfda1..1413062e1 100644
--- a/lib/ex_doc/formatter/html.ex
+++ b/lib/ex_doc/formatter/html.ex
@@ -22,22 +22,22 @@ defmodule ExDoc.Formatter.HTML do
Formatter.copy_assets(config.assets, config.output) ++
Formatter.copy_assets(additional_assets(config), config.output)
- search_data = generate_search_data(project_nodes, extras, config)
+ search_data = generate_search_data(config, project_nodes, extras)
{modules, tasks} = Enum.split_with(project_nodes, &(&1.type != :task))
all_files =
search_data ++
static_files ++
- generate_sidebar_items(modules, tasks, extras, config) ++
- generate_api_reference(modules, tasks, config) ++
- generate_extras(extras, config) ++
+ generate_sidebar_items(config, modules, tasks, extras) ++
+ generate_api_reference(config, modules, tasks) ++
+ generate_extras(config, extras) ++
Formatter.copy_favicon(config, Path.join(@assets_dir, "favicon")) ++
Formatter.copy_logo(config, Path.join(@assets_dir, "logo")) ++
generate_search(config) ++
generate_not_found(config) ++
- generate_list(modules, config) ++
- generate_list(tasks, config) ++
+ generate_list(config, modules) ++
+ generate_list(config, tasks) ++
generate_redirects(config, ".html")
entrypoint = config.output |> Path.join("index.html") |> Path.relative_to_cwd()
@@ -48,7 +48,7 @@ defmodule ExDoc.Formatter.HTML do
filename = "404.html"
config = set_canonical_url(config, filename)
content = Templates.not_found_template(config)
- File.write!("#{config.output}/#{filename}", content)
+ write!(config, filename, content)
[filename]
end
@@ -56,22 +56,21 @@ defmodule ExDoc.Formatter.HTML do
filename = "search.html"
config = set_canonical_url(config, filename)
content = Templates.search_template(config)
- File.write!("#{config.output}/#{filename}", content)
+ write!(config, filename, content)
[filename]
end
- defp generate_sidebar_items(modules, tasks, extras, config) do
+ defp generate_sidebar_items(config, modules, tasks, extras) do
content = Templates.create_sidebar_items(config, modules, tasks, extras)
-
path = "dist/sidebar_items-#{digest(content)}.js"
- File.write!(Path.join(config.output, path), content)
+ write!(config, path, content)
[path]
end
- defp generate_search_data(linked, extras, config) do
+ defp generate_search_data(config, linked, extras) do
content = SearchData.create(linked, extras, config.proglang)
path = "dist/search_data-#{digest(content)}.js"
- File.write!(Path.join(config.output, path), content)
+ write!(config, path, content)
[path]
end
@@ -82,14 +81,14 @@ defmodule ExDoc.Formatter.HTML do
|> binary_part(0, 8)
end
- defp generate_extras(extras, config) do
+ defp generate_extras(config, extras) do
generated_extras =
extras
|> Enum.reject(&is_map_key(&1, :url))
|> with_prev_next()
|> Enum.map(fn {node, prev, next} ->
filename = "#{node.id}.html"
- output = "#{config.output}/#{filename}"
+ output = Path.join(config.output, filename)
config = set_canonical_url(config, filename)
refs = %{
@@ -114,7 +113,7 @@ defmodule ExDoc.Formatter.HTML do
for %{source_path: source_path, id: id} when source_path != nil <- extras,
ext = extension_name(source_path),
ext == ".livemd" do
- output = "#{config.output}/#{id}#{ext}"
+ output = Path.join(config.output, "#{id}#{ext}")
File.copy!(source_path, output)
@@ -135,13 +134,13 @@ defmodule ExDoc.Formatter.HTML do
]
end
- defp generate_api_reference(_modules, _tasks, %{api_reference: false}) do
+ defp generate_api_reference(%{api_reference: false}, _modules, _tasks) do
[]
end
- defp generate_api_reference(modules, tasks, config) do
+ defp generate_api_reference(config, modules, tasks) do
filename = "api-reference.html"
- output = "#{config.output}/#{filename}"
+ output = Path.join(config.output, filename)
config = set_canonical_url(config, filename)
html = Templates.api_reference_template(config, modules, tasks)
@@ -154,7 +153,7 @@ defmodule ExDoc.Formatter.HTML do
[filename]
end
- def generate_redirects(config, ext) do
+ defp generate_redirects(config, ext) do
config.redirects
|> Map.new()
|> Map.put_new("index", config.main)
@@ -173,7 +172,7 @@ defmodule ExDoc.Formatter.HTML do
_ -> to <> ext
end
- generate_redirect(source, config, destination)
+ generate_redirect(config, source, destination)
source
end)
@@ -185,15 +184,15 @@ defmodule ExDoc.Formatter.HTML do
|> String.downcase()
end
- defp generate_redirect(filename, config, redirect_to) do
- without_anchor = String.split(redirect_to, "#") |> hd()
+ defp generate_redirect(config, filename, redirect_to) do
+ without_anchor = redirect_to |> String.split("#") |> hd()
- unless case_sensitive_file_regular?("#{config.output}/#{without_anchor}") do
+ unless config.output |> Path.join(without_anchor) |> case_sensitive_file_regular?() do
ExDoc.warn("#{filename} redirects to #{redirect_to}, which does not exist", [])
end
content = Templates.redirect_template(config, redirect_to)
- File.write!("#{config.output}/#{filename}", content)
+ write!(config, filename, content)
end
defp case_sensitive_file_regular?(path) do
@@ -205,17 +204,17 @@ defmodule ExDoc.Formatter.HTML do
end
end
- defp generate_list(nodes, config) do
+ defp generate_list(config, nodes) do
nodes
- |> Task.async_stream(&generate_module_page(&1, config), timeout: :infinity)
+ |> Task.async_stream(&generate_module_page(config, &1), timeout: :infinity)
|> Enum.map(&elem(&1, 1))
end
- defp generate_module_page(module_node, config) do
+ defp generate_module_page(config, module_node) do
filename = "#{module_node.id}.html"
config = set_canonical_url(config, filename)
content = Templates.module_template(config, module_node)
- File.write!("#{config.output}/#{filename}", content)
+ write!(config, filename, content)
filename
end
@@ -231,4 +230,10 @@ defmodule ExDoc.Formatter.HTML do
config
end
end
+
+ defp write!(config, filename, content) do
+ config.output
+ |> Path.join(filename)
+ |> File.write!(content)
+ end
end