31 lines
1.0 KiB
Elixir
31 lines
1.0 KiB
Elixir
defmodule LabelmakerWeb.Tools do
|
|
alias LabelmakerWeb.Constants
|
|
|
|
def process_parameters(parameters) do
|
|
%{"label" => label, "size" => size} = parameters
|
|
line_breaks = Regex.scan(~r/#{Regex.escape("\\n")}/, label) |> length()
|
|
size = String.to_integer(size)
|
|
|
|
parameters =
|
|
parameters
|
|
|> Map.take(Constants.permitted_keys())
|
|
|> Map.new(fn {k, v} -> {String.to_atom(k), v} end)
|
|
|> Enum.map(fn
|
|
{:preview_height, _} -> {:preview_height, size + size * line_breaks}
|
|
{:preview_text, _} -> {:preview_text, String.split(label, "\\n")}
|
|
pair -> pair
|
|
end)
|
|
|> Enum.filter(fn
|
|
{:color, color} -> color in Constants.colors()
|
|
{:font, font} -> font in Constants.fonts()
|
|
{:label, label} -> String.length(label) <= Constants.max_label_length()
|
|
{:outline, outline} -> outline in Constants.outlines()
|
|
{:size, size} -> size in Constants.sizes()
|
|
_ -> true
|
|
end)
|
|
|> Map.new()
|
|
|
|
Map.merge(Constants.defaults(), parameters)
|
|
end
|
|
end
|