forked from shibao/cannery
update deps
This commit is contained in:
@ -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