better newline support
This commit is contained in:
@@ -12,6 +12,14 @@ defmodule LabelmakerWeb.Tools do
|
||||
Constants.defaults()
|
||||
|> Map.new(fn {k, v} -> {Atom.to_string(k), v} end)
|
||||
|> Map.merge(parameters)
|
||||
|> Enum.map(fn
|
||||
{"label", label} ->
|
||||
{"label", process_label(label)}
|
||||
|
||||
pair ->
|
||||
pair
|
||||
end)
|
||||
|> Map.new()
|
||||
|
||||
parameters =
|
||||
Constants.defaults()
|
||||
@@ -29,9 +37,6 @@ defmodule LabelmakerWeb.Tools do
|
||||
{:height, height} ->
|
||||
{:height, process_height(height, parameters)}
|
||||
|
||||
{:label, label} ->
|
||||
{:label, process_label(label)}
|
||||
|
||||
{:label_too_long, _} ->
|
||||
{:label_too_long, String.length(parameters["label"]) > Constants.max_label_length()}
|
||||
|
||||
@@ -39,7 +44,10 @@ defmodule LabelmakerWeb.Tools do
|
||||
{:preview_height, calculate_preview_height(parameters)}
|
||||
|
||||
{:preview_text, _} ->
|
||||
{:preview_text, String.split(parameters["label"], "\\n")}
|
||||
{:preview_text, generate_preview_text(parameters["label"])}
|
||||
|
||||
{:rows, _} ->
|
||||
{:rows, process_rows(parameters["label"])}
|
||||
|
||||
{:width, width} ->
|
||||
{:width, process_width(width, parameters)}
|
||||
@@ -78,11 +86,9 @@ defmodule LabelmakerWeb.Tools do
|
||||
end
|
||||
|
||||
defp process_label(label) do
|
||||
if String.length(label) > Constants.max_label_length() do
|
||||
String.slice(label, 0, Constants.max_label_length())
|
||||
else
|
||||
label
|
||||
end
|
||||
label
|
||||
|> String.replace("\\n", "\n")
|
||||
|> String.slice(0, Constants.max_label_length())
|
||||
end
|
||||
|
||||
defp generate_link(%{height: "", label: label, width: ""} = parameters) do
|
||||
@@ -93,6 +99,11 @@ defmodule LabelmakerWeb.Tools do
|
||||
~p"/#{label}?#{Map.take(parameters, [:align, :color, :font, :height, :outline, :width])}"
|
||||
end
|
||||
|
||||
defp generate_preview_text(label) do
|
||||
label
|
||||
|> String.replace("\n", "<br />")
|
||||
end
|
||||
|
||||
def process_preview_background(bg) do
|
||||
case bg do
|
||||
"r" -> "bg-[linear-gradient(to_right,_black_33%,_white_67%)]"
|
||||
@@ -114,9 +125,19 @@ defmodule LabelmakerWeb.Tools do
|
||||
|
||||
defp calculate_preview_height(parameters) do
|
||||
size = parameters["size"] |> String.to_integer()
|
||||
line_breaks = Regex.scan(~r/#{Regex.escape("\\n")}/, parameters["label"]) |> length()
|
||||
rows = calculate_rows(parameters["label"])
|
||||
|
||||
size + size * line_breaks
|
||||
size + size * rows
|
||||
end
|
||||
|
||||
defp calculate_rows(label) do
|
||||
Regex.scan(~r/#{Regex.escape("\n")}/, label) |> length()
|
||||
end
|
||||
|
||||
defp process_rows(label) do
|
||||
calculate_rows(label)
|
||||
|> max(Constants.rows_min())
|
||||
|> min(Constants.rows_max())
|
||||
end
|
||||
|
||||
def outline(_, error: true), do: outline(Constants.danger(), false)
|
||||
|
||||
Reference in New Issue
Block a user