repo_server/lib/templating.ex
2025-02-18 12:24:00 -06:00

32 lines
882 B
Elixir

defmodule RlRepo.Template do
require Logger
def template(template_name, replacements) do
Logger.info("Loading template #{template_name}")
{:ok, body} = File.read("assets/html/#{template_name}.html")
len = body |> String.split("~(") |> length()
template_step(replacements, body, len)
end
def template_step(replacements, body, steps_left) do
[before_placeholder | rest] = split_path = String.split(body, "~(", parts: 2)
[remains | _] = rest
[placeholder_name | after_placeholder] = String.split(remains, ")", parts: 2)
[after_placeholder | _] = after_placeholder
{:ok, replace} = Map.fetch(replacements, placeholder_name)
body = before_placeholder <> replace <> after_placeholder
steps_left = steps_left - 1
if steps_left == 1 do
body
else
template_step(replacements, body, steps_left)
end
end
end