don't erase what a user wrote when they go over max_label_length

This commit is contained in:
Gavin McDonald
2025-05-11 11:48:56 -04:00
parent 590c4014df
commit 8a42947995
3 changed files with 25 additions and 11 deletions

View File

@@ -1,10 +1,10 @@
defmodule LabelmakerWeb.Constants do defmodule LabelmakerWeb.Constants do
@defaults %{ @defaults %{
label: "64 character maximum", label: "",
font: "Helvetica", font: "Helvetica",
color: "black", color: "black",
outline: "none", outline: "white",
size: "24" size: "32"
} }
@preview %{ @preview %{
@@ -36,6 +36,7 @@ defmodule LabelmakerWeb.Constants do
|> Enum.map(&String.trim_leading(&1, " Font: ")) |> Enum.map(&String.trim_leading(&1, " Font: "))
@max_label_length 64 @max_label_length 64
@max_label_error "64-character maximum"
@outlines ~w(none white black gray) @outlines ~w(none white black gray)
@@ -50,6 +51,7 @@ defmodule LabelmakerWeb.Constants do
def fonts, do: @fonts def fonts, do: @fonts
def font_count, do: @fonts |> length() def font_count, do: @fonts |> length()
def max_label_length, do: @max_label_length def max_label_length, do: @max_label_length
def max_label_error, do: @max_label_error
def outlines, do: @outlines def outlines, do: @outlines
def permitted_keys, do: @permitted_keys def permitted_keys, do: @permitted_keys
def preview, do: @preview def preview, do: @preview

View File

@@ -6,7 +6,6 @@ defmodule LabelmakerWeb.Home do
def mount(_params, _session, socket) do def mount(_params, _session, socket) do
assigns = assigns =
Constants.defaults() Constants.defaults()
|> Map.replace(:label, "")
|> Map.merge(Constants.preview()) |> Map.merge(Constants.preview())
|> Enum.to_list() |> Enum.to_list()
@@ -45,9 +44,13 @@ defmodule LabelmakerWeb.Home do
]} ]}
style={"height: calc(2rem + #{@preview_height}px); color: #{@color}; font-family: #{@font}; font-size: #{@size}px; line-height: #{@size}px;"} style={"height: calc(2rem + #{@preview_height}px); color: #{@color}; font-family: #{@font}; font-size: #{@size}px; line-height: #{@size}px;"}
> >
<%= for {str, i} <- Enum.with_index(@preview_text) do %> <%= if String.length(@label) > Constants.max_label_length() do %>
{str} {Constants.max_label_error()}
{if i < length(@preview_text) - 1, do: raw("<br />")} <% else %>
<%= for {str, i} <- Enum.with_index(@preview_text) do %>
{str}
{if i < length(@preview_text) - 1, do: raw("<br />")}
<% end %>
<% end %> <% end %>
</div> </div>

View File

@@ -11,14 +11,23 @@ defmodule LabelmakerWeb.Tools do
|> Map.take(Constants.permitted_keys()) |> Map.take(Constants.permitted_keys())
|> Map.new(fn {k, v} -> {String.to_atom(k), v} end) |> Map.new(fn {k, v} -> {String.to_atom(k), v} end)
|> Enum.map(fn |> Enum.map(fn
{:preview_height, _} -> {:preview_height, size + size * line_breaks} {:label, label} ->
{:preview_text, _} -> {:preview_text, String.split(label, "\\n")} if String.length(label) > Constants.max_label_length(),
pair -> pair do: {:label, String.slice(label, 0, Constants.max_label_length())},
else: {:label, label}
{:preview_height, _} ->
{:preview_height, size + size * line_breaks}
{:preview_text, _} ->
{:preview_text, String.split(label, "\\n")}
pair ->
pair
end) end)
|> Enum.filter(fn |> Enum.filter(fn
{:color, color} -> color in Constants.colors() {:color, color} -> color in Constants.colors()
{:font, font} -> font in Constants.fonts() {:font, font} -> font in Constants.fonts()
{:label, label} -> String.length(label) <= Constants.max_label_length()
{:outline, outline} -> outline in Constants.outlines() {:outline, outline} -> outline in Constants.outlines()
{:size, size} -> size in Constants.sizes() {:size, size} -> size in Constants.sizes()
_ -> true _ -> true