diff --git a/lib/labelmaker_web/constants.ex b/lib/labelmaker_web/constants.ex index 6a2b955..bf27a2e 100644 --- a/lib/labelmaker_web/constants.ex +++ b/lib/labelmaker_web/constants.ex @@ -1,12 +1,12 @@ defmodule LabelmakerWeb.Constants do @defaults %{ - "label" => "64 character maximum", - "font" => "Helvetica", - "color" => "black", - "size" => "24" + label: "64 character maximum", + font: "Helvetica", + color: "black", + size: "24" } - @permitted_keys Map.keys(@defaults) + @permitted_keys @defaults |> Map.keys() |> Enum.map(&Atom.to_string/1) @colors System.cmd("magick", ["-list", "color"]) |> elem(0) diff --git a/lib/labelmaker_web/controllers/label_controller.ex b/lib/labelmaker_web/controllers/label_controller.ex index f112a4e..8991b66 100644 --- a/lib/labelmaker_web/controllers/label_controller.ex +++ b/lib/labelmaker_web/controllers/label_controller.ex @@ -1,28 +1,12 @@ defmodule LabelmakerWeb.LabelController do use LabelmakerWeb, :controller - alias LabelmakerWeb.Constants + alias LabelmakerWeb.Tools @label_dir Path.join(:code.priv_dir(:labelmaker), "static/labels") File.mkdir_p!(@label_dir) def show(conn, params) do - params = - params - |> Map.take(Constants.permitted_keys()) - |> 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() - "size" -> v in Constants.sizes() - _ -> true - end - end) - |> Map.new() - - options = - Constants.defaults() - |> Map.merge(params) + options = Tools.process_parameters(params) filename = options @@ -47,15 +31,15 @@ defmodule LabelmakerWeb.LabelController do "-background", "none", "-fill", - options["color"], + options.color, "-pointsize", - options["size"], + options.size, "-font", - options["font"], - "label:#{options["label"]}", + options.font, + "label:#{options.label}", "-set", "comment", - inspect(options), + inspect(Jason.encode!(options)), filepath ] diff --git a/lib/labelmaker_web/live/home.ex b/lib/labelmaker_web/live/home.ex index 05b3cc5..b7672de 100644 --- a/lib/labelmaker_web/live/home.ex +++ b/lib/labelmaker_web/live/home.ex @@ -1,29 +1,24 @@ defmodule LabelmakerWeb.Home do use LabelmakerWeb, :live_view alias LabelmakerWeb.Constants + alias LabelmakerWeb.Tools def mount(_params, _session, socket) do - {:ok, - assign(socket, - label: "", - font: "Helvetica", - color: "black", - size: "24" - )} + { + :ok, + assign( + socket, + Enum.to_list(Constants.defaults()) + ) + } end def handle_event("update_label", params, socket) do - {:noreply, - assign(socket, - label: params["label"] || "", - font: params["font"] || "Helvetica", - color: params["color"] || "black", - size: params["size"] || "24" - )} + {:noreply, assign(socket, Tools.process_parameters(params))} end def handle_event("make_label", params, socket) do - {:noreply, push_navigate(socket, to: ~p"/#{params["label"]}?#{Map.drop(params, ["label"])}")} + {:noreply, redirect(socket, to: ~p"/#{params["label"]}?#{Map.drop(params, ["label"])}")} end def render(assigns) do diff --git a/lib/labelmaker_web/router.ex b/lib/labelmaker_web/router.ex index 1602490..f5a6d25 100644 --- a/lib/labelmaker_web/router.ex +++ b/lib/labelmaker_web/router.ex @@ -14,18 +14,11 @@ defmodule LabelmakerWeb.Router do plug :accepts, ["json"] end - # scope "/", LabelmakerWeb do - # pipe_through :browser - # - # get "/", PageController, :home - # end - scope "/", LabelmakerWeb do pipe_through :browser live "/", Home get "/:label", LabelController, :show - # live "/:label", Label end # Other scopes may use custom stacks. diff --git a/lib/labelmaker_web/tools.ex b/lib/labelmaker_web/tools.ex new file mode 100644 index 0000000..bf5a13c --- /dev/null +++ b/lib/labelmaker_web/tools.ex @@ -0,0 +1,22 @@ +defmodule LabelmakerWeb.Tools do + alias LabelmakerWeb.Constants + + def process_parameters(parameters) do + 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() + :size -> v in Constants.sizes() + _ -> true + end + end) + |> Map.new() + + Map.merge(Constants.defaults(), parameters) + end +end