Packages
ex_doc
0.37.3
0.40.3
0.40.2
0.40.1
0.40.0
0.39.3
0.39.2
0.39.1
0.39.0
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.3
0.37.2
0.37.1
0.37.0
0.37.0-rc.2
0.37.0-rc.1
0.37.0-rc.0
0.36.1
0.36.0
0.35.1
0.35.0
0.34.2
0.34.1
0.34.0
0.33.0
0.32.2
0.32.1
0.32.0
0.31.2
0.31.1
0.31.0
0.30.9
0.30.8
0.30.7
0.30.6
0.30.5
0.30.4
0.30.3
0.30.2
0.30.1
0.30.0
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.6
0.28.5
0.28.4
0.28.3
0.28.2
0.28.1
0.28.0
0.27.3
0.27.2
0.27.1
0.27.0
0.26.0
0.25.5
0.25.4
0.25.3
0.25.2
0.25.1
0.25.0
0.24.2
0.24.1
0.24.0
0.23.0
0.22.6
0.22.5
0.22.4
0.22.2
0.22.1
0.22.0
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.19.0-rc
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
retired
0.17.1
0.17.0
retired
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
ExDoc is a documentation generation tool for Elixir
Current section
Files
Jump to
Current section
Files
lib/ex_doc/formatter/html/assets.ex
defmodule ExDoc.Formatter.HTML.Assets do
@moduledoc false
defmacrop embed_pattern(pattern) do
["formatters/html", pattern]
|> Path.join()
|> Path.wildcard()
|> Enum.map(fn path ->
Module.put_attribute(__CALLER__.module, :external_resource, path)
{Path.basename(path), File.read!(path)}
end)
end
defp dist_js(), do: embed_pattern("dist/html-*.js")
defp dist_inline_js(), do: embed_pattern("dist/inline_html-*.js")
defp dist_css(:elixir), do: embed_pattern("dist/html-elixir-*.css")
defp dist_css(:erlang), do: embed_pattern("dist/html-erlang-*.css")
defp dist_license(), do: embed_pattern("dist/*.LICENSE.txt")
## Assets
def dist(proglang), do: dist_js() ++ dist_css(proglang) ++ dist_license()
def fonts, do: embed_pattern("dist/*.woff2")
## Sources
def inline_js_source(), do: dist_inline_js() |> extract_source!()
## Filenames
def js_filename(), do: dist_js() |> extract_filename!()
def css_filename(language), do: dist_css(language) |> extract_filename!()
## Helpers
@doc """
Some assets are generated automatically, so we find the revision at runtime.
"""
def rev(output, pattern) do
output = Path.expand(output)
matches =
output
|> Path.join(pattern)
|> Path.wildcard()
case matches do
[] -> raise("could not find matching #{output}/#{pattern}")
[asset | _] -> Path.relative_to(asset, output)
end
end
defp extract_filename!([{location, _}]), do: location
defp extract_source!([{_, source}]), do: source
end