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

View File

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

View File

@@ -11,14 +11,23 @@ defmodule LabelmakerWeb.Tools do
|> 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
{:label, label} ->
if String.length(label) > Constants.max_label_length(),
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)
|> 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