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