From a981cf98d751fcc6d1bba403af5997fdda166b2c Mon Sep 17 00:00:00 2001 From: Gavin McDonald Date: Sun, 24 Aug 2025 11:13:18 -0400 Subject: [PATCH] text alignment for widthxheight images --- lib/labelmaker_web/constants.ex | 2 +- .../controllers/label_controller.ex | 9 ++-- .../live/components/radio_component.ex | 39 +++++++++-------- lib/labelmaker_web/live/home.ex | 28 ++++++------ lib/labelmaker_web/live/home.html.heex | 8 +++- lib/labelmaker_web/tools.ex | 43 ++++++++++--------- 6 files changed, 69 insertions(+), 60 deletions(-) diff --git a/lib/labelmaker_web/constants.ex b/lib/labelmaker_web/constants.ex index 885e61c..0a9b911 100644 --- a/lib/labelmaker_web/constants.ex +++ b/lib/labelmaker_web/constants.ex @@ -1,8 +1,8 @@ defmodule LabelmakerWeb.Constants do @defaults %{ + align: "center", color: "black", font: "Helvetica", - align: "center", height: "", label: "", label_too_long: false, diff --git a/lib/labelmaker_web/controllers/label_controller.ex b/lib/labelmaker_web/controllers/label_controller.ex index 11d4834..6c83ef4 100644 --- a/lib/labelmaker_web/controllers/label_controller.ex +++ b/lib/labelmaker_web/controllers/label_controller.ex @@ -20,8 +20,8 @@ defmodule LabelmakerWeb.LabelController do unless File.exists?(filepath) do basic_settings(options) - |> size_settings(options) |> outline_settings(options) + |> size_settings(options) |> final_settings(options) |> generate_image() end @@ -51,11 +51,11 @@ defmodule LabelmakerWeb.LabelController do ] end - defp size_settings(args, %{align: align, height: height, width: width} = options) do + defp size_settings(args, %{align: alignment, height: height, width: width} = options) do args ++ [ "-gravity", - align, + Tools.process_gravity(alignment), "-size", "#{width}x#{height}", "caption:#{String.slice(options.label, 0, Constants.max_label_length())}" @@ -87,9 +87,6 @@ defmodule LabelmakerWeb.LabelController do defp generate_image(args) do File.mkdir_p!(@label_dir) - # IO.puts("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-") - # IO.inspect(args) - {_, 0} = System.cmd("magick", args) end end diff --git a/lib/labelmaker_web/live/components/radio_component.ex b/lib/labelmaker_web/live/components/radio_component.ex index f7f2135..7a1a570 100644 --- a/lib/labelmaker_web/live/components/radio_component.ex +++ b/lib/labelmaker_web/live/components/radio_component.ex @@ -1,39 +1,40 @@ defmodule LabelmakerWeb.RadioComponent do use Phoenix.Component - # props: class, is_dm, settings, options attr :class, :string, default: "" attr :selected, :string, required: true attr :options, :list, required: true - - # class="mt-1 block w-full rounded border border-gray-300 px-3 py-2 bg-secondary-light text-fg-light dark:bg-secondary-dark dark:text-fg-dark dark:border-gray-600 focus:ring-primary" + attr :event_name, :string, required: true def radio_component(assigns) do ~H"""
<%= for {option, index} <- Enum.with_index(@options) do %> -
- <.radio_component options={Constants.permitted_alignments()} selected={@align} /> + <.radio_component + options={Constants.permitted_alignments()} + selected={@align} + event_name="update_alignment" + />
- diff --git a/lib/labelmaker_web/tools.ex b/lib/labelmaker_web/tools.ex index 86057cb..ccdc30c 100644 --- a/lib/labelmaker_web/tools.ex +++ b/lib/labelmaker_web/tools.ex @@ -21,7 +21,7 @@ defmodule LabelmakerWeb.Tools do |> Map.new(fn {k, v} -> {String.to_atom(k), v} end) |> Enum.map(fn {:align, align} -> - {:align, process_alignment(align |> String.downcase())} + {:align, align |> String.downcase()} {:font, font} -> {:font, Constants.font_map()[String.downcase(font)]} @@ -35,9 +35,6 @@ defmodule LabelmakerWeb.Tools do {:label_too_long, _} -> {:label_too_long, String.length(parameters["label"]) > Constants.max_label_length()} - {:link, _} -> - {:link, generate_link(parameters)} - {:preview_height, _} -> {:preview_height, calculate_preview_height(parameters)} @@ -51,7 +48,7 @@ defmodule LabelmakerWeb.Tools do pair end) |> Enum.filter(fn - {:align, align} -> align in Constants.permitted_gravity() + {:align, align} -> align in Constants.permitted_alignments() {:color, color} -> color in Constants.colors() {:font, font} -> font in Map.values(Constants.font_map()) {:outline, outline} -> outline in Constants.outlines() @@ -60,17 +57,21 @@ defmodule LabelmakerWeb.Tools do end) |> Map.new() - Map.merge(Constants.defaults(), parameters) + parameters = Map.merge(Constants.defaults(), parameters) + + Map.put(parameters, :link, generate_link(parameters)) end - defp process_alignment("left"), do: "west" - defp process_alignment("middle"), do: "center" - defp process_alignment("right"), do: "east" - defp process_alignment(alignment), do: alignment |> String.downcase() + def process_gravity("left"), do: "west" + def process_gravity("middle"), do: "center" + def process_gravity("right"), do: "east" + def process_gravity(alignment), do: alignment |> String.downcase() - defp process_height("", parameters) do - parameters["width"] |> String.to_integer() |> max(0) |> min(Constants.max_height()) - end + defp process_height("", _parameters), do: "" + + # defp process_height("", parameters) do + # parameters["width"] |> String.to_integer() |> max(0) |> min(Constants.max_height()) + # end defp process_height(height, _parameters) do height |> String.to_integer() |> max(0) |> min(Constants.max_height()) @@ -84,17 +85,19 @@ defmodule LabelmakerWeb.Tools do end end - defp generate_link(%{"height" => "", "label" => label, "width" => ""} = parameters) do - ~p"/#{label}?#{Map.take(parameters, ["color", "font", "outline", "size"])}" + defp generate_link(%{height: "", label: label, width: ""} = parameters) do + ~p"/#{label}?#{Map.take(parameters, [:color, :font, :outline, :size])}" end - defp generate_link(%{"label" => label} = parameters) do - ~p"/#{label}?#{Map.take(parameters, ["color", "font", "height", "outline", "width"])}" + defp generate_link(%{label: label} = parameters) do + ~p"/#{label}?#{Map.take(parameters, [:align, :color, :font, :height, :outline, :width])}" end - defp process_width("", parameters) do - parameters["height"] |> String.to_integer() |> max(0) |> min(Constants.max_width()) - end + defp process_width("", _parameters), do: "" + + # defp process_width("", parameters) do + # parameters["height"] |> String.to_integer() |> max(0) |> min(Constants.max_width()) + # end defp process_width(width, _parameters) do width |> String.to_integer() |> max(0) |> min(Constants.max_width())