forked from shibao/cannery
update deps
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= gettext("Record shots") %>
|
||||
{gettext("Record shots")}
|
||||
</h2>
|
||||
|
||||
<.form
|
||||
@ -16,47 +16,47 @@
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
{changeset_errors(@changeset)}
|
||||
</div>
|
||||
|
||||
<%= label(f, :ammo_left, gettext("Rounds left"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :ammo_left,
|
||||
{label(f, :ammo_left, gettext("Rounds left"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :ammo_left,
|
||||
min: 0,
|
||||
max: @pack.count - 1,
|
||||
placeholder: gettext("Rounds left"),
|
||||
class: "input input-primary"
|
||||
) %>
|
||||
)}
|
||||
<button
|
||||
type="button"
|
||||
class="mx-2 my-1 text-sm btn btn-primary"
|
||||
phx-click={JS.dispatch("cannery:set-zero", to: "#shot-record-form_ammo_left")}
|
||||
>
|
||||
<%= gettext("Used up!") %>
|
||||
{gettext("Used up!")}
|
||||
</button>
|
||||
<%= error_tag(f, :ammo_left, "col-span-3") %>
|
||||
{error_tag(f, :ammo_left, "col-span-3")}
|
||||
|
||||
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :notes,
|
||||
{label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600")}
|
||||
{textarea(f, :notes,
|
||||
class: "input input-primary col-span-2",
|
||||
id: "add-shot-record-form-notes",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("Really great weather")
|
||||
) %>
|
||||
<%= error_tag(f, :notes, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :notes, "col-span-3")}
|
||||
|
||||
<%= label(f, :date, gettext("Date"), class: "title text-lg text-primary-600") %>
|
||||
<%= date_input(f, :date,
|
||||
{label(f, :date, gettext("Date"), class: "title text-lg text-primary-600")}
|
||||
{date_input(f, :date,
|
||||
class: "input input-primary col-span-2",
|
||||
phx_update: "ignore",
|
||||
value: Date.utc_today()
|
||||
) %>
|
||||
<%= error_tag(f, :notes, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :notes, "col-span-3")}
|
||||
|
||||
<%= submit(dgettext("actions", "Save"),
|
||||
{submit(dgettext("actions", "Save"),
|
||||
class: "mx-auto btn btn-primary col-span-3",
|
||||
phx_disable_with: dgettext("prompts", "Saving...")
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -135,7 +135,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
~H"""
|
||||
<div class="flex flex-wrap justify-center items-center">
|
||||
<.link navigate={~p"/container/#{@id}"} class="link">
|
||||
<%= @name %>
|
||||
{@name}
|
||||
</.link>
|
||||
</div>
|
||||
"""}
|
||||
@ -154,7 +154,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
|
||||
{staged,
|
||||
~H"""
|
||||
<%= render_slot(@range, @container) %>
|
||||
{render_slot(@range, @container)}
|
||||
"""}
|
||||
end
|
||||
|
||||
@ -172,7 +172,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
<div class="flex flex-wrap justify-center items-center">
|
||||
<.simple_tag_card :for={tag <- @container.tags} :if={@container.tags} tag={tag} />
|
||||
|
||||
<%= render_slot(@tag_actions, @container) %>
|
||||
{render_slot(@tag_actions, @container)}
|
||||
</div>
|
||||
"""}
|
||||
end
|
||||
@ -181,7 +181,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
assigns = %{actions: actions, container: container}
|
||||
|
||||
~H"""
|
||||
<%= render_slot(@actions, @container) %>
|
||||
{render_slot(@actions, @container)}
|
||||
"""
|
||||
end
|
||||
|
||||
|
@ -2,40 +2,40 @@
|
||||
id={"container-#{@container.id}"}
|
||||
class="overflow-hidden max-w-full mx-4 mb-4 px-8 py-4
|
||||
flex flex-col justify-around items-center space-y-4
|
||||
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
||||
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
|
||||
transition-all duration-300 ease-in-out"
|
||||
>
|
||||
<.link navigate={~p"/container/#{@container}"} class="link">
|
||||
<h1 class="px-4 py-2 rounded-lg title text-xl">
|
||||
<%= @container.name %>
|
||||
{@container.name}
|
||||
</h1>
|
||||
</.link>
|
||||
|
||||
<div class="flex flex-col justify-center items-center space-y-2">
|
||||
<span :if={@container.desc} class="rounded-lg title text-lg">
|
||||
<%= gettext("Description:") %>
|
||||
<%= @container.desc %>
|
||||
{gettext("Description:")}
|
||||
{@container.desc}
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<%= gettext("Type:") %>
|
||||
<%= @container.type %>
|
||||
{gettext("Type:")}
|
||||
{@container.type}
|
||||
</span>
|
||||
|
||||
<span :if={@container.location} class="rounded-lg title text-lg">
|
||||
<%= gettext("Location:") %>
|
||||
<%= @container.location %>
|
||||
{gettext("Location:")}
|
||||
{@container.location}
|
||||
</span>
|
||||
|
||||
<%= if Ammo.get_packs_count(@current_user, container_id: @container.id) != 0 do %>
|
||||
<span class="rounded-lg title text-lg">
|
||||
<%= gettext("Packs:") %>
|
||||
<%= Ammo.get_packs_count(@current_user, container_id: @container.id) %>
|
||||
{gettext("Packs:")}
|
||||
{Ammo.get_packs_count(@current_user, container_id: @container.id)}
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<%= gettext("Rounds:") %>
|
||||
<%= Ammo.get_round_count(@current_user, container_id: @container.id) %>
|
||||
{gettext("Rounds:")}
|
||||
{Ammo.get_round_count(@current_user, container_id: @container.id)}
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
>
|
||||
<.simple_tag_card :for={tag <- @container.tags} tag={tag} />
|
||||
|
||||
<%= if @tag_actions, do: render_slot(@tag_actions) %>
|
||||
{if @tag_actions, do: render_slot(@tag_actions)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -53,6 +53,6 @@
|
||||
:if={assigns |> Map.has_key?(:inner_block)}
|
||||
class="flex space-x-4 justify-center items-center"
|
||||
>
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,3 +1,3 @@
|
||||
<time :if={@date} id={@id} datetime={Date.to_iso8601(@date, :extended)} phx-hook="Date">
|
||||
<%= Date.to_iso8601(@date, :extended) %>
|
||||
{Date.to_iso8601(@date, :extended)}
|
||||
</time>
|
||||
|
@ -1,13 +1,13 @@
|
||||
<div class="flex items-center mx-4 my-2 space-x-1">
|
||||
<input
|
||||
class="w-36 text-center input input-primary"
|
||||
class="w-40 text-center input input-primary"
|
||||
name={"#{@name}_start"}
|
||||
type="date"
|
||||
value={@start_date}
|
||||
/>
|
||||
<span>—</span>
|
||||
<input
|
||||
class="w-36 text-center input input-primary"
|
||||
class="w-40 text-center input input-primary"
|
||||
name={"#{@name}_end"}
|
||||
type="date"
|
||||
value={@end_date}
|
||||
|
@ -1,3 +1,3 @@
|
||||
<time :if={@datetime} id={@id} datetime={cast_datetime(@datetime)} phx-hook="DateTime">
|
||||
<%= cast_datetime(@datetime) %>
|
||||
{cast_datetime(@datetime)}
|
||||
</time>
|
||||
|
@ -1,24 +1,24 @@
|
||||
<div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
|
||||
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
||||
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
|
||||
transition-all duration-300 ease-in-out">
|
||||
<h1 class="title text-xl">
|
||||
<%= @invite.name %>
|
||||
{@invite.name}
|
||||
</h1>
|
||||
|
||||
<%= if @invite.disabled_at |> is_nil() do %>
|
||||
<h2 class="title text-md">
|
||||
<%= if @invite.uses_left do %>
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"Uses Left: %{uses_left_count}",
|
||||
uses_left_count: @invite.uses_left
|
||||
) %>
|
||||
)}
|
||||
<% else %>
|
||||
<%= gettext("Uses Left: Unlimited") %>
|
||||
{gettext("Uses Left: Unlimited")}
|
||||
<% end %>
|
||||
</h2>
|
||||
<% else %>
|
||||
<h2 class="title text-md">
|
||||
<%= gettext("Invite Disabled") %>
|
||||
{gettext("Invite Disabled")}
|
||||
</h2>
|
||||
<% end %>
|
||||
|
||||
@ -28,19 +28,19 @@
|
||||
/>
|
||||
|
||||
<h2 :if={@use_count && @use_count != 0} class="title text-md">
|
||||
<%= gettext("Uses: %{uses_count}", uses_count: @use_count) %>
|
||||
{gettext("Uses: %{uses_count}", uses_count: @use_count)}
|
||||
</h2>
|
||||
|
||||
<div class="flex flex-row flex-wrap justify-center items-center">
|
||||
<code
|
||||
id={"code-#{@invite.id}"}
|
||||
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-gray-100 bg-primary-800"
|
||||
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-zinc-100 bg-primary-800"
|
||||
phx-no-format
|
||||
><%= url(CanneryWeb.Endpoint, ~p"/users/register?invite=#{@invite.token}") %></code>
|
||||
<%= if @code_actions, do: render_slot(@code_actions) %>
|
||||
{if @code_actions, do: render_slot(@code_actions)}
|
||||
</div>
|
||||
|
||||
<div :if={@inner_block} class="flex space-x-4 justify-center items-center">
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -29,7 +29,7 @@
|
||||
patch={@return_to}
|
||||
id="close"
|
||||
class="absolute top-8 right-10
|
||||
text-gray-500 hover:text-gray-800
|
||||
text-zinc-500 hover:text-zinc-800
|
||||
transition-all duration-500 ease-in-out"
|
||||
phx-remove={hide_modal()}
|
||||
aria-label={gettext("Close modal")}
|
||||
@ -38,7 +38,7 @@
|
||||
</.link>
|
||||
|
||||
<div class="overflow-x-hidden overflow-y-auto w-full p-8 flex flex-col space-y-4 justify-start items-center">
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,66 +2,66 @@
|
||||
id={"pack-#{@pack.id}"}
|
||||
class="mx-4 my-2 px-8 py-4
|
||||
flex flex-col justify-center items-center
|
||||
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
||||
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
|
||||
transition-all duration-300 ease-in-out"
|
||||
>
|
||||
<.link navigate={~p"/ammo/show/#{@pack}"} class="mb-2 link">
|
||||
<h1 class="title text-xl title-primary-500">
|
||||
<%= @pack.type.name %>
|
||||
{@pack.type.name}
|
||||
</h1>
|
||||
</.link>
|
||||
|
||||
<div class="flex flex-col justify-center items-center">
|
||||
<span class="rounded-lg title text-lg">
|
||||
<%= gettext("Count:") %>
|
||||
<%= if @pack.count == 0, do: gettext("Empty"), else: @pack.count %>
|
||||
{gettext("Count:")}
|
||||
{if @pack.count == 0, do: gettext("Empty"), else: @pack.count}
|
||||
</span>
|
||||
|
||||
<span :if={@original_count && @original_count != @pack.count} class="rounded-lg title text-lg">
|
||||
<%= gettext("Original Count:") %>
|
||||
<%= @original_count %>
|
||||
{gettext("Original Count:")}
|
||||
{@original_count}
|
||||
</span>
|
||||
|
||||
<span :if={@pack.notes} class="rounded-lg title text-lg">
|
||||
<%= gettext("Notes:") %>
|
||||
<%= @pack.notes %>
|
||||
{gettext("Notes:")}
|
||||
{@pack.notes}
|
||||
</span>
|
||||
|
||||
<span :if={@pack.purchased_on} class="rounded-lg title text-lg">
|
||||
<%= gettext("Purchased on:") %>
|
||||
{gettext("Purchased on:")}
|
||||
<.date id={"#{@pack.id}-purchased-on"} date={@pack.purchased_on} />
|
||||
</span>
|
||||
|
||||
<span :if={@last_used_date} class="rounded-lg title text-lg">
|
||||
<%= gettext("Last used on:") %>
|
||||
{gettext("Last used on:")}
|
||||
<.date id={"#{@pack.id}-last-used-on"} date={@last_used_date} />
|
||||
</span>
|
||||
|
||||
<span :if={@pack.price_paid} class="rounded-lg title text-lg">
|
||||
<%= gettext("Price paid:") %>
|
||||
<%= gettext("$%{amount}", amount: display_currency(@pack.price_paid)) %>
|
||||
{gettext("Price paid:")}
|
||||
{gettext("$%{amount}", amount: display_currency(@pack.price_paid))}
|
||||
</span>
|
||||
|
||||
<span :if={@cpr} class="rounded-lg title text-lg">
|
||||
<%= gettext("CPR:") %>
|
||||
<%= gettext("$%{amount}", amount: display_currency(@cpr)) %>
|
||||
{gettext("CPR:")}
|
||||
{gettext("$%{amount}", amount: display_currency(@cpr))}
|
||||
</span>
|
||||
|
||||
<span :if={@pack.lot_number} class="rounded-lg title text-lg">
|
||||
<%= gettext("Lot number:") %>
|
||||
<%= @pack.lot_number %>
|
||||
{gettext("Lot number:")}
|
||||
{@pack.lot_number}
|
||||
</span>
|
||||
|
||||
<span :if={@container} class="rounded-lg title text-lg">
|
||||
<%= gettext("Container:") %>
|
||||
{gettext("Container:")}
|
||||
|
||||
<.link navigate={~p"/container/#{@container}"} class="link">
|
||||
<%= @container.name %>
|
||||
{@container.name}
|
||||
</.link>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div :if={@inner_block} class="mt-4 flex space-x-4 justify-center items-center">
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,5 +2,5 @@
|
||||
class="inline-block break-all mx-2 my-1 px-4 py-2 rounded-lg title text-xl"
|
||||
style={"color: #{@tag.text_color}; background-color: #{@tag.bg_color}"}
|
||||
>
|
||||
<%= @tag.name %>
|
||||
{@tag.name}
|
||||
</h1>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<div
|
||||
id={"tag-#{@tag.id}"}
|
||||
class="mx-4 mb-4 px-8 py-4 space-x-4 flex justify-center items-center
|
||||
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
||||
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
|
||||
transition-all duration-300 ease-in-out"
|
||||
>
|
||||
<.simple_tag_card tag={@tag} />
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</div>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<label for={@id || @action} class="relative inline-flex items-center cursor-pointer">
|
||||
<label for={@id || @action} class="inline-flex relative items-center cursor-pointer">
|
||||
<input
|
||||
id={@id || @action}
|
||||
type="checkbox"
|
||||
@ -12,19 +12,17 @@
|
||||
else: %{"phx-click": @action, "phx-value-value": @value}
|
||||
}
|
||||
/>
|
||||
<div class="w-11 h-6 bg-gray-300 rounded-full peer
|
||||
peer-focus:ring-4 peer-focus:ring-teal-300 dark:peer-focus:ring-teal-800
|
||||
peer-checked:bg-gray-600
|
||||
peer-checked:after:translate-x-full peer-checked:after:border-white
|
||||
after:content-[''] after:absolute after:top-1 after:left-[2px] after:bg-white after:border-gray-300
|
||||
<div class="w-11 h-6 bg-zinc-300 rounded-full peer
|
||||
peer-checked:bg-zinc-600 peer-checked:after:translate-x-full peer-checked:after:border-white
|
||||
after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-zinc-300
|
||||
after:border after:rounded-full after:h-5 after:w-5
|
||||
after:transition-all after:duration-250 after:ease-in-out
|
||||
transition-colors duration-250 ease-in-out">
|
||||
</div>
|
||||
<span
|
||||
id={"#{@id || @action}-label"}
|
||||
class="ml-3 text-sm font-medium text-gray-900 dark:text-gray-300 whitespace-nowrap"
|
||||
class="ml-3 text-sm font-medium whitespace-nowrap text-zinc-900 dark:text-zinc-300"
|
||||
>
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</span>
|
||||
</label>
|
||||
|
@ -14,7 +14,7 @@
|
||||
<span class="mx-2 my-1">
|
||||
|
|
||||
</span>
|
||||
<%= @title_content %>
|
||||
{@title_content}
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@ -25,37 +25,37 @@
|
||||
<%= if @current_user do %>
|
||||
<li class="mx-2 my-1">
|
||||
<.link navigate={~p"/tags"} class="text-white hover:underline">
|
||||
<%= gettext("Tags") %>
|
||||
{gettext("Tags")}
|
||||
</.link>
|
||||
</li>
|
||||
<li class="mx-2 my-1">
|
||||
<.link navigate={~p"/containers"} class="text-white hover:underline">
|
||||
<%= gettext("Containers") %>
|
||||
{gettext("Containers")}
|
||||
</.link>
|
||||
</li>
|
||||
<li class="mx-2 my-1">
|
||||
<.link navigate={~p"/catalog"} class="text-white hover:underline">
|
||||
<%= gettext("Catalog") %>
|
||||
{gettext("Catalog")}
|
||||
</.link>
|
||||
</li>
|
||||
<li class="mx-2 my-1">
|
||||
<.link navigate={~p"/ammo"} class="text-white hover:underline">
|
||||
<%= gettext("Ammo") %>
|
||||
{gettext("Ammo")}
|
||||
</.link>
|
||||
</li>
|
||||
<li class="mx-2 my-1">
|
||||
<.link navigate={~p"/range"} class="text-white hover:underline">
|
||||
<%= gettext("Range") %>
|
||||
{gettext("Range")}
|
||||
</.link>
|
||||
</li>
|
||||
<li :if={@current_user |> Accounts.already_admin?()} class="mx-2 my-1">
|
||||
<.link navigate={~p"/invites"} class="text-white hover:underline">
|
||||
<%= gettext("Invites") %>
|
||||
{gettext("Invites")}
|
||||
</.link>
|
||||
</li>
|
||||
<li class="mx-2 my-1">
|
||||
<.link href={~p"/users/settings"} class="text-white hover:underline truncate">
|
||||
<%= @current_user.email %>
|
||||
{@current_user.email}
|
||||
</.link>
|
||||
</li>
|
||||
<li class="mx-2 my-1">
|
||||
@ -86,12 +86,12 @@
|
||||
<% else %>
|
||||
<li :if={Accounts.allow_registration?()} class="mx-2 my-1">
|
||||
<.link href={~p"/users/register"} class="text-white hover:underline truncate">
|
||||
<%= dgettext("actions", "Register") %>
|
||||
{dgettext("actions", "Register")}
|
||||
</.link>
|
||||
</li>
|
||||
<li class="mx-2 my-1">
|
||||
<.link href={~p"/users/log_in"} class="text-white hover:underline truncate">
|
||||
<%= dgettext("actions", "Log in") %>
|
||||
{dgettext("actions", "Log in")}
|
||||
</.link>
|
||||
</li>
|
||||
<% end %>
|
||||
|
@ -1,36 +1,36 @@
|
||||
<div
|
||||
id={"user-#{@user.id}"}
|
||||
class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center text-center
|
||||
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
|
||||
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
|
||||
transition-all duration-300 ease-in-out"
|
||||
>
|
||||
<h1 class="px-4 py-2 rounded-lg title text-xl break-all">
|
||||
<%= @user.email %>
|
||||
{@user.email}
|
||||
</h1>
|
||||
|
||||
<h3 class="px-4 py-2 rounded-lg title text-lg">
|
||||
<p>
|
||||
<%= if @user.confirmed_at do %>
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"User was confirmed at%{confirmed_datetime}",
|
||||
confirmed_datetime: ""
|
||||
) %>
|
||||
)}
|
||||
<.datetime id={"#{@user.id}-confirmed-at"} datetime={@user.confirmed_at} />
|
||||
<% else %>
|
||||
<%= gettext("Email unconfirmed") %>
|
||||
{gettext("Email unconfirmed")}
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"User registered on%{registered_datetime}",
|
||||
registered_datetime: ""
|
||||
) %>
|
||||
)}
|
||||
<.datetime id={"#{@user.id}-inserted-at"} datetime={@user.inserted_at} />
|
||||
</p>
|
||||
</h3>
|
||||
|
||||
<div :if={@inner_block} class="px-4 py-2 flex space-x-4 justify-center items-center">
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,23 +1,23 @@
|
||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
|
||||
<span style="margin-bottom: 0.75em; font-size: 1.5em;">
|
||||
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
|
||||
{dgettext("emails", "Hi %{email},", email: @user.email)}
|
||||
</span>
|
||||
|
||||
<br />
|
||||
|
||||
<span style="margin-bottom: 1em; font-size: 1.25em;">
|
||||
<%= dgettext("emails", "Welcome to Cannery") %>
|
||||
{dgettext("emails", "Welcome to Cannery")}
|
||||
</span>
|
||||
|
||||
<br />
|
||||
|
||||
<%= dgettext("emails", "You can confirm your account by visiting the URL below:") %>
|
||||
{dgettext("emails", "You can confirm your account by visiting the URL below:")}
|
||||
|
||||
<br />
|
||||
|
||||
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
|
||||
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}>{@url}</a>
|
||||
|
||||
<br />
|
||||
|
||||
<%= dgettext("emails", "If you didn't create an account at Cannery, please ignore this.") %>
|
||||
{dgettext("emails", "If you didn't create an account at Cannery, please ignore this.")}
|
||||
</div>
|
||||
|
@ -1,17 +1,17 @@
|
||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
|
||||
<span style="margin-bottom: 0.5em; font-size: 1.5em;">
|
||||
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
|
||||
{dgettext("emails", "Hi %{email},", email: @user.email)}
|
||||
</span>
|
||||
|
||||
<br />
|
||||
|
||||
<%= dgettext("emails", "You can reset your password by visiting the URL below:") %>
|
||||
{dgettext("emails", "You can reset your password by visiting the URL below:")}
|
||||
|
||||
<br />
|
||||
|
||||
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
|
||||
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}>{@url}</a>
|
||||
|
||||
<br />
|
||||
|
||||
<%= dgettext("emails", "If you didn't request this change from Cannery, please ignore this.") %>
|
||||
{dgettext("emails", "If you didn't request this change from Cannery, please ignore this.")}
|
||||
</div>
|
||||
|
@ -1,20 +1,20 @@
|
||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
|
||||
<span style="margin-bottom: 0.5em; font-size: 1.5em;">
|
||||
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
|
||||
{dgettext("emails", "Hi %{email},", email: @user.email)}
|
||||
</span>
|
||||
|
||||
<br />
|
||||
|
||||
<%= dgettext("emails", "You can change your email by visiting the URL below:") %>
|
||||
{dgettext("emails", "You can change your email by visiting the URL below:")}
|
||||
|
||||
<br />
|
||||
|
||||
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
|
||||
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}>{@url}</a>
|
||||
|
||||
<br />
|
||||
|
||||
<%= dgettext(
|
||||
{dgettext(
|
||||
"emails",
|
||||
"If you didn't request this change from Cannery, please ignore this."
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
|
@ -10,7 +10,7 @@
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="info"
|
||||
>
|
||||
<%= Phoenix.Flash.get(@flash, :info) %>
|
||||
{Phoenix.Flash.get(@flash, :info)}
|
||||
</p>
|
||||
|
||||
<p
|
||||
@ -20,13 +20,13 @@
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="error"
|
||||
>
|
||||
<%= Phoenix.Flash.get(@flash, :error) %>
|
||||
{Phoenix.Flash.get(@flash, :error)}
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="mx-4 sm:mx-8 md:mx-16 flex flex-col justify-center items-stretch">
|
||||
<%= @inner_content %>
|
||||
{@inner_content}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
@ -40,6 +40,6 @@
|
||||
<i class="fas fa-fade text-md fa-satellite-dish"></i>
|
||||
|
||||
<h1 class="title text-md title-primary-500">
|
||||
<%= gettext("Reconnecting...") %>
|
||||
{gettext("Reconnecting...")}
|
||||
</h1>
|
||||
</div>
|
||||
|
@ -1,19 +1,19 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
<%= @email.subject %>
|
||||
{@email.subject}
|
||||
</title>
|
||||
</head>
|
||||
<body style="padding: 2em; color: rgb(31, 31, 31); background-color: rgb(220, 220, 228); font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; text-align: center;">
|
||||
<%= @inner_content %>
|
||||
{@inner_content}
|
||||
|
||||
<hr style="margin: 2em auto; border-width: 1px; border-color: rgb(212, 212, 216); width: 100%; max-width: 42rem;" />
|
||||
|
||||
<a style="color: rgb(31, 31, 31);" href={~p"/"}>
|
||||
<%= dgettext(
|
||||
{dgettext(
|
||||
"emails",
|
||||
"This email was sent from Cannery, the self-hosted firearm tracker website."
|
||||
) %>
|
||||
)}
|
||||
</a>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1 +1 @@
|
||||
<%= @inner_block %>
|
||||
{@inner_block}
|
||||
|
@ -1,20 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="m-0 p-0 w-full h-full bg-white">
|
||||
<html lang="en" class="p-0 m-0 w-full h-full bg-white [scrollbar-gutter:stable]">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<%= csrf_meta_tag() %>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="csrf-token" content={get_csrf_token()} />
|
||||
<link rel="shortcut icon" type="image/jpg" href={~p"/images/cannery.svg"} />
|
||||
<.live_title suffix={" | #{gettext("Cannery")}"}>
|
||||
<%= assigns[:page_title] || gettext("Cannery") %>
|
||||
{assigns[:page_title] || gettext("Cannery")}
|
||||
</.live_title>
|
||||
<link phx-track-static rel="stylesheet" href={~p"/css/app.css"} />
|
||||
<script defer phx-track-static type="text/javascript" src={~p"/js/app.js"}>
|
||||
<link phx-track-static rel="stylesheet" href={~p"/assets/app.css"} />
|
||||
<script defer phx-track-static type="text/javascript" src={~p"/assets/app.js"}>
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="m-0 p-0 w-full h-full subpixel-antialiased">
|
||||
<%= @inner_content %>
|
||||
<body class="p-0 m-0 w-full h-full subpixel-antialiased">
|
||||
{@inner_content}
|
||||
</body>
|
||||
</html>
|
||||
|
@ -74,17 +74,17 @@ defmodule CanneryWeb.Components.MovePackComponent do
|
||||
~H"""
|
||||
<div class="w-full flex flex-col space-y-8 justify-center items-center">
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= dgettext("actions", "Move ammo") %>
|
||||
{dgettext("actions", "Move ammo")}
|
||||
</h2>
|
||||
|
||||
<%= if @containers |> Enum.empty?() do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<%= gettext("No other containers") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No other containers")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
|
||||
<.link navigate={~p"/containers/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Add another container!") %>
|
||||
{dgettext("actions", "Add another container!")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.live_component
|
||||
@ -120,7 +120,7 @@ defmodule CanneryWeb.Components.MovePackComponent do
|
||||
phx-target={@myself}
|
||||
phx-value-container_id={@container.id}
|
||||
>
|
||||
<%= dgettext("actions", "Select") %>
|
||||
{dgettext("actions", "Select")}
|
||||
</button>
|
||||
</div>
|
||||
"""
|
||||
|
@ -170,7 +170,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
|
||||
{type_name,
|
||||
~H"""
|
||||
<%= render_slot(@type_block, @type) %>
|
||||
{render_slot(@type_block, @type)}
|
||||
"""}
|
||||
end
|
||||
|
||||
@ -196,7 +196,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
<%= if @last_used_date do %>
|
||||
<.date id={"#{@id}-last-used-date"} date={@last_used_date} />
|
||||
<% else %>
|
||||
<%= gettext("Never used") %>
|
||||
{gettext("Never used")}
|
||||
<% end %>
|
||||
"""}
|
||||
end
|
||||
@ -205,7 +205,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
assigns = %{range: range, pack: pack}
|
||||
|
||||
~H"""
|
||||
<%= render_slot(@range, @pack) %>
|
||||
{render_slot(@range, @pack)}
|
||||
"""
|
||||
end
|
||||
|
||||
@ -222,7 +222,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
assigns = %{actions: actions, pack: pack}
|
||||
|
||||
~H"""
|
||||
<%= render_slot(@actions, @pack) %>
|
||||
{render_slot(@actions, @pack)}
|
||||
"""
|
||||
end
|
||||
|
||||
@ -243,7 +243,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
|
||||
{container_name,
|
||||
~H"""
|
||||
<%= render_slot(@container_block, {@pack, @container}) %>
|
||||
{render_slot(@container_block, {@pack, @container})}
|
||||
"""}
|
||||
end
|
||||
|
||||
|
@ -99,7 +99,7 @@ defmodule CanneryWeb.Components.ShotRecordTableComponent do
|
||||
{pack.type.name,
|
||||
~H"""
|
||||
<.link navigate={~p"/ammo/show/#{@pack}"} class="link">
|
||||
<%= @pack.type.name %>
|
||||
{@pack.type.name}
|
||||
</.link>
|
||||
"""}
|
||||
end
|
||||
@ -115,7 +115,7 @@ defmodule CanneryWeb.Components.ShotRecordTableComponent do
|
||||
assigns = %{actions: actions, shot_record: shot_record}
|
||||
|
||||
~H"""
|
||||
<%= render_slot(@actions, @shot_record) %>
|
||||
{render_slot(@actions, @shot_record)}
|
||||
"""
|
||||
end
|
||||
|
||||
|
@ -76,7 +76,7 @@ defmodule CanneryWeb.Components.TableComponent do
|
||||
sort_mode: initial_sort_mode
|
||||
)
|
||||
|> assign_new(:row_class, fn -> "bg-white" end)
|
||||
|> assign_new(:alternate_row_class, fn -> "bg-gray-200" end)
|
||||
|> assign_new(:alternate_row_class, fn -> "bg-zinc-200" end)
|
||||
|
||||
{:ok, socket}
|
||||
end
|
||||
|
@ -1,4 +1,4 @@
|
||||
<div id={@id} class="w-full overflow-x-auto border border-gray-600 rounded-lg shadow-lg bg-white">
|
||||
<div id={@id} class="w-full overflow-x-auto border border-zinc-600 rounded-lg shadow-lg bg-white">
|
||||
<table class="min-w-full table-auto text-center bg-white">
|
||||
<thead class="border-b border-primary-600">
|
||||
<tr>
|
||||
@ -12,7 +12,7 @@
|
||||
phx-target={@myself}
|
||||
>
|
||||
<i class="w-0 float-right fas fa-sm fa-chevron-up opacity-0"></i>
|
||||
<span class={if @last_sort_key == key, do: "underline"}><%= label %></span>
|
||||
<span class={if @last_sort_key == key, do: "underline"}>{label}</span>
|
||||
<%= if @last_sort_key == key do %>
|
||||
<%= case @sort_mode do %>
|
||||
<% :asc -> %>
|
||||
@ -27,7 +27,7 @@
|
||||
</th>
|
||||
<% else %>
|
||||
<th class={["p-2 cursor-not-allowed", column[:class]]}>
|
||||
<%= label %>
|
||||
{label}
|
||||
</th>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@ -41,9 +41,9 @@
|
||||
<td :for={%{key: key} = value <- @columns} class={["p-2", value[:class]]}>
|
||||
<%= case values |> Map.get(key) do %>
|
||||
<% {_custom_sort_value, value} -> %>
|
||||
<%= value %>
|
||||
{value}
|
||||
<% value -> %>
|
||||
<%= value %>
|
||||
{value}
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -278,7 +278,7 @@ defmodule CanneryWeb.Components.TypeTableComponent do
|
||||
{type_name,
|
||||
~H"""
|
||||
<.link navigate={~p"/type/#{@id}"} class="link">
|
||||
<%= @name %>
|
||||
{@name}
|
||||
</.link>
|
||||
"""}
|
||||
end
|
||||
@ -287,7 +287,7 @@ defmodule CanneryWeb.Components.TypeTableComponent do
|
||||
assigns = %{actions: actions, type: type}
|
||||
|
||||
~H"""
|
||||
<%= render_slot(@actions, @type) %>
|
||||
{render_slot(@actions, @type)}
|
||||
"""
|
||||
end
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>
|
||||
<%= dgettext("errors", "Error") %> | <%= gettext("Cannery") %>
|
||||
{dgettext("errors", "Error")} | {gettext("Cannery")}
|
||||
</title>
|
||||
<link rel="stylesheet" href="/css/app.css" />
|
||||
<script defer type="text/javascript" src="/js/app.js">
|
||||
@ -19,13 +19,13 @@
|
||||
<div class="pb-8 w-full flex flex-col justify-center items-center text-center">
|
||||
<div class="p-8 sm:p-16 w-full flex flex-col justify-center items-center space-y-4 max-w-3xl">
|
||||
<h1 class="title text-primary-600 text-3xl">
|
||||
<%= @error_string %>
|
||||
{@error_string}
|
||||
</h1>
|
||||
|
||||
<hr class="w-full hr" />
|
||||
|
||||
<.link href={~p"/"} class="link title text-primary-600 text-lg">
|
||||
<%= dgettext("errors", "Go back home") %>
|
||||
{dgettext("errors", "Go back home")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="title text-primary-600 text-xl">
|
||||
<%= dgettext("actions", "Resend confirmation instructions") %>
|
||||
{dgettext("actions", "Resend confirmation instructions")}
|
||||
</h1>
|
||||
|
||||
<.form
|
||||
@ -10,22 +10,22 @@
|
||||
action={~p"/users/confirm"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
|
||||
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
|
||||
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
|
||||
{email_input(f, :email, required: true, class: "input input-primary col-span-2")}
|
||||
|
||||
<%= submit(dgettext("actions", "Resend confirmation instructions"),
|
||||
{submit(dgettext("actions", "Resend confirmation instructions"),
|
||||
class: "mx-auto btn btn-primary col-span-3"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex flex-row justify-center items-center space-x-4">
|
||||
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Register") %>
|
||||
{dgettext("actions", "Register")}
|
||||
</.link>
|
||||
<.link href={~p"/users/log_in"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Log in") %>
|
||||
{dgettext("actions", "Log in")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="title text-primary-600 text-xl">
|
||||
<%= dgettext("actions", "Register") %>
|
||||
{dgettext("actions", "Register")}
|
||||
</h1>
|
||||
|
||||
<.form
|
||||
@ -10,23 +10,23 @@
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<p :if={@changeset.action && not @changeset.valid?} class="alert alert-danger col-span-3">
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
|
||||
</p>
|
||||
|
||||
<%= if @invite_token do %>
|
||||
<%= hidden_input(f, :invite_token, value: @invite_token) %>
|
||||
{hidden_input(f, :invite_token, value: @invite_token)}
|
||||
<% end %>
|
||||
|
||||
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
|
||||
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :email, "col-span-3") %>
|
||||
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
|
||||
{email_input(f, :email, required: true, class: "input input-primary col-span-2")}
|
||||
{error_tag(f, :email, "col-span-3")}
|
||||
|
||||
<%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %>
|
||||
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :password, "col-span-3") %>
|
||||
{label(f, :password, gettext("Password"), class: "title text-lg text-primary-600")}
|
||||
{password_input(f, :password, required: true, class: "input input-primary col-span-2")}
|
||||
{error_tag(f, :password, "col-span-3")}
|
||||
|
||||
<%= label(f, :locale, gettext("Language"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(
|
||||
{label(f, :locale, gettext("Language"), class: "title text-lg text-primary-600")}
|
||||
{select(
|
||||
f,
|
||||
:locale,
|
||||
[
|
||||
@ -36,20 +36,20 @@
|
||||
{"Español", "es"}
|
||||
],
|
||||
class: "input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :locale) %>
|
||||
)}
|
||||
{error_tag(f, :locale)}
|
||||
|
||||
<%= submit(dgettext("actions", "Register"), class: "mx-auto btn btn-primary col-span-3") %>
|
||||
{submit(dgettext("actions", "Register"), class: "mx-auto btn btn-primary col-span-3")}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex flex-row justify-center items-center space-x-4">
|
||||
<.link href={~p"/users/log_in"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Log in") %>
|
||||
{dgettext("actions", "Log in")}
|
||||
</.link>
|
||||
<.link href={~p"/users/reset_password"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Forgot your password?") %>
|
||||
{dgettext("actions", "Forgot your password?")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="title text-primary-600 text-xl">
|
||||
<%= dgettext("actions", "Reset password") %>
|
||||
{dgettext("actions", "Reset password")}
|
||||
</h1>
|
||||
|
||||
<.form
|
||||
@ -10,35 +10,35 @@
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<p :if={@changeset.action && not @changeset.valid?} class="alert alert-danger col-span-3">
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
|
||||
</p>
|
||||
|
||||
<%= label(f, :password, gettext("New password"), class: "title text-lg text-primary-600") %>
|
||||
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :password, "col-span-3") %>
|
||||
{label(f, :password, gettext("New password"), class: "title text-lg text-primary-600")}
|
||||
{password_input(f, :password, required: true, class: "input input-primary col-span-2")}
|
||||
{error_tag(f, :password, "col-span-3")}
|
||||
|
||||
<%= label(f, :password_confirmation, gettext("Confirm new password"),
|
||||
{label(f, :password_confirmation, gettext("Confirm new password"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= password_input(f, :password_confirmation,
|
||||
)}
|
||||
{password_input(f, :password_confirmation,
|
||||
required: true,
|
||||
class: "input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :password_confirmation, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :password_confirmation, "col-span-3")}
|
||||
|
||||
<%= submit(dgettext("actions", "Reset password"),
|
||||
{submit(dgettext("actions", "Reset password"),
|
||||
class: "mx-auto btn btn-primary col-span-3"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex flex-row justify-center items-center space-x-4">
|
||||
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Register") %>
|
||||
{dgettext("actions", "Register")}
|
||||
</.link>
|
||||
<.link href={~p"/users/log_in"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Log in") %>
|
||||
{dgettext("actions", "Log in")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="title text-primary-600 text-xl">
|
||||
<%= dgettext("actions", "Forgot your password?") %>
|
||||
{dgettext("actions", "Forgot your password?")}
|
||||
</h1>
|
||||
|
||||
<.form
|
||||
@ -10,22 +10,22 @@
|
||||
action={~p"/users/reset_password"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
|
||||
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
|
||||
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
|
||||
{email_input(f, :email, required: true, class: "input input-primary col-span-2")}
|
||||
|
||||
<%= submit(dgettext("actions", "Send instructions to reset password"),
|
||||
{submit(dgettext("actions", "Send instructions to reset password"),
|
||||
class: "mx-auto btn btn-primary col-span-3"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex flex-row justify-center items-center space-x-4">
|
||||
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Register") %>
|
||||
{dgettext("actions", "Register")}
|
||||
</.link>
|
||||
<.link href={~p"/users/log_in"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Log in") %>
|
||||
{dgettext("actions", "Log in")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="title text-primary-600 text-xl">
|
||||
<%= dgettext("actions", "Log in") %>
|
||||
{dgettext("actions", "Log in")}
|
||||
</h1>
|
||||
|
||||
<.form
|
||||
@ -11,39 +11,39 @@
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<p :if={@error_message} class="alert alert-danger col-span-3">
|
||||
<%= @error_message %>
|
||||
{@error_message}
|
||||
</p>
|
||||
|
||||
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
|
||||
<%= email_input(f, :email,
|
||||
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
|
||||
{email_input(f, :email,
|
||||
autocomplete: :email,
|
||||
class: "input input-primary col-span-2",
|
||||
required: true
|
||||
) %>
|
||||
)}
|
||||
|
||||
<%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %>
|
||||
<%= password_input(f, :password,
|
||||
{label(f, :password, gettext("Password"), class: "title text-lg text-primary-600")}
|
||||
{password_input(f, :password,
|
||||
autocomplete: "current-password",
|
||||
class: "input input-primary col-span-2",
|
||||
required: true
|
||||
) %>
|
||||
)}
|
||||
|
||||
<%= label(f, :remember_me, gettext("Keep me logged in for 60 days"),
|
||||
{label(f, :remember_me, gettext("Keep me logged in for 60 days"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= checkbox(f, :remember_me, class: "checkbox col-span-2") %>
|
||||
)}
|
||||
{checkbox(f, :remember_me, class: "checkbox col-span-2")}
|
||||
|
||||
<%= submit(dgettext("actions", "Log in"), class: "mx-auto btn btn-primary col-span-3") %>
|
||||
{submit(dgettext("actions", "Log in"), class: "mx-auto btn btn-primary col-span-3")}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex flex-row justify-center items-center space-x-4">
|
||||
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Register") %>
|
||||
{dgettext("actions", "Register")}
|
||||
</.link>
|
||||
<.link href={~p"/users/reset_password"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Forgot your password?") %>
|
||||
{dgettext("actions", "Forgot your password?")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="mx-auto pb-8 max-w-3xl flex flex-col justify-center items-center text-right space-y-4">
|
||||
<h1 class="pb-4 title text-primary-600 text-2xl text-center">
|
||||
<%= gettext("Settings") %>
|
||||
<div class="flex flex-col justify-center items-center pb-8 mx-auto space-y-4 max-w-3xl text-right">
|
||||
<h1 class="pb-4 text-2xl text-center title text-primary-600">
|
||||
{gettext("Settings")}
|
||||
</h1>
|
||||
|
||||
<hr class="hr" />
|
||||
@ -9,40 +9,40 @@
|
||||
:let={f}
|
||||
for={@email_changeset}
|
||||
action={~p"/users/settings"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
class="flex flex-col justify-center items-center space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4"
|
||||
>
|
||||
<h3 class="title text-primary-600 text-lg text-center col-span-3">
|
||||
<%= dgettext("actions", "Change email") %>
|
||||
<h3 class="col-span-3 text-lg text-center title text-primary-600">
|
||||
{dgettext("actions", "Change email")}
|
||||
</h3>
|
||||
|
||||
<div
|
||||
:if={@email_changeset.action && not @email_changeset.valid?}
|
||||
class="alert alert-danger col-span-3"
|
||||
class="col-span-3 alert alert-danger"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
|
||||
</div>
|
||||
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_email") %>
|
||||
{hidden_input(f, :action, name: "action", value: "update_email")}
|
||||
|
||||
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
|
||||
<%= email_input(f, :email, required: true, class: "mx-2 my-1 input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :email, "col-span-3") %>
|
||||
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
|
||||
{email_input(f, :email, required: true, class: "mx-2 my-1 input input-primary col-span-2")}
|
||||
{error_tag(f, :email, "col-span-3")}
|
||||
|
||||
<%= label(f, :current_password, gettext("Current password"),
|
||||
{label(f, :current_password, gettext("Current password"),
|
||||
for: "current_password_for_email",
|
||||
class: "mx-2 my-1 title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= password_input(f, :current_password,
|
||||
)}
|
||||
{password_input(f, :current_password,
|
||||
required: true,
|
||||
name: "current_password",
|
||||
id: "current_password_for_email",
|
||||
class: "mx-2 my-1 input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :current_password, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :current_password, "col-span-3")}
|
||||
|
||||
<%= submit(dgettext("actions", "Change email"),
|
||||
{submit(dgettext("actions", "Change email"),
|
||||
class: "mx-auto btn btn-primary col-span-3"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
@ -51,52 +51,52 @@
|
||||
:let={f}
|
||||
for={@password_changeset}
|
||||
action={~p"/users/settings"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
class="flex flex-col justify-center items-center space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4"
|
||||
>
|
||||
<h3 class="title text-primary-600 text-lg text-center col-span-3">
|
||||
<%= dgettext("actions", "Change password") %>
|
||||
<h3 class="col-span-3 text-lg text-center title text-primary-600">
|
||||
{dgettext("actions", "Change password")}
|
||||
</h3>
|
||||
|
||||
<div
|
||||
:if={@password_changeset.action && not @password_changeset.valid?}
|
||||
class="alert alert-danger col-span-3"
|
||||
class="col-span-3 alert alert-danger"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
|
||||
</div>
|
||||
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_password") %>
|
||||
{hidden_input(f, :action, name: "action", value: "update_password")}
|
||||
|
||||
<%= label(f, :password, gettext("New password"), class: "title text-lg text-primary-600") %>
|
||||
<%= password_input(f, :password,
|
||||
{label(f, :password, gettext("New password"), class: "title text-lg text-primary-600")}
|
||||
{password_input(f, :password,
|
||||
required: true,
|
||||
class: "mx-2 my-1 input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :password, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :password, "col-span-3")}
|
||||
|
||||
<%= label(f, :password_confirmation, gettext("Confirm new password"),
|
||||
{label(f, :password_confirmation, gettext("Confirm new password"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= password_input(f, :password_confirmation,
|
||||
)}
|
||||
{password_input(f, :password_confirmation,
|
||||
required: true,
|
||||
class: "mx-2 my-1 input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :password_confirmation, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :password_confirmation, "col-span-3")}
|
||||
|
||||
<%= label(f, :current_password, gettext("Current password"),
|
||||
{label(f, :current_password, gettext("Current password"),
|
||||
for: "current_password_for_password",
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= password_input(f, :current_password,
|
||||
)}
|
||||
{password_input(f, :current_password,
|
||||
required: true,
|
||||
name: "current_password",
|
||||
id: "current_password_for_password",
|
||||
class: "mx-2 my-1 input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :current_password, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :current_password, "col-span-3")}
|
||||
|
||||
<%= submit(dgettext("actions", "Change password"),
|
||||
{submit(dgettext("actions", "Change password"),
|
||||
class: "mx-auto btn btn-primary col-span-3"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
@ -105,22 +105,22 @@
|
||||
:let={f}
|
||||
for={@locale_changeset}
|
||||
action={~p"/users/settings"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
class="flex flex-col justify-center items-center space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4"
|
||||
>
|
||||
<%= label(f, :locale, dgettext("actions", "Change Language"),
|
||||
{label(f, :locale, dgettext("actions", "Change Language"),
|
||||
class: "title text-primary-600 text-lg text-center col-span-3"
|
||||
) %>
|
||||
)}
|
||||
|
||||
<div
|
||||
:if={@locale_changeset.action && not @locale_changeset.valid?}
|
||||
class="alert alert-danger col-span-3"
|
||||
class="col-span-3 alert alert-danger"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
|
||||
</div>
|
||||
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_locale") %>
|
||||
{hidden_input(f, :action, name: "action", value: "update_locale")}
|
||||
|
||||
<%= select(
|
||||
{select(
|
||||
f,
|
||||
:locale,
|
||||
[
|
||||
@ -129,21 +129,21 @@
|
||||
{"Français", "fr"},
|
||||
{"Español", "es"}
|
||||
],
|
||||
class: "my-1 min-w-md input input-primary col-span-3"
|
||||
) %>
|
||||
<%= error_tag(f, :locale, "col-span-3") %>
|
||||
class: "my-1 min-w-20 input input-primary col-span-3"
|
||||
)}
|
||||
{error_tag(f, :locale, "col-span-3")}
|
||||
|
||||
<%= submit(dgettext("actions", "Change language"),
|
||||
{submit(dgettext("actions", "Change language"),
|
||||
class: "whitespace-nowrap mx-auto btn btn-primary col-span-3",
|
||||
data: [qa: dgettext("prompts", "Are you sure you want to change your language?")]
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex justify-center items-center">
|
||||
<.link href={~p"/export/json"} class="mx-4 my-2 btn btn-primary" target="_blank">
|
||||
<%= dgettext("actions", "Export Data as JSON") %>
|
||||
{dgettext("actions", "Export Data as JSON")}
|
||||
</.link>
|
||||
|
||||
<.link
|
||||
@ -152,7 +152,7 @@
|
||||
class="mx-4 my-2 btn btn-alert"
|
||||
data-confirm={dgettext("prompts", "Are you sure you want to delete your account?")}
|
||||
>
|
||||
<%= dgettext("actions", "Delete User") %>
|
||||
{dgettext("actions", "Delete User")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -4,7 +4,7 @@ defmodule CanneryWeb.ErrorHelpers do
|
||||
"""
|
||||
|
||||
use PhoenixHTMLHelpers
|
||||
import Phoenix.{Component, HTML.Form}
|
||||
import Phoenix.Component
|
||||
alias Ecto.Changeset
|
||||
alias Phoenix.{HTML.Form, LiveView.Rendered}
|
||||
|
||||
@ -19,10 +19,10 @@ defmodule CanneryWeb.ErrorHelpers do
|
||||
~H"""
|
||||
<span
|
||||
:for={error <- Keyword.get_values(@form.errors, @field)}
|
||||
:if={used_input?(@form[@field])}
|
||||
class={["invalid-feedback", @extra_class]}
|
||||
phx-feedback-for={input_name(@form, @field)}
|
||||
>
|
||||
<%= translate_error(error) %>
|
||||
{translate_error(error)}
|
||||
</span>
|
||||
"""
|
||||
end
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="flex flex-col justify-center items-center text-center space-y-8">
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h2>
|
||||
|
||||
<div class="flex flex-wrap justify-center items-center">
|
||||
@ -21,13 +21,13 @@
|
||||
)
|
||||
}
|
||||
>
|
||||
<%= tag.name %>
|
||||
{tag.name}
|
||||
<i class="fa-fw fa-sm fas fa-trash"></i>
|
||||
</.link>
|
||||
|
||||
<h2 :if={@container.tags |> Enum.empty?()} class="title text-xl text-primary-600">
|
||||
<%= gettext("No tags") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No tags")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@ -43,17 +43,17 @@
|
||||
phx-target={@myself}
|
||||
phx-submit="save"
|
||||
>
|
||||
<%= select(f, :tag_id, tag_options(@tags, @container),
|
||||
{select(f, :tag_id, tag_options(@tags, @container),
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "#{@id}-tag-select",
|
||||
phx_hook: "SlimSelect"
|
||||
) %>
|
||||
<%= error_tag(f, :tag_id, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :tag_id, "col-span-3 text-center")}
|
||||
|
||||
<%= submit(dgettext("actions", "Add"),
|
||||
{submit(dgettext("actions", "Add"),
|
||||
class: "mx-auto btn btn-primary",
|
||||
phx_disable_with: dgettext("prompts", "Adding...")
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
<% end %>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h2>
|
||||
<.form
|
||||
:let={f}
|
||||
@ -15,50 +15,50 @@
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
{changeset_errors(@changeset)}
|
||||
</div>
|
||||
|
||||
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :name,
|
||||
{label(f, :name, gettext("Name"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :name,
|
||||
class: "input input-primary col-span-2",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("My cool ammo can")
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :name, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :desc,
|
||||
{label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600")}
|
||||
{textarea(f, :desc,
|
||||
class: "input input-primary col-span-2",
|
||||
id: "container-form-desc",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("Metal ammo can with the anime girl sticker")
|
||||
) %>
|
||||
<%= error_tag(f, :desc, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :desc, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :type, gettext("Type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :type,
|
||||
{label(f, :type, gettext("Type"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :type,
|
||||
class: "input input-primary col-span-2",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Magazine, Clip, Ammo Box, etc")
|
||||
) %>
|
||||
<%= error_tag(f, :type, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :type, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :location, gettext("Location"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :location,
|
||||
{label(f, :location, gettext("Location"), class: "title text-lg text-primary-600")}
|
||||
{textarea(f, :location,
|
||||
class: "input input-primary col-span-2",
|
||||
id: "container-form-location",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("On the bookshelf")
|
||||
) %>
|
||||
<%= error_tag(f, :location, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :location, "col-span-3 text-center")}
|
||||
|
||||
<%= submit(dgettext("actions", "Save"),
|
||||
{submit(dgettext("actions", "Save"),
|
||||
class: "mx-auto btn btn-primary col-span-3",
|
||||
phx_disable_with: dgettext("prompts", "Saving...")
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -1,23 +1,23 @@
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Containers") %>
|
||||
{gettext("Containers")}
|
||||
</h1>
|
||||
|
||||
<%= if @containers |> Enum.empty?() and @search |> is_nil() do %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No containers") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No containers")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
|
||||
<.link patch={~p"/containers/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Add your first container!") %>
|
||||
{dgettext("actions", "Add your first container!")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link patch={~p"/containers/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "New Container") %>
|
||||
{dgettext("actions", "New Container")}
|
||||
</.link>
|
||||
|
||||
<div class="flex flex-col justify-center items-center space-y-4 w-full max-w-2xl sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
@ -26,26 +26,26 @@
|
||||
phx-submit="search"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
{text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search containers"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.toggle_button action="toggle_table" value={@view_table}>
|
||||
<span class="text-lg title text-primary-600">
|
||||
<%= gettext("View as table") %>
|
||||
{gettext("View as table")}
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
|
||||
<%= if @containers |> Enum.empty?() do %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No containers") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No containers")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
<% else %>
|
||||
<%= if @view_table do %>
|
||||
@ -57,16 +57,16 @@
|
||||
current_user={@current_user}
|
||||
>
|
||||
<:range :let={container}>
|
||||
<div class="flex justify-center items-center px-4 py-2 h-full min-w-20 flex-wrap">
|
||||
<div class="flex flex-wrap justify-center items-center px-4 py-2 h-full min-w-20">
|
||||
<button
|
||||
type="button"
|
||||
class="mx-2 my-1 text-sm btn btn-primary"
|
||||
phx-click="toggle_staged"
|
||||
phx-value-container_id={container.id}
|
||||
>
|
||||
<%= if container.staged,
|
||||
{if container.staged,
|
||||
do: dgettext("actions", "Unstage"),
|
||||
else: dgettext("actions", "Stage") %>
|
||||
else: dgettext("actions", "Stage")}
|
||||
</button>
|
||||
</div>
|
||||
</:range>
|
||||
|
@ -1,31 +1,31 @@
|
||||
<div class="flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= @container.name %>
|
||||
{@container.name}
|
||||
</h1>
|
||||
|
||||
<span :if={@container.desc} class="text-lg rounded-lg title">
|
||||
<%= gettext("Description:") %>
|
||||
<%= @container.desc %>
|
||||
{gettext("Description:")}
|
||||
{@container.desc}
|
||||
</span>
|
||||
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Type:") %>
|
||||
<%= @container.type %>
|
||||
{gettext("Type:")}
|
||||
{@container.type}
|
||||
</span>
|
||||
|
||||
<span :if={@container.location} class="text-lg rounded-lg title">
|
||||
<%= gettext("Location:") %>
|
||||
<%= @container.location %>
|
||||
{gettext("Location:")}
|
||||
{@container.location}
|
||||
</span>
|
||||
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Packs:") %>
|
||||
<%= @packs_count %>
|
||||
{gettext("Packs:")}
|
||||
{@packs_count}
|
||||
</span>
|
||||
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Rounds:") %>
|
||||
<%= @round_count %>
|
||||
{gettext("Rounds:")}
|
||||
{@round_count}
|
||||
</span>
|
||||
|
||||
<div class="flex justify-center items-center space-x-4 text-primary-600">
|
||||
@ -54,9 +54,9 @@
|
||||
|
||||
<div class="flex flex-wrap justify-center items-center text-primary-600">
|
||||
<button type="button" class="mx-4 my-2 btn btn-primary" phx-click="toggle_staged">
|
||||
<%= if @container.staged,
|
||||
{if @container.staged,
|
||||
do: dgettext("actions", "Unstage from range"),
|
||||
else: dgettext("actions", "Stage for range") %>
|
||||
else: dgettext("actions", "Stage for range")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@ -65,12 +65,12 @@
|
||||
<%= if @container.tags |> Enum.empty?() do %>
|
||||
<div class="flex flex-row justify-center items-center space-x-4">
|
||||
<h2 class="text-lg title text-primary-600">
|
||||
<%= gettext("No tags for this container") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No tags for this container")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
|
||||
<.link patch={~p"/container/edit_tags/#{@container}"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Why not add one?") %>
|
||||
{dgettext("actions", "Why not add one?")}
|
||||
</.link>
|
||||
</div>
|
||||
<% else %>
|
||||
@ -96,9 +96,9 @@
|
||||
phx-submit="change_class"
|
||||
class="flex items-center"
|
||||
>
|
||||
<%= label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center") %>
|
||||
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
|
||||
|
||||
<%= select(
|
||||
{select(
|
||||
f,
|
||||
:class,
|
||||
[
|
||||
@ -107,14 +107,14 @@
|
||||
{gettext("Shotgun"), :shotgun},
|
||||
{gettext("Pistol"), :pistol}
|
||||
],
|
||||
class: "mx-2 my-1 min-w-md input input-primary",
|
||||
class: "mx-2 my-1 min-w-20 input input-primary",
|
||||
value: @class
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.toggle_button action="toggle_table" value={@view_table}>
|
||||
<span class="text-lg title text-primary-600">
|
||||
<%= gettext("View as table") %>
|
||||
{gettext("View as table")}
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
@ -122,7 +122,7 @@
|
||||
<div class="p-4 w-full">
|
||||
<%= if @packs |> Enum.empty?() do %>
|
||||
<h2 class="mx-4 text-lg text-center title text-primary-600">
|
||||
<%= gettext("No ammo in this container") %>
|
||||
{gettext("No ammo in this container")}
|
||||
</h2>
|
||||
<% else %>
|
||||
<%= if @view_table do %>
|
||||
@ -135,7 +135,7 @@
|
||||
>
|
||||
<:type :let={%{name: type_name} = type}>
|
||||
<.link navigate={~p"/type/#{type}"} class="link">
|
||||
<%= type_name %>
|
||||
{type_name}
|
||||
</.link>
|
||||
</:type>
|
||||
<:actions :let={%{count: pack_count} = pack}>
|
||||
|
@ -7,11 +7,11 @@
|
||||
/>
|
||||
|
||||
<h1 class="title text-primary-600 text-2xl">
|
||||
<%= gettext("Welcome to Cannery") %>
|
||||
{gettext("Welcome to Cannery")}
|
||||
</h1>
|
||||
|
||||
<h2 class="title text-primary-600 text-lg">
|
||||
<%= gettext("The self-hosted firearm tracker website") %>
|
||||
{gettext("The self-hosted firearm tracker website")}
|
||||
</h2>
|
||||
|
||||
<hr class="hr" />
|
||||
@ -19,29 +19,29 @@
|
||||
<ul class="flex flex-col space-y-4 text-center">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<%= gettext("Easy to Use:") %>
|
||||
{gettext("Easy to Use:")}
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"Cannery lets you easily keep an eye on your ammo levels before and after range day"
|
||||
) %>
|
||||
)}
|
||||
</p>
|
||||
</li>
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<%= gettext("Secure:") %>
|
||||
{gettext("Secure:")}
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext("Self-host your own instance, or use an instance from someone you trust.") %>
|
||||
<%= gettext("Your data stays with you, period") %>
|
||||
{gettext("Self-host your own instance, or use an instance from someone you trust.")}
|
||||
{gettext("Your data stays with you, period")}
|
||||
</p>
|
||||
</li>
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<%= gettext("Simple:") %>
|
||||
{gettext("Simple:")}
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext("Access from any internet-capable device") %>
|
||||
{gettext("Access from any internet-capable device")}
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
@ -50,17 +50,17 @@
|
||||
|
||||
<ul class="flex flex-col space-y-2 text-center justify-center">
|
||||
<h2 class="title text-primary-600 text-lg">
|
||||
<%= gettext("Instance Information") %>
|
||||
{gettext("Instance Information")}
|
||||
</h2>
|
||||
|
||||
<li class="flex flex-col justify-center space-x-2">
|
||||
<b>
|
||||
<%= gettext("Admins:") %>
|
||||
{gettext("Admins:")}
|
||||
</b>
|
||||
<p>
|
||||
<%= if @admins |> Enum.empty?() do %>
|
||||
<.link href={~p"/users/register"} class="hover:underline">
|
||||
<%= dgettext("prompts", "Register to setup Cannery") %>
|
||||
{dgettext("prompts", "Register to setup Cannery")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<div class="flex flex-wrap justify-center space-x-2">
|
||||
@ -69,7 +69,7 @@
|
||||
class="hover:underline"
|
||||
href={"mailto:#{email}"}
|
||||
>
|
||||
<%= email %>
|
||||
{email}
|
||||
</.link>
|
||||
</div>
|
||||
<% end %>
|
||||
@ -77,17 +77,17 @@
|
||||
</li>
|
||||
|
||||
<li class="flex flex-row justify-center space-x-2">
|
||||
<b><%= gettext("Registration:") %></b>
|
||||
<b>{gettext("Registration:")}</b>
|
||||
<p>
|
||||
<%= case Accounts.registration_mode() do
|
||||
{case Accounts.registration_mode() do
|
||||
:public -> gettext("Public Signups")
|
||||
:invite_only -> gettext("Invite Only")
|
||||
end %>
|
||||
end}
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li class="flex flex-row justify-center items-center space-x-2">
|
||||
<b><%= gettext("Version:") %></b>
|
||||
<b>{gettext("Version:")}</b>
|
||||
<.link
|
||||
href="https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md"
|
||||
class="flex flex-row justify-center items-center space-x-2 hover:underline"
|
||||
@ -95,7 +95,7 @@
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<p>
|
||||
<%= @version %>
|
||||
{@version}
|
||||
</p>
|
||||
<i class="fas fa-md fa-info-circle"></i>
|
||||
</.link>
|
||||
@ -106,7 +106,7 @@
|
||||
|
||||
<ul class="flex flex-col space-y-2 text-center justify-center">
|
||||
<h2 class="title text-primary-600 text-lg">
|
||||
<%= gettext("Get involved!") %>
|
||||
{gettext("Get involved!")}
|
||||
</h2>
|
||||
|
||||
<li class="flex flex-col justify-center space-x-2">
|
||||
@ -116,7 +116,7 @@
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<p><%= gettext("View the source code") %></p>
|
||||
<p>{gettext("View the source code")}</p>
|
||||
<i class="fas fa-md fa-code"></i>
|
||||
</.link>
|
||||
</li>
|
||||
@ -127,7 +127,7 @@
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<p><%= gettext("Help translate") %></p>
|
||||
<p>{gettext("Help translate")}</p>
|
||||
<i class="fas fa-md fa-language"></i>
|
||||
</.link>
|
||||
</li>
|
||||
@ -138,7 +138,7 @@
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<p><%= gettext("Report bugs or request features") %></p>
|
||||
<p>{gettext("Report bugs or request features")}</p>
|
||||
<i class="fas fa-md fa-spider"></i>
|
||||
</.link>
|
||||
</li>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h2>
|
||||
<.form
|
||||
:let={f}
|
||||
@ -15,29 +15,29 @@
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
{changeset_errors(@changeset)}
|
||||
</div>
|
||||
|
||||
<%= label(f, :name, gettext("Name"),
|
||||
{label(f, :name, gettext("Name"),
|
||||
class: "title text-lg text-primary-600",
|
||||
maxlength: 255
|
||||
) %>
|
||||
<%= text_input(f, :name,
|
||||
)}
|
||||
{text_input(f, :name,
|
||||
class: "input input-primary col-span-2",
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :name, "col-span-3")}
|
||||
|
||||
<%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :uses_left, "col-span-3") %>
|
||||
{label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2")}
|
||||
{error_tag(f, :uses_left, "col-span-3")}
|
||||
<span class="col-span-3 text-primary-400 italic text-center">
|
||||
<%= gettext(~s/Leave "Uses left" blank to make invite unlimited/) %>
|
||||
{gettext(~s/Leave "Uses left" blank to make invite unlimited/)}
|
||||
</span>
|
||||
|
||||
<%= submit(dgettext("actions", "Save"),
|
||||
{submit(dgettext("actions", "Save"),
|
||||
class: "mx-auto btn btn-primary col-span-3",
|
||||
phx_disable_with: dgettext("prompts", "Saving...")
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -1,20 +1,20 @@
|
||||
<div class="flex flex-col justify-center items-center mx-auto space-y-4 max-w-3xl">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Invites") %>
|
||||
{gettext("Invites")}
|
||||
</h1>
|
||||
|
||||
<%= if @invites |> Enum.empty?() do %>
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No invites") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No invites")}
|
||||
{display_emoji("😔")}
|
||||
</h1>
|
||||
|
||||
<.link patch={~p"/invites/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Invite someone new!") %>
|
||||
{dgettext("actions", "Invite someone new!")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link patch={~p"/invites/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Create Invite") %>
|
||||
{dgettext("actions", "Create Invite")}
|
||||
</.link>
|
||||
<% end %>
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
dgettext("actions", "Copy invite link for %{invite_name}", invite_name: invite.name)
|
||||
}
|
||||
>
|
||||
<%= dgettext("actions", "Copy to clipboard") %>
|
||||
{dgettext("actions", "Copy to clipboard")}
|
||||
</button>
|
||||
</form>
|
||||
</:code_actions>
|
||||
@ -72,7 +72,7 @@
|
||||
phx-click={if invite.disabled_at, do: "enable_invite", else: "disable_invite"}
|
||||
phx-value-id={invite.id}
|
||||
>
|
||||
<%= if invite.disabled_at, do: gettext("Enable"), else: gettext("Disable") %>
|
||||
{if invite.disabled_at, do: gettext("Enable"), else: gettext("Disable")}
|
||||
</.link>
|
||||
|
||||
<.link
|
||||
@ -87,7 +87,7 @@
|
||||
)
|
||||
}
|
||||
>
|
||||
<%= dgettext("actions", "Set Unlimited") %>
|
||||
{dgettext("actions", "Set Unlimited")}
|
||||
</.link>
|
||||
</.invite_card>
|
||||
</div>
|
||||
@ -96,7 +96,7 @@
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="text-2xl title text-primary-600">
|
||||
<%= gettext("Admins") %>
|
||||
{gettext("Admins")}
|
||||
</h1>
|
||||
|
||||
<div class="flex flex-col justify-center items-stretch space-y-4">
|
||||
@ -124,7 +124,7 @@
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="text-2xl title text-primary-600">
|
||||
<%= gettext("Users") %>
|
||||
{gettext("Users")}
|
||||
</h1>
|
||||
|
||||
<div class="flex flex-col justify-center items-stretch space-y-4">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h2>
|
||||
|
||||
<.form
|
||||
@ -16,11 +16,11 @@
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
{changeset_errors(@changeset)}
|
||||
</div>
|
||||
|
||||
<%= label(f, :class, gettext("Class"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(
|
||||
{label(f, :class, gettext("Class"), class: "title text-lg text-primary-600")}
|
||||
{select(
|
||||
f,
|
||||
:class,
|
||||
[
|
||||
@ -31,86 +31,86 @@
|
||||
],
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
value: @class
|
||||
) %>
|
||||
<%= error_tag(f, :class, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :class, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :type_id, gettext("Type"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(f, :type_id, type_options(@types, @class),
|
||||
{label(f, :type_id, gettext("Type"), class: "title text-lg text-primary-600")}
|
||||
{select(f, :type_id, type_options(@types, @class),
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "pack-form-type-select",
|
||||
phx_hook: "SlimSelect"
|
||||
) %>
|
||||
<%= error_tag(f, :type_id, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :type_id, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :count, gettext("Count"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :count,
|
||||
{label(f, :count, gettext("Count"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :count,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
min: 0
|
||||
) %>
|
||||
<%= error_tag(f, :count, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :count, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :price_paid, gettext("Price paid"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :price_paid,
|
||||
{label(f, :price_paid, gettext("Price paid"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :price_paid,
|
||||
step: 0.01,
|
||||
class: "text-center col-span-2 input input-primary"
|
||||
) %>
|
||||
<%= error_tag(f, :price_paid, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :price_paid, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :lot_number, gettext("Lot number"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :lot_number,
|
||||
{label(f, :lot_number, gettext("Lot number"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :lot_number,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :price_paid, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :price_paid, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :purchased_on, gettext("Purchased on"), class: "title text-lg text-primary-600") %>
|
||||
<%= date_input(f, :purchased_on,
|
||||
{label(f, :purchased_on, gettext("Purchased on"), class: "title text-lg text-primary-600")}
|
||||
{date_input(f, :purchased_on,
|
||||
class: "input input-primary col-span-2",
|
||||
phx_update: "ignore",
|
||||
value: @changeset |> Changeset.get_field(:purchased_on) || Date.utc_today()
|
||||
) %>
|
||||
<%= error_tag(f, :purchased_on, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :purchased_on, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :notes,
|
||||
{label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600")}
|
||||
{textarea(f, :notes,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "pack-form-notes",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore"
|
||||
) %>
|
||||
<%= error_tag(f, :notes, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :notes, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :container, gettext("Container"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(f, :container_id, container_options(@containers),
|
||||
{label(f, :container, gettext("Container"), class: "title text-lg text-primary-600")}
|
||||
{select(f, :container_id, container_options(@containers),
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "pack-form-container-select",
|
||||
phx_hook: "SlimSelect"
|
||||
) %>
|
||||
<%= error_tag(f, :container_id, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :container_id, "col-span-3 text-center")}
|
||||
|
||||
<%= case @action do %>
|
||||
<% action when action in [:new, :clone] -> %>
|
||||
<hr class="hr col-span-3" />
|
||||
|
||||
<%= label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :multiplier,
|
||||
{label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :multiplier,
|
||||
class: "text-center input input-primary",
|
||||
value: 1,
|
||||
phx_update: "ignore"
|
||||
) %>
|
||||
)}
|
||||
|
||||
<%= submit(dgettext("actions", "Create"),
|
||||
{submit(dgettext("actions", "Create"),
|
||||
phx_disable_with: dgettext("prompts", "Creating..."),
|
||||
class: "mx-auto btn btn-primary"
|
||||
) %>
|
||||
)}
|
||||
|
||||
<%= error_tag(f, :multiplier, "col-span-3 text-center") %>
|
||||
{error_tag(f, :multiplier, "col-span-3 text-center")}
|
||||
<% :edit -> %>
|
||||
<%= submit(dgettext("actions", "Save"),
|
||||
{submit(dgettext("actions", "Save"),
|
||||
phx_disable_with: dgettext("prompts", "Saving..."),
|
||||
class: "mx-auto col-span-3 btn btn-primary"
|
||||
) %>
|
||||
)}
|
||||
<% end %>
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -1,44 +1,44 @@
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Ammo") %>
|
||||
{gettext("Ammo")}
|
||||
</h1>
|
||||
|
||||
<%= cond do %>
|
||||
<% @containers_count == 0 -> %>
|
||||
<div class="flex justify-center items-center">
|
||||
<h2 class="m-2 title text-md text-primary-600">
|
||||
<%= dgettext("prompts", "You'll need to") %>
|
||||
{dgettext("prompts", "You'll need to")}
|
||||
</h2>
|
||||
|
||||
<.link navigate={~p"/containers/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "add a container first") %>
|
||||
{dgettext("actions", "add a container first")}
|
||||
</.link>
|
||||
</div>
|
||||
<% @types_count == 0 -> %>
|
||||
<div class="flex justify-center items-center">
|
||||
<h2 class="m-2 title text-md text-primary-600">
|
||||
<%= dgettext("prompts", "You'll need to") %>
|
||||
{dgettext("prompts", "You'll need to")}
|
||||
</h2>
|
||||
|
||||
<.link navigate={~p"/catalog/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "add a type first") %>
|
||||
{dgettext("actions", "add a type first")}
|
||||
</.link>
|
||||
</div>
|
||||
<% @packs_count == 0 -> %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No ammo") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No ammo")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
|
||||
<.link patch={~p"/ammo/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Add your first box!") %>
|
||||
{dgettext("actions", "Add your first box!")}
|
||||
</.link>
|
||||
<% true -> %>
|
||||
<.link patch={~p"/ammo/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Add Ammo") %>
|
||||
{dgettext("actions", "Add Ammo")}
|
||||
</.link>
|
||||
|
||||
<div class="flex flex-col justify-center items-center space-y-4 w-full max-w-2xl sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
@ -47,11 +47,9 @@
|
||||
phx-submit="change_class"
|
||||
class="flex items-center"
|
||||
>
|
||||
<%= label(f, :class, gettext("Class"),
|
||||
class: "title text-primary-600 text-lg text-center"
|
||||
) %>
|
||||
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
|
||||
|
||||
<%= select(
|
||||
{select(
|
||||
f,
|
||||
:class,
|
||||
[
|
||||
@ -60,9 +58,9 @@
|
||||
{gettext("Shotgun"), :shotgun},
|
||||
{gettext("Pistol"), :pistol}
|
||||
],
|
||||
class: "mx-2 my-1 min-w-md input input-primary",
|
||||
class: "mx-2 my-1 min-w-20 input input-primary",
|
||||
value: @class
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.form
|
||||
@ -73,26 +71,26 @@
|
||||
phx-submit="search"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
{text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search ammo"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.toggle_button action="toggle_show_used" value={@show_used}>
|
||||
<span class="text-lg title text-primary-600">
|
||||
<%= gettext("Show used") %>
|
||||
{gettext("Show used")}
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
|
||||
<%= if @packs |> Enum.empty?() do %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No Ammo") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No Ammo")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
<% else %>
|
||||
<.live_component
|
||||
@ -104,7 +102,7 @@
|
||||
>
|
||||
<:type :let={%{name: type_name} = type}>
|
||||
<.link navigate={~p"/type/#{type}"} class="link">
|
||||
<%= type_name %>
|
||||
{type_name}
|
||||
</.link>
|
||||
</:type>
|
||||
<:range :let={pack}>
|
||||
@ -113,18 +111,18 @@
|
||||
patch={~p"/ammo/add_shot_record/#{pack}"}
|
||||
class="mx-2 my-1 text-sm btn btn-primary"
|
||||
>
|
||||
<%= dgettext("actions", "Record shots") %>
|
||||
{dgettext("actions", "Record shots")}
|
||||
</.link>
|
||||
</div>
|
||||
</:range>
|
||||
<:container :let={{pack, %{name: container_name} = container}}>
|
||||
<div class="flex flex-wrap justify-center items-center px-4 py-2 h-full min-w-20">
|
||||
<.link navigate={~p"/container/#{container}"} class="mx-2 my-1 link">
|
||||
<%= container_name %>
|
||||
{container_name}
|
||||
</.link>
|
||||
|
||||
<.link patch={~p"/ammo/move/#{pack}"} class="mx-2 my-1 text-sm btn btn-primary">
|
||||
<%= dgettext("actions", "Move ammo") %>
|
||||
{dgettext("actions", "Move ammo")}
|
||||
</.link>
|
||||
</div>
|
||||
</:container>
|
||||
|
@ -1,47 +1,47 @@
|
||||
<div class="flex flex-col justify-center items-center mx-auto space-y-4 max-w-3xl">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= @pack.type.name %>
|
||||
{@pack.type.name}
|
||||
</h1>
|
||||
|
||||
<div class="flex flex-col justify-center items-center space-y-2">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Count:") %>
|
||||
<%= @pack.count %>
|
||||
{gettext("Count:")}
|
||||
{@pack.count}
|
||||
</span>
|
||||
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Original count:") %>
|
||||
<%= @original_count %>
|
||||
{gettext("Original count:")}
|
||||
{@original_count}
|
||||
</span>
|
||||
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Percentage left:") %>
|
||||
<%= gettext("%{percentage}%", percentage: @percentage_remaining) %>
|
||||
{gettext("Percentage left:")}
|
||||
{gettext("%{percentage}%", percentage: @percentage_remaining)}
|
||||
</span>
|
||||
|
||||
<%= if @pack.notes do %>
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Notes:") %>
|
||||
<%= @pack.notes %>
|
||||
{gettext("Notes:")}
|
||||
{@pack.notes}
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Purchased on:") %>
|
||||
{gettext("Purchased on:")}
|
||||
<.date id={"#{@pack.id}-purchased-on"} date={@pack.purchased_on} />
|
||||
</span>
|
||||
|
||||
<%= if @pack.price_paid do %>
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Original cost:") %>
|
||||
<%= gettext("$%{amount}", amount: display_currency(@pack.price_paid)) %>
|
||||
{gettext("Original cost:")}
|
||||
{gettext("$%{amount}", amount: display_currency(@pack.price_paid))}
|
||||
</span>
|
||||
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Current value:") %>
|
||||
<%= gettext("$%{amount}",
|
||||
{gettext("Current value:")}
|
||||
{gettext("$%{amount}",
|
||||
amount: display_currency(@pack.price_paid * @percentage_remaining / 100)
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
@ -49,7 +49,7 @@
|
||||
<div class="flex flex-col justify-center items-center">
|
||||
<div class="flex flex-wrap justify-center items-center text-primary-600">
|
||||
<.link navigate={~p"/type/#{@pack.type}"} class="mx-4 my-2 btn btn-primary">
|
||||
<%= dgettext("actions", "View in Catalog") %>
|
||||
{dgettext("actions", "View in Catalog")}
|
||||
</.link>
|
||||
|
||||
<.link
|
||||
@ -77,11 +77,11 @@
|
||||
|
||||
<div class="flex flex-wrap justify-center items-center text-primary-600">
|
||||
<.link patch={~p"/ammo/show/move/#{@pack}"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Move ammo") %>
|
||||
{dgettext("actions", "Move ammo")}
|
||||
</.link>
|
||||
|
||||
<.link patch={~p"/ammo/show/add_shot_record/#{@pack}"} class="mx-4 my-2 btn btn-primary">
|
||||
<%= dgettext("actions", "Record shots") %>
|
||||
{dgettext("actions", "Record shots")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
@ -91,12 +91,12 @@
|
||||
<div>
|
||||
<%= if @container do %>
|
||||
<h1 class="px-4 py-2 mb-4 text-xl text-center rounded-lg title">
|
||||
<%= gettext("Stored in") %>
|
||||
{gettext("Stored in")}
|
||||
</h1>
|
||||
|
||||
<.container_card container={@container} current_user={@current_user} />
|
||||
<% else %>
|
||||
<%= gettext("This ammo is not in a container") %>
|
||||
{gettext("This ammo is not in a container")}
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@ -104,7 +104,7 @@
|
||||
<hr class="mb-4 w-full" />
|
||||
|
||||
<h1 class="px-4 py-2 mb-4 text-xl text-center rounded-lg title">
|
||||
<%= gettext("Rounds used") %>
|
||||
{gettext("Rounds used")}
|
||||
</h1>
|
||||
|
||||
<.live_component
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h2>
|
||||
|
||||
<.form
|
||||
@ -16,35 +16,35 @@
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
{changeset_errors(@changeset)}
|
||||
</div>
|
||||
|
||||
<%= label(f, :count, gettext("Shots fired"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :count,
|
||||
{label(f, :count, gettext("Shots fired"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :count,
|
||||
min: 1,
|
||||
max: @shot_record.count + @pack.count,
|
||||
class: "input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :count, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :count, "col-span-3")}
|
||||
|
||||
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :notes,
|
||||
{label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600")}
|
||||
{textarea(f, :notes,
|
||||
class: "input input-primary col-span-2",
|
||||
id: "shot-record-form-notes",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("Really great weather")
|
||||
) %>
|
||||
<%= error_tag(f, :notes, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :notes, "col-span-3")}
|
||||
|
||||
<%= label(f, :date, gettext("Date"), class: "title text-lg text-primary-600") %>
|
||||
<%= date_input(f, :date, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :notes, "col-span-3") %>
|
||||
{label(f, :date, gettext("Date"), class: "title text-lg text-primary-600")}
|
||||
{date_input(f, :date, class: "input input-primary col-span-2")}
|
||||
{error_tag(f, :notes, "col-span-3")}
|
||||
|
||||
<%= submit(dgettext("actions", "Save"),
|
||||
{submit(dgettext("actions", "Save"),
|
||||
class: "mx-auto btn btn-primary col-span-3",
|
||||
phx_disable_with: dgettext("prompts", "Saving...")
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -1,20 +1,20 @@
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Range day") %>
|
||||
{gettext("Range day")}
|
||||
</h1>
|
||||
|
||||
<%= if @containers |> Enum.empty?() do %>
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No containers staged") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No containers staged")}
|
||||
{display_emoji("😔")}
|
||||
</h1>
|
||||
|
||||
<.link navigate={~p"/containers"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Why not get some ready to shoot?") %>
|
||||
{dgettext("actions", "Why not get some ready to shoot?")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link navigate={~p"/containers"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Stage containers") %>
|
||||
{dgettext("actions", "Stage containers")}
|
||||
</.link>
|
||||
|
||||
<div class="flex flex-row flex-wrap justify-center items-stretch w-full">
|
||||
@ -30,9 +30,9 @@
|
||||
phx-click="toggle_staged"
|
||||
phx-value-container_id={container_id}
|
||||
>
|
||||
<%= if container.staged,
|
||||
{if container.staged,
|
||||
do: dgettext("actions", "Unstage"),
|
||||
else: dgettext("actions", "Stage") %>
|
||||
else: dgettext("actions", "Stage")}
|
||||
</button>
|
||||
</div>
|
||||
</.container_card>
|
||||
@ -51,7 +51,7 @@
|
||||
container={Map.fetch!(@containers, container_id)}
|
||||
>
|
||||
<.link patch={~p"/range/add_shot_record/#{pack}"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Record shots") %>
|
||||
{dgettext("actions", "Record shots")}
|
||||
</.link>
|
||||
</.pack_card>
|
||||
</div>
|
||||
@ -61,12 +61,12 @@
|
||||
|
||||
<%= if @shot_record_count == 0 do %>
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No shots recorded") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No shots recorded")}
|
||||
{display_emoji("😔")}
|
||||
</h1>
|
||||
<% else %>
|
||||
<h1 class="text-2xl title text-primary-600">
|
||||
<%= gettext("Shot log") %>
|
||||
{gettext("Shot log")}
|
||||
</h1>
|
||||
|
||||
<canvas
|
||||
@ -80,10 +80,10 @@
|
||||
aria-label={gettext("Rounds shot chart")}
|
||||
role="img"
|
||||
>
|
||||
<%= dgettext("errors", "Your browser does not support the canvas element.") %>
|
||||
{dgettext("errors", "Your browser does not support the canvas element.")}
|
||||
</canvas>
|
||||
|
||||
<div class="flex flex-col justify-center items-center space-y-4 w-full max-w-2xl sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
@ -92,11 +92,9 @@
|
||||
phx-submit="change_class"
|
||||
class="flex items-center"
|
||||
>
|
||||
<%= label(f, :class, gettext("Class"),
|
||||
class: "title text-primary-600 text-lg text-center"
|
||||
) %>
|
||||
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
|
||||
|
||||
<%= select(
|
||||
{select(
|
||||
f,
|
||||
:class,
|
||||
[
|
||||
@ -105,9 +103,9 @@
|
||||
{gettext("Shotgun"), :shotgun},
|
||||
{gettext("Pistol"), :pistol}
|
||||
],
|
||||
class: "mx-2 my-1 min-w-md input input-primary",
|
||||
class: "mx-2 my-1 min-w-20 input input-primary",
|
||||
value: @class
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.form
|
||||
@ -118,13 +116,13 @@
|
||||
phx-submit="search"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
{text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search shot records"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.form
|
||||
@ -135,9 +133,9 @@
|
||||
phx-submit="change_dates"
|
||||
class="flex items-center"
|
||||
>
|
||||
<%= label(f, :dates_start, gettext("Dates"),
|
||||
{label(f, :dates_start, gettext("Dates"),
|
||||
class: "title text-primary-600 text-lg text-center"
|
||||
) %>
|
||||
)}
|
||||
|
||||
<.date_range name="dates" />
|
||||
</.form>
|
||||
@ -145,8 +143,8 @@
|
||||
|
||||
<%= if @shot_records |> Enum.empty?() do %>
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No shots recorded") %>
|
||||
<%= display_emoji("😔") %>
|
||||
{gettext("No shots recorded")}
|
||||
{display_emoji("😔")}
|
||||
</h1>
|
||||
<% else %>
|
||||
<.live_component
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h2>
|
||||
<.form
|
||||
:let={f}
|
||||
@ -15,32 +15,32 @@
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
{changeset_errors(@changeset)}
|
||||
</div>
|
||||
|
||||
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :name,
|
||||
{label(f, :name, gettext("Name"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :name,
|
||||
class: "input input-primary col-span-2",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3") %>
|
||||
)}
|
||||
{error_tag(f, :name, "col-span-3")}
|
||||
|
||||
<%= label(f, :bg_color, gettext("Background color"), class: "title text-lg text-primary-600") %>
|
||||
{label(f, :bg_color, gettext("Background color"), class: "title text-lg text-primary-600")}
|
||||
<span id="tag-bg-color-input" class="mx-auto col-span-2" phx-update="ignore">
|
||||
<%= color_input(f, :bg_color) %>
|
||||
{color_input(f, :bg_color)}
|
||||
</span>
|
||||
<%= error_tag(f, :bg_color, "col-span-3") %>
|
||||
{error_tag(f, :bg_color, "col-span-3")}
|
||||
|
||||
<%= label(f, :text_color, gettext("Text color"), class: "title text-lg text-primary-600") %>
|
||||
{label(f, :text_color, gettext("Text color"), class: "title text-lg text-primary-600")}
|
||||
<span id="tag-text-color-input" class="mx-auto col-span-2" phx-update="ignore">
|
||||
<%= color_input(f, :text_color) %>
|
||||
{color_input(f, :text_color)}
|
||||
</span>
|
||||
<%= error_tag(f, :text_color, "col-span-3") %>
|
||||
{error_tag(f, :text_color, "col-span-3")}
|
||||
|
||||
<%= submit(dgettext("actions", "Save"),
|
||||
{submit(dgettext("actions", "Save"),
|
||||
class: "mx-auto btn btn-primary col-span-3",
|
||||
phx_disable_with: dgettext("prompts", "Saving...")
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -1,47 +1,47 @@
|
||||
<div class="flex flex-col space-y-8 justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<%= gettext("Tags") %>
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
{gettext("Tags")}
|
||||
</h1>
|
||||
<p class="title text-md text-primary-600">
|
||||
<%= gettext("Tags can be added to your containers to help you organize") %>
|
||||
{gettext("Tags can be added to your containers to help you organize")}
|
||||
</p>
|
||||
<%= if @tags |> Enum.empty?() and @search |> is_nil() do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<%= gettext("No tags") %>
|
||||
<%= display_emoji("😔") %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
{gettext("No tags")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
|
||||
<.link patch={~p"/tags/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Make your first tag!") %>
|
||||
{dgettext("actions", "Make your first tag!")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link patch={~p"/tags/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "New Tag") %>
|
||||
{dgettext("actions", "New Tag")}
|
||||
</.link>
|
||||
|
||||
<div class="w-full flex flex-col sm:flex-row justify-center items-center space-y-4 sm:space-y-0 sm:space-x-4 max-w-2xl">
|
||||
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
as={:search}
|
||||
phx-change="search"
|
||||
phx-submit="search"
|
||||
class="grow flex items-center"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
{text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search tags"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
|
||||
<%= if @tags |> Enum.empty?() do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<%= gettext("No tags") %>
|
||||
<%= display_emoji("😔") %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
{gettext("No tags")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
<% else %>
|
||||
<div class="flex flex-row flex-wrap justify-center items-stretch">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2 class="mb-8 text-center title text-xl text-primary-600">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h2>
|
||||
<.form
|
||||
:let={f}
|
||||
@ -15,11 +15,11 @@
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
|
||||
</div>
|
||||
|
||||
<%= label(f, :class, gettext("Class"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(
|
||||
{label(f, :class, gettext("Class"), class: "title text-lg text-primary-600")}
|
||||
{select(
|
||||
f,
|
||||
:class,
|
||||
[
|
||||
@ -29,44 +29,44 @@
|
||||
],
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
) %>
|
||||
<%= error_tag(f, :class, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :class, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :name,
|
||||
{label(f, :name, gettext("Name"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :name,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :name, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :desc,
|
||||
{label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600")}
|
||||
{textarea(f, :desc,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "type-form-desc",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore"
|
||||
) %>
|
||||
<%= error_tag(f, :desc, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :desc, "col-span-3 text-center")}
|
||||
|
||||
<h2 class="text-center title text-lg text-primary-600 col-span-3">
|
||||
<%= gettext("Dimensions") %>
|
||||
{gettext("Dimensions")}
|
||||
</h2>
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
|
||||
<%= label(f, :cartridge, gettext("Cartridge"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :cartridge,
|
||||
{label(f, :cartridge, gettext("Cartridge"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :cartridge,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("5.56x46mm NATO")
|
||||
) %>
|
||||
<%= error_tag(f, :cartridge, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :cartridge, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :cartridge, value: nil) %>
|
||||
{hidden_input(f, :cartridge, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<%= label(
|
||||
{label(
|
||||
f,
|
||||
:caliber,
|
||||
if(Changeset.get_field(@changeset, :class) == :shotgun,
|
||||
@ -74,66 +74,62 @@
|
||||
else: gettext("Caliber")
|
||||
),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :caliber,
|
||||
)}
|
||||
{text_input(f, :caliber,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext(".223")
|
||||
) %>
|
||||
<%= error_tag(f, :caliber, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :caliber, "col-span-3 text-center")}
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) == :shotgun do %>
|
||||
<%= label(f, :unfired_length, gettext("Unfired shell length"),
|
||||
{label(f, :unfired_length, gettext("Unfired shell length"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :unfired_length,
|
||||
)}
|
||||
{text_input(f, :unfired_length,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :unfired_length, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :unfired_length, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :brass_height, gettext("Brass height"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :brass_height,
|
||||
{label(f, :brass_height, gettext("Brass height"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :brass_height,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :brass_height, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :brass_height, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :chamber_size, gettext("Chamber size"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :chamber_size,
|
||||
{label(f, :chamber_size, gettext("Chamber size"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :chamber_size,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :chamber_size, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :chamber_size, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :unfired_length, value: nil) %>
|
||||
<%= hidden_input(f, :brass_height, value: nil) %>
|
||||
<%= hidden_input(f, :chamber_size, value: nil) %>
|
||||
{hidden_input(f, :unfired_length, value: nil)}
|
||||
{hidden_input(f, :brass_height, value: nil)}
|
||||
{hidden_input(f, :chamber_size, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<h2 class="text-center title text-lg text-primary-600 col-span-3">
|
||||
<%= gettext("Projectile") %>
|
||||
{gettext("Projectile")}
|
||||
</h2>
|
||||
|
||||
<%= label(f, :grains, gettext("Grains"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :grains,
|
||||
{label(f, :grains, gettext("Grains"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :grains,
|
||||
step: "1",
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
min: 1
|
||||
) %>
|
||||
<%= error_tag(f, :grains, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :grains, "col-span-3 text-center")}
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
|
||||
<%= label f, :bullet_type, class: "flex title text-lg text-primary-600 space-x-2" do %>
|
||||
<p><%= gettext("Bullet type") %></p>
|
||||
<p>{gettext("Bullet type")}</p>
|
||||
|
||||
<.link
|
||||
href="https://shootersreference.com/reloadingdata/bullet_abbreviations/"
|
||||
@ -144,18 +140,18 @@
|
||||
<i class="fas fa-md fa-external-link-alt"></i>
|
||||
</.link>
|
||||
<% end %>
|
||||
<%= text_input(f, :bullet_type,
|
||||
{text_input(f, :bullet_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("FMJ")
|
||||
) %>
|
||||
<%= error_tag(f, :bullet_type, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :bullet_type, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :bullet_type, value: nil) %>
|
||||
{hidden_input(f, :bullet_type, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<%= label(
|
||||
{label(
|
||||
f,
|
||||
:bullet_core,
|
||||
if(Changeset.get_field(@changeset, :class) == :shotgun,
|
||||
@ -163,229 +159,225 @@
|
||||
else: gettext("Bullet core")
|
||||
),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :bullet_core,
|
||||
)}
|
||||
{text_input(f, :bullet_core,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Steel")
|
||||
) %>
|
||||
<%= error_tag(f, :bullet_core, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :bullet_core, "col-span-3 text-center")}
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
|
||||
<%= label(f, :jacket_type, gettext("Jacket type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :jacket_type,
|
||||
{label(f, :jacket_type, gettext("Jacket type"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :jacket_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Bimetal")
|
||||
) %>
|
||||
<%= error_tag(f, :jacket_type, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :jacket_type, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :jacket_type, value: nil) %>
|
||||
{hidden_input(f, :jacket_type, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<%= label(f, :case_material, gettext("Case material"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :case_material,
|
||||
{label(f, :case_material, gettext("Case material"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :case_material,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Brass")
|
||||
) %>
|
||||
<%= error_tag(f, :case_material, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :case_material, "col-span-3 text-center")}
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) == :shotgun do %>
|
||||
<%= label(f, :wadding, gettext("Wadding"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :wadding,
|
||||
{label(f, :wadding, gettext("Wadding"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :wadding,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :wadding, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :wadding, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :shot_type, gettext("Shot type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :shot_type,
|
||||
{label(f, :shot_type, gettext("Shot type"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :shot_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Target, bird, buck, etc")
|
||||
) %>
|
||||
<%= error_tag(f, :shot_type, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :shot_type, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :shot_material, gettext("Shot material"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :shot_material,
|
||||
{label(f, :shot_material, gettext("Shot material"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :shot_material,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :shot_material, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :shot_material, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :shot_size, gettext("Shot size"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :shot_size,
|
||||
{label(f, :shot_size, gettext("Shot size"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :shot_size,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :shot_size, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :shot_size, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :load_grains, gettext("Load grains"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :load_grains,
|
||||
{label(f, :load_grains, gettext("Load grains"), class: "title text-lg text-primary-600")}
|
||||
{number_input(f, :load_grains,
|
||||
step: "1",
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
min: 1
|
||||
) %>
|
||||
<%= error_tag(f, :load_grains, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :load_grains, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :shot_charge_weight, gettext("Shot charge weight"),
|
||||
{label(f, :shot_charge_weight, gettext("Shot charge weight"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :shot_charge_weight,
|
||||
)}
|
||||
{text_input(f, :shot_charge_weight,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :shot_charge_weight, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :shot_charge_weight, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :wadding, value: nil) %>
|
||||
<%= hidden_input(f, :shot_type, value: nil) %>
|
||||
<%= hidden_input(f, :shot_material, value: nil) %>
|
||||
<%= hidden_input(f, :shot_size, value: nil) %>
|
||||
<%= hidden_input(f, :load_grains, value: nil) %>
|
||||
<%= hidden_input(f, :shot_charge_weight, value: nil) %>
|
||||
{hidden_input(f, :wadding, value: nil)}
|
||||
{hidden_input(f, :shot_type, value: nil)}
|
||||
{hidden_input(f, :shot_material, value: nil)}
|
||||
{hidden_input(f, :shot_size, value: nil)}
|
||||
{hidden_input(f, :load_grains, value: nil)}
|
||||
{hidden_input(f, :shot_charge_weight, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<h2 class="text-center title text-lg text-primary-600 col-span-3">
|
||||
<%= gettext("Powder") %>
|
||||
{gettext("Powder")}
|
||||
</h2>
|
||||
|
||||
<%= label(f, :powder_type, gettext("Powder type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :powder_type,
|
||||
{label(f, :powder_type, gettext("Powder type"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :powder_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :powder_type, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :powder_type, "col-span-3 text-center")}
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
|
||||
<%= label(f, :powder_grains_per_charge, gettext("Powder grains per charge"),
|
||||
{label(f, :powder_grains_per_charge, gettext("Powder grains per charge"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= number_input(f, :powder_grains_per_charge,
|
||||
)}
|
||||
{number_input(f, :powder_grains_per_charge,
|
||||
step: "1",
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
min: 1
|
||||
) %>
|
||||
<%= error_tag(f, :powder_grains_per_charge, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :powder_grains_per_charge, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :powder_grains_per_charge, value: nil) %>
|
||||
{hidden_input(f, :powder_grains_per_charge, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<%= label(f, :pressure, gettext("Pressure"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :pressure,
|
||||
{label(f, :pressure, gettext("Pressure"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :pressure,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("+P")
|
||||
) %>
|
||||
<%= error_tag(f, :pressure, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :pressure, "col-span-3 text-center")}
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) == :shotgun do %>
|
||||
<%= label(f, :dram_equivalent, gettext("Dram equivalent"),
|
||||
{label(f, :dram_equivalent, gettext("Dram equivalent"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= text_input(f, :dram_equivalent,
|
||||
)}
|
||||
{text_input(f, :dram_equivalent,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :dram_equivalent, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :dram_equivalent, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :dram_equivalent, value: nil) %>
|
||||
{hidden_input(f, :dram_equivalent, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
|
||||
<%= label(f, :muzzle_velocity, gettext("Muzzle velocity"),
|
||||
{label(f, :muzzle_velocity, gettext("Muzzle velocity"),
|
||||
class: "title text-lg text-primary-600"
|
||||
) %>
|
||||
<%= number_input(f, :muzzle_velocity,
|
||||
)}
|
||||
{number_input(f, :muzzle_velocity,
|
||||
step: "1",
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
min: 1
|
||||
) %>
|
||||
<%= error_tag(f, :muzzle_velocity, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :muzzle_velocity, "col-span-3 text-center")}
|
||||
<% else %>
|
||||
<%= hidden_input(f, :muzzle_velocity, value: nil) %>
|
||||
{hidden_input(f, :muzzle_velocity, value: nil)}
|
||||
<% end %>
|
||||
|
||||
<h2 class="text-center title text-lg text-primary-600 col-span-3">
|
||||
<%= gettext("Primer") %>
|
||||
{gettext("Primer")}
|
||||
</h2>
|
||||
|
||||
<%= label(f, :primer_type, gettext("Primer type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :primer_type,
|
||||
{label(f, :primer_type, gettext("Primer type"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :primer_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Boxer")
|
||||
) %>
|
||||
<%= error_tag(f, :primer_type, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :primer_type, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :firing_type, gettext("Firing type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :firing_type,
|
||||
{label(f, :firing_type, gettext("Firing type"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :firing_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Centerfire")
|
||||
) %>
|
||||
<%= error_tag(f, :firing_type, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :firing_type, "col-span-3 text-center")}
|
||||
|
||||
<h2 class="text-center title text-lg text-primary-600 col-span-3">
|
||||
<%= gettext("Attributes") %>
|
||||
{gettext("Attributes")}
|
||||
</h2>
|
||||
|
||||
<%= label(f, :tracer, gettext("Tracer"), class: "title text-lg text-primary-600") %>
|
||||
<%= checkbox(f, :tracer, class: "text-center col-span-2 checkbox") %>
|
||||
<%= error_tag(f, :tracer, "col-span-3 text-center") %>
|
||||
{label(f, :tracer, gettext("Tracer"), class: "title text-lg text-primary-600")}
|
||||
{checkbox(f, :tracer, class: "text-center col-span-2 checkbox")}
|
||||
{error_tag(f, :tracer, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :incendiary, gettext("Incendiary"), class: "title text-lg text-primary-600") %>
|
||||
<%= checkbox(f, :incendiary, class: "text-center col-span-2 checkbox") %>
|
||||
<%= error_tag(f, :incendiary, "col-span-3 text-center") %>
|
||||
{label(f, :incendiary, gettext("Incendiary"), class: "title text-lg text-primary-600")}
|
||||
{checkbox(f, :incendiary, class: "text-center col-span-2 checkbox")}
|
||||
{error_tag(f, :incendiary, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :blank, gettext("Blank"), class: "title text-lg text-primary-600") %>
|
||||
<%= checkbox(f, :blank, class: "text-center col-span-2 checkbox") %>
|
||||
<%= error_tag(f, :blank, "col-span-3 text-center") %>
|
||||
{label(f, :blank, gettext("Blank"), class: "title text-lg text-primary-600")}
|
||||
{checkbox(f, :blank, class: "text-center col-span-2 checkbox")}
|
||||
{error_tag(f, :blank, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :corrosive, gettext("Corrosive"), class: "title text-lg text-primary-600") %>
|
||||
<%= checkbox(f, :corrosive, class: "text-center col-span-2 checkbox") %>
|
||||
<%= error_tag(f, :corrosive, "col-span-3 text-center") %>
|
||||
{label(f, :corrosive, gettext("Corrosive"), class: "title text-lg text-primary-600")}
|
||||
{checkbox(f, :corrosive, class: "text-center col-span-2 checkbox")}
|
||||
{error_tag(f, :corrosive, "col-span-3 text-center")}
|
||||
|
||||
<h2 class="text-center title text-lg text-primary-600 col-span-3">
|
||||
<%= gettext("Manufacturer") %>
|
||||
{gettext("Manufacturer")}
|
||||
</h2>
|
||||
|
||||
<%= label(f, :manufacturer, gettext("Manufacturer"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :manufacturer,
|
||||
{label(f, :manufacturer, gettext("Manufacturer"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :manufacturer,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :manufacturer, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :manufacturer, "col-span-3 text-center")}
|
||||
|
||||
<%= label(f, :upc, gettext("UPC"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :upc,
|
||||
{label(f, :upc, gettext("UPC"), class: "title text-lg text-primary-600")}
|
||||
{text_input(f, :upc,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :upc, "col-span-3 text-center") %>
|
||||
)}
|
||||
{error_tag(f, :upc, "col-span-3 text-center")}
|
||||
|
||||
<%= submit(dgettext("actions", "Save"),
|
||||
{submit(dgettext("actions", "Save"),
|
||||
phx_disable_with: dgettext("prompts", "Saving..."),
|
||||
class: "mx-auto col-span-3 btn btn-primary"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -1,23 +1,23 @@
|
||||
<div class="flex flex-col space-y-8 justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<%= gettext("Catalog") %>
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
{gettext("Catalog")}
|
||||
</h1>
|
||||
|
||||
<%= if @types_count == 0 do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<%= gettext("No Types") %>
|
||||
<%= display_emoji("😔") %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
{gettext("No Types")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
|
||||
<.link patch={~p"/catalog/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Add your first type!") %>
|
||||
{dgettext("actions", "Add your first type!")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link patch={~p"/catalog/new"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "New Type") %>
|
||||
{dgettext("actions", "New Type")}
|
||||
</.link>
|
||||
|
||||
<div class="w-full flex flex-col sm:flex-row justify-center items-center space-y-4 sm:space-y-0 sm:space-x-4 max-w-2xl">
|
||||
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
@ -26,11 +26,9 @@
|
||||
phx-submit="change_class"
|
||||
class="flex items-center"
|
||||
>
|
||||
<%= label(f, :class, gettext("Class"),
|
||||
class: "title text-primary-600 text-lg text-center"
|
||||
) %>
|
||||
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
|
||||
|
||||
<%= select(
|
||||
{select(
|
||||
f,
|
||||
:class,
|
||||
[
|
||||
@ -39,9 +37,9 @@
|
||||
{gettext("Shotgun"), :shotgun},
|
||||
{gettext("Pistol"), :pistol}
|
||||
],
|
||||
class: "mx-2 my-1 min-w-md input input-primary",
|
||||
class: "mx-2 my-1 min-w-20 input input-primary",
|
||||
value: @class
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.form
|
||||
@ -50,28 +48,28 @@
|
||||
as={:search}
|
||||
phx-change="search"
|
||||
phx-submit="search"
|
||||
class="grow flex items-center"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
{text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search catalog"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
|
||||
<.toggle_button action="toggle_show_used" value={@show_used}>
|
||||
<span class="title text-lg text-primary-600">
|
||||
<%= gettext("Show used") %>
|
||||
<span class="text-lg title text-primary-600">
|
||||
{gettext("Show used")}
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
|
||||
<%= if @types |> Enum.empty?() do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<%= gettext("No Types") %>
|
||||
<%= display_emoji("😔") %>
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
{gettext("No Types")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
<% else %>
|
||||
<.live_component
|
||||
@ -84,7 +82,7 @@
|
||||
class={@class}
|
||||
>
|
||||
<:actions :let={type}>
|
||||
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
||||
<div class="flex justify-center items-center px-4 py-2 space-x-4">
|
||||
<.link
|
||||
navigate={~p"/type/#{type}"}
|
||||
class="text-primary-600 link"
|
||||
|
@ -1,18 +1,16 @@
|
||||
<div class="space-y-4 flex flex-col justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<%= @type.name %>
|
||||
<div class="flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
{@type.name}
|
||||
</h1>
|
||||
|
||||
<span
|
||||
:if={@type.desc}
|
||||
class="max-w-2xl w-full px-8 py-4 rounded-lg
|
||||
text-center title text-lg
|
||||
border border-primary-600"
|
||||
class="px-8 py-4 w-full max-w-2xl text-lg text-center rounded-lg border title border-primary-600"
|
||||
>
|
||||
<%= @type.desc %>
|
||||
{@type.desc}
|
||||
</span>
|
||||
|
||||
<div class="flex space-x-4 justify-center items-center text-primary-600">
|
||||
<div class="flex justify-center items-center space-x-4 text-primary-600">
|
||||
<.link
|
||||
patch={~p"/type/#{@type}/edit"}
|
||||
class="text-primary-600 link"
|
||||
@ -41,36 +39,36 @@
|
||||
<hr class="hr" />
|
||||
|
||||
<%= if @type.class || @custom_fields? do %>
|
||||
<div class="grid sm:grid-cols-2 gap-4 text-center justify-center items-center">
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Class") %>
|
||||
<div class="grid gap-4 justify-center items-center text-center sm:grid-cols-2">
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Class")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= case @type.class do %>
|
||||
<% :shotgun -> %>
|
||||
<%= gettext("Shotgun") %>
|
||||
{gettext("Shotgun")}
|
||||
<% :rifle -> %>
|
||||
<%= gettext("Rifle") %>
|
||||
{gettext("Rifle")}
|
||||
<% :pistol -> %>
|
||||
<%= gettext("Pistol") %>
|
||||
{gettext("Pistol")}
|
||||
<% _ -> %>
|
||||
<%= gettext("None specified") %>
|
||||
{gettext("None specified")}
|
||||
<% end %>
|
||||
</span>
|
||||
|
||||
<%= for %{label: label, key: key, type: type} <- @fields_to_display do %>
|
||||
<%= if @type |> Map.get(key) do %>
|
||||
<h3 class="title text-lg">
|
||||
<%= label %>
|
||||
<h3 class="text-lg title">
|
||||
{label}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= case type do %>
|
||||
<% :boolean -> %>
|
||||
<%= @type |> Map.get(key) |> humanize() %>
|
||||
{@type |> Map.get(key) |> humanize()}
|
||||
<% _ -> %>
|
||||
<%= @type |> Map.get(key) %>
|
||||
{@type |> Map.get(key)}
|
||||
<% end %>
|
||||
</span>
|
||||
<% end %>
|
||||
@ -80,61 +78,61 @@
|
||||
<hr class="hr" />
|
||||
<% end %>
|
||||
|
||||
<div class="grid sm:grid-cols-2 gap-4 text-center justify-center items-center">
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Rounds:") %>
|
||||
<div class="grid gap-4 justify-center items-center text-center sm:grid-cols-2">
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Rounds:")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= @rounds %>
|
||||
{@rounds}
|
||||
</span>
|
||||
|
||||
<%= if @show_used do %>
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Used rounds:") %>
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Used rounds:")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= @used_rounds %>
|
||||
{@used_rounds}
|
||||
</span>
|
||||
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Total ever rounds:") %>
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Total ever rounds:")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= @historical_round_count %>
|
||||
{@historical_round_count}
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Packs:") %>
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Packs:")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= @packs_count %>
|
||||
{@packs_count}
|
||||
</span>
|
||||
|
||||
<%= if @show_used do %>
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Used packs:") %>
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Used packs:")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= @used_packs_count %>
|
||||
{@used_packs_count}
|
||||
</span>
|
||||
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Total ever packs:") %>
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Total ever packs:")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= @historical_packs_count %>
|
||||
{@historical_packs_count}
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Added on:") %>
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Added on:")}
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
@ -142,16 +140,16 @@
|
||||
</span>
|
||||
|
||||
<%= if @avg_cost_per_round do %>
|
||||
<h3 class="title text-lg">
|
||||
<%= gettext("Average CPR") %>:
|
||||
<h3 class="text-lg title">
|
||||
{gettext("Average CPR")}:
|
||||
</h3>
|
||||
|
||||
<span class="text-primary-600">
|
||||
<%= gettext("$%{amount}", amount: display_currency(@avg_cost_per_round)) %>
|
||||
{gettext("$%{amount}", amount: display_currency(@avg_cost_per_round))}
|
||||
</span>
|
||||
<% else %>
|
||||
<h3 class="mx-8 my-4 title text-lg text-primary-600 col-span-2">
|
||||
<%= gettext("No cost information") %>
|
||||
<h3 class="col-span-2 mx-8 my-4 text-lg title text-primary-600">
|
||||
{gettext("No cost information")}
|
||||
</h3>
|
||||
<% end %>
|
||||
</div>
|
||||
@ -160,23 +158,23 @@
|
||||
|
||||
<div class="flex justify-center items-center space-x-4">
|
||||
<.toggle_button action="toggle_show_used" value={@show_used}>
|
||||
<span class="title text-lg text-primary-600">
|
||||
<%= gettext("Show used") %>
|
||||
<span class="text-lg title text-primary-600">
|
||||
{gettext("Show used")}
|
||||
</span>
|
||||
</.toggle_button>
|
||||
|
||||
<.toggle_button action="toggle_table" value={@view_table}>
|
||||
<span class="title text-lg text-primary-600">
|
||||
<%= gettext("View as table") %>
|
||||
<span class="text-lg title text-primary-600">
|
||||
{gettext("View as table")}
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
|
||||
<div class="w-full p-4">
|
||||
<div class="p-4 w-full">
|
||||
<%= if @packs |> Enum.empty?() do %>
|
||||
<h2 class="px-4 title text-lg text-primary-600">
|
||||
<%= gettext("No ammo for this type") %>
|
||||
<%= display_emoji("😔") %>
|
||||
<h2 class="px-4 text-lg title text-primary-600">
|
||||
{gettext("No ammo for this type")}
|
||||
{display_emoji("😔")}
|
||||
</h2>
|
||||
<% else %>
|
||||
<%= if @view_table do %>
|
||||
@ -189,11 +187,11 @@
|
||||
>
|
||||
<:container :let={{_pack, %{name: container_name} = container}}>
|
||||
<.link navigate={~p"/container/#{container}"} class="mx-2 my-1 link">
|
||||
<%= container_name %>
|
||||
{container_name}
|
||||
</.link>
|
||||
</:container>
|
||||
<:actions :let={%{count: pack_count} = pack}>
|
||||
<div class="py-2 px-4 h-full space-x-4 flex justify-center items-center">
|
||||
<div class="flex justify-center items-center px-4 py-2 space-x-4 h-full">
|
||||
<.link
|
||||
navigate={~p"/ammo/show/#{pack}"}
|
||||
class="text-primary-600 link"
|
||||
|
Reference in New Issue
Block a user