diff --git a/lib/labelmaker_web/constants.ex b/lib/labelmaker_web/constants.ex index f1061ad..5bbe903 100644 --- a/lib/labelmaker_web/constants.ex +++ b/lib/labelmaker_web/constants.ex @@ -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 diff --git a/lib/labelmaker_web/live/home.ex b/lib/labelmaker_web/live/home.ex index d86a02b..854d22a 100644 --- a/lib/labelmaker_web/live/home.ex +++ b/lib/labelmaker_web/live/home.ex @@ -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,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;"} > - <%= for {str, i} <- Enum.with_index(@preview_text) do %> - {str} - {if i < length(@preview_text) - 1, do: raw("
")} + <%= 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("
")} + <% end %> <% end %> diff --git a/lib/labelmaker_web/tools.ex b/lib/labelmaker_web/tools.ex index 36fde8b..73b34a3 100644 --- a/lib/labelmaker_web/tools.ex +++ b/lib/labelmaker_web/tools.ex @@ -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