diff --git a/assets/css/app.css b/assets/css/app.css index 378c8f9..f9da58f 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -1,5 +1,30 @@ -@import "tailwindcss/base"; -@import "tailwindcss/components"; -@import "tailwindcss/utilities"; +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; +@import 'tailwindcss/utilities'; /* This file is for your main application CSS */ + +.outline-black { + text-shadow: + -1px -1px 0 black, + 1px -1px 0 black, + -1px 1px 0 black, + 1px 1px 0 black; +} + +.outline-gray { + text-shadow: + -1px -1px 0 gray, + 1px -1px 0 gray, + -1px 1px 0 gray, + 1px 1px 0 gray; +} + +.outline-white { + color: white; + text-shadow: + -1px -1px 0 white, + 1px -1px 0 white, + -1px 1px 0 white, + 1px 1px 0 white; +} diff --git a/lib/labelmaker_web/constants.ex b/lib/labelmaker_web/constants.ex index ef98122..f1061ad 100644 --- a/lib/labelmaker_web/constants.ex +++ b/lib/labelmaker_web/constants.ex @@ -7,7 +7,19 @@ defmodule LabelmakerWeb.Constants do size: "24" } - @permitted_keys @defaults |> Map.keys() |> Enum.map(&Atom.to_string/1) + @preview %{ + preview_height: @defaults.size, + preview_text: [] + } + + @stringview @preview + |> Enum.map(fn {k, v} -> {Atom.to_string(k), v} end) + |> Map.new() + + @permitted_keys @defaults + |> Map.merge(@preview) + |> Map.keys() + |> Enum.map(&Atom.to_string/1) @colors System.cmd("magick", ["-list", "color"]) |> elem(0) @@ -40,5 +52,7 @@ defmodule LabelmakerWeb.Constants do def max_label_length, do: @max_label_length def outlines, do: @outlines def permitted_keys, do: @permitted_keys + def preview, do: @preview def sizes, do: @sizes + def stringview, do: @stringview end diff --git a/lib/labelmaker_web/live/home.ex b/lib/labelmaker_web/live/home.ex index 59601c8..d3d2ebe 100644 --- a/lib/labelmaker_web/live/home.ex +++ b/lib/labelmaker_web/live/home.ex @@ -4,17 +4,29 @@ defmodule LabelmakerWeb.Home do alias LabelmakerWeb.Tools def mount(_params, _session, socket) do + assigns = + Constants.defaults() + |> Map.replace(:label, "") + |> Map.merge(Constants.preview()) + |> Enum.to_list() + { :ok, assign( socket, - Enum.to_list(%{Constants.defaults() | label: ""}) + assigns ) } end def handle_event("update_label", params, socket) do - {:noreply, assign(socket, Tools.process_parameters(params))} + assigns = + params + |> Map.merge(Constants.stringview()) + |> Tools.process_parameters() + |> Enum.to_list() + + {:noreply, assign(socket, assigns)} end def handle_event("make_label", params, socket) do @@ -26,14 +38,17 @@ defmodule LabelmakerWeb.Home do

Labelmaker

-
-
- {@label} -
+
+ {Enum.join(@preview_text, "
")} +
+
label, "size" => size} = parameters + line_breaks = Regex.scan(~r/#{Regex.escape("\\n")}/, label) |> length() + size = String.to_integer(size) + parameters = parameters |> Map.take(Constants.permitted_keys()) |> Map.new(fn {k, v} -> {String.to_atom(k), v} end) - |> Enum.filter(fn {k, v} -> - case k do - :color -> v in Constants.colors() - :font -> v in Constants.fonts() - :label -> String.length(v) <= Constants.max_label_length() - :outline -> v in Constants.outlines() - :size -> v in Constants.sizes() - _ -> true - end + |> Enum.map(fn + {: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 end) |> Map.new()