From 6baaa152edbbbf193c0eed7643595a971c3af569 Mon Sep 17 00:00:00 2001 From: Gavin McDonald Date: Thu, 21 Aug 2025 16:08:47 -0400 Subject: [PATCH] better width x height support --- lib/labelmaker_web/constants.ex | 7 +- .../controllers/label_controller.ex | 5 +- .../controllers/page_controller.ex | 9 - lib/labelmaker_web/controllers/page_html.ex | 10 - .../controllers/page_html/home.html.heex | 222 ------------------ lib/labelmaker_web/live/home.ex | 160 +------------ lib/labelmaker_web/live/home.html.heex | 160 +++++++++++++ lib/labelmaker_web/tools.ex | 30 +-- 8 files changed, 193 insertions(+), 410 deletions(-) delete mode 100644 lib/labelmaker_web/controllers/page_controller.ex delete mode 100644 lib/labelmaker_web/controllers/page_html.ex delete mode 100644 lib/labelmaker_web/controllers/page_html/home.html.heex create mode 100644 lib/labelmaker_web/live/home.html.heex diff --git a/lib/labelmaker_web/constants.ex b/lib/labelmaker_web/constants.ex index ffa8a7b..0c5d078 100644 --- a/lib/labelmaker_web/constants.ex +++ b/lib/labelmaker_web/constants.ex @@ -3,16 +3,17 @@ defmodule LabelmakerWeb.Constants do color: "black", font: "Helvetica", gravity: "Center", - height: "0", + height: "", label: "", + label_too_long: false, link: "", outline: "none", size: "72", - width: "0" + width: "" } @preview %{ - preview_bg: "r", + preview_background: "r", preview_height: @defaults.size, preview_text: [] } diff --git a/lib/labelmaker_web/controllers/label_controller.ex b/lib/labelmaker_web/controllers/label_controller.ex index b0e30cf..f7eaf4b 100644 --- a/lib/labelmaker_web/controllers/label_controller.ex +++ b/lib/labelmaker_web/controllers/label_controller.ex @@ -42,7 +42,7 @@ defmodule LabelmakerWeb.LabelController do ] end - defp size_settings(args, %{height: 0, width: 0} = options) do + defp size_settings(args, %{height: "", width: ""} = options) do args ++ [ "-pointsize", @@ -87,6 +87,9 @@ 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/controllers/page_controller.ex b/lib/labelmaker_web/controllers/page_controller.ex deleted file mode 100644 index 7dee29e..0000000 --- a/lib/labelmaker_web/controllers/page_controller.ex +++ /dev/null @@ -1,9 +0,0 @@ -defmodule LabelmakerWeb.PageController do - use LabelmakerWeb, :controller - - def home(conn, _params) do - # The home page is often custom made, - # so skip the default app layout. - render(conn, :home, layout: false) - end -end diff --git a/lib/labelmaker_web/controllers/page_html.ex b/lib/labelmaker_web/controllers/page_html.ex deleted file mode 100644 index 1b6df2e..0000000 --- a/lib/labelmaker_web/controllers/page_html.ex +++ /dev/null @@ -1,10 +0,0 @@ -defmodule LabelmakerWeb.PageHTML do - @moduledoc """ - This module contains pages rendered by PageController. - - See the `page_html` directory for all templates available. - """ - use LabelmakerWeb, :html - - embed_templates "page_html/*" -end diff --git a/lib/labelmaker_web/controllers/page_html/home.html.heex b/lib/labelmaker_web/controllers/page_html/home.html.heex deleted file mode 100644 index d72b03c..0000000 --- a/lib/labelmaker_web/controllers/page_html/home.html.heex +++ /dev/null @@ -1,222 +0,0 @@ -<.flash_group flash={@flash} /> - -
-
- -

- Phoenix Framework - - v{Application.spec(:phoenix, :vsn)} - -

-

- Peace of mind from prototype to production. -

-

- Build rich, interactive web applications quickly, with less code and fewer moving parts. Join our growing community of developers using Phoenix to craft APIs, HTML5 apps and more, for fun or at scale. -

- -
-
diff --git a/lib/labelmaker_web/live/home.ex b/lib/labelmaker_web/live/home.ex index 77546ea..9a7b729 100644 --- a/lib/labelmaker_web/live/home.ex +++ b/lib/labelmaker_web/live/home.ex @@ -19,7 +19,15 @@ defmodule LabelmakerWeb.Home do end def handle_event("update_preview", %{"bg" => bg}, socket) do - {:noreply, assign(socket, :preview_bg, bg)} + preview_background = + case bg do + "r" -> "bg-[linear-gradient(to_right,_black_33%,_white_67%)]" + "b" -> "bg-[linear-gradient(to_bottom,_black_33%,_white_67%)]" + "c" -> "" + _ -> "bg-[linear-gradient(to_right,_black_33%,_white_67%)]" + end + + {:noreply, assign(socket, :preview_background, preview_background)} end def handle_event("update_label", params, socket) do @@ -37,154 +45,4 @@ defmodule LabelmakerWeb.Home do def handle_event("make_label", params, socket) do {:noreply, redirect(socket, to: ~p"/#{params["label"]}?#{Map.drop(params, ["label"])}")} end - - def render(assigns) do - preview_background = - case assigns.preview_bg do - "r" -> "bg-[linear-gradient(to_right,_black_33%,_white_67%)]" - "b" -> "bg-[linear-gradient(to_bottom,_black_33%,_white_67%)]" - "c" -> "" - _ -> "bg-[linear-gradient(to_right,_black_33%,_white_67%)]" - end - - assigns = - assign( - assigns, - label_too_long: String.length(assigns.label) > Constants.max_label_length(), - preview_background: preview_background - ) - - ~H""" -
-

Labelmaker

-

- Easily create text-based images. Perfect for quickly creating decals in Tabletop Simulator. -

- -
- <%= if @label_too_long 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 %> -
-
-
-
-
-
-
-
-
-
-
- -
-
- - -

- \n or <Enter> for newlines -

-
- -
-
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- - -
- """ - end end diff --git a/lib/labelmaker_web/live/home.html.heex b/lib/labelmaker_web/live/home.html.heex new file mode 100644 index 0000000..a237ba8 --- /dev/null +++ b/lib/labelmaker_web/live/home.html.heex @@ -0,0 +1,160 @@ +
+

Labelmaker

+

+ Easily create text-based images. Perfect for quickly creating decals in Tabletop Simulator. +

+ +
+ <%= if @label_too_long 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 %> +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ + +

+ \n or <Enter> for newlines +

+
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + +
diff --git a/lib/labelmaker_web/tools.ex b/lib/labelmaker_web/tools.ex index c061a2f..9433c48 100644 --- a/lib/labelmaker_web/tools.ex +++ b/lib/labelmaker_web/tools.ex @@ -8,6 +8,11 @@ defmodule LabelmakerWeb.Tools do alias LabelmakerWeb.Constants def process_parameters(parameters) do + parameters = + Constants.defaults() + |> Map.new(fn {k, v} -> {Atom.to_string(k), v} end) + |> Map.merge(parameters) + parameters = Constants.defaults() |> Map.new(fn {k, v} -> {Atom.to_string(k), v} end) @@ -24,6 +29,9 @@ defmodule LabelmakerWeb.Tools do {:label, label} -> {:label, process_label(label)} + {:label_too_long, _} -> + {:label_too_long, String.length(parameters["label"]) > Constants.max_label_length()} + {:link, _} -> {:link, generate_link(parameters)} @@ -31,7 +39,7 @@ defmodule LabelmakerWeb.Tools do {:preview_height, calculate_preview_height(parameters)} {:preview_text, _} -> - {:preview_text, String.split(parameters.label, "\\n")} + {:preview_text, String.split(parameters["label"], "\\n")} {:width, width} -> {:width, process_width(width, parameters)} @@ -51,8 +59,8 @@ defmodule LabelmakerWeb.Tools do Map.merge(Constants.defaults(), parameters) end - defp process_height("0", parameters) do - parameters.width |> String.to_integer() |> max(0) |> min(Constants.max_height()) + defp process_height("", parameters) do + parameters["width"] |> String.to_integer() |> max(0) |> min(Constants.max_height()) end defp process_height(height, _parameters) do @@ -67,22 +75,16 @@ defmodule LabelmakerWeb.Tools do end end - defp generate_link(%{:height => "0", "label" => label, :width => "0"} = parameters) do + defp generate_link(%{"height" => "", "label" => label, "width" => ""} = parameters) do ~p"/#{label}?#{Map.take(parameters, ["color", "font", "outline", "size"])}" end - defp generate_link(%{height: "0", width: width} = parameters), - do: generate_link(%{parameters | height: width, width: width}) - - defp generate_link(%{height: height, width: "0"} = parameters), - do: generate_link(%{parameters | height: height, width: height}) - defp generate_link(%{"label" => label} = parameters) do ~p"/#{label}?#{Map.take(parameters, ["color", "font", "height", "outline", "width"])}" end - defp process_width("0", parameters) do - parameters.height |> String.to_integer() |> max(0) |> min(Constants.max_width()) + defp process_width("", parameters) do + parameters["height"] |> String.to_integer() |> max(0) |> min(Constants.max_width()) end defp process_width(width, _parameters) do @@ -90,8 +92,8 @@ defmodule LabelmakerWeb.Tools do end defp calculate_preview_height(parameters) do - size = parameters.size |> String.to_integer() - line_breaks = Regex.scan(~r/#{Regex.escape("\\n")}/, parameters.label) |> length() + size = parameters["size"] |> String.to_integer() + line_breaks = Regex.scan(~r/#{Regex.escape("\\n")}/, parameters["label"]) |> length() size + size * line_breaks end