defmodule LabelmakerWeb.Home do use LabelmakerWeb, :live_view alias LabelmakerWeb.Constants alias LabelmakerWeb.Tools def mount(_params, _session, socket) do assigns = Constants.defaults() |> Map.merge(Constants.preview()) |> Enum.to_list() { :ok, assign( socket, assigns ) } end def handle_event("update_preview", %{"bg" => bg}, socket) do {:noreply, assign(socket, :preview_bg, bg)} end def handle_event("update_label", params, socket) do assigns = socket.assigns |> Enum.map(fn {k, v} -> {Atom.to_string(k), v} end) |> Map.new() |> Map.merge(params) |> Tools.process_parameters() |> Enum.to_list() {:noreply, assign(socket, assigns)} end 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-[#{assigns.color}]" _ -> "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

<%= 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 %>

Note: not all fonts are available for preview.

\n or <Enter> for newlines

""" end end