From 8c95536ffd6c2b85aebd46ea91f54bd95b8eaae0 Mon Sep 17 00:00:00 2001 From: shibao Date: Thu, 23 Mar 2023 22:07:25 -0400 Subject: [PATCH] add selectable ammo types --- CHANGELOG.md | 4 + lib/cannery/activity_log.ex | 109 ++-- lib/cannery/ammo.ex | 271 ++++++---- lib/cannery/ammo/ammo_type.ex | 63 ++- .../components/ammo_group_table_component.ex | 102 ++-- .../components/ammo_type_table_component.ex | 160 +++--- .../controllers/export_controller.ex | 6 +- .../live/ammo_group_live/form_component.ex | 2 +- lib/cannery_web/live/ammo_group_live/index.ex | 37 +- .../live/ammo_group_live/index.html.heex | 299 ++++++----- .../ammo_type_live/form_component.html.heex | 306 ++++++++--- lib/cannery_web/live/ammo_type_live/index.ex | 30 +- .../live/ammo_type_live/index.html.heex | 33 +- lib/cannery_web/live/ammo_type_live/show.ex | 72 ++- .../live/ammo_type_live/show.html.heex | 21 +- .../live/container_live/index.html.heex | 216 ++++---- lib/cannery_web/live/container_live/show.ex | 27 +- .../live/container_live/show.html.heex | 53 +- lib/cannery_web/live/range_live/index.ex | 26 +- .../live/range_live/index.html.heex | 30 +- lib/cannery_web/live/tag_live/index.html.heex | 98 ++-- priv/gettext/actions.pot | 66 +-- priv/gettext/de/LC_MESSAGES/actions.po | 66 +-- priv/gettext/de/LC_MESSAGES/default.po | 483 +++++++++++++----- priv/gettext/de/LC_MESSAGES/errors.po | 3 +- priv/gettext/de/LC_MESSAGES/prompts.po | 22 +- priv/gettext/default.pot | 483 +++++++++++++----- priv/gettext/en/LC_MESSAGES/actions.po | 66 +-- priv/gettext/en/LC_MESSAGES/default.po | 483 +++++++++++++----- priv/gettext/en/LC_MESSAGES/errors.po | 3 +- priv/gettext/en/LC_MESSAGES/prompts.po | 22 +- priv/gettext/errors.pot | 3 +- priv/gettext/es/LC_MESSAGES/actions.po | 66 +-- priv/gettext/es/LC_MESSAGES/default.po | 483 +++++++++++++----- priv/gettext/es/LC_MESSAGES/errors.po | 3 +- priv/gettext/es/LC_MESSAGES/prompts.po | 22 +- priv/gettext/fr/LC_MESSAGES/actions.po | 66 +-- priv/gettext/fr/LC_MESSAGES/default.po | 483 +++++++++++++----- priv/gettext/fr/LC_MESSAGES/errors.po | 3 +- priv/gettext/fr/LC_MESSAGES/prompts.po | 22 +- priv/gettext/ga/LC_MESSAGES/actions.po | 66 +-- priv/gettext/ga/LC_MESSAGES/default.po | 483 +++++++++++++----- priv/gettext/ga/LC_MESSAGES/errors.po | 3 +- priv/gettext/ga/LC_MESSAGES/prompts.po | 22 +- priv/gettext/prompts.pot | 22 +- .../20220506015344_add_locale_setting.exs | 2 +- ...add_ammo_type_types_and_shotgun_fields.exs | 98 ++++ test/cannery/activity_log_test.exs | 139 +++-- test/cannery/ammo_test.exs | 384 +++++++++----- .../cannery_web/live/ammo_group_live_test.exs | 56 +- test/cannery_web/live/ammo_type_live_test.exs | 85 ++- test/cannery_web/live/container_live_test.exs | 112 ++-- test/cannery_web/live/range_live_test.exs | 72 ++- test/support/conn_case.ex | 2 +- test/support/data_case.ex | 11 + test/support/fixtures.ex | 13 +- 56 files changed, 4306 insertions(+), 2077 deletions(-) create mode 100644 priv/repo/migrations/20230322005247_add_ammo_type_types_and_shotgun_fields.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e7eb00..8005045 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # v0.9.0 - Add length limits to all string fields +- Add selectable ammo types +- Improve onboarding experience slightly +- Remove show used view from a container since it doesn't really make that much + sense # v0.8.6 - Fix duplicate entries showing up diff --git a/lib/cannery/activity_log.ex b/lib/cannery/activity_log.ex index b107925..f5f0007 100644 --- a/lib/cannery/activity_log.ex +++ b/lib/cannery/activity_log.ex @@ -6,65 +6,92 @@ defmodule Cannery.ActivityLog do import Ecto.Query, warn: false alias Cannery.Ammo.{AmmoGroup, AmmoType} alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Repo} - alias Ecto.Multi + alias Ecto.{Multi, Queryable} @doc """ Returns the list of shot_groups. ## Examples - iex> list_shot_groups(%User{id: 123}) + iex> list_shot_groups(:all, %User{id: 123}) [%ShotGroup{}, ...] - iex> list_shot_groups("cool", %User{id: 123}) + iex> list_shot_groups("cool", :all, %User{id: 123}) [%ShotGroup{notes: "My cool shot group"}, ...] + iex> list_shot_groups("cool", :rifle, %User{id: 123}) + [%ShotGroup{notes: "Shot some rifle rounds"}, ...] + """ - @spec list_shot_groups(User.t()) :: [ShotGroup.t()] - @spec list_shot_groups(search :: nil | String.t(), User.t()) :: [ShotGroup.t()] - def list_shot_groups(search \\ nil, user) + @spec list_shot_groups(AmmoType.type() | :all, User.t()) :: [ShotGroup.t()] + @spec list_shot_groups(search :: nil | String.t(), AmmoType.type() | :all, User.t()) :: + [ShotGroup.t()] + def list_shot_groups(search \\ nil, type, %{id: user_id}) do + from(sg in ShotGroup, + as: :sg, + left_join: ag in AmmoGroup, + as: :ag, + on: sg.ammo_group_id == ag.id, + left_join: at in AmmoType, + as: :at, + on: ag.ammo_type_id == at.id, + where: sg.user_id == ^user_id, + distinct: sg.id + ) + |> list_shot_groups_search(search) + |> list_shot_groups_filter_type(type) + |> Repo.all() + end - def list_shot_groups(search, %{id: user_id}) when search |> is_nil() or search == "", - do: Repo.all(from sg in ShotGroup, where: sg.user_id == ^user_id) + @spec list_shot_groups_search(Queryable.t(), search :: String.t() | nil) :: + Queryable.t() + defp list_shot_groups_search(query, search) when search in ["", nil], do: query - def list_shot_groups(search, %{id: user_id}) when search |> is_binary() do + defp list_shot_groups_search(query, search) when search |> is_binary() do trimmed_search = String.trim(search) - Repo.all( - from sg in ShotGroup, - left_join: ag in AmmoGroup, - on: sg.ammo_group_id == ag.id, - left_join: at in AmmoType, - on: ag.ammo_type_id == at.id, - where: sg.user_id == ^user_id, - where: - fragment( - "? @@ websearch_to_tsquery('english', ?)", - sg.search, - ^trimmed_search - ) or - fragment( - "? @@ websearch_to_tsquery('english', ?)", - ag.search, - ^trimmed_search - ) or - fragment( - "? @@ websearch_to_tsquery('english', ?)", - at.search, - ^trimmed_search - ), - order_by: { - :desc, - fragment( - "ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)", - sg.search, - ^trimmed_search - ) - }, - distinct: sg.id + query + |> where( + [sg: sg, ag: ag, at: at], + fragment( + "? @@ websearch_to_tsquery('english', ?)", + sg.search, + ^trimmed_search + ) or + fragment( + "? @@ websearch_to_tsquery('english', ?)", + ag.search, + ^trimmed_search + ) or + fragment( + "? @@ websearch_to_tsquery('english', ?)", + at.search, + ^trimmed_search + ) ) + |> order_by([sg: sg], { + :desc, + fragment( + "ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)", + sg.search, + ^trimmed_search + ) + }) end + @spec list_shot_groups_filter_type(Queryable.t(), AmmoType.type() | :all) :: + Queryable.t() + defp list_shot_groups_filter_type(query, :rifle), + do: query |> where([at: at], at.type == :rifle) + + defp list_shot_groups_filter_type(query, :pistol), + do: query |> where([at: at], at.type == :pistol) + + defp list_shot_groups_filter_type(query, :shotgun), + do: query |> where([at: at], at.type == :shotgun) + + defp list_shot_groups_filter_type(query, _all), do: query + @spec list_shot_groups_for_ammo_group(AmmoGroup.t(), User.t()) :: [ShotGroup.t()] def list_shot_groups_for_ammo_group( %AmmoGroup{id: ammo_group_id, user_id: user_id}, diff --git a/lib/cannery/ammo.ex b/lib/cannery/ammo.ex index 4990df5..63868ad 100644 --- a/lib/cannery/ammo.ex +++ b/lib/cannery/ammo.ex @@ -9,7 +9,7 @@ defmodule Cannery.Ammo do alias Cannery.Containers.{Container, ContainerTag, Tag} alias Cannery.{ActivityLog, ActivityLog.ShotGroup} alias Cannery.Ammo.{AmmoGroup, AmmoType} - alias Ecto.Changeset + alias Ecto.{Changeset, Queryable} @ammo_group_create_limit 10_000 @ammo_group_preloads [:ammo_type] @@ -20,50 +20,69 @@ defmodule Cannery.Ammo do ## Examples - iex> list_ammo_types(%User{id: 123}) + iex> list_ammo_types(%User{id: 123}, :all) [%AmmoType{}, ...] - iex> list_ammo_types("cool", %User{id: 123}) - [%AmmoType{name: "My cool ammo type"}, ...] + iex> list_ammo_types("cool", %User{id: 123}, :shotgun) + [%AmmoType{name: "My cool ammo type", type: :shotgun}, ...] """ - @spec list_ammo_types(User.t()) :: [AmmoType.t()] - @spec list_ammo_types(search :: nil | String.t(), User.t()) :: [AmmoType.t()] - def list_ammo_types(search \\ nil, user) + @spec list_ammo_types(User.t(), AmmoType.type() | :all) :: [AmmoType.t()] + @spec list_ammo_types(search :: nil | String.t(), User.t(), AmmoType.type() | :all) :: + [AmmoType.t()] + def list_ammo_types(search \\ nil, user, type) - def list_ammo_types(search, %{id: user_id}) when search |> is_nil() or search == "" do - Repo.all( - from at in AmmoType, - where: at.user_id == ^user_id, - order_by: at.name, - preload: ^@ammo_type_preloads + def list_ammo_types(search, %{id: user_id}, type) do + from(at in AmmoType, + as: :at, + where: at.user_id == ^user_id, + preload: ^@ammo_type_preloads ) + |> list_ammo_types_filter_type(type) + |> list_ammo_types_filter_search(search) + |> Repo.all() end - def list_ammo_types(search, %{id: user_id}) when search |> is_binary() do + @spec list_ammo_types_filter_search(Queryable.t(), search :: String.t() | nil) :: Queryable.t() + defp list_ammo_types_filter_search(query, search) when search in ["", nil], + do: query |> order_by([at: at], at.name) + + defp list_ammo_types_filter_search(query, search) when search |> is_binary() do trimmed_search = String.trim(search) - Repo.all( - from at in AmmoType, - where: at.user_id == ^user_id, - where: - fragment( - "? @@ websearch_to_tsquery('english', ?)", - at.search, - ^trimmed_search - ), - order_by: { - :desc, - fragment( - "ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)", - at.search, - ^trimmed_search - ) - }, - preload: ^@ammo_type_preloads + query + |> where( + [at: at], + fragment( + "? @@ websearch_to_tsquery('english', ?)", + at.search, + ^trimmed_search + ) + ) + |> order_by( + [at: at], + { + :desc, + fragment( + "ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)", + at.search, + ^trimmed_search + ) + } ) end + @spec list_ammo_types_filter_type(Queryable.t(), AmmoType.type() | :all) :: Queryable.t() + defp list_ammo_types_filter_type(query, :rifle), do: query |> where([at: at], at.type == :rifle) + + defp list_ammo_types_filter_type(query, :pistol), + do: query |> where([at: at], at.type == :pistol) + + defp list_ammo_types_filter_type(query, :shotgun), + do: query |> where([at: at], at.type == :shotgun) + + defp list_ammo_types_filter_type(query, _all), do: query + @doc """ Returns a count of ammo_types. @@ -80,7 +99,7 @@ defmodule Cannery.Ammo do where: at.user_id == ^user_id, select: count(at.id), distinct: true - ) + ) || 0 end @doc """ @@ -375,36 +394,31 @@ defmodule Cannery.Ammo do """ @spec list_ammo_groups_for_type(AmmoType.t(), User.t()) :: [AmmoGroup.t()] - @spec list_ammo_groups_for_type(AmmoType.t(), User.t(), include_empty :: boolean()) :: + @spec list_ammo_groups_for_type(AmmoType.t(), User.t(), show_used :: boolean()) :: [AmmoGroup.t()] - def list_ammo_groups_for_type(ammo_type, user, include_empty \\ false) + def list_ammo_groups_for_type(ammo_type, user, show_used \\ false) def list_ammo_groups_for_type( %AmmoType{id: ammo_type_id, user_id: user_id}, %User{id: user_id}, - true = _include_empty + show_used ) do - Repo.all( - from ag in AmmoGroup, - where: ag.ammo_type_id == ^ammo_type_id, - where: ag.user_id == ^user_id, - preload: ^@ammo_group_preloads + from(ag in AmmoGroup, + as: :ag, + where: ag.ammo_type_id == ^ammo_type_id, + where: ag.user_id == ^user_id, + preload: ^@ammo_group_preloads ) + |> list_ammo_groups_for_type_show_used(show_used) + |> Repo.all() end - def list_ammo_groups_for_type( - %AmmoType{id: ammo_type_id, user_id: user_id}, - %User{id: user_id}, - false = _include_empty - ) do - Repo.all( - from ag in AmmoGroup, - where: ag.ammo_type_id == ^ammo_type_id, - where: ag.user_id == ^user_id, - where: not (ag.count == 0), - preload: ^@ammo_group_preloads - ) - end + @spec list_ammo_groups_for_type_show_used(Queryable.t(), show_used :: boolean()) :: + Queryable.t() + def list_ammo_groups_for_type_show_used(query, false), + do: query |> where([ag: ag], ag.count > 0) + + def list_ammo_groups_for_type_show_used(query, _true), do: query @doc """ Returns the list of ammo_groups for a user and container. @@ -413,50 +427,86 @@ defmodule Cannery.Ammo do iex> list_ammo_groups_for_container( ...> %Container{id: 123, user_id: 456}, + ...> :rifle, ...> %User{id: 456} ...> ) [%AmmoGroup{}, ...] iex> list_ammo_groups_for_container( ...> %Container{id: 123, user_id: 456}, - ...> %User{id: 456}, - ...> true + ...> :all, + ...> %User{id: 456} ...> ) [%AmmoGroup{}, %AmmoGroup{}, ...] """ - @spec list_ammo_groups_for_container(Container.t(), User.t()) :: [AmmoGroup.t()] - @spec list_ammo_groups_for_container(Container.t(), User.t(), include_empty :: boolean()) :: - [AmmoGroup.t()] - def list_ammo_groups_for_container(container, user, include_empty \\ false) - + @spec list_ammo_groups_for_container( + Container.t(), + AmmoType.t() | :all, + User.t() + ) :: [AmmoGroup.t()] def list_ammo_groups_for_container( %Container{id: container_id, user_id: user_id}, - %User{id: user_id}, - true = _include_empty + type, + %User{id: user_id} ) do - Repo.all( - from ag in AmmoGroup, - where: ag.container_id == ^container_id, - where: ag.user_id == ^user_id, - preload: ^@ammo_group_preloads + from(ag in AmmoGroup, + as: :ag, + join: at in assoc(ag, :ammo_type), + as: :at, + where: ag.container_id == ^container_id, + where: ag.user_id == ^user_id, + where: ag.count > 0, + preload: ^@ammo_group_preloads ) + |> list_ammo_groups_for_container_filter_type(type) + |> Repo.all() end - def list_ammo_groups_for_container( - %Container{id: container_id, user_id: user_id}, - %User{id: user_id}, - false = _include_empty - ) do - Repo.all( - from ag in AmmoGroup, - where: ag.container_id == ^container_id, - where: ag.user_id == ^user_id, - where: not (ag.count == 0), - preload: ^@ammo_group_preloads + @spec list_ammo_groups_for_container_filter_type(Queryable.t(), AmmoType.type() | :all) :: + Queryable.t() + defp list_ammo_groups_for_container_filter_type(query, :rifle), + do: query |> where([at: at], at.type == :rifle) + + defp list_ammo_groups_for_container_filter_type(query, :pistol), + do: query |> where([at: at], at.type == :pistol) + + defp list_ammo_groups_for_container_filter_type(query, :shotgun), + do: query |> where([at: at], at.type == :shotgun) + + defp list_ammo_groups_for_container_filter_type(query, _all), do: query + + @doc """ + Returns a count of ammo_groups. + + ## Examples + + iex> get_ammo_groups_count!(%User{id: 123}) + 3 + + iex> get_ammo_groups_count!(%User{id: 123}, true) + 4 + + """ + @spec get_ammo_groups_count!(User.t()) :: integer() + @spec get_ammo_groups_count!(User.t(), show_used :: boolean()) :: integer() + def get_ammo_groups_count!(%User{id: user_id}, show_used \\ false) do + from(ag in AmmoGroup, + as: :ag, + where: ag.user_id == ^user_id, + select: count(ag.id), + distinct: true ) + |> get_ammo_groups_count_show_used(show_used) + |> Repo.one() || 0 end + @spec get_ammo_groups_count_show_used(Queryable.t(), show_used :: boolean()) :: Queryable.t() + defp get_ammo_groups_count_show_used(query, false), + do: query |> where([ag: ag], ag.count > 0) + + defp get_ammo_groups_count_show_used(query, _true), do: query + @doc """ Returns the count of ammo_groups for an ammo type. @@ -477,15 +527,15 @@ defmodule Cannery.Ammo do """ @spec get_ammo_groups_count_for_type(AmmoType.t(), User.t()) :: non_neg_integer() - @spec get_ammo_groups_count_for_type(AmmoType.t(), User.t(), include_empty :: boolean()) :: + @spec get_ammo_groups_count_for_type(AmmoType.t(), User.t(), show_used :: boolean()) :: non_neg_integer() def get_ammo_groups_count_for_type( %AmmoType{id: ammo_type_id} = ammo_type, user, - include_empty \\ false + show_used \\ false ) do [ammo_type] - |> get_ammo_groups_count_for_types(user, include_empty) + |> get_ammo_groups_count_for_types(user, show_used) |> Map.get(ammo_type_id, 0) end @@ -510,28 +560,31 @@ defmodule Cannery.Ammo do """ @spec get_ammo_groups_count_for_types([AmmoType.t()], User.t()) :: %{optional(AmmoType.id()) => non_neg_integer()} - @spec get_ammo_groups_count_for_types([AmmoType.t()], User.t(), include_empty :: boolean()) :: + @spec get_ammo_groups_count_for_types([AmmoType.t()], User.t(), show_used :: boolean()) :: %{optional(AmmoType.id()) => non_neg_integer()} - def get_ammo_groups_count_for_types(ammo_types, %User{id: user_id}, include_empty \\ false) do + def get_ammo_groups_count_for_types(ammo_types, %User{id: user_id}, show_used \\ false) do ammo_type_ids = ammo_types |> Enum.map(fn %AmmoType{id: ammo_type_id, user_id: ^user_id} -> ammo_type_id end) from(ag in AmmoGroup, + as: :ag, where: ag.user_id == ^user_id, where: ag.ammo_type_id in ^ammo_type_ids, group_by: ag.ammo_type_id, select: {ag.ammo_type_id, count(ag.id)} ) - |> maybe_include_empty(include_empty) + |> get_ammo_groups_count_for_types_maybe_show_used(show_used) |> Repo.all() |> Map.new() end - defp maybe_include_empty(query, true), do: query + @spec get_ammo_groups_count_for_types_maybe_show_used(Queryable.t(), show_used :: boolean()) :: + Queryable.t() + defp get_ammo_groups_count_for_types_maybe_show_used(query, true), do: query - defp maybe_include_empty(query, _false) do - query |> where([ag], not (ag.count == 0)) + defp get_ammo_groups_count_for_types_maybe_show_used(query, _false) do + query |> where([ag: ag], not (ag.count == 0)) end @doc """ @@ -628,7 +681,7 @@ defmodule Cannery.Ammo do Repo.all( from ag in AmmoGroup, where: ag.container_id in ^container_ids, - where: ag.count != 0, + where: ag.count > 0, group_by: ag.container_id, select: {ag.container_id, count(ag.id)} ) @@ -690,17 +743,20 @@ defmodule Cannery.Ammo do iex> list_ammo_groups(%User{id: 123}) [%AmmoGroup{}, ...] - iex> list_ammo_groups("cool", true, %User{id: 123}) + iex> list_ammo_groups("cool", %User{id: 123}, true) [%AmmoGroup{notes: "My cool ammo group"}, ...] """ - @spec list_ammo_groups(User.t()) :: [AmmoGroup.t()] - @spec list_ammo_groups(search :: nil | String.t(), User.t()) :: [AmmoGroup.t()] - @spec list_ammo_groups(search :: nil | String.t(), include_empty :: boolean(), User.t()) :: + @spec list_ammo_groups(search :: String.t() | nil, AmmoType.type() | :all, User.t()) :: [AmmoGroup.t()] - def list_ammo_groups(search \\ nil, include_empty \\ false, %{id: user_id}) do - from( - ag in AmmoGroup, + @spec list_ammo_groups( + search :: nil | String.t(), + AmmoType.type() | :all, + User.t(), + show_used :: boolean() + ) :: [AmmoGroup.t()] + def list_ammo_groups(search, type, %{id: user_id}, show_used \\ false) do + from(ag in AmmoGroup, as: :ag, join: at in assoc(ag, :ammo_type), as: :at, @@ -718,17 +774,32 @@ defmodule Cannery.Ammo do distinct: ag.id, preload: ^@ammo_group_preloads ) - |> list_ammo_groups_include_empty(include_empty) + |> list_ammo_groups_filter_on_type(type) + |> list_ammo_groups_show_used(show_used) |> list_ammo_groups_search(search) |> Repo.all() end - defp list_ammo_groups_include_empty(query, true), do: query + @spec list_ammo_groups_filter_on_type(Queryable.t(), AmmoType.type() | :all) :: Queryable.t() + defp list_ammo_groups_filter_on_type(query, :rifle), + do: query |> where([at: at], at.type == :rifle) - defp list_ammo_groups_include_empty(query, false) do - query |> where([ag], not (ag.count == 0)) + defp list_ammo_groups_filter_on_type(query, :pistol), + do: query |> where([at: at], at.type == :pistol) + + defp list_ammo_groups_filter_on_type(query, :shotgun), + do: query |> where([at: at], at.type == :shotgun) + + defp list_ammo_groups_filter_on_type(query, _all), do: query + + @spec list_ammo_groups_show_used(Queryable.t(), show_used :: boolean()) :: Queryable.t() + defp list_ammo_groups_show_used(query, true), do: query + + defp list_ammo_groups_show_used(query, _false) do + query |> where([ag: ag], not (ag.count == 0)) end + @spec list_ammo_groups_show_used(Queryable.t(), search :: String.t() | nil) :: Queryable.t() defp list_ammo_groups_search(query, nil), do: query defp list_ammo_groups_search(query, ""), do: query diff --git a/lib/cannery/ammo/ammo_type.ex b/lib/cannery/ammo/ammo_type.ex index 6458246..07cf86e 100644 --- a/lib/cannery/ammo/ammo_type.ex +++ b/lib/cannery/ammo/ammo_type.ex @@ -42,30 +42,47 @@ defmodule Cannery.Ammo.AmmoType do field :name, :string field :desc, :string + field :type, Ecto.Enum, values: [:rifle, :shotgun, :pistol] + + # common fields # https://shootersreference.com/reloadingdata/bullet_abbreviations/ field :bullet_type, :string field :bullet_core, :string - field :cartridge, :string + # also gauge for shotguns field :caliber, :string field :case_material, :string - field :jacket_type, :string - field :muzzle_velocity, :integer field :powder_type, :string - field :powder_grains_per_charge, :integer field :grains, :integer field :pressure, :string field :primer_type, :string field :firing_type, :string + field :manufacturer, :string + field :upc, :string + field :tracer, :boolean, default: false field :incendiary, :boolean, default: false field :blank, :boolean, default: false field :corrosive, :boolean, default: false - field :manufacturer, :string - field :upc, :string + # rifle/pistol fields + field :cartridge, :string + field :jacket_type, :string + field :powder_grains_per_charge, :integer + field :muzzle_velocity, :integer + + # shotgun fields + field :wadding, :string + field :shot_type, :string + field :shot_material, :string + field :shot_size, :string + field :unfired_length, :string + field :brass_height, :string + field :chamber_size, :string + field :load_grains, :integer + field :shot_charge_weight, :string + field :dram_equivalent, :string field :user_id, :binary_id - has_many :ammo_groups, AmmoGroup timestamps() @@ -75,6 +92,7 @@ defmodule Cannery.Ammo.AmmoType do id: id(), name: String.t(), desc: String.t() | nil, + type: type(), bullet_type: String.t() | nil, bullet_core: String.t() | nil, cartridge: String.t() | nil, @@ -88,6 +106,16 @@ defmodule Cannery.Ammo.AmmoType do pressure: String.t() | nil, primer_type: String.t() | nil, firing_type: String.t() | nil, + wadding: String.t() | nil, + shot_type: String.t() | nil, + shot_material: String.t() | nil, + shot_size: String.t() | nil, + unfired_length: String.t() | nil, + brass_height: String.t() | nil, + chamber_size: String.t() | nil, + load_grains: integer() | nil, + shot_charge_weight: String.t() | nil, + dram_equivalent: String.t() | nil, tracer: boolean(), incendiary: boolean(), blank: boolean(), @@ -102,12 +130,14 @@ defmodule Cannery.Ammo.AmmoType do @type new_ammo_type :: %__MODULE__{} @type id :: UUID.t() @type changeset :: Changeset.t(t() | new_ammo_type()) + @type type :: :rifle | :shotgun | :pistol | nil @spec changeset_fields() :: [atom()] defp changeset_fields, do: [ :name, :desc, + :type, :bullet_type, :bullet_core, :cartridge, @@ -121,6 +151,16 @@ defmodule Cannery.Ammo.AmmoType do :pressure, :primer_type, :firing_type, + :wadding, + :shot_type, + :shot_material, + :shot_size, + :unfired_length, + :brass_height, + :chamber_size, + :load_grains, + :shot_charge_weight, + :dram_equivalent, :tracer, :incendiary, :blank, @@ -143,6 +183,15 @@ defmodule Cannery.Ammo.AmmoType do :pressure, :primer_type, :firing_type, + :wadding, + :shot_type, + :shot_material, + :shot_size, + :unfired_length, + :brass_height, + :chamber_size, + :shot_charge_weight, + :dram_equivalent, :manufacturer, :upc ] diff --git a/lib/cannery_web/components/ammo_group_table_component.ex b/lib/cannery_web/components/ammo_group_table_component.ex index cd16248..5354daa 100644 --- a/lib/cannery_web/components/ammo_group_table_component.ex +++ b/lib/cannery_web/components/ammo_group_table_component.ex @@ -5,6 +5,7 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do use CanneryWeb, :live_component alias Cannery.{Accounts.User, Ammo.AmmoGroup, ComparableDate} alias Cannery.{ActivityLog, Ammo, Containers} + alias CanneryWeb.Components.TableComponent alias Ecto.UUID alias Phoenix.LiveView.{Rendered, Socket} @@ -54,59 +55,47 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do } = socket ) do columns = - if actions == [] do - [] - else - [%{label: gettext("Actions"), key: :actions, sortable: false}] - end - - columns = [ - %{label: gettext("Purchased on"), key: :purchased_on, type: ComparableDate}, - %{label: gettext("Last used on"), key: :used_up_on, type: ComparableDate} | columns - ] - - columns = - if container == [] do - columns - else - [%{label: gettext("Container"), key: :container} | columns] - end - - columns = - if range == [] do - columns - else - [%{label: gettext("Range"), key: :range} | columns] - end - - columns = [ - %{label: gettext("Price paid"), key: :price_paid}, - %{label: gettext("CPR"), key: :cpr} - | columns - ] - - columns = - if show_used do - [ - %{label: gettext("Original Count"), key: :original_count}, - %{label: gettext("% left"), key: :remaining} - | columns - ] - else - columns - end - - columns = [ - %{label: if(show_used, do: gettext("Current Count"), else: gettext("Count")), key: :count} - | columns - ] - - columns = - if ammo_type == [] do - columns - else - [%{label: gettext("Ammo type"), key: :ammo_type} | columns] - end + [] + |> TableComponent.maybe_compose_columns( + %{label: gettext("Actions"), key: :actions, sortable: false}, + actions != [] + ) + |> TableComponent.maybe_compose_columns(%{ + label: gettext("Last used on"), + key: :used_up_on, + type: ComparableDate + }) + |> TableComponent.maybe_compose_columns(%{ + label: gettext("Purchased on"), + key: :purchased_on, + type: ComparableDate + }) + |> TableComponent.maybe_compose_columns( + %{label: gettext("Container"), key: :container}, + container != [] + ) + |> TableComponent.maybe_compose_columns( + %{label: gettext("Range"), key: :range}, + range != [] + ) + |> TableComponent.maybe_compose_columns(%{label: gettext("CPR"), key: :cpr}) + |> TableComponent.maybe_compose_columns(%{label: gettext("Price paid"), key: :price_paid}) + |> TableComponent.maybe_compose_columns( + %{label: gettext("% left"), key: :remaining}, + show_used + ) + |> TableComponent.maybe_compose_columns( + %{label: gettext("Original Count"), key: :original_count}, + show_used + ) + |> TableComponent.maybe_compose_columns(%{ + label: if(show_used, do: gettext("Current Count"), else: gettext("Count")), + key: :count + }) + |> TableComponent.maybe_compose_columns( + %{label: gettext("Ammo type"), key: :ammo_type}, + ammo_type != [] + ) containers = ammo_groups @@ -140,12 +129,7 @@ defmodule CanneryWeb.Components.AmmoGroupTableComponent do def render(assigns) do ~H"""
- <.live_component - module={CanneryWeb.Components.TableComponent} - id={"table-#{@id}"} - columns={@columns} - rows={@rows} - /> + <.live_component module={TableComponent} id={"table-#{@id}"} columns={@columns} rows={@rows} />
""" end diff --git a/lib/cannery_web/components/ammo_type_table_component.ex b/lib/cannery_web/components/ammo_type_table_component.ex index efa7494..574fac2 100644 --- a/lib/cannery_web/components/ammo_type_table_component.ex +++ b/lib/cannery_web/components/ammo_type_table_component.ex @@ -4,6 +4,7 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do """ use CanneryWeb, :live_component alias Cannery.{Accounts.User, ActivityLog, Ammo, Ammo.AmmoType} + alias CanneryWeb.Components.TableComponent alias Ecto.UUID alias Phoenix.LiveView.{Rendered, Socket} @@ -12,6 +13,7 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do %{ required(:id) => UUID.t(), required(:current_user) => User.t(), + optional(:type) => AmmoType.type() | nil, optional(:show_used) => boolean(), optional(:ammo_types) => [AmmoType.t()], optional(:actions) => Rendered.t(), @@ -24,6 +26,7 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do socket |> assign(assigns) |> assign_new(:show_used, fn -> false end) + |> assign_new(:type, fn -> :all end) |> assign_new(:actions, fn -> [] end) |> display_ammo_types() @@ -36,90 +39,118 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do ammo_types: ammo_types, current_user: current_user, show_used: show_used, + type: type, actions: actions } } = socket ) do - columns = + filtered_columns = [ - %{label: gettext("Name"), key: :name, type: :name}, - %{label: gettext("Bullet type"), key: :bullet_type, type: :string}, - %{label: gettext("Bullet core"), key: :bullet_core, type: :string}, %{label: gettext("Cartridge"), key: :cartridge, type: :string}, - %{label: gettext("Caliber"), key: :caliber, type: :string}, - %{label: gettext("Case material"), key: :case_material, type: :string}, + %{ + label: if(type == :shotgun, do: gettext("Gauge"), else: gettext("Caliber")), + key: :caliber, + type: :string + }, + %{label: gettext("Unfired shell length"), key: :unfired_length, type: :string}, + %{label: gettext("Brass height"), key: :brass_height, type: :string}, + %{label: gettext("Chamber size"), key: :chamber_size, type: :string}, + %{label: gettext("Chamber size"), key: :chamber_size, type: :string}, + %{label: gettext("Grains"), key: :grains, type: :string}, + %{label: gettext("Bullet type"), key: :bullet_type, type: :string}, + %{ + label: if(type == :shotgun, do: gettext("Slug core"), else: gettext("Bullet core")), + key: :bullet_core, + type: :string + }, %{label: gettext("Jacket type"), key: :jacket_type, type: :string}, - %{label: gettext("Muzzle velocity"), key: :muzzle_velocity, type: :string}, + %{label: gettext("Case material"), key: :case_material, type: :string}, + %{label: gettext("Wadding"), key: :wadding, type: :string}, + %{label: gettext("Shot type"), key: :shot_type, type: :string}, + %{label: gettext("Shot material"), key: :shot_material, type: :string}, + %{label: gettext("Shot size"), key: :shot_size, type: :string}, + %{label: gettext("Load grains"), key: :load_grains, type: :string}, + %{label: gettext("Shot charge weight"), key: :shot_charge_weight, type: :string}, %{label: gettext("Powder type"), key: :powder_type, type: :string}, %{ label: gettext("Powder grains per charge"), key: :powder_grains_per_charge, type: :string }, - %{label: gettext("Grains"), key: :grains, type: :string}, %{label: gettext("Pressure"), key: :pressure, type: :string}, + %{label: gettext("Dram equivalent"), key: :dram_equivalent, type: :string}, + %{label: gettext("Muzzle velocity"), key: :muzzle_velocity, type: :string}, %{label: gettext("Primer type"), key: :primer_type, type: :string}, %{label: gettext("Firing type"), key: :firing_type, type: :string}, - %{label: gettext("Tracer"), key: :tracer, type: :boolean}, - %{label: gettext("Incendiary"), key: :incendiary, type: :boolean}, - %{label: gettext("Blank"), key: :blank, type: :boolean}, - %{label: gettext("Corrosive"), key: :corrosive, type: :boolean}, - %{label: gettext("Manufacturer"), key: :manufacturer, type: :string}, - %{label: gettext("UPC"), key: "upc", type: :string} + %{label: gettext("Tracer"), key: :tracer, type: :atom}, + %{label: gettext("Incendiary"), key: :incendiary, type: :atom}, + %{label: gettext("Blank"), key: :blank, type: :atom}, + %{label: gettext("Corrosive"), key: :corrosive, type: :atom}, + %{label: gettext("Manufacturer"), key: :manufacturer, type: :string} ] |> Enum.filter(fn %{key: key, type: type} -> # remove columns if all values match defaults - default_value = if type == :boolean, do: false, else: nil + default_value = if type == :atom, do: false, else: nil ammo_types - |> Enum.any?(fn ammo_type -> - not (ammo_type |> Map.get(key) == default_value) - end) + |> Enum.any?(fn ammo_type -> Map.get(ammo_type, key, default_value) != default_value end) end) - |> Kernel.++([ - %{label: gettext("Rounds"), key: :round_count, type: :round_count} - ]) - |> Kernel.++( - if show_used do - [ - %{ - label: gettext("Used rounds"), - key: :used_round_count, - type: :used_round_count - }, - %{ - label: gettext("Total ever rounds"), - key: :historical_round_count, - type: :historical_round_count - } - ] - else - [] - end + + columns = + [%{label: gettext("Actions"), key: "actions", type: :actions, sortable: false}] + |> TableComponent.maybe_compose_columns(%{ + label: gettext("Average CPR"), + key: :avg_price_paid, + type: :avg_price_paid + }) + |> TableComponent.maybe_compose_columns( + %{ + label: gettext("Total ever packs"), + key: :historical_pack_count, + type: :historical_pack_count + }, + show_used ) - |> Kernel.++([%{label: gettext("Packs"), key: :ammo_count, type: :ammo_count}]) - |> Kernel.++( - if show_used do - [ - %{ - label: gettext("Used packs"), - key: :used_pack_count, - type: :used_pack_count - }, - %{ - label: gettext("Total ever packs"), - key: :historical_pack_count, - type: :historical_pack_count - } - ] - else - [] - end + |> TableComponent.maybe_compose_columns( + %{ + label: gettext("Used packs"), + key: :used_pack_count, + type: :used_pack_count + }, + show_used ) - |> Kernel.++([ - %{label: gettext("Average CPR"), key: :avg_price_paid, type: :avg_price_paid}, - %{label: gettext("Actions"), key: "actions", type: :actions, sortable: false} - ]) + |> TableComponent.maybe_compose_columns(%{ + label: gettext("Packs"), + key: :ammo_count, + type: :ammo_count + }) + |> TableComponent.maybe_compose_columns( + %{ + label: gettext("Total ever rounds"), + key: :historical_round_count, + type: :historical_round_count + }, + show_used + ) + |> TableComponent.maybe_compose_columns( + %{ + label: gettext("Used rounds"), + key: :used_round_count, + type: :used_round_count + }, + show_used + ) + |> TableComponent.maybe_compose_columns(%{ + label: gettext("Rounds"), + key: :round_count, + type: :round_count + }) + |> TableComponent.maybe_compose_columns(filtered_columns) + |> TableComponent.maybe_compose_columns( + %{label: gettext("Type"), key: :type, type: :atom}, + type in [:all, nil] + ) + |> TableComponent.maybe_compose_columns(%{label: gettext("Name"), key: :name, type: :name}) round_counts = ammo_types |> Ammo.get_round_count_for_ammo_types(current_user) packs_count = ammo_types |> Ammo.get_ammo_groups_count_for_types(current_user) @@ -162,12 +193,7 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do def render(assigns) do ~H"""
- <.live_component - module={CanneryWeb.Components.TableComponent} - id={"table-#{@id}"} - columns={@columns} - rows={@rows} - /> + <.live_component module={TableComponent} id={"table-#{@id}"} columns={@columns} rows={@rows} />
""" end @@ -179,7 +205,7 @@ defmodule CanneryWeb.Components.AmmoTypeTableComponent do end) end - defp get_ammo_type_value(:boolean, key, ammo_type, _other_data), + defp get_ammo_type_value(:atom, key, ammo_type, _other_data), do: ammo_type |> Map.get(key) |> humanize() defp get_ammo_type_value(:round_count, _key, %{id: ammo_type_id}, %{round_counts: round_counts}), diff --git a/lib/cannery_web/controllers/export_controller.ex b/lib/cannery_web/controllers/export_controller.ex index d24cc05..2d65cb0 100644 --- a/lib/cannery_web/controllers/export_controller.ex +++ b/lib/cannery_web/controllers/export_controller.ex @@ -3,7 +3,7 @@ defmodule CanneryWeb.ExportController do alias Cannery.{ActivityLog, Ammo, Containers} def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do - ammo_types = Ammo.list_ammo_types(current_user) + ammo_types = Ammo.list_ammo_types(current_user, :all) used_counts = ammo_types |> ActivityLog.get_used_count_for_ammo_types(current_user) round_counts = ammo_types |> Ammo.get_round_count_for_ammo_types(current_user) ammo_group_counts = ammo_types |> Ammo.get_ammo_groups_count_for_types(current_user) @@ -28,7 +28,7 @@ defmodule CanneryWeb.ExportController do }) end) - ammo_groups = Ammo.list_ammo_groups(nil, true, current_user) + ammo_groups = Ammo.list_ammo_groups(nil, :all, current_user, true) used_counts = ammo_groups |> ActivityLog.get_used_counts(current_user) original_counts = ammo_groups |> Ammo.get_original_counts(current_user) cprs = ammo_groups |> Ammo.get_cprs(current_user) @@ -48,7 +48,7 @@ defmodule CanneryWeb.ExportController do }) end) - shot_groups = ActivityLog.list_shot_groups(current_user) + shot_groups = ActivityLog.list_shot_groups(:all, current_user) containers = Containers.list_containers(current_user) diff --git a/lib/cannery_web/live/ammo_group_live/form_component.ex b/lib/cannery_web/live/ammo_group_live/form_component.ex index 510628f..a0ee557 100644 --- a/lib/cannery_web/live/ammo_group_live/form_component.ex +++ b/lib/cannery_web/live/ammo_group_live/form_component.ex @@ -26,7 +26,7 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do socket = socket |> assign(:ammo_group_create_limit, @ammo_group_create_limit) - |> assign(:ammo_types, Ammo.list_ammo_types(current_user)) + |> assign(:ammo_types, Ammo.list_ammo_types(current_user, :all)) |> assign_new(:containers, fn -> Containers.list_containers(current_user) end) params = diff --git a/lib/cannery_web/live/ammo_group_live/index.ex b/lib/cannery_web/live/ammo_group_live/index.ex index f422be5..cdb7181 100644 --- a/lib/cannery_web/live/ammo_group_live/index.ex +++ b/lib/cannery_web/live/ammo_group_live/index.ex @@ -8,11 +8,11 @@ defmodule CanneryWeb.AmmoGroupLive.Index do @impl true def mount(%{"search" => search}, _session, socket) do - {:ok, socket |> assign(show_used: false, search: search) |> display_ammo_groups()} + {:ok, socket |> assign(type: :all, show_used: false, search: search) |> display_ammo_groups()} end def mount(_params, _session, socket) do - {:ok, socket |> assign(show_used: false, search: nil) |> display_ammo_groups()} + {:ok, socket |> assign(type: :all, show_used: false, search: nil) |> display_ammo_groups()} end @impl true @@ -119,10 +119,36 @@ defmodule CanneryWeb.AmmoGroupLive.Index do {:noreply, socket} end + def handle_event("change_type", %{"ammo_type" => %{"type" => "rifle"}}, socket) do + {:noreply, socket |> assign(:type, :rifle) |> display_ammo_groups()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "shotgun"}}, socket) do + {:noreply, socket |> assign(:type, :shotgun) |> display_ammo_groups()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "pistol"}}, socket) do + {:noreply, socket |> assign(:type, :pistol) |> display_ammo_groups()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => _all}}, socket) do + {:noreply, socket |> assign(:type, :all) |> display_ammo_groups()} + end + defp display_ammo_groups( - %{assigns: %{search: search, current_user: current_user, show_used: show_used}} = socket + %{ + assigns: %{ + type: type, + search: search, + current_user: current_user, + show_used: show_used + } + } = socket ) do - ammo_groups = Ammo.list_ammo_groups(search, show_used, current_user) + # get total number of ammo groups to determine whether to display onboarding + # prompts + ammo_groups_count = Ammo.get_ammo_groups_count!(current_user, true) + ammo_groups = Ammo.list_ammo_groups(search, type, current_user, show_used) ammo_types_count = Ammo.get_ammo_types_count!(current_user) containers_count = Containers.get_containers_count!(current_user) @@ -130,7 +156,8 @@ defmodule CanneryWeb.AmmoGroupLive.Index do |> assign( ammo_groups: ammo_groups, ammo_types_count: ammo_types_count, - containers_count: containers_count + containers_count: containers_count, + ammo_groups_count: ammo_groups_count ) end end diff --git a/lib/cannery_web/live/ammo_group_live/index.html.heex b/lib/cannery_web/live/ammo_group_live/index.html.heex index ee45254..6a5b7c0 100644 --- a/lib/cannery_web/live/ammo_group_live/index.html.heex +++ b/lib/cannery_web/live/ammo_group_live/index.html.heex @@ -3,14 +3,6 @@ <%= gettext("Ammo") %> -

Enum.empty?() and @search |> is_nil()} - class="title text-xl text-primary-600" - > - <%= gettext("No Ammo") %> - <%= display_emoji("😔") %> -

- <%= cond do %> <% @containers_count == 0 -> %>
@@ -32,7 +24,12 @@ <%= dgettext("actions", "add an ammo type first") %>
- <% @ammo_groups |> Enum.empty?() and @search |> is_nil() -> %> + <% @ammo_groups_count == 0 -> %> +

+ <%= gettext("No ammo") %> + <%= display_emoji("😔") %> +

+ <.link patch={Routes.ammo_group_index_path(Endpoint, :new)} class="btn btn-primary"> <%= dgettext("actions", "Add your first box!") %> @@ -40,144 +37,168 @@ <.link patch={Routes.ammo_group_index_path(Endpoint, :new)} class="btn btn-primary"> <%= dgettext("actions", "Add Ammo") %> - <% end %> -
- <.form - :let={f} - for={%{}} - as={:search} - phx-change="search" - phx-submit="search" - class="grow self-stretch flex flex-col items-stretch" - > - <%= text_input(f, :search_term, - class: "input input-primary", - value: @search, - role: "search", - phx_debounce: 300, - placeholder: gettext("Search ammo") - ) %> - +
+ <.form + :let={f} + for={%{}} + as={:ammo_type} + phx-change="change_type" + phx-submit="change_type" + class="flex items-center" + > + <%= label(f, :type, gettext("Type"), class: "title text-primary-600 text-lg text-center") %> - <.toggle_button action="toggle_show_used" value={@show_used}> - - <%= gettext("Show used") %> - - -
+ <%= select( + f, + :type, + [ + {gettext("All"), :all}, + {gettext("Rifle"), :rifle}, + {gettext("Shotgun"), :shotgun}, + {gettext("Pistol"), :pistol} + ], + class: "mx-2 my-1 min-w-md input input-primary", + value: @type + ) %> + - <%= if @ammo_groups |> Enum.empty?() do %> -

- <%= gettext("No Ammo") %> - <%= display_emoji("😔") %> -

- <% else %> - <.live_component - module={CanneryWeb.Components.AmmoGroupTableComponent} - id="ammo-group-index-table" - ammo_groups={@ammo_groups} - current_user={@current_user} - show_used={@show_used} - > - <:ammo_type :let={%{name: ammo_type_name} = ammo_type}> - <.link navigate={Routes.ammo_type_show_path(Endpoint, :show, ammo_type)} class="link"> - <%= ammo_type_name %> - - - <:range :let={ammo_group}> -
- + <.form + :let={f} + for={%{}} + as={:search} + phx-change="search" + phx-submit="search" + class="grow flex items-center" + > + <%= text_input(f, :search_term, + class: "grow input input-primary", + value: @search, + role: "search", + phx_debounce: 300, + placeholder: gettext("Search ammo") + ) %> + - <.link - patch={Routes.ammo_group_index_path(Endpoint, :add_shot_group, ammo_group)} - class="mx-2 my-1 text-sm btn btn-primary" - > - <%= dgettext("actions", "Record shots") %> - -
- - <:container :let={{ammo_group, %{name: container_name} = container}}> -
- <.link - navigate={Routes.container_show_path(Endpoint, :show, container)} - class="mx-2 my-1 link" - > - <%= container_name %> - + <.toggle_button action="toggle_show_used" value={@show_used}> + + <%= gettext("Show used") %> + + +
- <.link - patch={Routes.ammo_group_index_path(Endpoint, :move, ammo_group)} - class="mx-2 my-1 text-sm btn btn-primary" - > - <%= dgettext("actions", "Move ammo") %> - -
- - <:actions :let={%{count: ammo_group_count} = ammo_group}> -
- <.link - navigate={Routes.ammo_group_show_path(Endpoint, :show, ammo_group)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "View ammo group of %{ammo_group_count} bullets", - ammo_group_count: ammo_group_count - ) - } - > - - + <%= if @ammo_groups |> Enum.empty?() do %> +

+ <%= gettext("No Ammo") %> + <%= display_emoji("😔") %> +

+ <% else %> + <.live_component + module={CanneryWeb.Components.AmmoGroupTableComponent} + id="ammo-group-index-table" + ammo_groups={@ammo_groups} + current_user={@current_user} + show_used={@show_used} + > + <:ammo_type :let={%{name: ammo_type_name} = ammo_type}> + <.link navigate={Routes.ammo_type_show_path(Endpoint, :show, ammo_type)} class="link"> + <%= ammo_type_name %> + + + <:range :let={ammo_group}> +
+ - <.link - patch={Routes.ammo_group_index_path(Endpoint, :edit, ammo_group)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "Edit ammo group of %{ammo_group_count} bullets", - ammo_group_count: ammo_group_count - ) - } - > - - + <.link + patch={Routes.ammo_group_index_path(Endpoint, :add_shot_group, ammo_group)} + class="mx-2 my-1 text-sm btn btn-primary" + > + <%= dgettext("actions", "Record shots") %> + +
+ + <:container :let={{ammo_group, %{name: container_name} = container}}> +
+ <.link + navigate={Routes.container_show_path(Endpoint, :show, container)} + class="mx-2 my-1 link" + > + <%= container_name %> + - <.link - patch={Routes.ammo_group_index_path(Endpoint, :clone, ammo_group)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "Clone ammo group of %{ammo_group_count} bullets", - ammo_group_count: ammo_group_count - ) - } - > - - + <.link + patch={Routes.ammo_group_index_path(Endpoint, :move, ammo_group)} + class="mx-2 my-1 text-sm btn btn-primary" + > + <%= dgettext("actions", "Move ammo") %> + +
+ + <:actions :let={%{count: ammo_group_count} = ammo_group}> +
+ <.link + navigate={Routes.ammo_group_show_path(Endpoint, :show, ammo_group)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "View ammo group of %{ammo_group_count} bullets", + ammo_group_count: ammo_group_count + ) + } + > + + - <.link - href="#" - class="text-primary-600 link" - phx-click="delete" - phx-value-id={ammo_group.id} - data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")} - aria-label={ - dgettext("actions", "Delete ammo group of %{ammo_group_count} bullets", - ammo_group_count: ammo_group_count - ) - } - > - - -
- - + <.link + patch={Routes.ammo_group_index_path(Endpoint, :edit, ammo_group)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "Edit ammo group of %{ammo_group_count} bullets", + ammo_group_count: ammo_group_count + ) + } + > + + + + <.link + patch={Routes.ammo_group_index_path(Endpoint, :clone, ammo_group)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "Clone ammo group of %{ammo_group_count} bullets", + ammo_group_count: ammo_group_count + ) + } + > + + + + <.link + href="#" + class="text-primary-600 link" + phx-click="delete" + phx-value-id={ammo_group.id} + data-confirm={dgettext("prompts", "Are you sure you want to delete this ammo?")} + aria-label={ + dgettext("actions", "Delete ammo group of %{ammo_group_count} bullets", + ammo_group_count: ammo_group_count + ) + } + > + + +
+ + + <% end %> <% end %> diff --git a/lib/cannery_web/live/ammo_type_live/form_component.html.heex b/lib/cannery_web/live/ammo_type_live/form_component.html.heex index f4c67f3..32aa250 100644 --- a/lib/cannery_web/live/ammo_type_live/form_component.html.heex +++ b/lib/cannery_web/live/ammo_type_live/form_component.html.heex @@ -15,9 +15,19 @@ :if={@changeset.action && not @changeset.valid?()} class="invalid-feedback col-span-3 text-center" > - <%= changeset_errors(@changeset) %> + <%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %> + <%= label(f, :type, gettext("Type"), class: "title text-lg text-primary-600") %> + <%= select( + f, + :type, + [{gettext("Rifle"), :rifle}, {gettext("Shotgun"), :shotgun}, {gettext("Pistol"), :pistol}], + class: "text-center col-span-2 input input-primary", + maxlength: 255 + ) %> + <%= error_tag(f, :type, "col-span-3 text-center") %> + <%= 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", @@ -34,37 +44,31 @@ ) %> <%= error_tag(f, :desc, "col-span-3 text-center") %> - <.link - href="https://shootersreference.com/reloadingdata/bullet_abbreviations/" - class="col-span-3 text-center link title text-md text-primary-600" - > - <%= gettext("Example bullet type abbreviations") %> - - <%= label(f, :bullet_type, gettext("Bullet type"), class: "title text-lg text-primary-600") %> - <%= text_input(f, :bullet_type, - class: "text-center col-span-2 input input-primary", - maxlength: 255, - placeholder: gettext("FMJ") - ) %> - <%= error_tag(f, :bullet_type, "col-span-3 text-center") %> +

+ <%= gettext("Dimensions") %> +

- <%= label(f, :bullet_core, gettext("Bullet core"), class: "title text-lg text-primary-600") %> - <%= text_input(f, :bullet_core, - class: "text-center col-span-2 input input-primary", - maxlength: 255, - placeholder: gettext("Steel") - ) %> - <%= error_tag(f, :bullet_core, "col-span-3 text-center") %> + <%= if Changeset.get_field(@changeset, :type) in [:rifle, :pistol] do %> + <%= 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, + placeholder: gettext("5.56x46mm NATO") + ) %> + <%= error_tag(f, :cartridge, "col-span-3 text-center") %> + <% else %> + <%= hidden_input(f, :cartridge, value: nil) %> + <% end %> - <%= 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, - placeholder: gettext("5.56x46mm NATO") + <%= label( + f, + :caliber, + if(Changeset.get_field(@changeset, :type) == :shotgun, + do: gettext("Gauge"), + else: gettext("Caliber") + ), + class: "title text-lg text-primary-600" ) %> - <%= error_tag(f, :cartridge, "col-span-3 text-center") %> - - <%= label(f, :caliber, gettext("Caliber"), class: "title text-lg text-primary-600") %> <%= text_input(f, :caliber, class: "text-center col-span-2 input input-primary", maxlength: 255, @@ -72,48 +76,38 @@ ) %> <%= error_tag(f, :caliber, "col-span-3 text-center") %> - <%= 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, - placeholder: gettext("Brass") - ) %> - <%= error_tag(f, :case_material, "col-span-3 text-center") %> + <%= if Changeset.get_field(@changeset, :type) == :shotgun do %> + <%= label(f, :unfired_length, gettext("Unfired shell length"), + class: "title text-lg text-primary-600" + ) %> + <%= text_input(f, :unfired_length, + class: "text-center col-span-2 input input-primary", + maxlength: 255 + ) %> + <%= error_tag(f, :unfired_length, "col-span-3 text-center") %> - <%= 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, - placeholder: gettext("Bimetal") - ) %> - <%= error_tag(f, :case_material, "col-span-3 text-center") %> + <%= 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 + ) %> + <%= error_tag(f, :brass_height, "col-span-3 text-center") %> - <%= label(f, :muzzle_velocity, gettext("Muzzle velocity"), - class: "title text-lg text-primary-600" - ) %> - <%= 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") %> + <%= 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 + ) %> + <%= 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) %> + <% end %> - <%= 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 - ) %> - <%= error_tag(f, :powder_type, "col-span-3 text-center") %> - - <%= 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, - 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") %> +

+ <%= gettext("Projectile") %> +

<%= label(f, :grains, gettext("Grains"), class: "title text-lg text-primary-600") %> <%= number_input(f, :grains, @@ -123,6 +117,143 @@ ) %> <%= error_tag(f, :grains, "col-span-3 text-center") %> + <%= label f, :bullet_type, class: "flex title text-lg text-primary-600 space-x-2" do %> +

<%= gettext("Bullet type") %>

+ + <.link + href="https://shootersreference.com/reloadingdata/bullet_abbreviations/" + class="link" + target="_blank" + rel="noopener noreferrer" + > + + + <% end %> + <%= text_input(f, :bullet_type, + class: "text-center col-span-2 input input-primary", + maxlength: 255, + placeholder: gettext("FMJ") + ) %> + <%= error_tag(f, :bullet_type, "col-span-3 text-center") %> + + <%= label( + f, + :bullet_core, + if(Changeset.get_field(@changeset, :type) == :shotgun, + do: gettext("Slug core"), + else: gettext("Bullet core") + ), + class: "title text-lg text-primary-600" + ) %> + <%= text_input(f, :bullet_core, + class: "text-center col-span-2 input input-primary", + maxlength: 255, + placeholder: gettext("Steel") + ) %> + <%= error_tag(f, :bullet_core, "col-span-3 text-center") %> + + <%= if Changeset.get_field(@changeset, :type) in [:rifle, :pistol] do %> + <%= 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, + placeholder: gettext("Bimetal") + ) %> + <%= error_tag(f, :jacket_type, "col-span-3 text-center") %> + <% else %> + <%= 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, + class: "text-center col-span-2 input input-primary", + maxlength: 255, + placeholder: gettext("Brass") + ) %> + <%= error_tag(f, :case_material, "col-span-3 text-center") %> + + <%= if Changeset.get_field(@changeset, :type) == :shotgun do %> + <%= 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 + ) %> + <%= 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, + class: "text-center col-span-2 input input-primary", + maxlength: 255, + placeholder: gettext("Target, bird, buck, etc") + ) %> + <%= 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, + class: "text-center col-span-2 input input-primary", + maxlength: 255 + ) %> + <%= 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, + class: "text-center col-span-2 input input-primary", + maxlength: 255 + ) %> + <%= 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, + step: "1", + class: "text-center col-span-2 input input-primary", + min: 1 + ) %> + <%= error_tag(f, :load_grains, "col-span-3 text-center") %> + + <%= label(f, :shot_charge_weight, gettext("Shot charge weight"), + class: "title text-lg text-primary-600" + ) %> + <%= text_input(f, :shot_charge_weight, + class: "text-center col-span-2 input input-primary", + maxlength: 255 + ) %> + <%= 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) %> + <% end %> + +

+ <%= gettext("Powder") %> +

+ + <%= 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 + ) %> + <%= error_tag(f, :powder_type, "col-span-3 text-center") %> + + <%= if Changeset.get_field(@changeset, :type) in [:rifle, :pistol] do %> + <%= 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, + 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") %> + <% else %> + <%= 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, class: "text-center col-span-2 input input-primary", @@ -131,6 +262,37 @@ ) %> <%= error_tag(f, :pressure, "col-span-3 text-center") %> + <%= if Changeset.get_field(@changeset, :type) == :shotgun do %> + <%= label(f, :dram_equivalent, gettext("Dram equivalent"), + class: "title text-lg text-primary-600" + ) %> + <%= text_input(f, :dram_equivalent, + class: "text-center col-span-2 input input-primary", + maxlength: 255 + ) %> + <%= error_tag(f, :dram_equivalent, "col-span-3 text-center") %> + <% else %> + <%= hidden_input(f, :dram_equivalent, value: nil) %> + <% end %> + + <%= if Changeset.get_field(@changeset, :type) in [:rifle, :pistol] do %> + <%= label(f, :muzzle_velocity, gettext("Muzzle velocity"), + class: "title text-lg text-primary-600" + ) %> + <%= 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") %> + <% else %> + <%= hidden_input(f, :muzzle_velocity, value: nil) %> + <% end %> + +

+ <%= gettext("Primer") %> +

+ <%= 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", @@ -147,6 +309,10 @@ ) %> <%= error_tag(f, :firing_type, "col-span-3 text-center") %> +

+ <%= gettext("Attributes") %> +

+ <%= 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") %> @@ -163,6 +329,10 @@ <%= checkbox(f, :corrosive, class: "text-center col-span-2 checkbox") %> <%= error_tag(f, :corrosive, "col-span-3 text-center") %> +

+ <%= gettext("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", diff --git a/lib/cannery_web/live/ammo_type_live/index.ex b/lib/cannery_web/live/ammo_type_live/index.ex index d8ef33c..1f06aaa 100644 --- a/lib/cannery_web/live/ammo_type_live/index.ex +++ b/lib/cannery_web/live/ammo_type_live/index.ex @@ -8,11 +8,11 @@ defmodule CanneryWeb.AmmoTypeLive.Index do @impl true def mount(%{"search" => search}, _session, socket) do - {:ok, socket |> assign(show_used: false, search: search) |> list_ammo_types()} + {:ok, socket |> assign(type: :all, show_used: false, search: search) |> list_ammo_types()} end def mount(_params, _session, socket) do - {:ok, socket |> assign(show_used: false, search: nil) |> list_ammo_types()} + {:ok, socket |> assign(type: :all, show_used: false, search: nil) |> list_ammo_types()} end @impl true @@ -86,7 +86,29 @@ defmodule CanneryWeb.AmmoTypeLive.Index do {:noreply, socket |> push_patch(to: search_path)} end - defp list_ammo_types(%{assigns: %{search: search, current_user: current_user}} = socket) do - socket |> assign(ammo_types: Ammo.list_ammo_types(search, current_user)) + def handle_event("change_type", %{"ammo_type" => %{"type" => "rifle"}}, socket) do + {:noreply, socket |> assign(:type, :rifle) |> list_ammo_types()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "shotgun"}}, socket) do + {:noreply, socket |> assign(:type, :shotgun) |> list_ammo_types()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "pistol"}}, socket) do + {:noreply, socket |> assign(:type, :pistol) |> list_ammo_types()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => _all}}, socket) do + {:noreply, socket |> assign(:type, :all) |> list_ammo_types()} + end + + defp list_ammo_types( + %{assigns: %{type: type, search: search, current_user: current_user}} = socket + ) do + socket + |> assign( + ammo_types: Ammo.list_ammo_types(search, current_user, type), + ammo_types_count: Ammo.get_ammo_types_count!(current_user) + ) end end diff --git a/lib/cannery_web/live/ammo_type_live/index.html.heex b/lib/cannery_web/live/ammo_type_live/index.html.heex index 18b2865..682fae2 100644 --- a/lib/cannery_web/live/ammo_type_live/index.html.heex +++ b/lib/cannery_web/live/ammo_type_live/index.html.heex @@ -3,7 +3,7 @@ <%= gettext("Catalog") %> - <%= if @ammo_types |> Enum.empty?() and @search |> is_nil() do %> + <%= if @ammo_types_count == 0 do %>

<%= gettext("No Ammo types") %> <%= display_emoji("😔") %> @@ -17,17 +17,41 @@ <%= dgettext("actions", "New Ammo type") %> -
+
+ <.form + :let={f} + for={%{}} + as={:ammo_type} + phx-change="change_type" + phx-submit="change_type" + class="flex items-center" + > + <%= label(f, :type, gettext("Type"), class: "title text-primary-600 text-lg text-center") %> + + <%= select( + f, + :type, + [ + {gettext("All"), :all}, + {gettext("Rifle"), :rifle}, + {gettext("Shotgun"), :shotgun}, + {gettext("Pistol"), :pistol} + ], + class: "mx-2 my-1 min-w-md input input-primary", + value: @type + ) %> + + <.form :let={f} for={%{}} as={:search} phx-change="search" phx-submit="search" - class="grow self-stretch flex flex-col items-stretch" + class="grow flex items-center" > <%= text_input(f, :search_term, - class: "input input-primary", + class: "grow input input-primary", value: @search, role: "search", phx_debounce: 300, @@ -55,6 +79,7 @@ ammo_types={@ammo_types} current_user={@current_user} show_used={@show_used} + type={@type} > <:actions :let={ammo_type}>
diff --git a/lib/cannery_web/live/ammo_type_live/show.ex b/lib/cannery_web/live/ammo_type_live/show.ex index b2e1689..f739455 100644 --- a/lib/cannery_web/live/ammo_type_live/show.ex +++ b/lib/cannery_web/live/ammo_type_live/show.ex @@ -7,28 +7,6 @@ defmodule CanneryWeb.AmmoTypeLive.Show do alias Cannery.{ActivityLog, Ammo, Ammo.AmmoType, Containers} alias CanneryWeb.Endpoint - @fields_list [ - %{label: gettext("Bullet type:"), key: :bullet_type, type: :string}, - %{label: gettext("Bullet core:"), key: :bullet_core, type: :string}, - %{label: gettext("Cartridge:"), key: :cartridge, type: :string}, - %{label: gettext("Caliber:"), key: :caliber, type: :string}, - %{label: gettext("Case material:"), key: :case_material, type: :string}, - %{label: gettext("Jacket type:"), key: :jacket_type, type: :string}, - %{label: gettext("Muzzle velocity:"), key: :muzzle_velocity, type: :string}, - %{label: gettext("Powder type:"), key: :powder_type, type: :string}, - %{label: gettext("Powder grains per charge:"), key: :powder_grains_per_charge, type: :string}, - %{label: gettext("Grains:"), key: :grains, type: :string}, - %{label: gettext("Pressure:"), key: :pressure, type: :string}, - %{label: gettext("Primer type:"), key: :primer_type, type: :string}, - %{label: gettext("Firing type:"), key: :firing_type, type: :string}, - %{label: gettext("Tracer:"), key: :tracer, type: :boolean}, - %{label: gettext("Incendiary:"), key: :incendiary, type: :boolean}, - %{label: gettext("Blank:"), key: :blank, type: :boolean}, - %{label: gettext("Corrosive:"), key: :corrosive, type: :boolean}, - %{label: gettext("Manufacturer:"), key: :manufacturer, type: :string}, - %{label: gettext("UPC:"), key: :upc, type: :string} - ] - @impl true def mount(_params, _session, socket), do: {:ok, socket |> assign(show_used: false, view_table: true)} @@ -65,8 +43,8 @@ defmodule CanneryWeb.AmmoTypeLive.Show do socket, %AmmoType{name: ammo_type_name} = ammo_type ) do - fields_to_display = - @fields_list + custom_fields? = + fields_to_display(ammo_type) |> Enum.any?(fn %{key: field, type: type} -> default_value = case type do @@ -125,8 +103,8 @@ defmodule CanneryWeb.AmmoTypeLive.Show do packs_count: ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user), used_packs_count: used_packs_count, historical_packs_count: historical_packs_count, - fields_list: @fields_list, - fields_to_display: fields_to_display + fields_to_display: fields_to_display(ammo_type), + custom_fields?: custom_fields? ) end @@ -138,6 +116,48 @@ defmodule CanneryWeb.AmmoTypeLive.Show do socket |> display_ammo_type(ammo_type) end + defp fields_to_display(%AmmoType{type: type}) do + [ + %{label: gettext("Cartridge:"), key: :cartridge, type: :string}, + %{ + label: if(type == :shotgun, do: gettext("Gauge:"), else: gettext("Caliber:")), + key: :caliber, + type: :string + }, + %{label: gettext("Unfired length:"), key: :unfired_length, type: :string}, + %{label: gettext("Brass height:"), key: :brass_height, type: :string}, + %{label: gettext("Chamber size:"), key: :chamber_size, type: :string}, + %{label: gettext("Grains:"), key: :grains, type: :string}, + %{label: gettext("Bullet type:"), key: :bullet_type, type: :string}, + %{label: gettext("Bullet core:"), key: :bullet_core, type: :string}, + %{label: gettext("Jacket type:"), key: :jacket_type, type: :string}, + %{label: gettext("Case material:"), key: :case_material, type: :string}, + %{label: gettext("Wadding:"), key: :wadding, type: :string}, + %{label: gettext("Shot type:"), key: :shot_type, type: :string}, + %{label: gettext("Shot material:"), key: :shot_material, type: :string}, + %{label: gettext("Shot size:"), key: :shot_size, type: :string}, + %{label: gettext("Load grains:"), key: :load_grains, type: :string}, + %{label: gettext("Shot charge weight:"), key: :shot_charge_weight, type: :string}, + %{label: gettext("Powder type:"), key: :powder_type, type: :string}, + %{ + label: gettext("Powder grains per charge:"), + key: :powder_grains_per_charge, + type: :string + }, + %{label: gettext("Pressure:"), key: :pressure, type: :string}, + %{label: gettext("Dram equivalent:"), key: :dram_equivalent, type: :string}, + %{label: gettext("Muzzle velocity:"), key: :muzzle_velocity, type: :string}, + %{label: gettext("Primer type:"), key: :primer_type, type: :string}, + %{label: gettext("Firing type:"), key: :firing_type, type: :string}, + %{label: gettext("Tracer:"), key: :tracer, type: :boolean}, + %{label: gettext("Incendiary:"), key: :incendiary, type: :boolean}, + %{label: gettext("Blank:"), key: :blank, type: :boolean}, + %{label: gettext("Corrosive:"), key: :corrosive, type: :boolean}, + %{label: gettext("Manufacturer:"), key: :manufacturer, type: :string}, + %{label: gettext("UPC:"), key: :upc, type: :string} + ] + end + @spec display_currency(float()) :: String.t() defp display_currency(float), do: :erlang.float_to_binary(float, decimals: 2) end diff --git a/lib/cannery_web/live/ammo_type_live/show.html.heex b/lib/cannery_web/live/ammo_type_live/show.html.heex index aeb852c..56291ec 100644 --- a/lib/cannery_web/live/ammo_type_live/show.html.heex +++ b/lib/cannery_web/live/ammo_type_live/show.html.heex @@ -42,9 +42,26 @@
- <%= if @fields_to_display do %> + <%= if @ammo_type.type || @custom_fields? do %>
- <%= for %{label: label, key: key, type: type} <- @fields_list do %> +

+ <%= gettext("Type") %> +

+ + + <%= case @ammo_type.type do %> + <% :shotgun -> %> + <%= gettext("Shotgun") %> + <% :rifle -> %> + <%= gettext("Rifle") %> + <% :pistol -> %> + <%= gettext("Pistol") %> + <% _ -> %> + <%= gettext("None specified") %> + <% end %> + + + <%= for %{label: label, key: key, type: type} <- @fields_to_display do %> <%= if @ammo_type |> Map.get(key) do %>

<%= label %> diff --git a/lib/cannery_web/live/container_live/index.html.heex b/lib/cannery_web/live/container_live/index.html.heex index 3ba8a7a..8d8a22d 100644 --- a/lib/cannery_web/live/container_live/index.html.heex +++ b/lib/cannery_web/live/container_live/index.html.heex @@ -17,17 +17,17 @@ <%= dgettext("actions", "New Container") %> -
+
<.form :let={f} for={%{}} as={:search} phx-change="search" phx-submit="search" - class="grow self-stretch flex flex-col items-stretch" + class="grow flex items-center" > <%= text_input(f, :search_term, - class: "input input-primary", + class: "grow input input-primary", value: @search, role: "search", phx_debounce: 300, @@ -41,80 +41,22 @@
- <% end %> - <%= if @containers |> Enum.empty?() do %> -

- <%= gettext("No containers") %> - <%= display_emoji("😔") %> -

- <% else %> - <%= if @view_table do %> - <.live_component - module={CanneryWeb.Components.ContainerTableComponent} - id="containers_index_table" - action={@live_action} - containers={@containers} - current_user={@current_user} - > - <:tag_actions :let={container}> -
- <.link - patch={Routes.container_index_path(Endpoint, :edit_tags, container)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "Tag %{container_name}", container_name: container.name) - } - > - - -
- - <:actions :let={container}> - <.link - patch={Routes.container_index_path(Endpoint, :edit, container)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "Edit %{container_name}", container_name: container.name) - } - > - - - - <.link - patch={Routes.container_index_path(Endpoint, :clone, container)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "Clone %{container_name}", container_name: container.name) - } - > - - - - <.link - href="#" - class="text-primary-600 link" - phx-click="delete" - phx-value-id={container.id} - data-confirm={ - dgettext("prompts", "Are you sure you want to delete %{name}?", name: container.name) - } - aria-label={ - dgettext("actions", "Delete %{container_name}", container_name: container.name) - } - > - - - - + <%= if @containers |> Enum.empty?() do %> +

+ <%= gettext("No containers") %> + <%= display_emoji("😔") %> +

<% else %> -
- <.container_card - :for={container <- @containers} - container={container} + <%= if @view_table do %> + <.live_component + module={CanneryWeb.Components.ContainerTableComponent} + id="containers_index_table" + action={@live_action} + containers={@containers} current_user={@current_user} > - <:tag_actions> + <:tag_actions :let={container}>
<.link patch={Routes.container_index_path(Endpoint, :edit_tags, container)} @@ -127,42 +69,104 @@
- <.link - patch={Routes.container_index_path(Endpoint, :edit, container)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "Edit %{container_name}", container_name: container.name) - } - > - - + <:actions :let={container}> + <.link + patch={Routes.container_index_path(Endpoint, :edit, container)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "Edit %{container_name}", container_name: container.name) + } + > + + - <.link - patch={Routes.container_index_path(Endpoint, :clone, container)} - class="text-primary-600 link" - aria-label={ - dgettext("actions", "Clone %{container_name}", container_name: container.name) - } - > - - + <.link + patch={Routes.container_index_path(Endpoint, :clone, container)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "Clone %{container_name}", container_name: container.name) + } + > + + - <.link - href="#" - class="text-primary-600 link" - phx-click="delete" - phx-value-id={container.id} - data-confirm={ - dgettext("prompts", "Are you sure you want to delete %{name}?", name: container.name) - } - aria-label={ - dgettext("actions", "Delete %{container_name}", container_name: container.name) - } + <.link + href="#" + class="text-primary-600 link" + phx-click="delete" + phx-value-id={container.id} + data-confirm={ + dgettext("prompts", "Are you sure you want to delete %{name}?", + name: container.name + ) + } + aria-label={ + dgettext("actions", "Delete %{container_name}", container_name: container.name) + } + > + + + + + <% else %> +
+ <.container_card + :for={container <- @containers} + container={container} + current_user={@current_user} > - - - -
+ <:tag_actions> +
+ <.link + patch={Routes.container_index_path(Endpoint, :edit_tags, container)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "Tag %{container_name}", container_name: container.name) + } + > + + +
+ + <.link + patch={Routes.container_index_path(Endpoint, :edit, container)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "Edit %{container_name}", container_name: container.name) + } + > + + + + <.link + patch={Routes.container_index_path(Endpoint, :clone, container)} + class="text-primary-600 link" + aria-label={ + dgettext("actions", "Clone %{container_name}", container_name: container.name) + } + > + + + + <.link + href="#" + class="text-primary-600 link" + phx-click="delete" + phx-value-id={container.id} + data-confirm={ + dgettext("prompts", "Are you sure you want to delete %{name}?", + name: container.name + ) + } + aria-label={ + dgettext("actions", "Delete %{container_name}", container_name: container.name) + } + > + + + +
+ <% end %> <% end %> <% end %>
diff --git a/lib/cannery_web/live/container_live/show.ex b/lib/cannery_web/live/container_live/show.ex index 982d1c3..8055d3c 100644 --- a/lib/cannery_web/live/container_live/show.ex +++ b/lib/cannery_web/live/container_live/show.ex @@ -11,7 +11,7 @@ defmodule CanneryWeb.ContainerLive.Show do @impl true def mount(_params, _session, socket), - do: {:ok, socket |> assign(show_used: false, view_table: true)} + do: {:ok, socket |> assign(type: :all, view_table: true)} @impl true def handle_params(%{"id" => id}, _session, %{assigns: %{current_user: current_user}} = socket) do @@ -82,22 +82,34 @@ defmodule CanneryWeb.ContainerLive.Show do {:noreply, socket} end - def handle_event("toggle_show_used", _params, %{assigns: %{show_used: show_used}} = socket) do - {:noreply, socket |> assign(:show_used, !show_used) |> render_container()} - end - def handle_event("toggle_table", _params, %{assigns: %{view_table: view_table}} = socket) do {:noreply, socket |> assign(:view_table, !view_table) |> render_container()} end + def handle_event("change_type", %{"ammo_type" => %{"type" => "rifle"}}, socket) do + {:noreply, socket |> assign(:type, :rifle) |> render_container()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "shotgun"}}, socket) do + {:noreply, socket |> assign(:type, :shotgun) |> render_container()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "pistol"}}, socket) do + {:noreply, socket |> assign(:type, :pistol) |> render_container()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => _all}}, socket) do + {:noreply, socket |> assign(:type, :all) |> render_container()} + end + @spec render_container(Socket.t(), Container.id(), User.t()) :: Socket.t() defp render_container( - %{assigns: %{live_action: live_action, show_used: show_used}} = socket, + %{assigns: %{type: type, live_action: live_action}} = socket, id, current_user ) do %{name: container_name} = container = Containers.get_container!(id, current_user) - ammo_groups = Ammo.list_ammo_groups_for_container(container, current_user, show_used) + ammo_groups = Ammo.list_ammo_groups_for_container(container, type, current_user) original_counts = ammo_groups |> Ammo.get_original_counts(current_user) cprs = ammo_groups |> Ammo.get_cprs(current_user) last_used_dates = ammo_groups |> ActivityLog.get_last_used_dates(current_user) @@ -113,6 +125,7 @@ defmodule CanneryWeb.ContainerLive.Show do |> assign( container: container, round_count: Ammo.get_round_count_for_container!(container, current_user), + ammo_groups_count: Ammo.get_ammo_groups_count_for_container!(container, current_user), ammo_groups: ammo_groups, original_counts: original_counts, cprs: cprs, diff --git a/lib/cannery_web/live/container_live/show.html.heex b/lib/cannery_web/live/container_live/show.html.heex index 824f1d8..4fc3e85 100644 --- a/lib/cannery_web/live/container_live/show.html.heex +++ b/lib/cannery_web/live/container_live/show.html.heex @@ -18,22 +18,15 @@ <%= @container.location %> - <%= unless @ammo_groups |> Enum.empty?() do %> - - <%= gettext("Packs:") %> - <%= @ammo_groups |> Enum.reject(fn %{count: count} -> count in [0, nil] end) |> Enum.count() %> - + + <%= gettext("Packs:") %> + <%= @ammo_groups_count %> + - - <%= gettext("Total packs:") %> - <%= Enum.count(@ammo_groups) %> - - - - <%= gettext("Rounds:") %> - <%= @round_count %> - - <% end %> + + <%= gettext("Rounds:") %> + <%= @round_count %> +
<.link @@ -93,11 +86,29 @@
- <.toggle_button action="toggle_show_used" value={@show_used}> - - <%= gettext("Show used") %> - - + <.form + :let={f} + for={%{}} + as={:ammo_type} + phx-change="change_type" + phx-submit="change_type" + class="flex items-center" + > + <%= label(f, :type, gettext("Type"), class: "title text-primary-600 text-lg text-center") %> + + <%= select( + f, + :type, + [ + {gettext("All"), :all}, + {gettext("Rifle"), :rifle}, + {gettext("Shotgun"), :shotgun}, + {gettext("Pistol"), :pistol} + ], + class: "mx-2 my-1 min-w-md input input-primary", + value: @type + ) %> + <.toggle_button action="toggle_table" value={@view_table}> @@ -118,7 +129,7 @@ id="ammo-type-show-table" ammo_groups={@ammo_groups} current_user={@current_user} - show_used={@show_used} + show_used={false} > <:ammo_type :let={%{name: ammo_type_name} = ammo_type}> <.link navigate={Routes.ammo_type_show_path(Endpoint, :show, ammo_type)} class="link"> diff --git a/lib/cannery_web/live/range_live/index.ex b/lib/cannery_web/live/range_live/index.ex index 2d00cc2..28ffcd0 100644 --- a/lib/cannery_web/live/range_live/index.ex +++ b/lib/cannery_web/live/range_live/index.ex @@ -10,11 +10,11 @@ defmodule CanneryWeb.RangeLive.Index do @impl true def mount(%{"search" => search}, _session, socket) do - {:ok, socket |> assign(search: search) |> display_shot_groups()} + {:ok, socket |> assign(type: :all, search: search) |> display_shot_groups()} end def mount(_params, _session, socket) do - {:ok, socket |> assign(search: nil) |> display_shot_groups()} + {:ok, socket |> assign(type: :all, search: nil) |> display_shot_groups()} end @impl true @@ -102,9 +102,27 @@ defmodule CanneryWeb.RangeLive.Index do {:noreply, socket |> push_patch(to: Routes.range_index_path(Endpoint, :search, search_term))} end + def handle_event("change_type", %{"ammo_type" => %{"type" => "rifle"}}, socket) do + {:noreply, socket |> assign(:type, :rifle) |> display_shot_groups()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "shotgun"}}, socket) do + {:noreply, socket |> assign(:type, :shotgun) |> display_shot_groups()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => "pistol"}}, socket) do + {:noreply, socket |> assign(:type, :pistol) |> display_shot_groups()} + end + + def handle_event("change_type", %{"ammo_type" => %{"type" => _all}}, socket) do + {:noreply, socket |> assign(:type, :all) |> display_shot_groups()} + end + @spec display_shot_groups(Socket.t()) :: Socket.t() - defp display_shot_groups(%{assigns: %{search: search, current_user: current_user}} = socket) do - shot_groups = ActivityLog.list_shot_groups(search, current_user) + defp display_shot_groups( + %{assigns: %{type: type, search: search, current_user: current_user}} = socket + ) do + shot_groups = ActivityLog.list_shot_groups(search, type, current_user) ammo_groups = Ammo.list_staged_ammo_groups(current_user) chart_data = shot_groups |> get_chart_data_for_shot_group() original_counts = ammo_groups |> Ammo.get_original_counts(current_user) diff --git a/lib/cannery_web/live/range_live/index.html.heex b/lib/cannery_web/live/range_live/index.html.heex index 13d1723..3b54e67 100644 --- a/lib/cannery_web/live/range_live/index.html.heex +++ b/lib/cannery_web/live/range_live/index.html.heex @@ -74,17 +74,41 @@ <%= dgettext("errors", "Your browser does not support the canvas element.") %> -
+
+ <.form + :let={f} + for={%{}} + as={:ammo_type} + phx-change="change_type" + phx-submit="change_type" + class="flex items-center" + > + <%= label(f, :type, gettext("Type"), class: "title text-primary-600 text-lg text-center") %> + + <%= select( + f, + :type, + [ + {gettext("All"), :all}, + {gettext("Rifle"), :rifle}, + {gettext("Shotgun"), :shotgun}, + {gettext("Pistol"), :pistol} + ], + class: "mx-2 my-1 min-w-md input input-primary", + value: @type + ) %> + + <.form :let={f} for={%{}} as={:search} phx-change="search" phx-submit="search" - class="grow self-stretch flex flex-col items-stretch" + class="grow flex items-center" > <%= text_input(f, :search_term, - class: "input input-primary", + class: "grow input input-primary", value: @search, role: "search", phx_debounce: 300, diff --git a/lib/cannery_web/live/tag_live/index.html.heex b/lib/cannery_web/live/tag_live/index.html.heex index d491ae3..7c7c8dc 100644 --- a/lib/cannery_web/live/tag_live/index.html.heex +++ b/lib/cannery_web/live/tag_live/index.html.heex @@ -18,57 +18,57 @@ <.link patch={Routes.tag_index_path(Endpoint, :new)} class="btn btn-primary"> <%= dgettext("actions", "New Tag") %> - <% end %> -
- <.form - :let={f} - for={%{}} - as={:search} - phx-change="search" - phx-submit="search" - class="grow self-stretch flex flex-col items-stretch" - > - <%= text_input(f, :search_term, - class: "input input-primary", - value: @search, - role: "search", - phx_debounce: 300, - placeholder: gettext("Search tags") - ) %> - -
- - <%= if @tags |> Enum.empty?() do %> -

- <%= gettext("No tags") %> - <%= display_emoji("😔") %> -

- <% else %> -
- <.tag_card :for={tag <- @tags} tag={tag}> - <.link - patch={Routes.tag_index_path(Endpoint, :edit, tag)} - class="text-primary-600 link" - aria-label={dgettext("actions", "Edit %{tag_name}", tag_name: tag.name)} - > - - - - <.link - href="#" - class="text-primary-600 link" - phx-click="delete" - phx-value-id={tag.id} - data-confirm={ - dgettext("prompts", "Are you sure you want to delete %{name}?", name: tag.name) - } - aria-label={dgettext("actions", "Delete %{tag_name}", tag_name: tag.name)} - > - - - +
+ <.form + :let={f} + for={%{}} + as={:search} + phx-change="search" + phx-submit="search" + class="grow flex items-center" + > + <%= text_input(f, :search_term, + class: "grow input input-primary", + value: @search, + role: "search", + phx_debounce: 300, + placeholder: gettext("Search tags") + ) %> +
+ + <%= if @tags |> Enum.empty?() do %> +

+ <%= gettext("No tags") %> + <%= display_emoji("😔") %> +

+ <% else %> +
+ <.tag_card :for={tag <- @tags} tag={tag}> + <.link + patch={Routes.tag_index_path(Endpoint, :edit, tag)} + class="text-primary-600 link" + aria-label={dgettext("actions", "Edit %{tag_name}", tag_name: tag.name)} + > + + + + <.link + href="#" + class="text-primary-600 link" + phx-click="delete" + phx-value-id={tag.id} + data-confirm={ + dgettext("prompts", "Are you sure you want to delete %{name}?", name: tag.name) + } + aria-label={dgettext("actions", "Delete %{tag_name}", tag_name: tag.name)} + > + + + +
+ <% end %> <% end %>
diff --git a/priv/gettext/actions.pot b/priv/gettext/actions.pot index bd0d263..eb6a232 100644 --- a/priv/gettext/actions.pot +++ b/priv/gettext/actions.pot @@ -12,12 +12,12 @@ msgstr "" #: lib/cannery_web/live/ammo_group_live/index.ex:54 #: lib/cannery_web/live/ammo_group_live/index.ex:62 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:41 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:38 #, elixir-autogen, elixir-format msgid "Add Ammo" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:34 #, elixir-autogen, elixir-format msgid "Add your first box!" msgstr "" @@ -122,7 +122,7 @@ msgstr "" #: lib/cannery_web/components/add_shot_group_component.html.heex:57 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:84 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:180 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:350 #: lib/cannery_web/live/container_live/form_component.html.heex:57 #: lib/cannery_web/live/invite_live/form_component.html.heex:35 #: lib/cannery_web/live/range_live/form_component.html.heex:45 @@ -136,7 +136,7 @@ msgstr "" msgid "Send instructions to reset password" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:75 +#: lib/cannery_web/live/container_live/show.html.heex:68 #, elixir-autogen, elixir-format msgid "Why not add one?" msgstr "" @@ -156,7 +156,7 @@ msgstr "" msgid "Why not get some ready to shoot?" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:105 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:125 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103 #: lib/cannery_web/live/range_live/index.html.heex:45 #, elixir-autogen, elixir-format @@ -178,7 +178,7 @@ msgstr "" msgid "Copy to clipboard" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:22 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:14 #, elixir-autogen, elixir-format msgid "add a container first" msgstr "" @@ -203,13 +203,13 @@ msgstr "" msgid "View in Catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:32 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #, elixir-autogen, elixir-format msgid "add an ammo type first" msgstr "" #: lib/cannery_web/components/move_ammo_group_component.ex:80 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:122 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:142 #: lib/cannery_web/live/ammo_group_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Move ammo" @@ -237,13 +237,13 @@ msgstr "" msgid "Export Data as JSON" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:110 #, elixir-autogen, elixir-format msgid "Clone %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:88 -#: lib/cannery_web/live/container_live/index.html.heex:144 +#: lib/cannery_web/live/container_live/index.html.heex:87 +#: lib/cannery_web/live/container_live/index.html.heex:145 #, elixir-autogen, elixir-format msgid "Clone %{container_name}" msgstr "" @@ -253,20 +253,20 @@ msgstr "" msgid "Copy invite link for %{invite_name}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:104 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:129 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #, elixir-autogen, elixir-format msgid "Delete %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:103 -#: lib/cannery_web/live/container_live/index.html.heex:159 -#: lib/cannery_web/live/container_live/show.html.heex:55 +#: lib/cannery_web/live/container_live/index.html.heex:104 +#: lib/cannery_web/live/container_live/index.html.heex:162 +#: lib/cannery_web/live/container_live/show.html.heex:48 #, elixir-autogen, elixir-format msgid "Delete %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:66 +#: lib/cannery_web/live/tag_live/index.html.heex:65 #, elixir-autogen, elixir-format msgid "Delete %{tag_name}" msgstr "" @@ -277,30 +277,30 @@ msgid "Delete invite for %{invite_name}" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:161 -#: lib/cannery_web/live/range_live/index.html.heex:131 +#: lib/cannery_web/live/range_live/index.html.heex:155 #, elixir-autogen, elixir-format msgid "Delete shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:75 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:78 -#: lib/cannery_web/live/container_live/index.html.heex:134 -#: lib/cannery_web/live/container_live/show.html.heex:42 +#: lib/cannery_web/live/container_live/index.html.heex:77 +#: lib/cannery_web/live/container_live/index.html.heex:135 +#: lib/cannery_web/live/container_live/show.html.heex:35 #, elixir-autogen, elixir-format msgid "Edit %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:53 +#: lib/cannery_web/live/tag_live/index.html.heex:52 #, elixir-autogen, elixir-format msgid "Edit %{tag_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:144 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:164 #: lib/cannery_web/live/ammo_group_live/show.html.heex:62 #, elixir-autogen, elixir-format msgid "Edit ammo group of %{ammo_group_count} bullets" @@ -316,45 +316,45 @@ msgstr "" msgid "Edit shot group of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:114 +#: lib/cannery_web/live/range_live/index.html.heex:138 #, elixir-autogen, elixir-format msgid "Edit shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:118 #, elixir-autogen, elixir-format msgid "Stage" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:66 -#: lib/cannery_web/live/container_live/index.html.heex:123 +#: lib/cannery_web/live/container_live/index.html.heex:65 +#: lib/cannery_web/live/container_live/index.html.heex:124 #, elixir-autogen, elixir-format msgid "Tag %{container_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:117 #, elixir-autogen, elixir-format msgid "Unstage" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:65 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:90 #, elixir-autogen, elixir-format msgid "View %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:156 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:176 #, elixir-autogen, elixir-format msgid "Clone ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:171 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:191 #: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #, elixir-autogen, elixir-format msgid "Delete ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:132 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:189 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:152 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:206 #, elixir-autogen, elixir-format msgid "View ammo group of %{ammo_group_count} bullets" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/actions.po b/priv/gettext/de/LC_MESSAGES/actions.po index 7704844..2ec2187 100644 --- a/priv/gettext/de/LC_MESSAGES/actions.po +++ b/priv/gettext/de/LC_MESSAGES/actions.po @@ -25,12 +25,12 @@ msgstr "" ## effect: edit them in PO (.po) files instead. #: lib/cannery_web/live/ammo_group_live/index.ex:54 #: lib/cannery_web/live/ammo_group_live/index.ex:62 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:41 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:38 #, elixir-autogen, elixir-format msgid "Add Ammo" msgstr "Munition hinzufügen" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:34 #, elixir-autogen, elixir-format msgid "Add your first box!" msgstr "Fügen Sie ihre erste Box hinzu!" @@ -135,7 +135,7 @@ msgstr "Passwort zurücksetzen" #: lib/cannery_web/components/add_shot_group_component.html.heex:57 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:84 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:180 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:350 #: lib/cannery_web/live/container_live/form_component.html.heex:57 #: lib/cannery_web/live/invite_live/form_component.html.heex:35 #: lib/cannery_web/live/range_live/form_component.html.heex:45 @@ -149,7 +149,7 @@ msgstr "Speichern" msgid "Send instructions to reset password" msgstr "Anleitung zum Passwort zurücksetzen zusenden" -#: lib/cannery_web/live/container_live/show.html.heex:75 +#: lib/cannery_web/live/container_live/show.html.heex:68 #, elixir-autogen, elixir-format msgid "Why not add one?" msgstr "Warum fügen Sie keine hinzu?" @@ -169,7 +169,7 @@ msgstr "Munition markieren" msgid "Why not get some ready to shoot?" msgstr "Warum nicht einige für den Schießstand auswählen?" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:105 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:125 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103 #: lib/cannery_web/live/range_live/index.html.heex:45 #, elixir-autogen, elixir-format @@ -191,7 +191,7 @@ msgstr "Markieren" msgid "Copy to clipboard" msgstr "In die Zwischenablage kopieren" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:22 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:14 #, elixir-autogen, elixir-format msgid "add a container first" msgstr "Zuerst einen Behälter hinzufügen" @@ -216,13 +216,13 @@ msgstr "Sprache wechseln" msgid "View in Catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:32 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #, elixir-autogen, elixir-format msgid "add an ammo type first" msgstr "" #: lib/cannery_web/components/move_ammo_group_component.ex:80 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:122 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:142 #: lib/cannery_web/live/ammo_group_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Move ammo" @@ -250,13 +250,13 @@ msgstr "" msgid "Export Data as JSON" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:110 #, elixir-autogen, elixir-format msgid "Clone %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:88 -#: lib/cannery_web/live/container_live/index.html.heex:144 +#: lib/cannery_web/live/container_live/index.html.heex:87 +#: lib/cannery_web/live/container_live/index.html.heex:145 #, elixir-autogen, elixir-format msgid "Clone %{container_name}" msgstr "" @@ -266,20 +266,20 @@ msgstr "" msgid "Copy invite link for %{invite_name}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:104 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:129 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #, elixir-autogen, elixir-format msgid "Delete %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:103 -#: lib/cannery_web/live/container_live/index.html.heex:159 -#: lib/cannery_web/live/container_live/show.html.heex:55 +#: lib/cannery_web/live/container_live/index.html.heex:104 +#: lib/cannery_web/live/container_live/index.html.heex:162 +#: lib/cannery_web/live/container_live/show.html.heex:48 #, elixir-autogen, elixir-format msgid "Delete %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:66 +#: lib/cannery_web/live/tag_live/index.html.heex:65 #, elixir-autogen, elixir-format msgid "Delete %{tag_name}" msgstr "" @@ -290,30 +290,30 @@ msgid "Delete invite for %{invite_name}" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:161 -#: lib/cannery_web/live/range_live/index.html.heex:131 +#: lib/cannery_web/live/range_live/index.html.heex:155 #, elixir-autogen, elixir-format msgid "Delete shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:75 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:78 -#: lib/cannery_web/live/container_live/index.html.heex:134 -#: lib/cannery_web/live/container_live/show.html.heex:42 +#: lib/cannery_web/live/container_live/index.html.heex:77 +#: lib/cannery_web/live/container_live/index.html.heex:135 +#: lib/cannery_web/live/container_live/show.html.heex:35 #, elixir-autogen, elixir-format msgid "Edit %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:53 +#: lib/cannery_web/live/tag_live/index.html.heex:52 #, elixir-autogen, elixir-format msgid "Edit %{tag_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:144 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:164 #: lib/cannery_web/live/ammo_group_live/show.html.heex:62 #, elixir-autogen, elixir-format msgid "Edit ammo group of %{ammo_group_count} bullets" @@ -329,45 +329,45 @@ msgstr "" msgid "Edit shot group of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:114 +#: lib/cannery_web/live/range_live/index.html.heex:138 #, elixir-autogen, elixir-format msgid "Edit shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:118 #, elixir-autogen, elixir-format, fuzzy msgid "Stage" msgstr "Munition markieren" -#: lib/cannery_web/live/container_live/index.html.heex:66 -#: lib/cannery_web/live/container_live/index.html.heex:123 +#: lib/cannery_web/live/container_live/index.html.heex:65 +#: lib/cannery_web/live/container_live/index.html.heex:124 #, elixir-autogen, elixir-format msgid "Tag %{container_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:117 #, elixir-autogen, elixir-format msgid "Unstage" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:65 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:90 #, elixir-autogen, elixir-format msgid "View %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:156 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:176 #, elixir-autogen, elixir-format, fuzzy msgid "Clone ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:171 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:191 #: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #, elixir-autogen, elixir-format, fuzzy msgid "Delete ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:132 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:189 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:152 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:206 #, elixir-autogen, elixir-format, fuzzy msgid "View ammo group of %{ammo_group_count} bullets" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index ab5e6f1..b87598e 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -38,7 +38,7 @@ msgstr "Admins:" msgid "Ammo" msgstr "Munition" -#: lib/cannery_web/components/ammo_group_table_component.ex:108 +#: lib/cannery_web/components/ammo_group_table_component.ex:96 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:22 #, elixir-autogen, elixir-format msgid "Ammo type" @@ -49,48 +49,48 @@ msgstr "Munitionsarten" msgid "Background color" msgstr "Hintergrundfarbe" -#: lib/cannery_web/components/ammo_type_table_component.ex:65 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:158 +#: lib/cannery_web/components/ammo_type_table_component.ex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:324 #, elixir-autogen, elixir-format msgid "Blank" msgstr "Knallpatrone" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:171 #, elixir-autogen, elixir-format msgid "Brass" msgstr "Messing" -#: lib/cannery_web/components/ammo_type_table_component.ex:47 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51 +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144 #, elixir-autogen, elixir-format msgid "Bullet core" msgstr "Projektilkern" -#: lib/cannery_web/components/ammo_type_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:43 +#: lib/cannery_web/components/ammo_type_table_component.ex:60 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:121 #, elixir-autogen, elixir-format msgid "Bullet type" msgstr "Patronenart" -#: lib/cannery_web/components/ammo_type_table_component.ex:49 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68 #, elixir-autogen, elixir-format msgid "Caliber" msgstr "Kaliber" -#: lib/cannery_web/components/ammo_type_table_component.ex:48 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:59 +#: lib/cannery_web/components/ammo_type_table_component.ex:49 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:52 #, elixir-autogen, elixir-format msgid "Cartridge" msgstr "Patrone" -#: lib/cannery_web/components/ammo_type_table_component.ex:50 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 +#: lib/cannery_web/components/ammo_type_table_component.ex:67 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:167 #, elixir-autogen, elixir-format msgid "Case material" msgstr "Gehäusematerial" -#: lib/cannery_web/components/ammo_group_table_component.ex:72 +#: lib/cannery_web/components/ammo_group_table_component.ex:74 #: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:59 #, elixir-autogen, elixir-format @@ -105,13 +105,13 @@ msgstr "Behälter" msgid "Containers" msgstr "Behälter" -#: lib/cannery_web/components/ammo_type_table_component.ex:66 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:162 +#: lib/cannery_web/components/ammo_type_table_component.ex:88 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:328 #, elixir-autogen, elixir-format msgid "Corrosive" msgstr "Korrosiv" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:28 #, elixir-autogen, elixir-format msgid "Count" @@ -124,7 +124,7 @@ msgid "Count:" msgstr "Anzahl:" #: lib/cannery_web/components/container_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:28 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:38 #: lib/cannery_web/live/container_live/form_component.html.heex:29 #, elixir-autogen, elixir-format msgid "Description" @@ -151,24 +151,19 @@ msgstr "Einladung bearbeiten" msgid "Edit Tag" msgstr "Tag bearbeiten" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:41 -#, elixir-autogen, elixir-format -msgid "Example bullet type abbreviations" -msgstr "Beispiel Munitionstyp Abkürzungen" - -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:135 #, elixir-autogen, elixir-format msgid "FMJ" msgstr "VM" #: lib/cannery_web/components/ammo_type_table_component.ex:59 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:112 #, elixir-autogen, elixir-format msgid "Grains" msgstr "Körner" -#: lib/cannery_web/components/ammo_type_table_component.ex:64 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:154 +#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:320 #, elixir-autogen, elixir-format msgid "Incendiary" msgstr "Brandmunition" @@ -218,8 +213,9 @@ msgstr "Standort:" msgid "Magazine, Clip, Ammo Box, etc" msgstr "Magazin, Ladestreifen, Munitionskiste usw." -#: lib/cannery_web/components/ammo_type_table_component.ex:67 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:166 +#: lib/cannery_web/components/ammo_type_table_component.ex:89 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:333 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:336 #, elixir-autogen, elixir-format msgid "Manufacturer" msgstr "Hersteller" @@ -234,9 +230,9 @@ msgstr "Metallene Munitionskiste mit Anime-Girl-Sticker" msgid "My cool ammo can" msgstr "Meine coole Munitionskiste" -#: lib/cannery_web/components/ammo_type_table_component.ex:45 +#: lib/cannery_web/components/ammo_type_table_component.ex:153 #: lib/cannery_web/components/container_table_component.ex:45 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:31 #: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/tag_live/form_component.html.heex:21 @@ -266,19 +262,18 @@ msgstr "Neue Einladung" msgid "New Tag" msgstr "Neuer Tag" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:72 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:92 #, elixir-autogen, elixir-format msgid "No Ammo" msgstr "Keine Munition" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:163 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:180 #, elixir-autogen, elixir-format msgid "No ammo for this type" msgstr "Keine Munition dieser Art" #: lib/cannery_web/live/container_live/index.html.heex:8 -#: lib/cannery_web/live/container_live/index.html.heex:48 +#: lib/cannery_web/live/container_live/index.html.heex:47 #, elixir-autogen, elixir-format msgid "No containers" msgstr "Kein Behälter" @@ -290,7 +285,7 @@ msgstr "Keine Einladung" #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/tag_live/index.html.heex:10 -#: lib/cannery_web/live/tag_live/index.html.heex:44 +#: lib/cannery_web/live/tag_live/index.html.heex:43 #, elixir-autogen, elixir-format msgid "No tags" msgstr "Keine Tags" @@ -315,13 +310,13 @@ msgstr "Bemerkungen:" msgid "On the bookshelf" msgstr "Auf dem Bücherregal" -#: lib/cannery_web/components/ammo_type_table_component.ex:60 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:126 +#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:257 #, elixir-autogen, elixir-format msgid "Pressure" msgstr "Druck" -#: lib/cannery_web/components/ammo_group_table_component.ex:83 +#: lib/cannery_web/components/ammo_group_table_component.ex:82 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:35 #, elixir-autogen, elixir-format msgid "Price paid" @@ -332,8 +327,8 @@ msgstr "Kaufpreis" msgid "Price paid:" msgstr "Kaufpreis:" -#: lib/cannery_web/components/ammo_type_table_component.ex:61 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:134 +#: lib/cannery_web/components/ammo_type_table_component.ex:83 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:296 #, elixir-autogen, elixir-format msgid "Primer type" msgstr "Zündertyp" @@ -366,7 +361,7 @@ msgstr "Einstellungen" msgid "Simple:" msgstr "Einfach:" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:151 #, elixir-autogen, elixir-format msgid "Steel" msgstr "Stahl" @@ -400,15 +395,22 @@ msgstr "Textfarbe" msgid "The self-hosted firearm tracker website" msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen" -#: lib/cannery_web/components/ammo_type_table_component.ex:63 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:150 +#: lib/cannery_web/components/ammo_type_table_component.ex:85 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:316 #, elixir-autogen, elixir-format msgid "Tracer" msgstr "Leuchtspur" +#: lib/cannery_web/components/ammo_type_table_component.ex:150 #: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/move_ammo_group_component.ex:68 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:50 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:29 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:48 #: lib/cannery_web/live/container_live/form_component.html.heex:39 +#: lib/cannery_web/live/container_live/show.html.heex:97 +#: lib/cannery_web/live/range_live/index.html.heex:86 #, elixir-autogen, elixir-format msgid "Type" msgstr "Art" @@ -434,12 +436,12 @@ msgstr "Verbleibende Nutzung" msgid "Your data stays with you, period" msgstr "Ihre Daten bleiben bei Ihnen, Punkt" -#: lib/cannery_web/live/container_live/show.html.heex:67 +#: lib/cannery_web/live/container_live/show.html.heex:60 #, elixir-autogen, elixir-format msgid "No tags for this container" msgstr "Keine Tags für diesen Behälter" -#: lib/cannery_web/components/ammo_group_table_component.ex:79 +#: lib/cannery_web/components/ammo_group_table_component.ex:78 #: lib/cannery_web/components/core_components/topbar.html.heex:66 #, elixir-autogen, elixir-format msgid "Range" @@ -486,7 +488,7 @@ msgid "New Shot Records" msgstr "Neue Schießkladde" #: lib/cannery_web/live/range_live/index.html.heex:55 -#: lib/cannery_web/live/range_live/index.html.heex:98 +#: lib/cannery_web/live/range_live/index.html.heex:122 #, elixir-autogen, elixir-format msgid "No shots recorded" msgstr "Keine Schüsse dokumentiert" @@ -525,49 +527,48 @@ msgstr "Kein weiterer Behälter" msgid "Shot log" msgstr "Schießkladde" -#: lib/cannery_web/components/ammo_group_table_component.ex:180 -#: lib/cannery_web/components/ammo_group_table_component.ex:263 -#: lib/cannery_web/components/ammo_type_table_component.ex:235 +#: lib/cannery_web/components/ammo_group_table_component.ex:164 +#: lib/cannery_web/components/ammo_group_table_component.ex:247 +#: lib/cannery_web/components/ammo_type_table_component.ex:261 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:135 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:152 #, elixir-autogen, elixir-format msgid "$%{amount}" msgstr "$%{amount}" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:160 #, elixir-autogen, elixir-format msgid "Bimetal" msgstr "Bimetall" -#: lib/cannery_web/components/ammo_type_table_component.ex:51 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:83 +#: lib/cannery_web/components/ammo_type_table_component.ex:66 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #, elixir-autogen, elixir-format msgid "Jacket type" msgstr "Patronenhülse" -#: lib/cannery_web/components/ammo_type_table_component.ex:52 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:82 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:279 #, elixir-autogen, elixir-format msgid "Muzzle velocity" msgstr "Mündungsgeschwindigkeit" -#: lib/cannery_web/components/ammo_type_table_component.ex:55 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:108 +#: lib/cannery_web/components/ammo_type_table_component.ex:76 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:244 #, elixir-autogen, elixir-format msgid "Powder grains per charge" msgstr "Pulverkörner pro Ladung" -#: lib/cannery_web/components/ammo_type_table_component.ex:53 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:101 +#: lib/cannery_web/components/ammo_type_table_component.ex:74 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:236 #, elixir-autogen, elixir-format msgid "Powder type" msgstr "Pulverart" -#: lib/cannery_web/components/ammo_type_table_component.ex:68 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:173 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:343 #, elixir-autogen, elixir-format msgid "UPC" msgstr "UPC" @@ -590,8 +591,8 @@ msgstr "Derzeitiges Passwort" msgid "New password" msgstr "Neues Passwort" -#: lib/cannery_web/components/ammo_type_table_component.ex:62 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:142 +#: lib/cannery_web/components/ammo_type_table_component.ex:84 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:304 #, elixir-autogen, elixir-format msgid "Firing type" msgstr "Patronenhülsenform" @@ -602,33 +603,33 @@ msgid "Reconnecting..." msgstr "Neu verbinden..." #: lib/cannery_web/live/container_live/index.ex:28 -#: lib/cannery_web/live/container_live/show.ex:108 +#: lib/cannery_web/live/container_live/show.ex:120 #, elixir-autogen, elixir-format msgid "Edit %{name}" msgstr "%{name} bearbeiten" #: lib/cannery_web/live/container_live/index.ex:63 -#: lib/cannery_web/live/container_live/show.ex:109 +#: lib/cannery_web/live/container_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Edit %{name} tags" msgstr "Editiere %{name} Tags" #: lib/cannery_web/components/core_components/container_card.html.heex:37 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 -#: lib/cannery_web/live/container_live/show.html.heex:33 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/container_live/show.html.heex:27 #, elixir-autogen, elixir-format msgid "Rounds:" msgstr "Patronen:" -#: lib/cannery_web/components/ammo_group_table_component.ex:177 -#: lib/cannery_web/components/ammo_group_table_component.ex:259 -#: lib/cannery_web/components/ammo_type_table_component.ex:234 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 +#: lib/cannery_web/components/ammo_group_table_component.ex:161 +#: lib/cannery_web/components/ammo_group_table_component.ex:243 +#: lib/cannery_web/components/ammo_type_table_component.ex:260 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:156 #, elixir-autogen, elixir-format msgid "No cost information" msgstr "Keine Preisinformationen" -#: lib/cannery_web/components/ammo_group_table_component.ex:92 +#: lib/cannery_web/components/ammo_group_table_component.ex:84 #, elixir-autogen, elixir-format msgid "% left" msgstr "% verbleibend" @@ -694,7 +695,7 @@ msgstr "Schüsse dokumentieren" msgid "Copies" msgstr "Kopien" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #, elixir-autogen, elixir-format msgid "Added on:" msgstr "Hinzugefügt am:" @@ -758,7 +759,7 @@ msgstr "Munitionstyp bearbeiten" msgid "Move Ammo" msgstr "Munition verschieben" -#: lib/cannery_web/live/container_live/show.html.heex:112 +#: lib/cannery_web/live/container_live/show.html.heex:123 #, elixir-autogen, elixir-format, fuzzy msgid "No ammo in this container" msgstr "Keine Munitionsgruppe in diesem Behälter" @@ -774,8 +775,8 @@ msgid "This ammo is not in a container" msgstr "Diese Munitionsgruppe ist nicht in einem Behälter" #: lib/cannery_web/components/core_components/container_card.html.heex:32 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 -#: lib/cannery_web/live/container_live/show.html.heex:23 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/container_live/show.html.heex:22 #, elixir-autogen, elixir-format msgid "Packs:" msgstr "" @@ -801,80 +802,79 @@ msgstr "" msgid "Container:" msgstr "Behälter" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:65 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:40 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:149 -#: lib/cannery_web/live/container_live/show.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:64 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:166 #, elixir-autogen, elixir-format msgid "Show used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:218 +#: lib/cannery_web/components/ammo_group_table_component.ex:202 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "%{percentage}%" msgstr "" -#: lib/cannery_web/live/range_live/index.ex:135 +#: lib/cannery_web/live/range_live/index.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds shot: %{count}" msgstr "Patronen abgefeuert" -#: lib/cannery_web/components/ammo_type_table_component.ex:100 +#: lib/cannery_web/components/ammo_type_table_component.ex:123 #: lib/cannery_web/components/container_table_component.ex:64 #, elixir-autogen, elixir-format, fuzzy msgid "Packs" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/components/ammo_type_table_component.ex:144 #: lib/cannery_web/components/container_table_component.ex:65 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds" msgstr "Patronen:" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:172 #: lib/cannery_web/live/container_live/index.html.heex:40 -#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/container_live/show.html.heex:115 #, elixir-autogen, elixir-format msgid "View as table" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:110 +#: lib/cannery_web/components/ammo_type_table_component.ex:108 #, elixir-autogen, elixir-format msgid "Total ever packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:130 #, elixir-autogen, elixir-format msgid "Total ever packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:129 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds" msgstr "Summe aller Patronen" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds:" msgstr "Summe abgegebener Schüsse:" -#: lib/cannery_web/components/ammo_type_table_component.ex:105 +#: lib/cannery_web/components/ammo_type_table_component.ex:116 #, elixir-autogen, elixir-format msgid "Used packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:105 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 #, elixir-autogen, elixir-format msgid "Used packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/components/ammo_type_table_component.ex:137 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds:" msgstr "" @@ -889,120 +889,120 @@ msgstr "" msgid "Rounds shot chart" msgstr "Patronen abgefeuert" -#: lib/cannery_web/live/ammo_type_live/show.ex:26 +#: lib/cannery_web/live/ammo_type_live/show.ex:154 #, elixir-autogen, elixir-format, fuzzy msgid "Blank:" msgstr "Knallpatrone" -#: lib/cannery_web/live/ammo_type_live/show.ex:12 +#: lib/cannery_web/live/ammo_type_live/show.ex:132 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet core:" msgstr "Projektilkern" -#: lib/cannery_web/live/ammo_type_live/show.ex:11 +#: lib/cannery_web/live/ammo_type_live/show.ex:131 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet type:" msgstr "Patronenart" -#: lib/cannery_web/live/ammo_type_live/show.ex:14 +#: lib/cannery_web/live/ammo_type_live/show.ex:123 #, elixir-autogen, elixir-format, fuzzy msgid "Caliber:" msgstr "Kaliber" -#: lib/cannery_web/live/ammo_type_live/show.ex:13 +#: lib/cannery_web/live/ammo_type_live/show.ex:121 #, elixir-autogen, elixir-format, fuzzy msgid "Cartridge:" msgstr "Patrone" -#: lib/cannery_web/live/ammo_type_live/show.ex:15 +#: lib/cannery_web/live/ammo_type_live/show.ex:134 #, elixir-autogen, elixir-format, fuzzy msgid "Case material:" msgstr "Gehäusematerial" -#: lib/cannery_web/live/ammo_type_live/show.ex:27 +#: lib/cannery_web/live/ammo_type_live/show.ex:155 #, elixir-autogen, elixir-format, fuzzy msgid "Corrosive:" msgstr "Korrosiv" -#: lib/cannery_web/live/ammo_type_live/show.ex:23 +#: lib/cannery_web/live/ammo_type_live/show.ex:151 #, elixir-autogen, elixir-format, fuzzy msgid "Firing type:" msgstr "Patronenhülsenform" -#: lib/cannery_web/live/ammo_type_live/show.ex:20 +#: lib/cannery_web/live/ammo_type_live/show.ex:130 #, elixir-autogen, elixir-format, fuzzy msgid "Grains:" msgstr "Körner" -#: lib/cannery_web/live/ammo_type_live/show.ex:25 +#: lib/cannery_web/live/ammo_type_live/show.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Incendiary:" msgstr "Brandmunition" -#: lib/cannery_web/live/ammo_type_live/show.ex:16 +#: lib/cannery_web/live/ammo_type_live/show.ex:133 #, elixir-autogen, elixir-format, fuzzy msgid "Jacket type:" msgstr "Patronenhülse" -#: lib/cannery_web/live/ammo_type_live/show.ex:28 +#: lib/cannery_web/live/ammo_type_live/show.ex:156 #, elixir-autogen, elixir-format, fuzzy msgid "Manufacturer:" msgstr "Hersteller" -#: lib/cannery_web/live/ammo_type_live/show.ex:17 +#: lib/cannery_web/live/ammo_type_live/show.ex:149 #, elixir-autogen, elixir-format, fuzzy msgid "Muzzle velocity:" msgstr "Mündungsgeschwindigkeit" -#: lib/cannery_web/live/ammo_type_live/show.ex:19 +#: lib/cannery_web/live/ammo_type_live/show.ex:143 #, elixir-autogen, elixir-format, fuzzy msgid "Powder grains per charge:" msgstr "Pulverkörner pro Ladung" -#: lib/cannery_web/live/ammo_type_live/show.ex:18 +#: lib/cannery_web/live/ammo_type_live/show.ex:141 #, elixir-autogen, elixir-format, fuzzy msgid "Powder type:" msgstr "Pulverart" -#: lib/cannery_web/live/ammo_type_live/show.ex:21 +#: lib/cannery_web/live/ammo_type_live/show.ex:147 #, elixir-autogen, elixir-format, fuzzy msgid "Pressure:" msgstr "Druck" -#: lib/cannery_web/live/ammo_type_live/show.ex:22 +#: lib/cannery_web/live/ammo_type_live/show.ex:150 #, elixir-autogen, elixir-format, fuzzy msgid "Primer type:" msgstr "Zündertyp" -#: lib/cannery_web/live/ammo_type_live/show.ex:24 +#: lib/cannery_web/live/ammo_type_live/show.ex:152 #, elixir-autogen, elixir-format, fuzzy msgid "Tracer:" msgstr "Leuchtspur" -#: lib/cannery_web/live/ammo_type_live/show.ex:29 +#: lib/cannery_web/live/ammo_type_live/show.ex:157 #, elixir-autogen, elixir-format, fuzzy msgid "UPC:" msgstr "UPC" -#: lib/cannery_web/components/ammo_type_table_component.ex:120 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:131 +#: lib/cannery_web/components/ammo_type_table_component.ex:102 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:148 #, elixir-autogen, elixir-format msgid "Average CPR" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:28 -#: lib/cannery_web/live/ammo_type_live/show.ex:104 +#: lib/cannery_web/live/ammo_type_live/show.ex:82 #, elixir-autogen, elixir-format, fuzzy msgid "Edit %{ammo_type_name}" msgstr "%{name} bearbeiten" -#: lib/cannery_web/components/ammo_group_table_component.ex:267 +#: lib/cannery_web/components/ammo_group_table_component.ex:251 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17 #, elixir-autogen, elixir-format msgid "Empty" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:84 +#: lib/cannery_web/components/ammo_group_table_component.ex:81 #, elixir-autogen, elixir-format msgid "CPR" msgstr "" @@ -1012,7 +1012,7 @@ msgstr "" msgid "CPR:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:91 +#: lib/cannery_web/components/ammo_group_table_component.ex:88 #, elixir-autogen, elixir-format, fuzzy msgid "Original Count" msgstr "Ursprüngliche Anzahl:" @@ -1027,12 +1027,7 @@ msgstr "Ursprüngliche Anzahl:" msgid "Home" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:28 -#, elixir-autogen, elixir-format, fuzzy -msgid "Total packs:" -msgstr "" - -#: lib/cannery_web/components/ammo_group_table_component.ex:65 +#: lib/cannery_web/components/ammo_group_table_component.ex:64 #, elixir-autogen, elixir-format msgid "Last used on" msgstr "" @@ -1042,12 +1037,12 @@ msgstr "" msgid "Last used on:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:198 +#: lib/cannery_web/components/ammo_group_table_component.ex:182 #, elixir-autogen, elixir-format msgid "Never used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:64 +#: lib/cannery_web/components/ammo_group_table_component.ex:69 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:42 #, elixir-autogen, elixir-format msgid "Purchased on" @@ -1065,17 +1060,17 @@ msgid "Edit ammo" msgstr "Munitionstyp bearbeiten" #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:71 #, elixir-autogen, elixir-format, fuzzy msgid "No Ammo types" msgstr "Keine Munitionsarten" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:34 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:58 #, elixir-autogen, elixir-format msgid "Search catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:79 #, elixir-autogen, elixir-format, fuzzy msgid "Search ammo" msgstr "" @@ -1085,12 +1080,12 @@ msgstr "" msgid "Search containers" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:37 +#: lib/cannery_web/live/tag_live/index.html.heex:36 #, elixir-autogen, elixir-format, fuzzy msgid "Search tags" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:91 +#: lib/cannery_web/live/range_live/index.html.heex:115 #, elixir-autogen, elixir-format msgid "Search shot records" msgstr "" @@ -1199,27 +1194,27 @@ msgstr "" msgid "Password" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:130 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:261 #, elixir-autogen, elixir-format msgid "+P" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 #, elixir-autogen, elixir-format msgid ".223" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:63 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:56 #, elixir-autogen, elixir-format msgid "5.56x46mm NATO" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:138 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:300 #, elixir-autogen, elixir-format msgid "Boxer" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:146 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:308 #, elixir-autogen, elixir-format msgid "Centerfire" msgstr "" @@ -1231,7 +1226,7 @@ msgid "Really great weather" msgstr "" #: lib/cannery_web/components/ammo_group_table_component.ex:60 -#: lib/cannery_web/components/ammo_type_table_component.ex:121 +#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/container_table_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:70 #: lib/cannery_web/components/shot_group_table_component.ex:45 @@ -1250,7 +1245,7 @@ msgstr "" msgid "Log out" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #, elixir-autogen, elixir-format msgid "Current Count" msgstr "" @@ -1260,3 +1255,209 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Close modal" msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:56 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:35 +#: lib/cannery_web/live/container_live/show.html.heex:103 +#: lib/cannery_web/live/range_live/index.html.heex:92 +#, elixir-autogen, elixir-format +msgid "All" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:313 +#, elixir-autogen, elixir-format +msgid "Attributes" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:56 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89 +#, elixir-autogen, elixir-format, fuzzy +msgid "Brass height" +msgstr "Messing" + +#: lib/cannery_web/live/ammo_type_live/show.ex:128 +#, elixir-autogen, elixir-format +msgid "Brass height:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:57 +#: lib/cannery_web/components/ammo_type_table_component.ex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:96 +#, elixir-autogen, elixir-format +msgid "Chamber size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:129 +#, elixir-autogen, elixir-format +msgid "Chamber size:" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:48 +#, elixir-autogen, elixir-format +msgid "Dimensions" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:81 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:266 +#, elixir-autogen, elixir-format +msgid "Dram equivalent" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:148 +#, elixir-autogen, elixir-format +msgid "Dram equivalent:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#, elixir-autogen, elixir-format +msgid "Gauge" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:123 +#, elixir-autogen, elixir-format +msgid "Gauge:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:72 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:207 +#, elixir-autogen, elixir-format +msgid "Load grains" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:139 +#, elixir-autogen, elixir-format +msgid "Load grains:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:29 +#, elixir-autogen, elixir-format, fuzzy +msgid "No ammo" +msgstr "Keine Munition" + +#: lib/cannery_web/live/ammo_type_live/show.html.heex:60 +#, elixir-autogen, elixir-format +msgid "None specified" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:58 +#: lib/cannery_web/live/container_live/show.html.heex:106 +#: lib/cannery_web/live/range_live/index.html.heex:95 +#, elixir-autogen, elixir-format +msgid "Pistol" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:233 +#, elixir-autogen, elixir-format, fuzzy +msgid "Powder" +msgstr "Pulverart" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:293 +#, elixir-autogen, elixir-format, fuzzy +msgid "Primer" +msgstr "Zündertyp" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:109 +#, elixir-autogen, elixir-format +msgid "Projectile" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:36 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:56 +#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/range_live/index.html.heex:93 +#, elixir-autogen, elixir-format +msgid "Rifle" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:73 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:215 +#, elixir-autogen, elixir-format +msgid "Shot charge weight" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:140 +#, elixir-autogen, elixir-format +msgid "Shot charge weight:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:70 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:191 +#, elixir-autogen, elixir-format +msgid "Shot material" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:137 +#, elixir-autogen, elixir-format +msgid "Shot material:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:200 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size" +msgstr "Schüsse abgegeben" + +#: lib/cannery_web/live/ammo_type_live/show.ex:138 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size:" +msgstr "Schüsse abgegeben" + +#: lib/cannery_web/components/ammo_type_table_component.ex:69 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:183 +#, elixir-autogen, elixir-format +msgid "Shot type" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:136 +#, elixir-autogen, elixir-format +msgid "Shot type:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:54 +#: lib/cannery_web/live/container_live/show.html.heex:105 +#: lib/cannery_web/live/range_live/index.html.heex:94 +#, elixir-autogen, elixir-format +msgid "Shotgun" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:143 +#, elixir-autogen, elixir-format +msgid "Slug core" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:187 +#, elixir-autogen, elixir-format +msgid "Target, bird, buck, etc" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:127 +#, elixir-autogen, elixir-format +msgid "Unfired length:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:80 +#, elixir-autogen, elixir-format +msgid "Unfired shell length" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:68 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:176 +#, elixir-autogen, elixir-format +msgid "Wadding" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:135 +#, elixir-autogen, elixir-format +msgid "Wadding:" +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/errors.po b/priv/gettext/de/LC_MESSAGES/errors.po index 9a59e56..e570897 100644 --- a/priv/gettext/de/LC_MESSAGES/errors.po +++ b/priv/gettext/de/LC_MESSAGES/errors.po @@ -69,6 +69,7 @@ msgstr "Ungültige Mailadresse oder Passwort" msgid "Not found" msgstr "Nicht gefunden" +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:18 #: lib/cannery_web/templates/user_registration/new.html.heex:13 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:13 #: lib/cannery_web/templates/user_settings/edit.html.heex:22 @@ -172,7 +173,7 @@ msgstr "" "Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War " "%{multiplier}" -#: lib/cannery/ammo.ex:1043 +#: lib/cannery/ammo.ex:1114 #, elixir-autogen, elixir-format msgid "Invalid multiplier" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/prompts.po b/priv/gettext/de/LC_MESSAGES/prompts.po index c1eb1c9..49a309d 100644 --- a/priv/gettext/de/LC_MESSAGES/prompts.po +++ b/priv/gettext/de/LC_MESSAGES/prompts.po @@ -32,7 +32,7 @@ msgid "%{name} created successfully" msgstr "%{name} erfolgreich erstellt" #: lib/cannery_web/live/ammo_type_live/index.ex:72 -#: lib/cannery_web/live/ammo_type_live/show.ex:49 +#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/tag_live/index.ex:65 #, elixir-autogen, elixir-format msgid "%{name} deleted succesfully" @@ -65,15 +65,15 @@ msgstr "" "Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht " "zurückgenommen werden!" -#: lib/cannery_web/live/container_live/index.html.heex:100 -#: lib/cannery_web/live/container_live/index.html.heex:156 -#: lib/cannery_web/live/container_live/show.html.heex:52 -#: lib/cannery_web/live/tag_live/index.html.heex:64 +#: lib/cannery_web/live/container_live/index.html.heex:99 +#: lib/cannery_web/live/container_live/index.html.heex:157 +#: lib/cannery_web/live/container_live/show.html.heex:45 +#: lib/cannery_web/live/tag_live/index.html.heex:63 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}?" msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:169 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:189 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this ammo?" @@ -130,7 +130,7 @@ msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto" #: lib/cannery_web/components/add_shot_group_component.html.heex:59 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:85 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:181 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:351 #: lib/cannery_web/live/container_live/form_component.html.heex:59 #: lib/cannery_web/live/invite_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:47 @@ -177,7 +177,7 @@ msgid "Are you sure you want to unstage this ammo?" msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?" #: lib/cannery_web/live/ammo_group_live/show.ex:159 -#: lib/cannery_web/live/range_live/index.html.heex:128 +#: lib/cannery_web/live/range_live/index.html.heex:152 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this shot record?" msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?" @@ -213,8 +213,8 @@ msgstr "Der Zwischenablage hinzugefügt" msgid "%{name} removed successfully" msgstr "%{name} erfolgreich entfernt" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #, elixir-autogen, elixir-format msgid "You'll need to" msgstr "Sie müssen" @@ -257,7 +257,7 @@ msgid_plural "Ammo added successfully" msgstr[0] "Munitionsgruppe erfolgreich aktualisiert" msgstr[1] "Munitionsgruppe erfolgreich aktualisiert" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:122 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #, elixir-autogen, elixir-format, fuzzy msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index cbd0cde..967bbd6 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -34,7 +34,7 @@ msgstr "" msgid "Ammo" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:108 +#: lib/cannery_web/components/ammo_group_table_component.ex:96 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:22 #, elixir-autogen, elixir-format msgid "Ammo type" @@ -45,48 +45,48 @@ msgstr "" msgid "Background color" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:65 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:158 +#: lib/cannery_web/components/ammo_type_table_component.ex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:324 #, elixir-autogen, elixir-format msgid "Blank" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:171 #, elixir-autogen, elixir-format msgid "Brass" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:47 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51 +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144 #, elixir-autogen, elixir-format msgid "Bullet core" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:43 +#: lib/cannery_web/components/ammo_type_table_component.ex:60 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:121 #, elixir-autogen, elixir-format msgid "Bullet type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:49 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68 #, elixir-autogen, elixir-format msgid "Caliber" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:48 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:59 +#: lib/cannery_web/components/ammo_type_table_component.ex:49 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:52 #, elixir-autogen, elixir-format msgid "Cartridge" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:50 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 +#: lib/cannery_web/components/ammo_type_table_component.ex:67 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:167 #, elixir-autogen, elixir-format msgid "Case material" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:72 +#: lib/cannery_web/components/ammo_group_table_component.ex:74 #: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:59 #, elixir-autogen, elixir-format @@ -101,13 +101,13 @@ msgstr "" msgid "Containers" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:66 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:162 +#: lib/cannery_web/components/ammo_type_table_component.ex:88 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:328 #, elixir-autogen, elixir-format msgid "Corrosive" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:28 #, elixir-autogen, elixir-format msgid "Count" @@ -120,7 +120,7 @@ msgid "Count:" msgstr "" #: lib/cannery_web/components/container_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:28 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:38 #: lib/cannery_web/live/container_live/form_component.html.heex:29 #, elixir-autogen, elixir-format msgid "Description" @@ -147,24 +147,19 @@ msgstr "" msgid "Edit Tag" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:41 -#, elixir-autogen, elixir-format -msgid "Example bullet type abbreviations" -msgstr "" - -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:135 #, elixir-autogen, elixir-format msgid "FMJ" msgstr "" #: lib/cannery_web/components/ammo_type_table_component.ex:59 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:112 #, elixir-autogen, elixir-format msgid "Grains" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:64 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:154 +#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:320 #, elixir-autogen, elixir-format msgid "Incendiary" msgstr "" @@ -214,8 +209,9 @@ msgstr "" msgid "Magazine, Clip, Ammo Box, etc" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:67 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:166 +#: lib/cannery_web/components/ammo_type_table_component.ex:89 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:333 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:336 #, elixir-autogen, elixir-format msgid "Manufacturer" msgstr "" @@ -230,9 +226,9 @@ msgstr "" msgid "My cool ammo can" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:45 +#: lib/cannery_web/components/ammo_type_table_component.ex:153 #: lib/cannery_web/components/container_table_component.ex:45 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:31 #: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/tag_live/form_component.html.heex:21 @@ -262,19 +258,18 @@ msgstr "" msgid "New Tag" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:72 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:92 #, elixir-autogen, elixir-format msgid "No Ammo" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:163 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:180 #, elixir-autogen, elixir-format msgid "No ammo for this type" msgstr "" #: lib/cannery_web/live/container_live/index.html.heex:8 -#: lib/cannery_web/live/container_live/index.html.heex:48 +#: lib/cannery_web/live/container_live/index.html.heex:47 #, elixir-autogen, elixir-format msgid "No containers" msgstr "" @@ -286,7 +281,7 @@ msgstr "" #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/tag_live/index.html.heex:10 -#: lib/cannery_web/live/tag_live/index.html.heex:44 +#: lib/cannery_web/live/tag_live/index.html.heex:43 #, elixir-autogen, elixir-format msgid "No tags" msgstr "" @@ -311,13 +306,13 @@ msgstr "" msgid "On the bookshelf" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:60 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:126 +#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:257 #, elixir-autogen, elixir-format msgid "Pressure" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:83 +#: lib/cannery_web/components/ammo_group_table_component.ex:82 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:35 #, elixir-autogen, elixir-format msgid "Price paid" @@ -328,8 +323,8 @@ msgstr "" msgid "Price paid:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:61 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:134 +#: lib/cannery_web/components/ammo_type_table_component.ex:83 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:296 #, elixir-autogen, elixir-format msgid "Primer type" msgstr "" @@ -360,7 +355,7 @@ msgstr "" msgid "Simple:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:151 #, elixir-autogen, elixir-format msgid "Steel" msgstr "" @@ -394,15 +389,22 @@ msgstr "" msgid "The self-hosted firearm tracker website" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:63 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:150 +#: lib/cannery_web/components/ammo_type_table_component.ex:85 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:316 #, elixir-autogen, elixir-format msgid "Tracer" msgstr "" +#: lib/cannery_web/components/ammo_type_table_component.ex:150 #: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/move_ammo_group_component.ex:68 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:50 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:29 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:48 #: lib/cannery_web/live/container_live/form_component.html.heex:39 +#: lib/cannery_web/live/container_live/show.html.heex:97 +#: lib/cannery_web/live/range_live/index.html.heex:86 #, elixir-autogen, elixir-format msgid "Type" msgstr "" @@ -428,12 +430,12 @@ msgstr "" msgid "Your data stays with you, period" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:67 +#: lib/cannery_web/live/container_live/show.html.heex:60 #, elixir-autogen, elixir-format msgid "No tags for this container" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:79 +#: lib/cannery_web/components/ammo_group_table_component.ex:78 #: lib/cannery_web/components/core_components/topbar.html.heex:66 #, elixir-autogen, elixir-format msgid "Range" @@ -480,7 +482,7 @@ msgid "New Shot Records" msgstr "" #: lib/cannery_web/live/range_live/index.html.heex:55 -#: lib/cannery_web/live/range_live/index.html.heex:98 +#: lib/cannery_web/live/range_live/index.html.heex:122 #, elixir-autogen, elixir-format msgid "No shots recorded" msgstr "" @@ -519,49 +521,48 @@ msgstr "" msgid "Shot log" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:180 -#: lib/cannery_web/components/ammo_group_table_component.ex:263 -#: lib/cannery_web/components/ammo_type_table_component.ex:235 +#: lib/cannery_web/components/ammo_group_table_component.ex:164 +#: lib/cannery_web/components/ammo_group_table_component.ex:247 +#: lib/cannery_web/components/ammo_type_table_component.ex:261 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:135 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:152 #, elixir-autogen, elixir-format msgid "$%{amount}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:160 #, elixir-autogen, elixir-format msgid "Bimetal" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:51 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:83 +#: lib/cannery_web/components/ammo_type_table_component.ex:66 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #, elixir-autogen, elixir-format msgid "Jacket type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:52 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:82 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:279 #, elixir-autogen, elixir-format msgid "Muzzle velocity" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:55 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:108 +#: lib/cannery_web/components/ammo_type_table_component.ex:76 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:244 #, elixir-autogen, elixir-format msgid "Powder grains per charge" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:53 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:101 +#: lib/cannery_web/components/ammo_type_table_component.ex:74 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:236 #, elixir-autogen, elixir-format msgid "Powder type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:68 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:173 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:343 #, elixir-autogen, elixir-format msgid "UPC" msgstr "" @@ -584,8 +585,8 @@ msgstr "" msgid "New password" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:62 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:142 +#: lib/cannery_web/components/ammo_type_table_component.ex:84 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:304 #, elixir-autogen, elixir-format msgid "Firing type" msgstr "" @@ -596,33 +597,33 @@ msgid "Reconnecting..." msgstr "" #: lib/cannery_web/live/container_live/index.ex:28 -#: lib/cannery_web/live/container_live/show.ex:108 +#: lib/cannery_web/live/container_live/show.ex:120 #, elixir-autogen, elixir-format msgid "Edit %{name}" msgstr "" #: lib/cannery_web/live/container_live/index.ex:63 -#: lib/cannery_web/live/container_live/show.ex:109 +#: lib/cannery_web/live/container_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Edit %{name} tags" msgstr "" #: lib/cannery_web/components/core_components/container_card.html.heex:37 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 -#: lib/cannery_web/live/container_live/show.html.heex:33 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/container_live/show.html.heex:27 #, elixir-autogen, elixir-format msgid "Rounds:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:177 -#: lib/cannery_web/components/ammo_group_table_component.ex:259 -#: lib/cannery_web/components/ammo_type_table_component.ex:234 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 +#: lib/cannery_web/components/ammo_group_table_component.ex:161 +#: lib/cannery_web/components/ammo_group_table_component.ex:243 +#: lib/cannery_web/components/ammo_type_table_component.ex:260 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:156 #, elixir-autogen, elixir-format msgid "No cost information" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:92 +#: lib/cannery_web/components/ammo_group_table_component.ex:84 #, elixir-autogen, elixir-format msgid "% left" msgstr "" @@ -688,7 +689,7 @@ msgstr "" msgid "Copies" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #, elixir-autogen, elixir-format msgid "Added on:" msgstr "" @@ -752,7 +753,7 @@ msgstr "" msgid "Move Ammo" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:112 +#: lib/cannery_web/live/container_live/show.html.heex:123 #, elixir-autogen, elixir-format msgid "No ammo in this container" msgstr "" @@ -768,8 +769,8 @@ msgid "This ammo is not in a container" msgstr "" #: lib/cannery_web/components/core_components/container_card.html.heex:32 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 -#: lib/cannery_web/live/container_live/show.html.heex:23 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/container_live/show.html.heex:22 #, elixir-autogen, elixir-format msgid "Packs:" msgstr "" @@ -795,80 +796,79 @@ msgstr "" msgid "Container:" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:65 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:40 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:149 -#: lib/cannery_web/live/container_live/show.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:64 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:166 #, elixir-autogen, elixir-format msgid "Show used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:218 +#: lib/cannery_web/components/ammo_group_table_component.ex:202 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "%{percentage}%" msgstr "" -#: lib/cannery_web/live/range_live/index.ex:135 +#: lib/cannery_web/live/range_live/index.ex:153 #, elixir-autogen, elixir-format msgid "Rounds shot: %{count}" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:100 +#: lib/cannery_web/components/ammo_type_table_component.ex:123 #: lib/cannery_web/components/container_table_component.ex:64 #, elixir-autogen, elixir-format msgid "Packs" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/components/ammo_type_table_component.ex:144 #: lib/cannery_web/components/container_table_component.ex:65 #, elixir-autogen, elixir-format msgid "Rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:172 #: lib/cannery_web/live/container_live/index.html.heex:40 -#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/container_live/show.html.heex:115 #, elixir-autogen, elixir-format msgid "View as table" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:110 +#: lib/cannery_web/components/ammo_type_table_component.ex:108 #, elixir-autogen, elixir-format msgid "Total ever packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:130 #, elixir-autogen, elixir-format msgid "Total ever packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:129 #, elixir-autogen, elixir-format msgid "Total ever rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #, elixir-autogen, elixir-format msgid "Total ever rounds:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:105 +#: lib/cannery_web/components/ammo_type_table_component.ex:116 #, elixir-autogen, elixir-format msgid "Used packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:105 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 #, elixir-autogen, elixir-format msgid "Used packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/components/ammo_type_table_component.ex:137 #, elixir-autogen, elixir-format msgid "Used rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Used rounds:" msgstr "" @@ -883,120 +883,120 @@ msgstr "" msgid "Rounds shot chart" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:26 +#: lib/cannery_web/live/ammo_type_live/show.ex:154 #, elixir-autogen, elixir-format msgid "Blank:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:12 +#: lib/cannery_web/live/ammo_type_live/show.ex:132 #, elixir-autogen, elixir-format msgid "Bullet core:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:11 +#: lib/cannery_web/live/ammo_type_live/show.ex:131 #, elixir-autogen, elixir-format msgid "Bullet type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:14 +#: lib/cannery_web/live/ammo_type_live/show.ex:123 #, elixir-autogen, elixir-format msgid "Caliber:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:13 +#: lib/cannery_web/live/ammo_type_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Cartridge:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:15 +#: lib/cannery_web/live/ammo_type_live/show.ex:134 #, elixir-autogen, elixir-format msgid "Case material:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:27 +#: lib/cannery_web/live/ammo_type_live/show.ex:155 #, elixir-autogen, elixir-format msgid "Corrosive:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:23 +#: lib/cannery_web/live/ammo_type_live/show.ex:151 #, elixir-autogen, elixir-format msgid "Firing type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:20 +#: lib/cannery_web/live/ammo_type_live/show.ex:130 #, elixir-autogen, elixir-format msgid "Grains:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:25 +#: lib/cannery_web/live/ammo_type_live/show.ex:153 #, elixir-autogen, elixir-format msgid "Incendiary:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:16 +#: lib/cannery_web/live/ammo_type_live/show.ex:133 #, elixir-autogen, elixir-format msgid "Jacket type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:28 +#: lib/cannery_web/live/ammo_type_live/show.ex:156 #, elixir-autogen, elixir-format msgid "Manufacturer:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:17 +#: lib/cannery_web/live/ammo_type_live/show.ex:149 #, elixir-autogen, elixir-format msgid "Muzzle velocity:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:19 +#: lib/cannery_web/live/ammo_type_live/show.ex:143 #, elixir-autogen, elixir-format msgid "Powder grains per charge:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:18 +#: lib/cannery_web/live/ammo_type_live/show.ex:141 #, elixir-autogen, elixir-format msgid "Powder type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:21 +#: lib/cannery_web/live/ammo_type_live/show.ex:147 #, elixir-autogen, elixir-format msgid "Pressure:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:22 +#: lib/cannery_web/live/ammo_type_live/show.ex:150 #, elixir-autogen, elixir-format msgid "Primer type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:24 +#: lib/cannery_web/live/ammo_type_live/show.ex:152 #, elixir-autogen, elixir-format msgid "Tracer:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:29 +#: lib/cannery_web/live/ammo_type_live/show.ex:157 #, elixir-autogen, elixir-format msgid "UPC:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:120 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:131 +#: lib/cannery_web/components/ammo_type_table_component.ex:102 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:148 #, elixir-autogen, elixir-format msgid "Average CPR" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:28 -#: lib/cannery_web/live/ammo_type_live/show.ex:104 +#: lib/cannery_web/live/ammo_type_live/show.ex:82 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:267 +#: lib/cannery_web/components/ammo_group_table_component.ex:251 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17 #, elixir-autogen, elixir-format msgid "Empty" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:84 +#: lib/cannery_web/components/ammo_group_table_component.ex:81 #, elixir-autogen, elixir-format msgid "CPR" msgstr "" @@ -1006,7 +1006,7 @@ msgstr "" msgid "CPR:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:91 +#: lib/cannery_web/components/ammo_group_table_component.ex:88 #, elixir-autogen, elixir-format msgid "Original Count" msgstr "" @@ -1021,12 +1021,7 @@ msgstr "" msgid "Home" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:28 -#, elixir-autogen, elixir-format -msgid "Total packs:" -msgstr "" - -#: lib/cannery_web/components/ammo_group_table_component.ex:65 +#: lib/cannery_web/components/ammo_group_table_component.ex:64 #, elixir-autogen, elixir-format msgid "Last used on" msgstr "" @@ -1036,12 +1031,12 @@ msgstr "" msgid "Last used on:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:198 +#: lib/cannery_web/components/ammo_group_table_component.ex:182 #, elixir-autogen, elixir-format msgid "Never used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:64 +#: lib/cannery_web/components/ammo_group_table_component.ex:69 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:42 #, elixir-autogen, elixir-format msgid "Purchased on" @@ -1059,17 +1054,17 @@ msgid "Edit ammo" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:71 #, elixir-autogen, elixir-format msgid "No Ammo types" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:34 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:58 #, elixir-autogen, elixir-format msgid "Search catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:79 #, elixir-autogen, elixir-format msgid "Search ammo" msgstr "" @@ -1079,12 +1074,12 @@ msgstr "" msgid "Search containers" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:37 +#: lib/cannery_web/live/tag_live/index.html.heex:36 #, elixir-autogen, elixir-format msgid "Search tags" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:91 +#: lib/cannery_web/live/range_live/index.html.heex:115 #, elixir-autogen, elixir-format msgid "Search shot records" msgstr "" @@ -1182,27 +1177,27 @@ msgstr "" msgid "Password" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:130 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:261 #, elixir-autogen, elixir-format msgid "+P" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 #, elixir-autogen, elixir-format msgid ".223" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:63 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:56 #, elixir-autogen, elixir-format msgid "5.56x46mm NATO" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:138 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:300 #, elixir-autogen, elixir-format msgid "Boxer" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:146 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:308 #, elixir-autogen, elixir-format msgid "Centerfire" msgstr "" @@ -1214,7 +1209,7 @@ msgid "Really great weather" msgstr "" #: lib/cannery_web/components/ammo_group_table_component.ex:60 -#: lib/cannery_web/components/ammo_type_table_component.ex:121 +#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/container_table_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:70 #: lib/cannery_web/components/shot_group_table_component.ex:45 @@ -1233,7 +1228,7 @@ msgstr "" msgid "Log out" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #, elixir-autogen, elixir-format msgid "Current Count" msgstr "" @@ -1243,3 +1238,209 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Close modal" msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:56 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:35 +#: lib/cannery_web/live/container_live/show.html.heex:103 +#: lib/cannery_web/live/range_live/index.html.heex:92 +#, elixir-autogen, elixir-format +msgid "All" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:313 +#, elixir-autogen, elixir-format +msgid "Attributes" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:56 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89 +#, elixir-autogen, elixir-format +msgid "Brass height" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:128 +#, elixir-autogen, elixir-format +msgid "Brass height:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:57 +#: lib/cannery_web/components/ammo_type_table_component.ex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:96 +#, elixir-autogen, elixir-format +msgid "Chamber size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:129 +#, elixir-autogen, elixir-format +msgid "Chamber size:" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:48 +#, elixir-autogen, elixir-format +msgid "Dimensions" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:81 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:266 +#, elixir-autogen, elixir-format +msgid "Dram equivalent" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:148 +#, elixir-autogen, elixir-format +msgid "Dram equivalent:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#, elixir-autogen, elixir-format +msgid "Gauge" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:123 +#, elixir-autogen, elixir-format +msgid "Gauge:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:72 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:207 +#, elixir-autogen, elixir-format +msgid "Load grains" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:139 +#, elixir-autogen, elixir-format +msgid "Load grains:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:29 +#, elixir-autogen, elixir-format +msgid "No ammo" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.html.heex:60 +#, elixir-autogen, elixir-format +msgid "None specified" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:58 +#: lib/cannery_web/live/container_live/show.html.heex:106 +#: lib/cannery_web/live/range_live/index.html.heex:95 +#, elixir-autogen, elixir-format +msgid "Pistol" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:233 +#, elixir-autogen, elixir-format +msgid "Powder" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:293 +#, elixir-autogen, elixir-format +msgid "Primer" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:109 +#, elixir-autogen, elixir-format +msgid "Projectile" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:36 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:56 +#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/range_live/index.html.heex:93 +#, elixir-autogen, elixir-format +msgid "Rifle" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:73 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:215 +#, elixir-autogen, elixir-format +msgid "Shot charge weight" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:140 +#, elixir-autogen, elixir-format +msgid "Shot charge weight:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:70 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:191 +#, elixir-autogen, elixir-format +msgid "Shot material" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:137 +#, elixir-autogen, elixir-format +msgid "Shot material:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:200 +#, elixir-autogen, elixir-format +msgid "Shot size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:138 +#, elixir-autogen, elixir-format +msgid "Shot size:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:69 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:183 +#, elixir-autogen, elixir-format +msgid "Shot type" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:136 +#, elixir-autogen, elixir-format +msgid "Shot type:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:54 +#: lib/cannery_web/live/container_live/show.html.heex:105 +#: lib/cannery_web/live/range_live/index.html.heex:94 +#, elixir-autogen, elixir-format +msgid "Shotgun" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:143 +#, elixir-autogen, elixir-format +msgid "Slug core" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:187 +#, elixir-autogen, elixir-format +msgid "Target, bird, buck, etc" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:127 +#, elixir-autogen, elixir-format +msgid "Unfired length:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:80 +#, elixir-autogen, elixir-format +msgid "Unfired shell length" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:68 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:176 +#, elixir-autogen, elixir-format +msgid "Wadding" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:135 +#, elixir-autogen, elixir-format +msgid "Wadding:" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/actions.po b/priv/gettext/en/LC_MESSAGES/actions.po index 75a3751..f602527 100644 --- a/priv/gettext/en/LC_MESSAGES/actions.po +++ b/priv/gettext/en/LC_MESSAGES/actions.po @@ -12,12 +12,12 @@ msgstr "" #: lib/cannery_web/live/ammo_group_live/index.ex:54 #: lib/cannery_web/live/ammo_group_live/index.ex:62 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:41 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:38 #, elixir-autogen, elixir-format msgid "Add Ammo" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:34 #, elixir-autogen, elixir-format msgid "Add your first box!" msgstr "" @@ -122,7 +122,7 @@ msgstr "" #: lib/cannery_web/components/add_shot_group_component.html.heex:57 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:84 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:180 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:350 #: lib/cannery_web/live/container_live/form_component.html.heex:57 #: lib/cannery_web/live/invite_live/form_component.html.heex:35 #: lib/cannery_web/live/range_live/form_component.html.heex:45 @@ -136,7 +136,7 @@ msgstr "" msgid "Send instructions to reset password" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:75 +#: lib/cannery_web/live/container_live/show.html.heex:68 #, elixir-autogen, elixir-format msgid "Why not add one?" msgstr "" @@ -156,7 +156,7 @@ msgstr "" msgid "Why not get some ready to shoot?" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:105 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:125 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103 #: lib/cannery_web/live/range_live/index.html.heex:45 #, elixir-autogen, elixir-format @@ -178,7 +178,7 @@ msgstr "" msgid "Copy to clipboard" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:22 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:14 #, elixir-autogen, elixir-format msgid "add a container first" msgstr "" @@ -203,13 +203,13 @@ msgstr "" msgid "View in Catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:32 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #, elixir-autogen, elixir-format msgid "add an ammo type first" msgstr "" #: lib/cannery_web/components/move_ammo_group_component.ex:80 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:122 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:142 #: lib/cannery_web/live/ammo_group_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Move ammo" @@ -237,13 +237,13 @@ msgstr "" msgid "Export Data as JSON" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:110 #, elixir-autogen, elixir-format msgid "Clone %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:88 -#: lib/cannery_web/live/container_live/index.html.heex:144 +#: lib/cannery_web/live/container_live/index.html.heex:87 +#: lib/cannery_web/live/container_live/index.html.heex:145 #, elixir-autogen, elixir-format msgid "Clone %{container_name}" msgstr "" @@ -253,20 +253,20 @@ msgstr "" msgid "Copy invite link for %{invite_name}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:104 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:129 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #, elixir-autogen, elixir-format msgid "Delete %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:103 -#: lib/cannery_web/live/container_live/index.html.heex:159 -#: lib/cannery_web/live/container_live/show.html.heex:55 +#: lib/cannery_web/live/container_live/index.html.heex:104 +#: lib/cannery_web/live/container_live/index.html.heex:162 +#: lib/cannery_web/live/container_live/show.html.heex:48 #, elixir-autogen, elixir-format msgid "Delete %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:66 +#: lib/cannery_web/live/tag_live/index.html.heex:65 #, elixir-autogen, elixir-format msgid "Delete %{tag_name}" msgstr "" @@ -277,30 +277,30 @@ msgid "Delete invite for %{invite_name}" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:161 -#: lib/cannery_web/live/range_live/index.html.heex:131 +#: lib/cannery_web/live/range_live/index.html.heex:155 #, elixir-autogen, elixir-format msgid "Delete shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:75 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:78 -#: lib/cannery_web/live/container_live/index.html.heex:134 -#: lib/cannery_web/live/container_live/show.html.heex:42 +#: lib/cannery_web/live/container_live/index.html.heex:77 +#: lib/cannery_web/live/container_live/index.html.heex:135 +#: lib/cannery_web/live/container_live/show.html.heex:35 #, elixir-autogen, elixir-format msgid "Edit %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:53 +#: lib/cannery_web/live/tag_live/index.html.heex:52 #, elixir-autogen, elixir-format msgid "Edit %{tag_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:144 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:164 #: lib/cannery_web/live/ammo_group_live/show.html.heex:62 #, elixir-autogen, elixir-format msgid "Edit ammo group of %{ammo_group_count} bullets" @@ -316,45 +316,45 @@ msgstr "" msgid "Edit shot group of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:114 +#: lib/cannery_web/live/range_live/index.html.heex:138 #, elixir-autogen, elixir-format msgid "Edit shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:118 #, elixir-autogen, elixir-format, fuzzy msgid "Stage" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:66 -#: lib/cannery_web/live/container_live/index.html.heex:123 +#: lib/cannery_web/live/container_live/index.html.heex:65 +#: lib/cannery_web/live/container_live/index.html.heex:124 #, elixir-autogen, elixir-format msgid "Tag %{container_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:117 #, elixir-autogen, elixir-format msgid "Unstage" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:65 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:90 #, elixir-autogen, elixir-format msgid "View %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:156 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:176 #, elixir-autogen, elixir-format, fuzzy msgid "Clone ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:171 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:191 #: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #, elixir-autogen, elixir-format, fuzzy msgid "Delete ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:132 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:189 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:152 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:206 #, elixir-autogen, elixir-format, fuzzy msgid "View ammo group of %{ammo_group_count} bullets" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 941fb3a..e24b651 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -34,7 +34,7 @@ msgstr "" msgid "Ammo" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:108 +#: lib/cannery_web/components/ammo_group_table_component.ex:96 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:22 #, elixir-autogen, elixir-format msgid "Ammo type" @@ -45,48 +45,48 @@ msgstr "" msgid "Background color" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:65 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:158 +#: lib/cannery_web/components/ammo_type_table_component.ex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:324 #, elixir-autogen, elixir-format msgid "Blank" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:171 #, elixir-autogen, elixir-format msgid "Brass" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:47 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51 +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144 #, elixir-autogen, elixir-format msgid "Bullet core" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:43 +#: lib/cannery_web/components/ammo_type_table_component.ex:60 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:121 #, elixir-autogen, elixir-format msgid "Bullet type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:49 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68 #, elixir-autogen, elixir-format msgid "Caliber" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:48 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:59 +#: lib/cannery_web/components/ammo_type_table_component.ex:49 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:52 #, elixir-autogen, elixir-format msgid "Cartridge" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:50 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 +#: lib/cannery_web/components/ammo_type_table_component.ex:67 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:167 #, elixir-autogen, elixir-format msgid "Case material" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:72 +#: lib/cannery_web/components/ammo_group_table_component.ex:74 #: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:59 #, elixir-autogen, elixir-format @@ -101,13 +101,13 @@ msgstr "" msgid "Containers" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:66 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:162 +#: lib/cannery_web/components/ammo_type_table_component.ex:88 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:328 #, elixir-autogen, elixir-format msgid "Corrosive" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:28 #, elixir-autogen, elixir-format msgid "Count" @@ -120,7 +120,7 @@ msgid "Count:" msgstr "" #: lib/cannery_web/components/container_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:28 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:38 #: lib/cannery_web/live/container_live/form_component.html.heex:29 #, elixir-autogen, elixir-format msgid "Description" @@ -147,24 +147,19 @@ msgstr "" msgid "Edit Tag" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:41 -#, elixir-autogen, elixir-format -msgid "Example bullet type abbreviations" -msgstr "" - -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:135 #, elixir-autogen, elixir-format msgid "FMJ" msgstr "" #: lib/cannery_web/components/ammo_type_table_component.ex:59 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:112 #, elixir-autogen, elixir-format msgid "Grains" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:64 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:154 +#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:320 #, elixir-autogen, elixir-format msgid "Incendiary" msgstr "" @@ -214,8 +209,9 @@ msgstr "" msgid "Magazine, Clip, Ammo Box, etc" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:67 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:166 +#: lib/cannery_web/components/ammo_type_table_component.ex:89 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:333 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:336 #, elixir-autogen, elixir-format msgid "Manufacturer" msgstr "" @@ -230,9 +226,9 @@ msgstr "" msgid "My cool ammo can" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:45 +#: lib/cannery_web/components/ammo_type_table_component.ex:153 #: lib/cannery_web/components/container_table_component.ex:45 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:31 #: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/tag_live/form_component.html.heex:21 @@ -262,19 +258,18 @@ msgstr "" msgid "New Tag" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:72 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:92 #, elixir-autogen, elixir-format msgid "No Ammo" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:163 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:180 #, elixir-autogen, elixir-format msgid "No ammo for this type" msgstr "" #: lib/cannery_web/live/container_live/index.html.heex:8 -#: lib/cannery_web/live/container_live/index.html.heex:48 +#: lib/cannery_web/live/container_live/index.html.heex:47 #, elixir-autogen, elixir-format msgid "No containers" msgstr "" @@ -286,7 +281,7 @@ msgstr "" #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/tag_live/index.html.heex:10 -#: lib/cannery_web/live/tag_live/index.html.heex:44 +#: lib/cannery_web/live/tag_live/index.html.heex:43 #, elixir-autogen, elixir-format msgid "No tags" msgstr "" @@ -311,13 +306,13 @@ msgstr "" msgid "On the bookshelf" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:60 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:126 +#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:257 #, elixir-autogen, elixir-format msgid "Pressure" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:83 +#: lib/cannery_web/components/ammo_group_table_component.ex:82 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:35 #, elixir-autogen, elixir-format msgid "Price paid" @@ -328,8 +323,8 @@ msgstr "" msgid "Price paid:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:61 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:134 +#: lib/cannery_web/components/ammo_type_table_component.ex:83 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:296 #, elixir-autogen, elixir-format msgid "Primer type" msgstr "" @@ -360,7 +355,7 @@ msgstr "" msgid "Simple:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:151 #, elixir-autogen, elixir-format msgid "Steel" msgstr "" @@ -394,15 +389,22 @@ msgstr "" msgid "The self-hosted firearm tracker website" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:63 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:150 +#: lib/cannery_web/components/ammo_type_table_component.ex:85 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:316 #, elixir-autogen, elixir-format msgid "Tracer" msgstr "" +#: lib/cannery_web/components/ammo_type_table_component.ex:150 #: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/move_ammo_group_component.ex:68 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:50 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:29 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:48 #: lib/cannery_web/live/container_live/form_component.html.heex:39 +#: lib/cannery_web/live/container_live/show.html.heex:97 +#: lib/cannery_web/live/range_live/index.html.heex:86 #, elixir-autogen, elixir-format msgid "Type" msgstr "" @@ -428,12 +430,12 @@ msgstr "" msgid "Your data stays with you, period" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:67 +#: lib/cannery_web/live/container_live/show.html.heex:60 #, elixir-autogen, elixir-format msgid "No tags for this container" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:79 +#: lib/cannery_web/components/ammo_group_table_component.ex:78 #: lib/cannery_web/components/core_components/topbar.html.heex:66 #, elixir-autogen, elixir-format msgid "Range" @@ -480,7 +482,7 @@ msgid "New Shot Records" msgstr "" #: lib/cannery_web/live/range_live/index.html.heex:55 -#: lib/cannery_web/live/range_live/index.html.heex:98 +#: lib/cannery_web/live/range_live/index.html.heex:122 #, elixir-autogen, elixir-format msgid "No shots recorded" msgstr "" @@ -519,49 +521,48 @@ msgstr "" msgid "Shot log" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:180 -#: lib/cannery_web/components/ammo_group_table_component.ex:263 -#: lib/cannery_web/components/ammo_type_table_component.ex:235 +#: lib/cannery_web/components/ammo_group_table_component.ex:164 +#: lib/cannery_web/components/ammo_group_table_component.ex:247 +#: lib/cannery_web/components/ammo_type_table_component.ex:261 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:135 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:152 #, elixir-autogen, elixir-format msgid "$%{amount}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:160 #, elixir-autogen, elixir-format msgid "Bimetal" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:51 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:83 +#: lib/cannery_web/components/ammo_type_table_component.ex:66 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #, elixir-autogen, elixir-format msgid "Jacket type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:52 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:82 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:279 #, elixir-autogen, elixir-format msgid "Muzzle velocity" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:55 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:108 +#: lib/cannery_web/components/ammo_type_table_component.ex:76 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:244 #, elixir-autogen, elixir-format msgid "Powder grains per charge" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:53 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:101 +#: lib/cannery_web/components/ammo_type_table_component.ex:74 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:236 #, elixir-autogen, elixir-format msgid "Powder type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:68 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:173 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:343 #, elixir-autogen, elixir-format msgid "UPC" msgstr "" @@ -584,8 +585,8 @@ msgstr "" msgid "New password" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:62 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:142 +#: lib/cannery_web/components/ammo_type_table_component.ex:84 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:304 #, elixir-autogen, elixir-format msgid "Firing type" msgstr "" @@ -596,33 +597,33 @@ msgid "Reconnecting..." msgstr "" #: lib/cannery_web/live/container_live/index.ex:28 -#: lib/cannery_web/live/container_live/show.ex:108 +#: lib/cannery_web/live/container_live/show.ex:120 #, elixir-autogen, elixir-format msgid "Edit %{name}" msgstr "" #: lib/cannery_web/live/container_live/index.ex:63 -#: lib/cannery_web/live/container_live/show.ex:109 +#: lib/cannery_web/live/container_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Edit %{name} tags" msgstr "" #: lib/cannery_web/components/core_components/container_card.html.heex:37 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 -#: lib/cannery_web/live/container_live/show.html.heex:33 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/container_live/show.html.heex:27 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:177 -#: lib/cannery_web/components/ammo_group_table_component.ex:259 -#: lib/cannery_web/components/ammo_type_table_component.ex:234 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 +#: lib/cannery_web/components/ammo_group_table_component.ex:161 +#: lib/cannery_web/components/ammo_group_table_component.ex:243 +#: lib/cannery_web/components/ammo_type_table_component.ex:260 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:156 #, elixir-autogen, elixir-format msgid "No cost information" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:92 +#: lib/cannery_web/components/ammo_group_table_component.ex:84 #, elixir-autogen, elixir-format msgid "% left" msgstr "" @@ -688,7 +689,7 @@ msgstr "" msgid "Copies" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #, elixir-autogen, elixir-format msgid "Added on:" msgstr "" @@ -752,7 +753,7 @@ msgstr "" msgid "Move Ammo" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:112 +#: lib/cannery_web/live/container_live/show.html.heex:123 #, elixir-autogen, elixir-format, fuzzy msgid "No ammo in this container" msgstr "" @@ -768,8 +769,8 @@ msgid "This ammo is not in a container" msgstr "" #: lib/cannery_web/components/core_components/container_card.html.heex:32 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 -#: lib/cannery_web/live/container_live/show.html.heex:23 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/container_live/show.html.heex:22 #, elixir-autogen, elixir-format msgid "Packs:" msgstr "" @@ -795,80 +796,79 @@ msgstr "" msgid "Container:" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:65 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:40 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:149 -#: lib/cannery_web/live/container_live/show.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:64 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:166 #, elixir-autogen, elixir-format msgid "Show used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:218 +#: lib/cannery_web/components/ammo_group_table_component.ex:202 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "%{percentage}%" msgstr "" -#: lib/cannery_web/live/range_live/index.ex:135 +#: lib/cannery_web/live/range_live/index.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds shot: %{count}" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:100 +#: lib/cannery_web/components/ammo_type_table_component.ex:123 #: lib/cannery_web/components/container_table_component.ex:64 #, elixir-autogen, elixir-format, fuzzy msgid "Packs" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/components/ammo_type_table_component.ex:144 #: lib/cannery_web/components/container_table_component.ex:65 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:172 #: lib/cannery_web/live/container_live/index.html.heex:40 -#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/container_live/show.html.heex:115 #, elixir-autogen, elixir-format msgid "View as table" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:110 +#: lib/cannery_web/components/ammo_type_table_component.ex:108 #, elixir-autogen, elixir-format msgid "Total ever packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:130 #, elixir-autogen, elixir-format msgid "Total ever packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:129 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:105 +#: lib/cannery_web/components/ammo_type_table_component.ex:116 #, elixir-autogen, elixir-format msgid "Used packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:105 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 #, elixir-autogen, elixir-format msgid "Used packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/components/ammo_type_table_component.ex:137 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds:" msgstr "" @@ -883,120 +883,120 @@ msgstr "" msgid "Rounds shot chart" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:26 +#: lib/cannery_web/live/ammo_type_live/show.ex:154 #, elixir-autogen, elixir-format, fuzzy msgid "Blank:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:12 +#: lib/cannery_web/live/ammo_type_live/show.ex:132 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet core:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:11 +#: lib/cannery_web/live/ammo_type_live/show.ex:131 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:14 +#: lib/cannery_web/live/ammo_type_live/show.ex:123 #, elixir-autogen, elixir-format, fuzzy msgid "Caliber:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:13 +#: lib/cannery_web/live/ammo_type_live/show.ex:121 #, elixir-autogen, elixir-format, fuzzy msgid "Cartridge:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:15 +#: lib/cannery_web/live/ammo_type_live/show.ex:134 #, elixir-autogen, elixir-format, fuzzy msgid "Case material:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:27 +#: lib/cannery_web/live/ammo_type_live/show.ex:155 #, elixir-autogen, elixir-format, fuzzy msgid "Corrosive:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:23 +#: lib/cannery_web/live/ammo_type_live/show.ex:151 #, elixir-autogen, elixir-format, fuzzy msgid "Firing type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:20 +#: lib/cannery_web/live/ammo_type_live/show.ex:130 #, elixir-autogen, elixir-format, fuzzy msgid "Grains:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:25 +#: lib/cannery_web/live/ammo_type_live/show.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Incendiary:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:16 +#: lib/cannery_web/live/ammo_type_live/show.ex:133 #, elixir-autogen, elixir-format, fuzzy msgid "Jacket type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:28 +#: lib/cannery_web/live/ammo_type_live/show.ex:156 #, elixir-autogen, elixir-format, fuzzy msgid "Manufacturer:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:17 +#: lib/cannery_web/live/ammo_type_live/show.ex:149 #, elixir-autogen, elixir-format, fuzzy msgid "Muzzle velocity:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:19 +#: lib/cannery_web/live/ammo_type_live/show.ex:143 #, elixir-autogen, elixir-format, fuzzy msgid "Powder grains per charge:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:18 +#: lib/cannery_web/live/ammo_type_live/show.ex:141 #, elixir-autogen, elixir-format, fuzzy msgid "Powder type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:21 +#: lib/cannery_web/live/ammo_type_live/show.ex:147 #, elixir-autogen, elixir-format, fuzzy msgid "Pressure:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:22 +#: lib/cannery_web/live/ammo_type_live/show.ex:150 #, elixir-autogen, elixir-format, fuzzy msgid "Primer type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:24 +#: lib/cannery_web/live/ammo_type_live/show.ex:152 #, elixir-autogen, elixir-format, fuzzy msgid "Tracer:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:29 +#: lib/cannery_web/live/ammo_type_live/show.ex:157 #, elixir-autogen, elixir-format, fuzzy msgid "UPC:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:120 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:131 +#: lib/cannery_web/components/ammo_type_table_component.ex:102 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:148 #, elixir-autogen, elixir-format msgid "Average CPR" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:28 -#: lib/cannery_web/live/ammo_type_live/show.ex:104 +#: lib/cannery_web/live/ammo_type_live/show.ex:82 #, elixir-autogen, elixir-format, fuzzy msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:267 +#: lib/cannery_web/components/ammo_group_table_component.ex:251 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17 #, elixir-autogen, elixir-format msgid "Empty" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:84 +#: lib/cannery_web/components/ammo_group_table_component.ex:81 #, elixir-autogen, elixir-format msgid "CPR" msgstr "" @@ -1006,7 +1006,7 @@ msgstr "" msgid "CPR:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:91 +#: lib/cannery_web/components/ammo_group_table_component.ex:88 #, elixir-autogen, elixir-format, fuzzy msgid "Original Count" msgstr "" @@ -1021,12 +1021,7 @@ msgstr "" msgid "Home" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:28 -#, elixir-autogen, elixir-format, fuzzy -msgid "Total packs:" -msgstr "" - -#: lib/cannery_web/components/ammo_group_table_component.ex:65 +#: lib/cannery_web/components/ammo_group_table_component.ex:64 #, elixir-autogen, elixir-format msgid "Last used on" msgstr "" @@ -1036,12 +1031,12 @@ msgstr "" msgid "Last used on:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:198 +#: lib/cannery_web/components/ammo_group_table_component.ex:182 #, elixir-autogen, elixir-format msgid "Never used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:64 +#: lib/cannery_web/components/ammo_group_table_component.ex:69 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:42 #, elixir-autogen, elixir-format msgid "Purchased on" @@ -1059,17 +1054,17 @@ msgid "Edit ammo" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:71 #, elixir-autogen, elixir-format, fuzzy msgid "No Ammo types" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:34 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:58 #, elixir-autogen, elixir-format msgid "Search catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:79 #, elixir-autogen, elixir-format, fuzzy msgid "Search ammo" msgstr "" @@ -1079,12 +1074,12 @@ msgstr "" msgid "Search containers" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:37 +#: lib/cannery_web/live/tag_live/index.html.heex:36 #, elixir-autogen, elixir-format, fuzzy msgid "Search tags" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:91 +#: lib/cannery_web/live/range_live/index.html.heex:115 #, elixir-autogen, elixir-format msgid "Search shot records" msgstr "" @@ -1182,27 +1177,27 @@ msgstr "" msgid "Password" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:130 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:261 #, elixir-autogen, elixir-format msgid "+P" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 #, elixir-autogen, elixir-format msgid ".223" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:63 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:56 #, elixir-autogen, elixir-format msgid "5.56x46mm NATO" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:138 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:300 #, elixir-autogen, elixir-format msgid "Boxer" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:146 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:308 #, elixir-autogen, elixir-format msgid "Centerfire" msgstr "" @@ -1214,7 +1209,7 @@ msgid "Really great weather" msgstr "" #: lib/cannery_web/components/ammo_group_table_component.ex:60 -#: lib/cannery_web/components/ammo_type_table_component.ex:121 +#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/container_table_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:70 #: lib/cannery_web/components/shot_group_table_component.ex:45 @@ -1233,7 +1228,7 @@ msgstr "" msgid "Log out" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #, elixir-autogen, elixir-format msgid "Current Count" msgstr "" @@ -1243,3 +1238,209 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Close modal" msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:56 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:35 +#: lib/cannery_web/live/container_live/show.html.heex:103 +#: lib/cannery_web/live/range_live/index.html.heex:92 +#, elixir-autogen, elixir-format +msgid "All" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:313 +#, elixir-autogen, elixir-format +msgid "Attributes" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:56 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89 +#, elixir-autogen, elixir-format, fuzzy +msgid "Brass height" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:128 +#, elixir-autogen, elixir-format +msgid "Brass height:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:57 +#: lib/cannery_web/components/ammo_type_table_component.ex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:96 +#, elixir-autogen, elixir-format +msgid "Chamber size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:129 +#, elixir-autogen, elixir-format +msgid "Chamber size:" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:48 +#, elixir-autogen, elixir-format +msgid "Dimensions" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:81 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:266 +#, elixir-autogen, elixir-format +msgid "Dram equivalent" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:148 +#, elixir-autogen, elixir-format +msgid "Dram equivalent:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#, elixir-autogen, elixir-format +msgid "Gauge" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:123 +#, elixir-autogen, elixir-format +msgid "Gauge:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:72 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:207 +#, elixir-autogen, elixir-format +msgid "Load grains" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:139 +#, elixir-autogen, elixir-format +msgid "Load grains:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:29 +#, elixir-autogen, elixir-format, fuzzy +msgid "No ammo" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.html.heex:60 +#, elixir-autogen, elixir-format +msgid "None specified" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:58 +#: lib/cannery_web/live/container_live/show.html.heex:106 +#: lib/cannery_web/live/range_live/index.html.heex:95 +#, elixir-autogen, elixir-format +msgid "Pistol" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:233 +#, elixir-autogen, elixir-format, fuzzy +msgid "Powder" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:293 +#, elixir-autogen, elixir-format, fuzzy +msgid "Primer" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:109 +#, elixir-autogen, elixir-format +msgid "Projectile" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:36 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:56 +#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/range_live/index.html.heex:93 +#, elixir-autogen, elixir-format +msgid "Rifle" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:73 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:215 +#, elixir-autogen, elixir-format +msgid "Shot charge weight" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:140 +#, elixir-autogen, elixir-format +msgid "Shot charge weight:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:70 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:191 +#, elixir-autogen, elixir-format +msgid "Shot material" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:137 +#, elixir-autogen, elixir-format +msgid "Shot material:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:200 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:138 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:69 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:183 +#, elixir-autogen, elixir-format +msgid "Shot type" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:136 +#, elixir-autogen, elixir-format +msgid "Shot type:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:54 +#: lib/cannery_web/live/container_live/show.html.heex:105 +#: lib/cannery_web/live/range_live/index.html.heex:94 +#, elixir-autogen, elixir-format +msgid "Shotgun" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:143 +#, elixir-autogen, elixir-format +msgid "Slug core" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:187 +#, elixir-autogen, elixir-format +msgid "Target, bird, buck, etc" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:127 +#, elixir-autogen, elixir-format +msgid "Unfired length:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:80 +#, elixir-autogen, elixir-format +msgid "Unfired shell length" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:68 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:176 +#, elixir-autogen, elixir-format +msgid "Wadding" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:135 +#, elixir-autogen, elixir-format +msgid "Wadding:" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/errors.po b/priv/gettext/en/LC_MESSAGES/errors.po index 7ab00f2..1e52b74 100644 --- a/priv/gettext/en/LC_MESSAGES/errors.po +++ b/priv/gettext/en/LC_MESSAGES/errors.po @@ -56,6 +56,7 @@ msgstr "" msgid "Not found" msgstr "" +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:18 #: lib/cannery_web/templates/user_registration/new.html.heex:13 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:13 #: lib/cannery_web/templates/user_settings/edit.html.heex:22 @@ -155,7 +156,7 @@ msgstr "" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgstr "" -#: lib/cannery/ammo.ex:1043 +#: lib/cannery/ammo.ex:1114 #, elixir-autogen, elixir-format msgid "Invalid multiplier" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/prompts.po b/priv/gettext/en/LC_MESSAGES/prompts.po index e51ba90..1344b33 100644 --- a/priv/gettext/en/LC_MESSAGES/prompts.po +++ b/priv/gettext/en/LC_MESSAGES/prompts.po @@ -19,7 +19,7 @@ msgid "%{name} created successfully" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:72 -#: lib/cannery_web/live/ammo_type_live/show.ex:49 +#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/tag_live/index.ex:65 #, elixir-autogen, elixir-format msgid "%{name} deleted succesfully" @@ -50,15 +50,15 @@ msgstr "" msgid "Are you sure you want to delete %{email}? This action is permanent!" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:100 -#: lib/cannery_web/live/container_live/index.html.heex:156 -#: lib/cannery_web/live/container_live/show.html.heex:52 -#: lib/cannery_web/live/tag_live/index.html.heex:64 +#: lib/cannery_web/live/container_live/index.html.heex:99 +#: lib/cannery_web/live/container_live/index.html.heex:157 +#: lib/cannery_web/live/container_live/show.html.heex:45 +#: lib/cannery_web/live/tag_live/index.html.heex:63 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}?" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:169 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:189 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this ammo?" @@ -111,7 +111,7 @@ msgstr "" #: lib/cannery_web/components/add_shot_group_component.html.heex:59 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:85 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:181 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:351 #: lib/cannery_web/live/container_live/form_component.html.heex:59 #: lib/cannery_web/live/invite_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:47 @@ -156,7 +156,7 @@ msgid "Are you sure you want to unstage this ammo?" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:159 -#: lib/cannery_web/live/range_live/index.html.heex:128 +#: lib/cannery_web/live/range_live/index.html.heex:152 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this shot record?" msgstr "" @@ -192,8 +192,8 @@ msgstr "" msgid "%{name} removed successfully" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #, elixir-autogen, elixir-format msgid "You'll need to" msgstr "" @@ -236,7 +236,7 @@ msgid_plural "Ammo added successfully" msgstr[0] "" msgstr[1] "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:122 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #, elixir-autogen, elixir-format, fuzzy msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index 7055959..a5d4148 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -56,6 +56,7 @@ msgstr "" msgid "Not found" msgstr "" +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:18 #: lib/cannery_web/templates/user_registration/new.html.heex:13 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:13 #: lib/cannery_web/templates/user_settings/edit.html.heex:22 @@ -154,7 +155,7 @@ msgstr "" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgstr "" -#: lib/cannery/ammo.ex:1043 +#: lib/cannery/ammo.ex:1114 #, elixir-autogen, elixir-format msgid "Invalid multiplier" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/actions.po b/priv/gettext/es/LC_MESSAGES/actions.po index a1b1413..8153dc5 100644 --- a/priv/gettext/es/LC_MESSAGES/actions.po +++ b/priv/gettext/es/LC_MESSAGES/actions.po @@ -25,12 +25,12 @@ msgstr "" ## effect: edit them in PO (.po) files instead. #: lib/cannery_web/live/ammo_group_live/index.ex:54 #: lib/cannery_web/live/ammo_group_live/index.ex:62 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:41 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:38 #, elixir-autogen, elixir-format msgid "Add Ammo" msgstr "Añadir Munición" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:34 #, elixir-autogen, elixir-format msgid "Add your first box!" msgstr "¡Añade tu primera caja!" @@ -135,7 +135,7 @@ msgstr "Resetear contraseña" #: lib/cannery_web/components/add_shot_group_component.html.heex:57 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:84 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:180 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:350 #: lib/cannery_web/live/container_live/form_component.html.heex:57 #: lib/cannery_web/live/invite_live/form_component.html.heex:35 #: lib/cannery_web/live/range_live/form_component.html.heex:45 @@ -149,7 +149,7 @@ msgstr "Guardar" msgid "Send instructions to reset password" msgstr "Enviar instrucciones para reestablecer contraseña" -#: lib/cannery_web/live/container_live/show.html.heex:75 +#: lib/cannery_web/live/container_live/show.html.heex:68 #, elixir-autogen, elixir-format msgid "Why not add one?" msgstr "¿Por qué no añadir una?" @@ -169,7 +169,7 @@ msgstr "Preparar munición" msgid "Why not get some ready to shoot?" msgstr "¿Por qué no preparar parte para disparar?" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:105 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:125 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103 #: lib/cannery_web/live/range_live/index.html.heex:45 #, elixir-autogen, elixir-format @@ -191,7 +191,7 @@ msgstr "Seleccionar" msgid "Copy to clipboard" msgstr "Copiar al portapapeles" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:22 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:14 #, elixir-autogen, elixir-format msgid "add a container first" msgstr "añade primero un contenedor" @@ -216,13 +216,13 @@ msgstr "Cambiar lenguaje" msgid "View in Catalog" msgstr "Ver en Catalogo" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:32 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #, elixir-autogen, elixir-format msgid "add an ammo type first" msgstr "añade primero un tipo de munición" #: lib/cannery_web/components/move_ammo_group_component.ex:80 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:122 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:142 #: lib/cannery_web/live/ammo_group_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Move ammo" @@ -250,13 +250,13 @@ msgstr "Desmontar del campo de tiro" msgid "Export Data as JSON" msgstr "Exportar datos como JSON" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:110 #, elixir-autogen, elixir-format msgid "Clone %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:88 -#: lib/cannery_web/live/container_live/index.html.heex:144 +#: lib/cannery_web/live/container_live/index.html.heex:87 +#: lib/cannery_web/live/container_live/index.html.heex:145 #, elixir-autogen, elixir-format msgid "Clone %{container_name}" msgstr "" @@ -266,20 +266,20 @@ msgstr "" msgid "Copy invite link for %{invite_name}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:104 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:129 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #, elixir-autogen, elixir-format msgid "Delete %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:103 -#: lib/cannery_web/live/container_live/index.html.heex:159 -#: lib/cannery_web/live/container_live/show.html.heex:55 +#: lib/cannery_web/live/container_live/index.html.heex:104 +#: lib/cannery_web/live/container_live/index.html.heex:162 +#: lib/cannery_web/live/container_live/show.html.heex:48 #, elixir-autogen, elixir-format msgid "Delete %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:66 +#: lib/cannery_web/live/tag_live/index.html.heex:65 #, elixir-autogen, elixir-format msgid "Delete %{tag_name}" msgstr "" @@ -290,30 +290,30 @@ msgid "Delete invite for %{invite_name}" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:161 -#: lib/cannery_web/live/range_live/index.html.heex:131 +#: lib/cannery_web/live/range_live/index.html.heex:155 #, elixir-autogen, elixir-format msgid "Delete shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:75 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:78 -#: lib/cannery_web/live/container_live/index.html.heex:134 -#: lib/cannery_web/live/container_live/show.html.heex:42 +#: lib/cannery_web/live/container_live/index.html.heex:77 +#: lib/cannery_web/live/container_live/index.html.heex:135 +#: lib/cannery_web/live/container_live/show.html.heex:35 #, elixir-autogen, elixir-format msgid "Edit %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:53 +#: lib/cannery_web/live/tag_live/index.html.heex:52 #, elixir-autogen, elixir-format msgid "Edit %{tag_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:144 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:164 #: lib/cannery_web/live/ammo_group_live/show.html.heex:62 #, elixir-autogen, elixir-format msgid "Edit ammo group of %{ammo_group_count} bullets" @@ -329,45 +329,45 @@ msgstr "" msgid "Edit shot group of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:114 +#: lib/cannery_web/live/range_live/index.html.heex:138 #, elixir-autogen, elixir-format msgid "Edit shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:118 #, elixir-autogen, elixir-format, fuzzy msgid "Stage" msgstr "Preparar munición" -#: lib/cannery_web/live/container_live/index.html.heex:66 -#: lib/cannery_web/live/container_live/index.html.heex:123 +#: lib/cannery_web/live/container_live/index.html.heex:65 +#: lib/cannery_web/live/container_live/index.html.heex:124 #, elixir-autogen, elixir-format msgid "Tag %{container_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:117 #, elixir-autogen, elixir-format msgid "Unstage" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:65 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:90 #, elixir-autogen, elixir-format msgid "View %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:156 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:176 #, elixir-autogen, elixir-format, fuzzy msgid "Clone ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:171 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:191 #: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #, elixir-autogen, elixir-format, fuzzy msgid "Delete ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:132 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:189 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:152 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:206 #, elixir-autogen, elixir-format, fuzzy msgid "View ammo group of %{ammo_group_count} bullets" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index 6d49883..dab0951 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -38,7 +38,7 @@ msgstr "Aministradores:" msgid "Ammo" msgstr "Munición" -#: lib/cannery_web/components/ammo_group_table_component.ex:108 +#: lib/cannery_web/components/ammo_group_table_component.ex:96 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:22 #, elixir-autogen, elixir-format msgid "Ammo type" @@ -49,48 +49,48 @@ msgstr "Tipo de munición" msgid "Background color" msgstr "Color de fondo" -#: lib/cannery_web/components/ammo_type_table_component.ex:65 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:158 +#: lib/cannery_web/components/ammo_type_table_component.ex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:324 #, elixir-autogen, elixir-format msgid "Blank" msgstr "Fogueo" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:171 #, elixir-autogen, elixir-format msgid "Brass" msgstr "Latón" -#: lib/cannery_web/components/ammo_type_table_component.ex:47 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51 +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144 #, elixir-autogen, elixir-format msgid "Bullet core" msgstr "Núcleo de bala" -#: lib/cannery_web/components/ammo_type_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:43 +#: lib/cannery_web/components/ammo_type_table_component.ex:60 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:121 #, elixir-autogen, elixir-format msgid "Bullet type" msgstr "Tipo de bala" -#: lib/cannery_web/components/ammo_type_table_component.ex:49 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68 #, elixir-autogen, elixir-format msgid "Caliber" msgstr "Calibre" -#: lib/cannery_web/components/ammo_type_table_component.ex:48 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:59 +#: lib/cannery_web/components/ammo_type_table_component.ex:49 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:52 #, elixir-autogen, elixir-format msgid "Cartridge" msgstr "Cartucho" -#: lib/cannery_web/components/ammo_type_table_component.ex:50 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 +#: lib/cannery_web/components/ammo_type_table_component.ex:67 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:167 #, elixir-autogen, elixir-format msgid "Case material" msgstr "Material del casquillo" -#: lib/cannery_web/components/ammo_group_table_component.ex:72 +#: lib/cannery_web/components/ammo_group_table_component.ex:74 #: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:59 #, elixir-autogen, elixir-format @@ -105,13 +105,13 @@ msgstr "Contenedor" msgid "Containers" msgstr "Contenedores" -#: lib/cannery_web/components/ammo_type_table_component.ex:66 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:162 +#: lib/cannery_web/components/ammo_type_table_component.ex:88 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:328 #, elixir-autogen, elixir-format msgid "Corrosive" msgstr "Corrosiva" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:28 #, elixir-autogen, elixir-format msgid "Count" @@ -124,7 +124,7 @@ msgid "Count:" msgstr "Cantidad:" #: lib/cannery_web/components/container_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:28 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:38 #: lib/cannery_web/live/container_live/form_component.html.heex:29 #, elixir-autogen, elixir-format msgid "Description" @@ -151,24 +151,19 @@ msgstr "Editar Invitación" msgid "Edit Tag" msgstr "Editar Etiqueta" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:41 -#, elixir-autogen, elixir-format -msgid "Example bullet type abbreviations" -msgstr "Abreviaciones de tipo de bala ejemplo" - -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:135 #, elixir-autogen, elixir-format msgid "FMJ" msgstr "Bala encamisada" #: lib/cannery_web/components/ammo_type_table_component.ex:59 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:112 #, elixir-autogen, elixir-format msgid "Grains" msgstr "Grano" -#: lib/cannery_web/components/ammo_type_table_component.ex:64 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:154 +#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:320 #, elixir-autogen, elixir-format msgid "Incendiary" msgstr "Incendiaria" @@ -218,8 +213,9 @@ msgstr "Localización:" msgid "Magazine, Clip, Ammo Box, etc" msgstr "Cargador, Clip, Caja de Munición, etc" -#: lib/cannery_web/components/ammo_type_table_component.ex:67 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:166 +#: lib/cannery_web/components/ammo_type_table_component.ex:89 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:333 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:336 #, elixir-autogen, elixir-format msgid "Manufacturer" msgstr "Fabricante" @@ -234,9 +230,9 @@ msgstr "Lata de munición metálica con la pegatina de chica de anime" msgid "My cool ammo can" msgstr "Mi lata de munición guapa" -#: lib/cannery_web/components/ammo_type_table_component.ex:45 +#: lib/cannery_web/components/ammo_type_table_component.ex:153 #: lib/cannery_web/components/container_table_component.ex:45 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:31 #: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/tag_live/form_component.html.heex:21 @@ -266,19 +262,18 @@ msgstr "Nueva Invitación" msgid "New Tag" msgstr "Nueva Etiqueta" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:72 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:92 #, elixir-autogen, elixir-format msgid "No Ammo" msgstr "Sin Munición" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:163 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:180 #, elixir-autogen, elixir-format msgid "No ammo for this type" msgstr "Sin munición para este tipo" #: lib/cannery_web/live/container_live/index.html.heex:8 -#: lib/cannery_web/live/container_live/index.html.heex:48 +#: lib/cannery_web/live/container_live/index.html.heex:47 #, elixir-autogen, elixir-format msgid "No containers" msgstr "Sin contenedores" @@ -290,7 +285,7 @@ msgstr "Sin invitaciones" #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/tag_live/index.html.heex:10 -#: lib/cannery_web/live/tag_live/index.html.heex:44 +#: lib/cannery_web/live/tag_live/index.html.heex:43 #, elixir-autogen, elixir-format msgid "No tags" msgstr "Sin etiquetas" @@ -315,13 +310,13 @@ msgstr "Notas:" msgid "On the bookshelf" msgstr "En la estantería" -#: lib/cannery_web/components/ammo_type_table_component.ex:60 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:126 +#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:257 #, elixir-autogen, elixir-format msgid "Pressure" msgstr "Presión" -#: lib/cannery_web/components/ammo_group_table_component.ex:83 +#: lib/cannery_web/components/ammo_group_table_component.ex:82 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:35 #, elixir-autogen, elixir-format msgid "Price paid" @@ -332,8 +327,8 @@ msgstr "Precio pagado" msgid "Price paid:" msgstr "Precio pagado:" -#: lib/cannery_web/components/ammo_type_table_component.ex:61 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:134 +#: lib/cannery_web/components/ammo_type_table_component.ex:83 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:296 #, elixir-autogen, elixir-format msgid "Primer type" msgstr "Tipo de espoleta" @@ -366,7 +361,7 @@ msgstr "Ajustes" msgid "Simple:" msgstr "Simple:" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:151 #, elixir-autogen, elixir-format msgid "Steel" msgstr "Acero" @@ -401,15 +396,22 @@ msgstr "Color del texto" msgid "The self-hosted firearm tracker website" msgstr "La página de seguimiento de armas autogestionada" -#: lib/cannery_web/components/ammo_type_table_component.ex:63 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:150 +#: lib/cannery_web/components/ammo_type_table_component.ex:85 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:316 #, elixir-autogen, elixir-format msgid "Tracer" msgstr "Trazadora" +#: lib/cannery_web/components/ammo_type_table_component.ex:150 #: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/move_ammo_group_component.ex:68 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:50 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:29 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:48 #: lib/cannery_web/live/container_live/form_component.html.heex:39 +#: lib/cannery_web/live/container_live/show.html.heex:97 +#: lib/cannery_web/live/range_live/index.html.heex:86 #, elixir-autogen, elixir-format msgid "Type" msgstr "Tipo" @@ -435,12 +437,12 @@ msgstr "Usos restantes" msgid "Your data stays with you, period" msgstr "Tus datos se quedan contigo, sin excepciones" -#: lib/cannery_web/live/container_live/show.html.heex:67 +#: lib/cannery_web/live/container_live/show.html.heex:60 #, elixir-autogen, elixir-format msgid "No tags for this container" msgstr "Contenedor sin etiquetas" -#: lib/cannery_web/components/ammo_group_table_component.ex:79 +#: lib/cannery_web/components/ammo_group_table_component.ex:78 #: lib/cannery_web/components/core_components/topbar.html.heex:66 #, elixir-autogen, elixir-format msgid "Range" @@ -487,7 +489,7 @@ msgid "New Shot Records" msgstr "Nuevos Tiros Récord" #: lib/cannery_web/live/range_live/index.html.heex:55 -#: lib/cannery_web/live/range_live/index.html.heex:98 +#: lib/cannery_web/live/range_live/index.html.heex:122 #, elixir-autogen, elixir-format msgid "No shots recorded" msgstr "No se han grabado tiros" @@ -526,49 +528,48 @@ msgstr "No hay otros contenedores" msgid "Shot log" msgstr "Registro de tiros" -#: lib/cannery_web/components/ammo_group_table_component.ex:180 -#: lib/cannery_web/components/ammo_group_table_component.ex:263 -#: lib/cannery_web/components/ammo_type_table_component.ex:235 +#: lib/cannery_web/components/ammo_group_table_component.ex:164 +#: lib/cannery_web/components/ammo_group_table_component.ex:247 +#: lib/cannery_web/components/ammo_type_table_component.ex:261 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:135 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:152 #, elixir-autogen, elixir-format msgid "$%{amount}" msgstr "$%{amount}" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:160 #, elixir-autogen, elixir-format msgid "Bimetal" msgstr "Bimetal" -#: lib/cannery_web/components/ammo_type_table_component.ex:51 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:83 +#: lib/cannery_web/components/ammo_type_table_component.ex:66 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #, elixir-autogen, elixir-format msgid "Jacket type" msgstr "Tipo de camisa" -#: lib/cannery_web/components/ammo_type_table_component.ex:52 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:82 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:279 #, elixir-autogen, elixir-format msgid "Muzzle velocity" msgstr "Velocidad de boca" -#: lib/cannery_web/components/ammo_type_table_component.ex:55 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:108 +#: lib/cannery_web/components/ammo_type_table_component.ex:76 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:244 #, elixir-autogen, elixir-format msgid "Powder grains per charge" msgstr "Granos de polvora por carga" -#: lib/cannery_web/components/ammo_type_table_component.ex:53 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:101 +#: lib/cannery_web/components/ammo_type_table_component.ex:74 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:236 #, elixir-autogen, elixir-format msgid "Powder type" msgstr "Tipo de polvora" -#: lib/cannery_web/components/ammo_type_table_component.ex:68 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:173 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:343 #, elixir-autogen, elixir-format msgid "UPC" msgstr "" @@ -591,8 +592,8 @@ msgstr "Contraseña actual" msgid "New password" msgstr "Nueva contraseña" -#: lib/cannery_web/components/ammo_type_table_component.ex:62 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:142 +#: lib/cannery_web/components/ammo_type_table_component.ex:84 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:304 #, elixir-autogen, elixir-format msgid "Firing type" msgstr "Tipo de fuego" @@ -603,33 +604,33 @@ msgid "Reconnecting..." msgstr "Reconectando..." #: lib/cannery_web/live/container_live/index.ex:28 -#: lib/cannery_web/live/container_live/show.ex:108 +#: lib/cannery_web/live/container_live/show.ex:120 #, elixir-autogen, elixir-format msgid "Edit %{name}" msgstr "Editar %{name}" #: lib/cannery_web/live/container_live/index.ex:63 -#: lib/cannery_web/live/container_live/show.ex:109 +#: lib/cannery_web/live/container_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Edit %{name} tags" msgstr "Editar etiquetas de %{name}" #: lib/cannery_web/components/core_components/container_card.html.heex:37 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 -#: lib/cannery_web/live/container_live/show.html.heex:33 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/container_live/show.html.heex:27 #, elixir-autogen, elixir-format msgid "Rounds:" msgstr "Balas:" -#: lib/cannery_web/components/ammo_group_table_component.ex:177 -#: lib/cannery_web/components/ammo_group_table_component.ex:259 -#: lib/cannery_web/components/ammo_type_table_component.ex:234 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 +#: lib/cannery_web/components/ammo_group_table_component.ex:161 +#: lib/cannery_web/components/ammo_group_table_component.ex:243 +#: lib/cannery_web/components/ammo_type_table_component.ex:260 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:156 #, elixir-autogen, elixir-format msgid "No cost information" msgstr "No hay información de coste" -#: lib/cannery_web/components/ammo_group_table_component.ex:92 +#: lib/cannery_web/components/ammo_group_table_component.ex:84 #, elixir-autogen, elixir-format msgid "% left" msgstr "% restantes" @@ -695,7 +696,7 @@ msgstr "Tiros Récord" msgid "Copies" msgstr "Copias" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #, elixir-autogen, elixir-format msgid "Added on:" msgstr "Añadido en:" @@ -759,7 +760,7 @@ msgstr "Editar Munición" msgid "Move Ammo" msgstr "Mover Munición" -#: lib/cannery_web/live/container_live/show.html.heex:112 +#: lib/cannery_web/live/container_live/show.html.heex:123 #, elixir-autogen, elixir-format msgid "No ammo in this container" msgstr "No hay munición en este contenedor" @@ -775,8 +776,8 @@ msgid "This ammo is not in a container" msgstr "Esta munición no está en un contenedor" #: lib/cannery_web/components/core_components/container_card.html.heex:32 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 -#: lib/cannery_web/live/container_live/show.html.heex:23 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/container_live/show.html.heex:22 #, elixir-autogen, elixir-format msgid "Packs:" msgstr "Paquetes:" @@ -803,80 +804,79 @@ msgstr "" msgid "Container:" msgstr "Contenedor:" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:65 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:40 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:149 -#: lib/cannery_web/live/container_live/show.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:64 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:166 #, elixir-autogen, elixir-format msgid "Show used" msgstr "Mostrar usadas" -#: lib/cannery_web/components/ammo_group_table_component.ex:218 +#: lib/cannery_web/components/ammo_group_table_component.ex:202 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "%{percentage}%" msgstr "%{percentage}%" -#: lib/cannery_web/live/range_live/index.ex:135 +#: lib/cannery_web/live/range_live/index.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds shot: %{count}" msgstr "Balas disparadas: %{count}" -#: lib/cannery_web/components/ammo_type_table_component.ex:100 +#: lib/cannery_web/components/ammo_type_table_component.ex:123 #: lib/cannery_web/components/container_table_component.ex:64 #, elixir-autogen, elixir-format, fuzzy msgid "Packs" msgstr "Paquetes" -#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/components/ammo_type_table_component.ex:144 #: lib/cannery_web/components/container_table_component.ex:65 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds" msgstr "Balas" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:172 #: lib/cannery_web/live/container_live/index.html.heex:40 -#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/container_live/show.html.heex:115 #, elixir-autogen, elixir-format msgid "View as table" msgstr "Ver como tabla" -#: lib/cannery_web/components/ammo_type_table_component.ex:110 +#: lib/cannery_web/components/ammo_type_table_component.ex:108 #, elixir-autogen, elixir-format msgid "Total ever packs" msgstr "Paquetes totales" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:130 #, elixir-autogen, elixir-format msgid "Total ever packs:" msgstr "Paquetes totales:" -#: lib/cannery_web/components/ammo_type_table_component.ex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:129 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds" msgstr "Balas totales" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #, elixir-autogen, elixir-format msgid "Total ever rounds:" msgstr "Balas totales:" -#: lib/cannery_web/components/ammo_type_table_component.ex:105 +#: lib/cannery_web/components/ammo_type_table_component.ex:116 #, elixir-autogen, elixir-format msgid "Used packs" msgstr "Paquetes usados" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:105 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 #, elixir-autogen, elixir-format msgid "Used packs:" msgstr "Paquetes usados:" -#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/components/ammo_type_table_component.ex:137 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds" msgstr "Balas usadas" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Used rounds:" msgstr "Balas usadas:" @@ -891,120 +891,120 @@ msgstr "¡Acabada!" msgid "Rounds shot chart" msgstr "Tabla de disparos" -#: lib/cannery_web/live/ammo_type_live/show.ex:26 +#: lib/cannery_web/live/ammo_type_live/show.ex:154 #, elixir-autogen, elixir-format msgid "Blank:" msgstr "En blanco:" -#: lib/cannery_web/live/ammo_type_live/show.ex:12 +#: lib/cannery_web/live/ammo_type_live/show.ex:132 #, elixir-autogen, elixir-format msgid "Bullet core:" msgstr "Núcleo de bala:" -#: lib/cannery_web/live/ammo_type_live/show.ex:11 +#: lib/cannery_web/live/ammo_type_live/show.ex:131 #, elixir-autogen, elixir-format msgid "Bullet type:" msgstr "Tipo de bala:" -#: lib/cannery_web/live/ammo_type_live/show.ex:14 +#: lib/cannery_web/live/ammo_type_live/show.ex:123 #, elixir-autogen, elixir-format msgid "Caliber:" msgstr "Calibre:" -#: lib/cannery_web/live/ammo_type_live/show.ex:13 +#: lib/cannery_web/live/ammo_type_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Cartridge:" msgstr "Cartucho:" -#: lib/cannery_web/live/ammo_type_live/show.ex:15 +#: lib/cannery_web/live/ammo_type_live/show.ex:134 #, elixir-autogen, elixir-format msgid "Case material:" msgstr "Material de la camisa:" -#: lib/cannery_web/live/ammo_type_live/show.ex:27 +#: lib/cannery_web/live/ammo_type_live/show.ex:155 #, elixir-autogen, elixir-format msgid "Corrosive:" msgstr "Corrosiva:" -#: lib/cannery_web/live/ammo_type_live/show.ex:23 +#: lib/cannery_web/live/ammo_type_live/show.ex:151 #, elixir-autogen, elixir-format msgid "Firing type:" msgstr "Tipo de fuego:" -#: lib/cannery_web/live/ammo_type_live/show.ex:20 +#: lib/cannery_web/live/ammo_type_live/show.ex:130 #, elixir-autogen, elixir-format msgid "Grains:" msgstr "Granos:" -#: lib/cannery_web/live/ammo_type_live/show.ex:25 +#: lib/cannery_web/live/ammo_type_live/show.ex:153 #, elixir-autogen, elixir-format msgid "Incendiary:" msgstr "Incendiarias:" -#: lib/cannery_web/live/ammo_type_live/show.ex:16 +#: lib/cannery_web/live/ammo_type_live/show.ex:133 #, elixir-autogen, elixir-format msgid "Jacket type:" msgstr "Tipo de camisa:" -#: lib/cannery_web/live/ammo_type_live/show.ex:28 +#: lib/cannery_web/live/ammo_type_live/show.ex:156 #, elixir-autogen, elixir-format msgid "Manufacturer:" msgstr "Fabricante:" -#: lib/cannery_web/live/ammo_type_live/show.ex:17 +#: lib/cannery_web/live/ammo_type_live/show.ex:149 #, elixir-autogen, elixir-format msgid "Muzzle velocity:" msgstr "Velocidad de boca:" -#: lib/cannery_web/live/ammo_type_live/show.ex:19 +#: lib/cannery_web/live/ammo_type_live/show.ex:143 #, elixir-autogen, elixir-format msgid "Powder grains per charge:" msgstr "Granos de polvora por carga:" -#: lib/cannery_web/live/ammo_type_live/show.ex:18 +#: lib/cannery_web/live/ammo_type_live/show.ex:141 #, elixir-autogen, elixir-format msgid "Powder type:" msgstr "Tipo de polvora:" -#: lib/cannery_web/live/ammo_type_live/show.ex:21 +#: lib/cannery_web/live/ammo_type_live/show.ex:147 #, elixir-autogen, elixir-format msgid "Pressure:" msgstr "Presión:" -#: lib/cannery_web/live/ammo_type_live/show.ex:22 +#: lib/cannery_web/live/ammo_type_live/show.ex:150 #, elixir-autogen, elixir-format msgid "Primer type:" msgstr "Tipo de espoleta:" -#: lib/cannery_web/live/ammo_type_live/show.ex:24 +#: lib/cannery_web/live/ammo_type_live/show.ex:152 #, elixir-autogen, elixir-format msgid "Tracer:" msgstr "Trazadora:" -#: lib/cannery_web/live/ammo_type_live/show.ex:29 +#: lib/cannery_web/live/ammo_type_live/show.ex:157 #, elixir-autogen, elixir-format msgid "UPC:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:120 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:131 +#: lib/cannery_web/components/ammo_type_table_component.ex:102 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:148 #, elixir-autogen, elixir-format msgid "Average CPR" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:28 -#: lib/cannery_web/live/ammo_type_live/show.ex:104 +#: lib/cannery_web/live/ammo_type_live/show.ex:82 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "Editar %{ammo_type_name}" -#: lib/cannery_web/components/ammo_group_table_component.ex:267 +#: lib/cannery_web/components/ammo_group_table_component.ex:251 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17 #, elixir-autogen, elixir-format msgid "Empty" msgstr "Vacio" -#: lib/cannery_web/components/ammo_group_table_component.ex:84 +#: lib/cannery_web/components/ammo_group_table_component.ex:81 #, elixir-autogen, elixir-format msgid "CPR" msgstr "" @@ -1014,7 +1014,7 @@ msgstr "" msgid "CPR:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:91 +#: lib/cannery_web/components/ammo_group_table_component.ex:88 #, elixir-autogen, elixir-format msgid "Original Count" msgstr "Cantidad Original" @@ -1029,12 +1029,7 @@ msgstr "Cantidad Original:" msgid "Home" msgstr "Menu principal" -#: lib/cannery_web/live/container_live/show.html.heex:28 -#, elixir-autogen, elixir-format -msgid "Total packs:" -msgstr "Paquetes totales:" - -#: lib/cannery_web/components/ammo_group_table_component.ex:65 +#: lib/cannery_web/components/ammo_group_table_component.ex:64 #, elixir-autogen, elixir-format msgid "Last used on" msgstr "Usada por última vez en" @@ -1044,12 +1039,12 @@ msgstr "Usada por última vez en" msgid "Last used on:" msgstr "Usada por última vez en:" -#: lib/cannery_web/components/ammo_group_table_component.ex:198 +#: lib/cannery_web/components/ammo_group_table_component.ex:182 #, elixir-autogen, elixir-format msgid "Never used" msgstr "Nunca usada" -#: lib/cannery_web/components/ammo_group_table_component.ex:64 +#: lib/cannery_web/components/ammo_group_table_component.ex:69 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:42 #, elixir-autogen, elixir-format msgid "Purchased on" @@ -1067,17 +1062,17 @@ msgid "Edit ammo" msgstr "Editar munición" #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:71 #, elixir-autogen, elixir-format, fuzzy msgid "No Ammo types" msgstr "Sin tipo de Munición" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:34 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:58 #, elixir-autogen, elixir-format msgid "Search catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:79 #, elixir-autogen, elixir-format, fuzzy msgid "Search ammo" msgstr "" @@ -1087,12 +1082,12 @@ msgstr "" msgid "Search containers" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:37 +#: lib/cannery_web/live/tag_live/index.html.heex:36 #, elixir-autogen, elixir-format, fuzzy msgid "Search tags" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:91 +#: lib/cannery_web/live/range_live/index.html.heex:115 #, elixir-autogen, elixir-format msgid "Search shot records" msgstr "" @@ -1201,27 +1196,27 @@ msgstr "" msgid "Password" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:130 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:261 #, elixir-autogen, elixir-format msgid "+P" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 #, elixir-autogen, elixir-format msgid ".223" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:63 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:56 #, elixir-autogen, elixir-format msgid "5.56x46mm NATO" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:138 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:300 #, elixir-autogen, elixir-format msgid "Boxer" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:146 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:308 #, elixir-autogen, elixir-format msgid "Centerfire" msgstr "" @@ -1233,7 +1228,7 @@ msgid "Really great weather" msgstr "" #: lib/cannery_web/components/ammo_group_table_component.ex:60 -#: lib/cannery_web/components/ammo_type_table_component.ex:121 +#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/container_table_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:70 #: lib/cannery_web/components/shot_group_table_component.ex:45 @@ -1252,7 +1247,7 @@ msgstr "" msgid "Log out" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #, elixir-autogen, elixir-format msgid "Current Count" msgstr "" @@ -1262,3 +1257,209 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Close modal" msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:56 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:35 +#: lib/cannery_web/live/container_live/show.html.heex:103 +#: lib/cannery_web/live/range_live/index.html.heex:92 +#, elixir-autogen, elixir-format +msgid "All" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:313 +#, elixir-autogen, elixir-format +msgid "Attributes" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:56 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89 +#, elixir-autogen, elixir-format, fuzzy +msgid "Brass height" +msgstr "Latón" + +#: lib/cannery_web/live/ammo_type_live/show.ex:128 +#, elixir-autogen, elixir-format +msgid "Brass height:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:57 +#: lib/cannery_web/components/ammo_type_table_component.ex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:96 +#, elixir-autogen, elixir-format +msgid "Chamber size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:129 +#, elixir-autogen, elixir-format +msgid "Chamber size:" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:48 +#, elixir-autogen, elixir-format +msgid "Dimensions" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:81 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:266 +#, elixir-autogen, elixir-format +msgid "Dram equivalent" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:148 +#, elixir-autogen, elixir-format +msgid "Dram equivalent:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#, elixir-autogen, elixir-format +msgid "Gauge" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:123 +#, elixir-autogen, elixir-format +msgid "Gauge:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:72 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:207 +#, elixir-autogen, elixir-format +msgid "Load grains" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:139 +#, elixir-autogen, elixir-format +msgid "Load grains:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:29 +#, elixir-autogen, elixir-format, fuzzy +msgid "No ammo" +msgstr "Sin Munición" + +#: lib/cannery_web/live/ammo_type_live/show.html.heex:60 +#, elixir-autogen, elixir-format +msgid "None specified" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:58 +#: lib/cannery_web/live/container_live/show.html.heex:106 +#: lib/cannery_web/live/range_live/index.html.heex:95 +#, elixir-autogen, elixir-format +msgid "Pistol" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:233 +#, elixir-autogen, elixir-format, fuzzy +msgid "Powder" +msgstr "Tipo de polvora" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:293 +#, elixir-autogen, elixir-format, fuzzy +msgid "Primer" +msgstr "Tipo de espoleta" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:109 +#, elixir-autogen, elixir-format +msgid "Projectile" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:36 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:56 +#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/range_live/index.html.heex:93 +#, elixir-autogen, elixir-format +msgid "Rifle" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:73 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:215 +#, elixir-autogen, elixir-format +msgid "Shot charge weight" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:140 +#, elixir-autogen, elixir-format +msgid "Shot charge weight:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:70 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:191 +#, elixir-autogen, elixir-format +msgid "Shot material" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:137 +#, elixir-autogen, elixir-format +msgid "Shot material:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:200 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size" +msgstr "Tiros disparados" + +#: lib/cannery_web/live/ammo_type_live/show.ex:138 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size:" +msgstr "Tiros disparados" + +#: lib/cannery_web/components/ammo_type_table_component.ex:69 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:183 +#, elixir-autogen, elixir-format +msgid "Shot type" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:136 +#, elixir-autogen, elixir-format +msgid "Shot type:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:54 +#: lib/cannery_web/live/container_live/show.html.heex:105 +#: lib/cannery_web/live/range_live/index.html.heex:94 +#, elixir-autogen, elixir-format +msgid "Shotgun" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:143 +#, elixir-autogen, elixir-format +msgid "Slug core" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:187 +#, elixir-autogen, elixir-format +msgid "Target, bird, buck, etc" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:127 +#, elixir-autogen, elixir-format +msgid "Unfired length:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:80 +#, elixir-autogen, elixir-format +msgid "Unfired shell length" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:68 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:176 +#, elixir-autogen, elixir-format +msgid "Wadding" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:135 +#, elixir-autogen, elixir-format +msgid "Wadding:" +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/errors.po b/priv/gettext/es/LC_MESSAGES/errors.po index 9bd8d9d..c224694 100644 --- a/priv/gettext/es/LC_MESSAGES/errors.po +++ b/priv/gettext/es/LC_MESSAGES/errors.po @@ -69,6 +69,7 @@ msgstr "Correo o contraseña incorrecta" msgid "Not found" msgstr "No se encontró" +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:18 #: lib/cannery_web/templates/user_registration/new.html.heex:13 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:13 #: lib/cannery_web/templates/user_settings/edit.html.heex:22 @@ -170,7 +171,7 @@ msgstr "No se ha podido procesar el número de copias" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier" -#: lib/cannery/ammo.ex:1043 +#: lib/cannery/ammo.ex:1114 #, elixir-autogen, elixir-format msgid "Invalid multiplier" msgstr "Multiplicador inválido" diff --git a/priv/gettext/es/LC_MESSAGES/prompts.po b/priv/gettext/es/LC_MESSAGES/prompts.po index 8ea6ec2..d8f69dd 100644 --- a/priv/gettext/es/LC_MESSAGES/prompts.po +++ b/priv/gettext/es/LC_MESSAGES/prompts.po @@ -32,7 +32,7 @@ msgid "%{name} created successfully" msgstr "%{name} creado exitosamente" #: lib/cannery_web/live/ammo_type_live/index.ex:72 -#: lib/cannery_web/live/ammo_type_live/show.ex:49 +#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/tag_live/index.ex:65 #, elixir-autogen, elixir-format msgid "%{name} deleted succesfully" @@ -65,15 +65,15 @@ msgstr "" msgid "Are you sure you want to delete %{email}? This action is permanent!" msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!" -#: lib/cannery_web/live/container_live/index.html.heex:100 -#: lib/cannery_web/live/container_live/index.html.heex:156 -#: lib/cannery_web/live/container_live/show.html.heex:52 -#: lib/cannery_web/live/tag_live/index.html.heex:64 +#: lib/cannery_web/live/container_live/index.html.heex:99 +#: lib/cannery_web/live/container_live/index.html.heex:157 +#: lib/cannery_web/live/container_live/show.html.heex:45 +#: lib/cannery_web/live/tag_live/index.html.heex:63 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}?" msgstr "Está seguro que desea eliminar %{name}?" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:169 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:189 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this ammo?" @@ -130,7 +130,7 @@ msgstr "Por favor chequea el correo para verificar tu cuenta" #: lib/cannery_web/components/add_shot_group_component.html.heex:59 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:85 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:181 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:351 #: lib/cannery_web/live/container_live/form_component.html.heex:59 #: lib/cannery_web/live/invite_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:47 @@ -176,7 +176,7 @@ msgid "Are you sure you want to unstage this ammo?" msgstr "Está seguro que desea desmontar esta munición?" #: lib/cannery_web/live/ammo_group_live/show.ex:159 -#: lib/cannery_web/live/range_live/index.html.heex:128 +#: lib/cannery_web/live/range_live/index.html.heex:152 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this shot record?" msgstr "¿Está segure que quiere borrar este récord de disparos?" @@ -212,8 +212,8 @@ msgstr "Copiado al portapapeles" msgid "%{name} removed successfully" msgstr "%{name} eliminado exitosamente" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #, elixir-autogen, elixir-format msgid "You'll need to" msgstr "Necesitará hacerlo" @@ -256,7 +256,7 @@ msgid_plural "Ammo added successfully" msgstr[0] "Munición añadida exitosamente" msgstr[1] "Municiones añadidas exitosamente" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:122 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" diff --git a/priv/gettext/fr/LC_MESSAGES/actions.po b/priv/gettext/fr/LC_MESSAGES/actions.po index 3e55a2f..948c059 100644 --- a/priv/gettext/fr/LC_MESSAGES/actions.po +++ b/priv/gettext/fr/LC_MESSAGES/actions.po @@ -25,12 +25,12 @@ msgstr "" # # effect: edit them in PO (.po) files instead. #: lib/cannery_web/live/ammo_group_live/index.ex:54 #: lib/cannery_web/live/ammo_group_live/index.ex:62 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:41 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:38 #, elixir-autogen, elixir-format msgid "Add Ammo" msgstr "ajouter munition" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:34 #, elixir-autogen, elixir-format msgid "Add your first box!" msgstr "Ajoutez votre première caisse !" @@ -135,7 +135,7 @@ msgstr "Réinitialisé le mot de passe" #: lib/cannery_web/components/add_shot_group_component.html.heex:57 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:84 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:180 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:350 #: lib/cannery_web/live/container_live/form_component.html.heex:57 #: lib/cannery_web/live/invite_live/form_component.html.heex:35 #: lib/cannery_web/live/range_live/form_component.html.heex:45 @@ -149,7 +149,7 @@ msgstr "Sauvegarder" msgid "Send instructions to reset password" msgstr "Envoyer les instructions pour réinitialiser le mot de passe" -#: lib/cannery_web/live/container_live/show.html.heex:75 +#: lib/cannery_web/live/container_live/show.html.heex:68 #, elixir-autogen, elixir-format msgid "Why not add one?" msgstr "Pourquoi pas en ajouter un ?" @@ -169,7 +169,7 @@ msgstr "Munition préparée" msgid "Why not get some ready to shoot?" msgstr "Pourquoi pas en préparer pour tirer ?" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:105 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:125 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103 #: lib/cannery_web/live/range_live/index.html.heex:45 #, elixir-autogen, elixir-format @@ -191,7 +191,7 @@ msgstr "Sélectionner" msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:22 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:14 #, elixir-autogen, elixir-format msgid "add a container first" msgstr "ajouter un conteneur en premier" @@ -216,13 +216,13 @@ msgstr "Changer la langue" msgid "View in Catalog" msgstr "Voir en catalogue" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:32 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #, elixir-autogen, elixir-format msgid "add an ammo type first" msgstr "Ajoutez d'abord un type de munitions" #: lib/cannery_web/components/move_ammo_group_component.ex:80 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:122 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:142 #: lib/cannery_web/live/ammo_group_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Move ammo" @@ -250,13 +250,13 @@ msgstr "" msgid "Export Data as JSON" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:110 #, elixir-autogen, elixir-format msgid "Clone %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:88 -#: lib/cannery_web/live/container_live/index.html.heex:144 +#: lib/cannery_web/live/container_live/index.html.heex:87 +#: lib/cannery_web/live/container_live/index.html.heex:145 #, elixir-autogen, elixir-format msgid "Clone %{container_name}" msgstr "" @@ -266,20 +266,20 @@ msgstr "" msgid "Copy invite link for %{invite_name}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:104 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:129 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #, elixir-autogen, elixir-format msgid "Delete %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:103 -#: lib/cannery_web/live/container_live/index.html.heex:159 -#: lib/cannery_web/live/container_live/show.html.heex:55 +#: lib/cannery_web/live/container_live/index.html.heex:104 +#: lib/cannery_web/live/container_live/index.html.heex:162 +#: lib/cannery_web/live/container_live/show.html.heex:48 #, elixir-autogen, elixir-format msgid "Delete %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:66 +#: lib/cannery_web/live/tag_live/index.html.heex:65 #, elixir-autogen, elixir-format msgid "Delete %{tag_name}" msgstr "" @@ -290,30 +290,30 @@ msgid "Delete invite for %{invite_name}" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:161 -#: lib/cannery_web/live/range_live/index.html.heex:131 +#: lib/cannery_web/live/range_live/index.html.heex:155 #, elixir-autogen, elixir-format msgid "Delete shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:75 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:78 -#: lib/cannery_web/live/container_live/index.html.heex:134 -#: lib/cannery_web/live/container_live/show.html.heex:42 +#: lib/cannery_web/live/container_live/index.html.heex:77 +#: lib/cannery_web/live/container_live/index.html.heex:135 +#: lib/cannery_web/live/container_live/show.html.heex:35 #, elixir-autogen, elixir-format msgid "Edit %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:53 +#: lib/cannery_web/live/tag_live/index.html.heex:52 #, elixir-autogen, elixir-format msgid "Edit %{tag_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:144 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:164 #: lib/cannery_web/live/ammo_group_live/show.html.heex:62 #, elixir-autogen, elixir-format msgid "Edit ammo group of %{ammo_group_count} bullets" @@ -329,45 +329,45 @@ msgstr "" msgid "Edit shot group of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:114 +#: lib/cannery_web/live/range_live/index.html.heex:138 #, elixir-autogen, elixir-format msgid "Edit shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:118 #, elixir-autogen, elixir-format, fuzzy msgid "Stage" msgstr "Munition préparée" -#: lib/cannery_web/live/container_live/index.html.heex:66 -#: lib/cannery_web/live/container_live/index.html.heex:123 +#: lib/cannery_web/live/container_live/index.html.heex:65 +#: lib/cannery_web/live/container_live/index.html.heex:124 #, elixir-autogen, elixir-format msgid "Tag %{container_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:117 #, elixir-autogen, elixir-format msgid "Unstage" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:65 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:90 #, elixir-autogen, elixir-format msgid "View %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:156 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:176 #, elixir-autogen, elixir-format, fuzzy msgid "Clone ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:171 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:191 #: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #, elixir-autogen, elixir-format, fuzzy msgid "Delete ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:132 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:189 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:152 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:206 #, elixir-autogen, elixir-format, fuzzy msgid "View ammo group of %{ammo_group_count} bullets" msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index 47e4b57..e5366f5 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -38,7 +38,7 @@ msgstr "Administrateur·ices :" msgid "Ammo" msgstr "Munition" -#: lib/cannery_web/components/ammo_group_table_component.ex:108 +#: lib/cannery_web/components/ammo_group_table_component.ex:96 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:22 #, elixir-autogen, elixir-format msgid "Ammo type" @@ -49,48 +49,48 @@ msgstr "Type de munition" msgid "Background color" msgstr "Couleur de fond" -#: lib/cannery_web/components/ammo_type_table_component.ex:65 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:158 +#: lib/cannery_web/components/ammo_type_table_component.ex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:324 #, elixir-autogen, elixir-format msgid "Blank" msgstr "Vide" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:171 #, elixir-autogen, elixir-format msgid "Brass" msgstr "Cuivre" -#: lib/cannery_web/components/ammo_type_table_component.ex:47 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51 +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144 #, elixir-autogen, elixir-format msgid "Bullet core" msgstr "Noyau de balle" -#: lib/cannery_web/components/ammo_type_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:43 +#: lib/cannery_web/components/ammo_type_table_component.ex:60 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:121 #, elixir-autogen, elixir-format msgid "Bullet type" msgstr "Type de balle" -#: lib/cannery_web/components/ammo_type_table_component.ex:49 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68 #, elixir-autogen, elixir-format msgid "Caliber" msgstr "Calibre" -#: lib/cannery_web/components/ammo_type_table_component.ex:48 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:59 +#: lib/cannery_web/components/ammo_type_table_component.ex:49 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:52 #, elixir-autogen, elixir-format msgid "Cartridge" msgstr "Cartouche" -#: lib/cannery_web/components/ammo_type_table_component.ex:50 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 +#: lib/cannery_web/components/ammo_type_table_component.ex:67 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:167 #, elixir-autogen, elixir-format msgid "Case material" msgstr "Matériau de la caisse" -#: lib/cannery_web/components/ammo_group_table_component.ex:72 +#: lib/cannery_web/components/ammo_group_table_component.ex:74 #: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:59 #, elixir-autogen, elixir-format @@ -105,13 +105,13 @@ msgstr "Conteneur" msgid "Containers" msgstr "Conteneurs" -#: lib/cannery_web/components/ammo_type_table_component.ex:66 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:162 +#: lib/cannery_web/components/ammo_type_table_component.ex:88 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:328 #, elixir-autogen, elixir-format msgid "Corrosive" msgstr "Corrosive" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:28 #, elixir-autogen, elixir-format msgid "Count" @@ -124,7 +124,7 @@ msgid "Count:" msgstr "Quantité :" #: lib/cannery_web/components/container_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:28 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:38 #: lib/cannery_web/live/container_live/form_component.html.heex:29 #, elixir-autogen, elixir-format msgid "Description" @@ -151,24 +151,19 @@ msgstr "Modifier l’invitation" msgid "Edit Tag" msgstr "Modifier le tag" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:41 -#, elixir-autogen, elixir-format -msgid "Example bullet type abbreviations" -msgstr "Exemple d’abréviations de type de balle" - -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:135 #, elixir-autogen, elixir-format msgid "FMJ" msgstr "FMJ" #: lib/cannery_web/components/ammo_type_table_component.ex:59 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:112 #, elixir-autogen, elixir-format msgid "Grains" msgstr "Graines" -#: lib/cannery_web/components/ammo_type_table_component.ex:64 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:154 +#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:320 #, elixir-autogen, elixir-format msgid "Incendiary" msgstr "Incendiaire" @@ -218,8 +213,9 @@ msgstr "Localisation :" msgid "Magazine, Clip, Ammo Box, etc" msgstr "Chargeur, lame-chargeur, boite de munition, etc." -#: lib/cannery_web/components/ammo_type_table_component.ex:67 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:166 +#: lib/cannery_web/components/ammo_type_table_component.ex:89 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:333 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:336 #, elixir-autogen, elixir-format msgid "Manufacturer" msgstr "Fabricant" @@ -234,9 +230,9 @@ msgstr "Boite de munition avec le sticker de fille d’animation" msgid "My cool ammo can" msgstr "Ma superbe boite de munition" -#: lib/cannery_web/components/ammo_type_table_component.ex:45 +#: lib/cannery_web/components/ammo_type_table_component.ex:153 #: lib/cannery_web/components/container_table_component.ex:45 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:31 #: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/tag_live/form_component.html.heex:21 @@ -266,19 +262,18 @@ msgstr "Nouvelle invitation" msgid "New Tag" msgstr "Nouveau tag" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:72 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:92 #, elixir-autogen, elixir-format msgid "No Ammo" msgstr "Aucune munition" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:163 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:180 #, elixir-autogen, elixir-format msgid "No ammo for this type" msgstr "Aucune munition pour ce type" #: lib/cannery_web/live/container_live/index.html.heex:8 -#: lib/cannery_web/live/container_live/index.html.heex:48 +#: lib/cannery_web/live/container_live/index.html.heex:47 #, elixir-autogen, elixir-format msgid "No containers" msgstr "Aucun conteneur" @@ -290,7 +285,7 @@ msgstr "Aucune invitation" #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/tag_live/index.html.heex:10 -#: lib/cannery_web/live/tag_live/index.html.heex:44 +#: lib/cannery_web/live/tag_live/index.html.heex:43 #, elixir-autogen, elixir-format msgid "No tags" msgstr "Aucun tag" @@ -315,13 +310,13 @@ msgstr "Notes :" msgid "On the bookshelf" msgstr "Sur l’étagère" -#: lib/cannery_web/components/ammo_type_table_component.ex:60 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:126 +#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:257 #, elixir-autogen, elixir-format msgid "Pressure" msgstr "Pression" -#: lib/cannery_web/components/ammo_group_table_component.ex:83 +#: lib/cannery_web/components/ammo_group_table_component.ex:82 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:35 #, elixir-autogen, elixir-format msgid "Price paid" @@ -332,8 +327,8 @@ msgstr "Prix payé" msgid "Price paid:" msgstr "Prix payé :" -#: lib/cannery_web/components/ammo_type_table_component.ex:61 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:134 +#: lib/cannery_web/components/ammo_type_table_component.ex:83 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:296 #, elixir-autogen, elixir-format msgid "Primer type" msgstr "Type d’amorce" @@ -366,7 +361,7 @@ msgstr "Paramètres" msgid "Simple:" msgstr "Simple :" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:151 #, elixir-autogen, elixir-format msgid "Steel" msgstr "Acier" @@ -402,15 +397,22 @@ msgstr "Couleur du texte" msgid "The self-hosted firearm tracker website" msgstr "Le site web de suivi d’arme à feux auto-hébergé" -#: lib/cannery_web/components/ammo_type_table_component.ex:63 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:150 +#: lib/cannery_web/components/ammo_type_table_component.ex:85 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:316 #, elixir-autogen, elixir-format msgid "Tracer" msgstr "Traceuse" +#: lib/cannery_web/components/ammo_type_table_component.ex:150 #: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/move_ammo_group_component.ex:68 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:50 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:29 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:48 #: lib/cannery_web/live/container_live/form_component.html.heex:39 +#: lib/cannery_web/live/container_live/show.html.heex:97 +#: lib/cannery_web/live/range_live/index.html.heex:86 #, elixir-autogen, elixir-format msgid "Type" msgstr "Type" @@ -436,12 +438,12 @@ msgstr "Utilisations restantes" msgid "Your data stays with you, period" msgstr "Vos données restent avec vous, point final" -#: lib/cannery_web/live/container_live/show.html.heex:67 +#: lib/cannery_web/live/container_live/show.html.heex:60 #, elixir-autogen, elixir-format msgid "No tags for this container" msgstr "Aucun tag pour ce conteneur" -#: lib/cannery_web/components/ammo_group_table_component.ex:79 +#: lib/cannery_web/components/ammo_group_table_component.ex:78 #: lib/cannery_web/components/core_components/topbar.html.heex:66 #, elixir-autogen, elixir-format msgid "Range" @@ -488,7 +490,7 @@ msgid "New Shot Records" msgstr "Nouveaux enregistrements de tir" #: lib/cannery_web/live/range_live/index.html.heex:55 -#: lib/cannery_web/live/range_live/index.html.heex:98 +#: lib/cannery_web/live/range_live/index.html.heex:122 #, elixir-autogen, elixir-format msgid "No shots recorded" msgstr "Aucun tir enregistré" @@ -527,49 +529,48 @@ msgstr "Aucun autre conteneur" msgid "Shot log" msgstr "Évènements de tir" -#: lib/cannery_web/components/ammo_group_table_component.ex:180 -#: lib/cannery_web/components/ammo_group_table_component.ex:263 -#: lib/cannery_web/components/ammo_type_table_component.ex:235 +#: lib/cannery_web/components/ammo_group_table_component.ex:164 +#: lib/cannery_web/components/ammo_group_table_component.ex:247 +#: lib/cannery_web/components/ammo_type_table_component.ex:261 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:135 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:152 #, elixir-autogen, elixir-format msgid "$%{amount}" msgstr "%{amount} $" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:160 #, elixir-autogen, elixir-format msgid "Bimetal" msgstr "Bi-métal" -#: lib/cannery_web/components/ammo_type_table_component.ex:51 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:83 +#: lib/cannery_web/components/ammo_type_table_component.ex:66 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #, elixir-autogen, elixir-format msgid "Jacket type" msgstr "Type de douille" -#: lib/cannery_web/components/ammo_type_table_component.ex:52 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:82 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:279 #, elixir-autogen, elixir-format msgid "Muzzle velocity" msgstr "Vélocité du canon" -#: lib/cannery_web/components/ammo_type_table_component.ex:55 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:108 +#: lib/cannery_web/components/ammo_type_table_component.ex:76 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:244 #, elixir-autogen, elixir-format msgid "Powder grains per charge" msgstr "Graines de poudre par charge" -#: lib/cannery_web/components/ammo_type_table_component.ex:53 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:101 +#: lib/cannery_web/components/ammo_type_table_component.ex:74 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:236 #, elixir-autogen, elixir-format msgid "Powder type" msgstr "Type de poudre" -#: lib/cannery_web/components/ammo_type_table_component.ex:68 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:173 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:343 #, elixir-autogen, elixir-format msgid "UPC" msgstr "UPC" @@ -592,8 +593,8 @@ msgstr "Mot de passe actuel" msgid "New password" msgstr "Nouveau mot de passe" -#: lib/cannery_web/components/ammo_type_table_component.ex:62 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:142 +#: lib/cannery_web/components/ammo_type_table_component.ex:84 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:304 #, elixir-autogen, elixir-format msgid "Firing type" msgstr "Type d’allumage" @@ -604,33 +605,33 @@ msgid "Reconnecting..." msgstr "Reconnexion en cours…" #: lib/cannery_web/live/container_live/index.ex:28 -#: lib/cannery_web/live/container_live/show.ex:108 +#: lib/cannery_web/live/container_live/show.ex:120 #, elixir-autogen, elixir-format msgid "Edit %{name}" msgstr "Éditer %{name}" #: lib/cannery_web/live/container_live/index.ex:63 -#: lib/cannery_web/live/container_live/show.ex:109 +#: lib/cannery_web/live/container_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Edit %{name} tags" msgstr "Éditer les tags de %{name}" #: lib/cannery_web/components/core_components/container_card.html.heex:37 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 -#: lib/cannery_web/live/container_live/show.html.heex:33 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/container_live/show.html.heex:27 #, elixir-autogen, elixir-format msgid "Rounds:" msgstr "Cartouches :" -#: lib/cannery_web/components/ammo_group_table_component.ex:177 -#: lib/cannery_web/components/ammo_group_table_component.ex:259 -#: lib/cannery_web/components/ammo_type_table_component.ex:234 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 +#: lib/cannery_web/components/ammo_group_table_component.ex:161 +#: lib/cannery_web/components/ammo_group_table_component.ex:243 +#: lib/cannery_web/components/ammo_type_table_component.ex:260 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:156 #, elixir-autogen, elixir-format msgid "No cost information" msgstr "Aucune information de prix" -#: lib/cannery_web/components/ammo_group_table_component.ex:92 +#: lib/cannery_web/components/ammo_group_table_component.ex:84 #, elixir-autogen, elixir-format msgid "% left" msgstr "% restante" @@ -696,7 +697,7 @@ msgstr "Enregistrer des tirs" msgid "Copies" msgstr "Exemplaires" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #, elixir-autogen, elixir-format msgid "Added on:" msgstr "Ajouté le :" @@ -760,7 +761,7 @@ msgstr "Éditer le type de munition" msgid "Move Ammo" msgstr "Déplacer munition" -#: lib/cannery_web/live/container_live/show.html.heex:112 +#: lib/cannery_web/live/container_live/show.html.heex:123 #, elixir-autogen, elixir-format, fuzzy msgid "No ammo in this container" msgstr "Aucun groupe de munition pour ce conteneur" @@ -776,8 +777,8 @@ msgid "This ammo is not in a container" msgstr "Ce groupe de munition n’est pas dans un conteneur" #: lib/cannery_web/components/core_components/container_card.html.heex:32 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 -#: lib/cannery_web/live/container_live/show.html.heex:23 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/container_live/show.html.heex:22 #, elixir-autogen, elixir-format msgid "Packs:" msgstr "Packages :" @@ -804,80 +805,79 @@ msgstr "" msgid "Container:" msgstr "Conteneur" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:65 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:40 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:149 -#: lib/cannery_web/live/container_live/show.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:64 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:166 #, elixir-autogen, elixir-format msgid "Show used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:218 +#: lib/cannery_web/components/ammo_group_table_component.ex:202 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "%{percentage}%" msgstr "" -#: lib/cannery_web/live/range_live/index.ex:135 +#: lib/cannery_web/live/range_live/index.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds shot: %{count}" msgstr "Cartouches tirées" -#: lib/cannery_web/components/ammo_type_table_component.ex:100 +#: lib/cannery_web/components/ammo_type_table_component.ex:123 #: lib/cannery_web/components/container_table_component.ex:64 #, elixir-autogen, elixir-format, fuzzy msgid "Packs" msgstr "Packages :" -#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/components/ammo_type_table_component.ex:144 #: lib/cannery_web/components/container_table_component.ex:65 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds" msgstr "Cartouches :" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:172 #: lib/cannery_web/live/container_live/index.html.heex:40 -#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/container_live/show.html.heex:115 #, elixir-autogen, elixir-format msgid "View as table" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:110 +#: lib/cannery_web/components/ammo_type_table_component.ex:108 #, elixir-autogen, elixir-format msgid "Total ever packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:130 #, elixir-autogen, elixir-format msgid "Total ever packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:129 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds" msgstr "Quantité de cartouches" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds:" msgstr "Nombre totale de cartouches tirées :" -#: lib/cannery_web/components/ammo_type_table_component.ex:105 +#: lib/cannery_web/components/ammo_type_table_component.ex:116 #, elixir-autogen, elixir-format msgid "Used packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:105 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 #, elixir-autogen, elixir-format msgid "Used packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/components/ammo_type_table_component.ex:137 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds:" msgstr "" @@ -892,120 +892,120 @@ msgstr "" msgid "Rounds shot chart" msgstr "Cartouches tirées" -#: lib/cannery_web/live/ammo_type_live/show.ex:26 +#: lib/cannery_web/live/ammo_type_live/show.ex:154 #, elixir-autogen, elixir-format, fuzzy msgid "Blank:" msgstr "Vide" -#: lib/cannery_web/live/ammo_type_live/show.ex:12 +#: lib/cannery_web/live/ammo_type_live/show.ex:132 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet core:" msgstr "Noyau de balle" -#: lib/cannery_web/live/ammo_type_live/show.ex:11 +#: lib/cannery_web/live/ammo_type_live/show.ex:131 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet type:" msgstr "Type de balle" -#: lib/cannery_web/live/ammo_type_live/show.ex:14 +#: lib/cannery_web/live/ammo_type_live/show.ex:123 #, elixir-autogen, elixir-format, fuzzy msgid "Caliber:" msgstr "Calibre" -#: lib/cannery_web/live/ammo_type_live/show.ex:13 +#: lib/cannery_web/live/ammo_type_live/show.ex:121 #, elixir-autogen, elixir-format, fuzzy msgid "Cartridge:" msgstr "Cartouche" -#: lib/cannery_web/live/ammo_type_live/show.ex:15 +#: lib/cannery_web/live/ammo_type_live/show.ex:134 #, elixir-autogen, elixir-format, fuzzy msgid "Case material:" msgstr "Matériau de la caisse" -#: lib/cannery_web/live/ammo_type_live/show.ex:27 +#: lib/cannery_web/live/ammo_type_live/show.ex:155 #, elixir-autogen, elixir-format, fuzzy msgid "Corrosive:" msgstr "Corrosive" -#: lib/cannery_web/live/ammo_type_live/show.ex:23 +#: lib/cannery_web/live/ammo_type_live/show.ex:151 #, elixir-autogen, elixir-format, fuzzy msgid "Firing type:" msgstr "Type d’allumage" -#: lib/cannery_web/live/ammo_type_live/show.ex:20 +#: lib/cannery_web/live/ammo_type_live/show.ex:130 #, elixir-autogen, elixir-format, fuzzy msgid "Grains:" msgstr "Graines" -#: lib/cannery_web/live/ammo_type_live/show.ex:25 +#: lib/cannery_web/live/ammo_type_live/show.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Incendiary:" msgstr "Incendiaire" -#: lib/cannery_web/live/ammo_type_live/show.ex:16 +#: lib/cannery_web/live/ammo_type_live/show.ex:133 #, elixir-autogen, elixir-format, fuzzy msgid "Jacket type:" msgstr "Type de douille" -#: lib/cannery_web/live/ammo_type_live/show.ex:28 +#: lib/cannery_web/live/ammo_type_live/show.ex:156 #, elixir-autogen, elixir-format, fuzzy msgid "Manufacturer:" msgstr "Fabricant" -#: lib/cannery_web/live/ammo_type_live/show.ex:17 +#: lib/cannery_web/live/ammo_type_live/show.ex:149 #, elixir-autogen, elixir-format, fuzzy msgid "Muzzle velocity:" msgstr "Vélocité du canon" -#: lib/cannery_web/live/ammo_type_live/show.ex:19 +#: lib/cannery_web/live/ammo_type_live/show.ex:143 #, elixir-autogen, elixir-format, fuzzy msgid "Powder grains per charge:" msgstr "Graines de poudre par charge" -#: lib/cannery_web/live/ammo_type_live/show.ex:18 +#: lib/cannery_web/live/ammo_type_live/show.ex:141 #, elixir-autogen, elixir-format, fuzzy msgid "Powder type:" msgstr "Type de poudre" -#: lib/cannery_web/live/ammo_type_live/show.ex:21 +#: lib/cannery_web/live/ammo_type_live/show.ex:147 #, elixir-autogen, elixir-format, fuzzy msgid "Pressure:" msgstr "Pression" -#: lib/cannery_web/live/ammo_type_live/show.ex:22 +#: lib/cannery_web/live/ammo_type_live/show.ex:150 #, elixir-autogen, elixir-format, fuzzy msgid "Primer type:" msgstr "Type d’amorce" -#: lib/cannery_web/live/ammo_type_live/show.ex:24 +#: lib/cannery_web/live/ammo_type_live/show.ex:152 #, elixir-autogen, elixir-format, fuzzy msgid "Tracer:" msgstr "Traceuse" -#: lib/cannery_web/live/ammo_type_live/show.ex:29 +#: lib/cannery_web/live/ammo_type_live/show.ex:157 #, elixir-autogen, elixir-format, fuzzy msgid "UPC:" msgstr "UPC" -#: lib/cannery_web/components/ammo_type_table_component.ex:120 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:131 +#: lib/cannery_web/components/ammo_type_table_component.ex:102 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:148 #, elixir-autogen, elixir-format msgid "Average CPR" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:28 -#: lib/cannery_web/live/ammo_type_live/show.ex:104 +#: lib/cannery_web/live/ammo_type_live/show.ex:82 #, elixir-autogen, elixir-format, fuzzy msgid "Edit %{ammo_type_name}" msgstr "Éditer %{name}" -#: lib/cannery_web/components/ammo_group_table_component.ex:267 +#: lib/cannery_web/components/ammo_group_table_component.ex:251 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17 #, elixir-autogen, elixir-format msgid "Empty" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:84 +#: lib/cannery_web/components/ammo_group_table_component.ex:81 #, elixir-autogen, elixir-format msgid "CPR" msgstr "" @@ -1015,7 +1015,7 @@ msgstr "" msgid "CPR:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:91 +#: lib/cannery_web/components/ammo_group_table_component.ex:88 #, elixir-autogen, elixir-format, fuzzy msgid "Original Count" msgstr "Nombre original :" @@ -1030,12 +1030,7 @@ msgstr "Nombre original :" msgid "Home" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:28 -#, elixir-autogen, elixir-format, fuzzy -msgid "Total packs:" -msgstr "" - -#: lib/cannery_web/components/ammo_group_table_component.ex:65 +#: lib/cannery_web/components/ammo_group_table_component.ex:64 #, elixir-autogen, elixir-format msgid "Last used on" msgstr "" @@ -1045,12 +1040,12 @@ msgstr "" msgid "Last used on:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:198 +#: lib/cannery_web/components/ammo_group_table_component.ex:182 #, elixir-autogen, elixir-format msgid "Never used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:64 +#: lib/cannery_web/components/ammo_group_table_component.ex:69 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:42 #, elixir-autogen, elixir-format msgid "Purchased on" @@ -1068,17 +1063,17 @@ msgid "Edit ammo" msgstr "Éditer le type de munition" #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:71 #, elixir-autogen, elixir-format, fuzzy msgid "No Ammo types" msgstr "Aucun type de munition" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:34 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:58 #, elixir-autogen, elixir-format msgid "Search catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:79 #, elixir-autogen, elixir-format, fuzzy msgid "Search ammo" msgstr "" @@ -1088,12 +1083,12 @@ msgstr "" msgid "Search containers" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:37 +#: lib/cannery_web/live/tag_live/index.html.heex:36 #, elixir-autogen, elixir-format, fuzzy msgid "Search tags" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:91 +#: lib/cannery_web/live/range_live/index.html.heex:115 #, elixir-autogen, elixir-format msgid "Search shot records" msgstr "" @@ -1202,27 +1197,27 @@ msgstr "" msgid "Password" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:130 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:261 #, elixir-autogen, elixir-format msgid "+P" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 #, elixir-autogen, elixir-format msgid ".223" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:63 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:56 #, elixir-autogen, elixir-format msgid "5.56x46mm NATO" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:138 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:300 #, elixir-autogen, elixir-format msgid "Boxer" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:146 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:308 #, elixir-autogen, elixir-format msgid "Centerfire" msgstr "" @@ -1234,7 +1229,7 @@ msgid "Really great weather" msgstr "" #: lib/cannery_web/components/ammo_group_table_component.ex:60 -#: lib/cannery_web/components/ammo_type_table_component.ex:121 +#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/container_table_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:70 #: lib/cannery_web/components/shot_group_table_component.ex:45 @@ -1253,7 +1248,7 @@ msgstr "" msgid "Log out" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #, elixir-autogen, elixir-format msgid "Current Count" msgstr "" @@ -1263,3 +1258,209 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Close modal" msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:56 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:35 +#: lib/cannery_web/live/container_live/show.html.heex:103 +#: lib/cannery_web/live/range_live/index.html.heex:92 +#, elixir-autogen, elixir-format +msgid "All" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:313 +#, elixir-autogen, elixir-format +msgid "Attributes" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:56 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89 +#, elixir-autogen, elixir-format, fuzzy +msgid "Brass height" +msgstr "Cuivre" + +#: lib/cannery_web/live/ammo_type_live/show.ex:128 +#, elixir-autogen, elixir-format +msgid "Brass height:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:57 +#: lib/cannery_web/components/ammo_type_table_component.ex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:96 +#, elixir-autogen, elixir-format +msgid "Chamber size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:129 +#, elixir-autogen, elixir-format +msgid "Chamber size:" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:48 +#, elixir-autogen, elixir-format +msgid "Dimensions" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:81 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:266 +#, elixir-autogen, elixir-format +msgid "Dram equivalent" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:148 +#, elixir-autogen, elixir-format +msgid "Dram equivalent:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#, elixir-autogen, elixir-format +msgid "Gauge" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:123 +#, elixir-autogen, elixir-format +msgid "Gauge:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:72 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:207 +#, elixir-autogen, elixir-format +msgid "Load grains" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:139 +#, elixir-autogen, elixir-format +msgid "Load grains:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:29 +#, elixir-autogen, elixir-format, fuzzy +msgid "No ammo" +msgstr "Aucune munition" + +#: lib/cannery_web/live/ammo_type_live/show.html.heex:60 +#, elixir-autogen, elixir-format +msgid "None specified" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:58 +#: lib/cannery_web/live/container_live/show.html.heex:106 +#: lib/cannery_web/live/range_live/index.html.heex:95 +#, elixir-autogen, elixir-format +msgid "Pistol" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:233 +#, elixir-autogen, elixir-format, fuzzy +msgid "Powder" +msgstr "Type de poudre" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:293 +#, elixir-autogen, elixir-format, fuzzy +msgid "Primer" +msgstr "Type d’amorce" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:109 +#, elixir-autogen, elixir-format +msgid "Projectile" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:36 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:56 +#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/range_live/index.html.heex:93 +#, elixir-autogen, elixir-format +msgid "Rifle" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:73 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:215 +#, elixir-autogen, elixir-format +msgid "Shot charge weight" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:140 +#, elixir-autogen, elixir-format +msgid "Shot charge weight:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:70 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:191 +#, elixir-autogen, elixir-format +msgid "Shot material" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:137 +#, elixir-autogen, elixir-format +msgid "Shot material:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:200 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size" +msgstr "Tirs réalisés" + +#: lib/cannery_web/live/ammo_type_live/show.ex:138 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size:" +msgstr "Tirs réalisés" + +#: lib/cannery_web/components/ammo_type_table_component.ex:69 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:183 +#, elixir-autogen, elixir-format +msgid "Shot type" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:136 +#, elixir-autogen, elixir-format +msgid "Shot type:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:54 +#: lib/cannery_web/live/container_live/show.html.heex:105 +#: lib/cannery_web/live/range_live/index.html.heex:94 +#, elixir-autogen, elixir-format +msgid "Shotgun" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:143 +#, elixir-autogen, elixir-format +msgid "Slug core" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:187 +#, elixir-autogen, elixir-format +msgid "Target, bird, buck, etc" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:127 +#, elixir-autogen, elixir-format +msgid "Unfired length:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:80 +#, elixir-autogen, elixir-format +msgid "Unfired shell length" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:68 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:176 +#, elixir-autogen, elixir-format +msgid "Wadding" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:135 +#, elixir-autogen, elixir-format +msgid "Wadding:" +msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/errors.po b/priv/gettext/fr/LC_MESSAGES/errors.po index 08689fa..dade197 100644 --- a/priv/gettext/fr/LC_MESSAGES/errors.po +++ b/priv/gettext/fr/LC_MESSAGES/errors.po @@ -69,6 +69,7 @@ msgstr "Mél ou mot de passe invalide" msgid "Not found" msgstr "Pas trouvé" +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:18 #: lib/cannery_web/templates/user_registration/new.html.heex:13 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:13 #: lib/cannery_web/templates/user_settings/edit.html.heex:22 @@ -171,7 +172,7 @@ msgstr "Impossible d'analyser le nombre de copies" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}" -#: lib/cannery/ammo.ex:1043 +#: lib/cannery/ammo.ex:1114 #, elixir-autogen, elixir-format msgid "Invalid multiplier" msgstr "Multiplicateur invalide" diff --git a/priv/gettext/fr/LC_MESSAGES/prompts.po b/priv/gettext/fr/LC_MESSAGES/prompts.po index ee88382..aec2102 100644 --- a/priv/gettext/fr/LC_MESSAGES/prompts.po +++ b/priv/gettext/fr/LC_MESSAGES/prompts.po @@ -32,7 +32,7 @@ msgid "%{name} created successfully" msgstr "%{name} créé· avec succès" #: lib/cannery_web/live/ammo_type_live/index.ex:72 -#: lib/cannery_web/live/ammo_type_live/show.ex:49 +#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/tag_live/index.ex:65 #, elixir-autogen, elixir-format msgid "%{name} deleted succesfully" @@ -66,15 +66,15 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!" msgstr "" "Êtes-vous certain·e de supprimer %{email} ? Cette action est définitive !" -#: lib/cannery_web/live/container_live/index.html.heex:100 -#: lib/cannery_web/live/container_live/index.html.heex:156 -#: lib/cannery_web/live/container_live/show.html.heex:52 -#: lib/cannery_web/live/tag_live/index.html.heex:64 +#: lib/cannery_web/live/container_live/index.html.heex:99 +#: lib/cannery_web/live/container_live/index.html.heex:157 +#: lib/cannery_web/live/container_live/show.html.heex:45 +#: lib/cannery_web/live/tag_live/index.html.heex:63 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}?" msgstr "Êtes-vous certain·e de supprimer %{name} ?" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:169 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:189 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this ammo?" @@ -131,7 +131,7 @@ msgstr "Veuillez vérifier votre mél pour confirmer votre compte" #: lib/cannery_web/components/add_shot_group_component.html.heex:59 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:85 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:181 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:351 #: lib/cannery_web/live/container_live/form_component.html.heex:59 #: lib/cannery_web/live/invite_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:47 @@ -178,7 +178,7 @@ msgid "Are you sure you want to unstage this ammo?" msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition ?" #: lib/cannery_web/live/ammo_group_live/show.ex:159 -#: lib/cannery_web/live/range_live/index.html.heex:128 +#: lib/cannery_web/live/range_live/index.html.heex:152 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this shot record?" msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir ?" @@ -214,8 +214,8 @@ msgstr "Copié dans le presse-papier" msgid "%{name} removed successfully" msgstr "%{name} retiré avec succès" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #, elixir-autogen, elixir-format msgid "You'll need to" msgstr "Vous aurez besoin de" @@ -258,7 +258,7 @@ msgid_plural "Ammo added successfully" msgstr[0] "Groupe de munition mis à jour avec succès" msgstr[1] "Groupe de munition mis à jour avec succès" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:122 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #, elixir-autogen, elixir-format, fuzzy msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" diff --git a/priv/gettext/ga/LC_MESSAGES/actions.po b/priv/gettext/ga/LC_MESSAGES/actions.po index 44712d2..2f2cae4 100644 --- a/priv/gettext/ga/LC_MESSAGES/actions.po +++ b/priv/gettext/ga/LC_MESSAGES/actions.po @@ -23,12 +23,12 @@ msgstr "" ## effect: edit them in PO (.po) files instead. #: lib/cannery_web/live/ammo_group_live/index.ex:54 #: lib/cannery_web/live/ammo_group_live/index.ex:62 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:41 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:38 #, elixir-autogen, elixir-format msgid "Add Ammo" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:34 #, elixir-autogen, elixir-format msgid "Add your first box!" msgstr "" @@ -133,7 +133,7 @@ msgstr "" #: lib/cannery_web/components/add_shot_group_component.html.heex:57 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:84 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:180 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:350 #: lib/cannery_web/live/container_live/form_component.html.heex:57 #: lib/cannery_web/live/invite_live/form_component.html.heex:35 #: lib/cannery_web/live/range_live/form_component.html.heex:45 @@ -147,7 +147,7 @@ msgstr "" msgid "Send instructions to reset password" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:75 +#: lib/cannery_web/live/container_live/show.html.heex:68 #, elixir-autogen, elixir-format msgid "Why not add one?" msgstr "" @@ -167,7 +167,7 @@ msgstr "" msgid "Why not get some ready to shoot?" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:105 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:125 #: lib/cannery_web/live/ammo_group_live/show.html.heex:103 #: lib/cannery_web/live/range_live/index.html.heex:45 #, elixir-autogen, elixir-format @@ -189,7 +189,7 @@ msgstr "" msgid "Copy to clipboard" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:22 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:14 #, elixir-autogen, elixir-format msgid "add a container first" msgstr "" @@ -214,13 +214,13 @@ msgstr "" msgid "View in Catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:32 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:24 #, elixir-autogen, elixir-format msgid "add an ammo type first" msgstr "" #: lib/cannery_web/components/move_ammo_group_component.ex:80 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:122 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:142 #: lib/cannery_web/live/ammo_group_live/show.html.heex:96 #, elixir-autogen, elixir-format msgid "Move ammo" @@ -248,13 +248,13 @@ msgstr "" msgid "Export Data as JSON" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:110 #, elixir-autogen, elixir-format msgid "Clone %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:88 -#: lib/cannery_web/live/container_live/index.html.heex:144 +#: lib/cannery_web/live/container_live/index.html.heex:87 +#: lib/cannery_web/live/container_live/index.html.heex:145 #, elixir-autogen, elixir-format msgid "Clone %{container_name}" msgstr "" @@ -264,20 +264,20 @@ msgstr "" msgid "Copy invite link for %{invite_name}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:104 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:129 #: lib/cannery_web/live/ammo_type_live/show.html.heex:36 #, elixir-autogen, elixir-format msgid "Delete %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:103 -#: lib/cannery_web/live/container_live/index.html.heex:159 -#: lib/cannery_web/live/container_live/show.html.heex:55 +#: lib/cannery_web/live/container_live/index.html.heex:104 +#: lib/cannery_web/live/container_live/index.html.heex:162 +#: lib/cannery_web/live/container_live/show.html.heex:48 #, elixir-autogen, elixir-format msgid "Delete %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:66 +#: lib/cannery_web/live/tag_live/index.html.heex:65 #, elixir-autogen, elixir-format msgid "Delete %{tag_name}" msgstr "" @@ -288,30 +288,30 @@ msgid "Delete invite for %{invite_name}" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:161 -#: lib/cannery_web/live/range_live/index.html.heex:131 +#: lib/cannery_web/live/range_live/index.html.heex:155 #, elixir-autogen, elixir-format msgid "Delete shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:75 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:100 #: lib/cannery_web/live/ammo_type_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:78 -#: lib/cannery_web/live/container_live/index.html.heex:134 -#: lib/cannery_web/live/container_live/show.html.heex:42 +#: lib/cannery_web/live/container_live/index.html.heex:77 +#: lib/cannery_web/live/container_live/index.html.heex:135 +#: lib/cannery_web/live/container_live/show.html.heex:35 #, elixir-autogen, elixir-format msgid "Edit %{container_name}" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:53 +#: lib/cannery_web/live/tag_live/index.html.heex:52 #, elixir-autogen, elixir-format msgid "Edit %{tag_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:144 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:164 #: lib/cannery_web/live/ammo_group_live/show.html.heex:62 #, elixir-autogen, elixir-format msgid "Edit ammo group of %{ammo_group_count} bullets" @@ -327,45 +327,45 @@ msgstr "" msgid "Edit shot group of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:114 +#: lib/cannery_web/live/range_live/index.html.heex:138 #, elixir-autogen, elixir-format msgid "Edit shot record of %{shot_group_count} shots" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:118 #, elixir-autogen, elixir-format, fuzzy msgid "Stage" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:66 -#: lib/cannery_web/live/container_live/index.html.heex:123 +#: lib/cannery_web/live/container_live/index.html.heex:65 +#: lib/cannery_web/live/container_live/index.html.heex:124 #, elixir-autogen, elixir-format msgid "Tag %{container_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:117 #, elixir-autogen, elixir-format msgid "Unstage" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:65 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:90 #, elixir-autogen, elixir-format msgid "View %{ammo_type_name}" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:156 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:176 #, elixir-autogen, elixir-format, fuzzy msgid "Clone ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:171 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:191 #: lib/cannery_web/live/ammo_group_live/show.html.heex:76 #, elixir-autogen, elixir-format, fuzzy msgid "Delete ammo group of %{ammo_group_count} bullets" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:132 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:189 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:152 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:206 #, elixir-autogen, elixir-format, fuzzy msgid "View ammo group of %{ammo_group_count} bullets" msgstr "" diff --git a/priv/gettext/ga/LC_MESSAGES/default.po b/priv/gettext/ga/LC_MESSAGES/default.po index 35a4abd..84d657c 100644 --- a/priv/gettext/ga/LC_MESSAGES/default.po +++ b/priv/gettext/ga/LC_MESSAGES/default.po @@ -36,7 +36,7 @@ msgstr "" msgid "Ammo" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:108 +#: lib/cannery_web/components/ammo_group_table_component.ex:96 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:22 #, elixir-autogen, elixir-format msgid "Ammo type" @@ -47,48 +47,48 @@ msgstr "" msgid "Background color" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:65 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:158 +#: lib/cannery_web/components/ammo_type_table_component.ex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:324 #, elixir-autogen, elixir-format msgid "Blank" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:171 #, elixir-autogen, elixir-format msgid "Brass" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:47 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:51 +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:144 #, elixir-autogen, elixir-format msgid "Bullet core" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:43 +#: lib/cannery_web/components/ammo_type_table_component.ex:60 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:121 #, elixir-autogen, elixir-format msgid "Bullet type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:49 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:68 #, elixir-autogen, elixir-format msgid "Caliber" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:48 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:59 +#: lib/cannery_web/components/ammo_type_table_component.ex:49 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:52 #, elixir-autogen, elixir-format msgid "Cartridge" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:50 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 +#: lib/cannery_web/components/ammo_type_table_component.ex:67 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:167 #, elixir-autogen, elixir-format msgid "Case material" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:72 +#: lib/cannery_web/components/ammo_group_table_component.ex:74 #: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:59 #, elixir-autogen, elixir-format @@ -103,13 +103,13 @@ msgstr "" msgid "Containers" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:66 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:162 +#: lib/cannery_web/components/ammo_type_table_component.ex:88 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:328 #, elixir-autogen, elixir-format msgid "Corrosive" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:28 #, elixir-autogen, elixir-format msgid "Count" @@ -122,7 +122,7 @@ msgid "Count:" msgstr "" #: lib/cannery_web/components/container_table_component.ex:46 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:28 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:38 #: lib/cannery_web/live/container_live/form_component.html.heex:29 #, elixir-autogen, elixir-format msgid "Description" @@ -149,24 +149,19 @@ msgstr "" msgid "Edit Tag" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:41 -#, elixir-autogen, elixir-format -msgid "Example bullet type abbreviations" -msgstr "" - -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:135 #, elixir-autogen, elixir-format msgid "FMJ" msgstr "" #: lib/cannery_web/components/ammo_type_table_component.ex:59 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:118 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:112 #, elixir-autogen, elixir-format msgid "Grains" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:64 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:154 +#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:320 #, elixir-autogen, elixir-format msgid "Incendiary" msgstr "" @@ -216,8 +211,9 @@ msgstr "" msgid "Magazine, Clip, Ammo Box, etc" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:67 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:166 +#: lib/cannery_web/components/ammo_type_table_component.ex:89 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:333 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:336 #, elixir-autogen, elixir-format msgid "Manufacturer" msgstr "" @@ -232,9 +228,9 @@ msgstr "" msgid "My cool ammo can" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:45 +#: lib/cannery_web/components/ammo_type_table_component.ex:153 #: lib/cannery_web/components/container_table_component.ex:45 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:31 #: lib/cannery_web/live/container_live/form_component.html.heex:21 #: lib/cannery_web/live/invite_live/form_component.html.heex:21 #: lib/cannery_web/live/tag_live/form_component.html.heex:21 @@ -264,19 +260,18 @@ msgstr "" msgid "New Tag" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:72 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:92 #, elixir-autogen, elixir-format msgid "No Ammo" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:163 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:180 #, elixir-autogen, elixir-format msgid "No ammo for this type" msgstr "" #: lib/cannery_web/live/container_live/index.html.heex:8 -#: lib/cannery_web/live/container_live/index.html.heex:48 +#: lib/cannery_web/live/container_live/index.html.heex:47 #, elixir-autogen, elixir-format msgid "No containers" msgstr "" @@ -288,7 +283,7 @@ msgstr "" #: lib/cannery_web/live/container_live/edit_tags_component.html.heex:29 #: lib/cannery_web/live/tag_live/index.html.heex:10 -#: lib/cannery_web/live/tag_live/index.html.heex:44 +#: lib/cannery_web/live/tag_live/index.html.heex:43 #, elixir-autogen, elixir-format msgid "No tags" msgstr "" @@ -313,13 +308,13 @@ msgstr "" msgid "On the bookshelf" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:60 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:126 +#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:257 #, elixir-autogen, elixir-format msgid "Pressure" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:83 +#: lib/cannery_web/components/ammo_group_table_component.ex:82 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:35 #, elixir-autogen, elixir-format msgid "Price paid" @@ -330,8 +325,8 @@ msgstr "" msgid "Price paid:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:61 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:134 +#: lib/cannery_web/components/ammo_type_table_component.ex:83 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:296 #, elixir-autogen, elixir-format msgid "Primer type" msgstr "" @@ -362,7 +357,7 @@ msgstr "" msgid "Simple:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:151 #, elixir-autogen, elixir-format msgid "Steel" msgstr "" @@ -396,15 +391,22 @@ msgstr "" msgid "The self-hosted firearm tracker website" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:63 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:150 +#: lib/cannery_web/components/ammo_type_table_component.ex:85 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:316 #, elixir-autogen, elixir-format msgid "Tracer" msgstr "" +#: lib/cannery_web/components/ammo_type_table_component.ex:150 #: lib/cannery_web/components/container_table_component.ex:48 #: lib/cannery_web/components/move_ammo_group_component.ex:68 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:50 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:21 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:29 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:48 #: lib/cannery_web/live/container_live/form_component.html.heex:39 +#: lib/cannery_web/live/container_live/show.html.heex:97 +#: lib/cannery_web/live/range_live/index.html.heex:86 #, elixir-autogen, elixir-format msgid "Type" msgstr "" @@ -430,12 +432,12 @@ msgstr "" msgid "Your data stays with you, period" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:67 +#: lib/cannery_web/live/container_live/show.html.heex:60 #, elixir-autogen, elixir-format msgid "No tags for this container" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:79 +#: lib/cannery_web/components/ammo_group_table_component.ex:78 #: lib/cannery_web/components/core_components/topbar.html.heex:66 #, elixir-autogen, elixir-format msgid "Range" @@ -482,7 +484,7 @@ msgid "New Shot Records" msgstr "" #: lib/cannery_web/live/range_live/index.html.heex:55 -#: lib/cannery_web/live/range_live/index.html.heex:98 +#: lib/cannery_web/live/range_live/index.html.heex:122 #, elixir-autogen, elixir-format msgid "No shots recorded" msgstr "" @@ -521,49 +523,48 @@ msgstr "" msgid "Shot log" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:180 -#: lib/cannery_web/components/ammo_group_table_component.ex:263 -#: lib/cannery_web/components/ammo_type_table_component.ex:235 +#: lib/cannery_web/components/ammo_group_table_component.ex:164 +#: lib/cannery_web/components/ammo_group_table_component.ex:247 +#: lib/cannery_web/components/ammo_type_table_component.ex:261 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:45 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:50 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:42 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:135 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:152 #, elixir-autogen, elixir-format msgid "$%{amount}" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:160 #, elixir-autogen, elixir-format msgid "Bimetal" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:51 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:83 +#: lib/cannery_web/components/ammo_type_table_component.ex:66 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #, elixir-autogen, elixir-format msgid "Jacket type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:52 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:82 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:279 #, elixir-autogen, elixir-format msgid "Muzzle velocity" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:55 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:108 +#: lib/cannery_web/components/ammo_type_table_component.ex:76 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:244 #, elixir-autogen, elixir-format msgid "Powder grains per charge" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:53 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:101 +#: lib/cannery_web/components/ammo_type_table_component.ex:74 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:236 #, elixir-autogen, elixir-format msgid "Powder type" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:68 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:173 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:343 #, elixir-autogen, elixir-format msgid "UPC" msgstr "" @@ -586,8 +587,8 @@ msgstr "" msgid "New password" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:62 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:142 +#: lib/cannery_web/components/ammo_type_table_component.ex:84 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:304 #, elixir-autogen, elixir-format msgid "Firing type" msgstr "" @@ -598,33 +599,33 @@ msgid "Reconnecting..." msgstr "" #: lib/cannery_web/live/container_live/index.ex:28 -#: lib/cannery_web/live/container_live/show.ex:108 +#: lib/cannery_web/live/container_live/show.ex:120 #, elixir-autogen, elixir-format msgid "Edit %{name}" msgstr "" #: lib/cannery_web/live/container_live/index.ex:63 -#: lib/cannery_web/live/container_live/show.ex:109 +#: lib/cannery_web/live/container_live/show.ex:121 #, elixir-autogen, elixir-format msgid "Edit %{name} tags" msgstr "" #: lib/cannery_web/components/core_components/container_card.html.heex:37 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:70 -#: lib/cannery_web/live/container_live/show.html.heex:33 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/container_live/show.html.heex:27 #, elixir-autogen, elixir-format msgid "Rounds:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:177 -#: lib/cannery_web/components/ammo_group_table_component.ex:259 -#: lib/cannery_web/components/ammo_type_table_component.ex:234 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 +#: lib/cannery_web/components/ammo_group_table_component.ex:161 +#: lib/cannery_web/components/ammo_group_table_component.ex:243 +#: lib/cannery_web/components/ammo_type_table_component.ex:260 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:156 #, elixir-autogen, elixir-format msgid "No cost information" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:92 +#: lib/cannery_web/components/ammo_group_table_component.ex:84 #, elixir-autogen, elixir-format msgid "% left" msgstr "" @@ -690,7 +691,7 @@ msgstr "" msgid "Copies" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:139 #, elixir-autogen, elixir-format msgid "Added on:" msgstr "" @@ -754,7 +755,7 @@ msgstr "" msgid "Move Ammo" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:112 +#: lib/cannery_web/live/container_live/show.html.heex:123 #, elixir-autogen, elixir-format msgid "No ammo in this container" msgstr "" @@ -770,8 +771,8 @@ msgid "This ammo is not in a container" msgstr "" #: lib/cannery_web/components/core_components/container_card.html.heex:32 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 -#: lib/cannery_web/live/container_live/show.html.heex:23 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/container_live/show.html.heex:22 #, elixir-autogen, elixir-format msgid "Packs:" msgstr "" @@ -797,80 +798,79 @@ msgstr "" msgid "Container:" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:65 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:40 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:149 -#: lib/cannery_web/live/container_live/show.html.heex:98 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:85 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:64 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:166 #, elixir-autogen, elixir-format msgid "Show used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:218 +#: lib/cannery_web/components/ammo_group_table_component.ex:202 #: lib/cannery_web/live/ammo_group_live/show.html.heex:19 #, elixir-autogen, elixir-format msgid "%{percentage}%" msgstr "" -#: lib/cannery_web/live/range_live/index.ex:135 +#: lib/cannery_web/live/range_live/index.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds shot: %{count}" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:100 +#: lib/cannery_web/components/ammo_type_table_component.ex:123 #: lib/cannery_web/components/container_table_component.ex:64 #, elixir-autogen, elixir-format, fuzzy msgid "Packs" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:80 +#: lib/cannery_web/components/ammo_type_table_component.ex:144 #: lib/cannery_web/components/container_table_component.ex:65 #, elixir-autogen, elixir-format, fuzzy msgid "Rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:155 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:172 #: lib/cannery_web/live/container_live/index.html.heex:40 -#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/container_live/show.html.heex:115 #, elixir-autogen, elixir-format msgid "View as table" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:110 +#: lib/cannery_web/components/ammo_type_table_component.ex:108 #, elixir-autogen, elixir-format msgid "Total ever packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:113 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:130 #, elixir-autogen, elixir-format msgid "Total ever packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:91 +#: lib/cannery_web/components/ammo_type_table_component.ex:129 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:87 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:104 #, elixir-autogen, elixir-format, fuzzy msgid "Total ever rounds:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:105 +#: lib/cannery_web/components/ammo_type_table_component.ex:116 #, elixir-autogen, elixir-format msgid "Used packs" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:105 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:122 #, elixir-autogen, elixir-format msgid "Used packs:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:86 +#: lib/cannery_web/components/ammo_type_table_component.ex:137 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.html.heex:79 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:96 #, elixir-autogen, elixir-format, fuzzy msgid "Used rounds:" msgstr "" @@ -885,120 +885,120 @@ msgstr "" msgid "Rounds shot chart" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:26 +#: lib/cannery_web/live/ammo_type_live/show.ex:154 #, elixir-autogen, elixir-format, fuzzy msgid "Blank:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:12 +#: lib/cannery_web/live/ammo_type_live/show.ex:132 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet core:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:11 +#: lib/cannery_web/live/ammo_type_live/show.ex:131 #, elixir-autogen, elixir-format, fuzzy msgid "Bullet type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:14 +#: lib/cannery_web/live/ammo_type_live/show.ex:123 #, elixir-autogen, elixir-format, fuzzy msgid "Caliber:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:13 +#: lib/cannery_web/live/ammo_type_live/show.ex:121 #, elixir-autogen, elixir-format, fuzzy msgid "Cartridge:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:15 +#: lib/cannery_web/live/ammo_type_live/show.ex:134 #, elixir-autogen, elixir-format, fuzzy msgid "Case material:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:27 +#: lib/cannery_web/live/ammo_type_live/show.ex:155 #, elixir-autogen, elixir-format, fuzzy msgid "Corrosive:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:23 +#: lib/cannery_web/live/ammo_type_live/show.ex:151 #, elixir-autogen, elixir-format, fuzzy msgid "Firing type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:20 +#: lib/cannery_web/live/ammo_type_live/show.ex:130 #, elixir-autogen, elixir-format, fuzzy msgid "Grains:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:25 +#: lib/cannery_web/live/ammo_type_live/show.ex:153 #, elixir-autogen, elixir-format, fuzzy msgid "Incendiary:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:16 +#: lib/cannery_web/live/ammo_type_live/show.ex:133 #, elixir-autogen, elixir-format, fuzzy msgid "Jacket type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:28 +#: lib/cannery_web/live/ammo_type_live/show.ex:156 #, elixir-autogen, elixir-format, fuzzy msgid "Manufacturer:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:17 +#: lib/cannery_web/live/ammo_type_live/show.ex:149 #, elixir-autogen, elixir-format, fuzzy msgid "Muzzle velocity:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:19 +#: lib/cannery_web/live/ammo_type_live/show.ex:143 #, elixir-autogen, elixir-format, fuzzy msgid "Powder grains per charge:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:18 +#: lib/cannery_web/live/ammo_type_live/show.ex:141 #, elixir-autogen, elixir-format, fuzzy msgid "Powder type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:21 +#: lib/cannery_web/live/ammo_type_live/show.ex:147 #, elixir-autogen, elixir-format, fuzzy msgid "Pressure:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:22 +#: lib/cannery_web/live/ammo_type_live/show.ex:150 #, elixir-autogen, elixir-format, fuzzy msgid "Primer type:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:24 +#: lib/cannery_web/live/ammo_type_live/show.ex:152 #, elixir-autogen, elixir-format, fuzzy msgid "Tracer:" msgstr "" -#: lib/cannery_web/live/ammo_type_live/show.ex:29 +#: lib/cannery_web/live/ammo_type_live/show.ex:157 #, elixir-autogen, elixir-format, fuzzy msgid "UPC:" msgstr "" -#: lib/cannery_web/components/ammo_type_table_component.ex:120 -#: lib/cannery_web/live/ammo_type_live/show.html.heex:131 +#: lib/cannery_web/components/ammo_type_table_component.ex:102 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:148 #, elixir-autogen, elixir-format msgid "Average CPR" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:28 -#: lib/cannery_web/live/ammo_type_live/show.ex:104 +#: lib/cannery_web/live/ammo_type_live/show.ex:82 #, elixir-autogen, elixir-format, fuzzy msgid "Edit %{ammo_type_name}" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:267 +#: lib/cannery_web/components/ammo_group_table_component.ex:251 #: lib/cannery_web/components/core_components/ammo_group_card.html.heex:17 #, elixir-autogen, elixir-format msgid "Empty" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:84 +#: lib/cannery_web/components/ammo_group_table_component.ex:81 #, elixir-autogen, elixir-format msgid "CPR" msgstr "" @@ -1008,7 +1008,7 @@ msgstr "" msgid "CPR:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:91 +#: lib/cannery_web/components/ammo_group_table_component.ex:88 #, elixir-autogen, elixir-format, fuzzy msgid "Original Count" msgstr "" @@ -1023,12 +1023,7 @@ msgstr "" msgid "Home" msgstr "" -#: lib/cannery_web/live/container_live/show.html.heex:28 -#, elixir-autogen, elixir-format, fuzzy -msgid "Total packs:" -msgstr "" - -#: lib/cannery_web/components/ammo_group_table_component.ex:65 +#: lib/cannery_web/components/ammo_group_table_component.ex:64 #, elixir-autogen, elixir-format msgid "Last used on" msgstr "" @@ -1038,12 +1033,12 @@ msgstr "" msgid "Last used on:" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:198 +#: lib/cannery_web/components/ammo_group_table_component.ex:182 #, elixir-autogen, elixir-format msgid "Never used" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:64 +#: lib/cannery_web/components/ammo_group_table_component.ex:69 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:42 #, elixir-autogen, elixir-format msgid "Purchased on" @@ -1061,17 +1056,17 @@ msgid "Edit ammo" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.html.heex:8 -#: lib/cannery_web/live/ammo_type_live/index.html.heex:47 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:71 #, elixir-autogen, elixir-format, fuzzy msgid "No Ammo types" msgstr "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:34 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:58 #, elixir-autogen, elixir-format msgid "Search catalog" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:79 #, elixir-autogen, elixir-format, fuzzy msgid "Search ammo" msgstr "" @@ -1081,12 +1076,12 @@ msgstr "" msgid "Search containers" msgstr "" -#: lib/cannery_web/live/tag_live/index.html.heex:37 +#: lib/cannery_web/live/tag_live/index.html.heex:36 #, elixir-autogen, elixir-format, fuzzy msgid "Search tags" msgstr "" -#: lib/cannery_web/live/range_live/index.html.heex:91 +#: lib/cannery_web/live/range_live/index.html.heex:115 #, elixir-autogen, elixir-format msgid "Search shot records" msgstr "" @@ -1193,27 +1188,27 @@ msgstr "" msgid "Password" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:130 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:261 #, elixir-autogen, elixir-format msgid "+P" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:75 #, elixir-autogen, elixir-format msgid ".223" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:63 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:56 #, elixir-autogen, elixir-format msgid "5.56x46mm NATO" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:138 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:300 #, elixir-autogen, elixir-format msgid "Boxer" msgstr "" -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:146 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:308 #, elixir-autogen, elixir-format msgid "Centerfire" msgstr "" @@ -1225,7 +1220,7 @@ msgid "Really great weather" msgstr "" #: lib/cannery_web/components/ammo_group_table_component.ex:60 -#: lib/cannery_web/components/ammo_type_table_component.ex:121 +#: lib/cannery_web/components/ammo_type_table_component.ex:100 #: lib/cannery_web/components/container_table_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:70 #: lib/cannery_web/components/shot_group_table_component.ex:45 @@ -1244,7 +1239,7 @@ msgstr "" msgid "Log out" msgstr "" -#: lib/cannery_web/components/ammo_group_table_component.ex:100 +#: lib/cannery_web/components/ammo_group_table_component.ex:92 #, elixir-autogen, elixir-format msgid "Current Count" msgstr "" @@ -1254,3 +1249,209 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Close modal" msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:56 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:35 +#: lib/cannery_web/live/container_live/show.html.heex:103 +#: lib/cannery_web/live/range_live/index.html.heex:92 +#, elixir-autogen, elixir-format +msgid "All" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:313 +#, elixir-autogen, elixir-format +msgid "Attributes" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:56 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:89 +#, elixir-autogen, elixir-format, fuzzy +msgid "Brass height" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:128 +#, elixir-autogen, elixir-format +msgid "Brass height:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:57 +#: lib/cannery_web/components/ammo_type_table_component.ex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:96 +#, elixir-autogen, elixir-format +msgid "Chamber size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:129 +#, elixir-autogen, elixir-format +msgid "Chamber size:" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:48 +#, elixir-autogen, elixir-format +msgid "Dimensions" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:81 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:266 +#, elixir-autogen, elixir-format +msgid "Dram equivalent" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:148 +#, elixir-autogen, elixir-format +msgid "Dram equivalent:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:51 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:67 +#, elixir-autogen, elixir-format +msgid "Gauge" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:123 +#, elixir-autogen, elixir-format +msgid "Gauge:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:72 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:207 +#, elixir-autogen, elixir-format +msgid "Load grains" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:139 +#, elixir-autogen, elixir-format +msgid "Load grains:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:29 +#, elixir-autogen, elixir-format, fuzzy +msgid "No ammo" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.html.heex:60 +#, elixir-autogen, elixir-format +msgid "None specified" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:59 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:38 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:58 +#: lib/cannery_web/live/container_live/show.html.heex:106 +#: lib/cannery_web/live/range_live/index.html.heex:95 +#, elixir-autogen, elixir-format +msgid "Pistol" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:233 +#, elixir-autogen, elixir-format, fuzzy +msgid "Powder" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:293 +#, elixir-autogen, elixir-format, fuzzy +msgid "Primer" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:109 +#, elixir-autogen, elixir-format +msgid "Projectile" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:57 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:36 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:56 +#: lib/cannery_web/live/container_live/show.html.heex:104 +#: lib/cannery_web/live/range_live/index.html.heex:93 +#, elixir-autogen, elixir-format +msgid "Rifle" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:73 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:215 +#, elixir-autogen, elixir-format +msgid "Shot charge weight" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:140 +#, elixir-autogen, elixir-format +msgid "Shot charge weight:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:70 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:191 +#, elixir-autogen, elixir-format +msgid "Shot material" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:137 +#, elixir-autogen, elixir-format +msgid "Shot material:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:71 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:200 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:138 +#, elixir-autogen, elixir-format, fuzzy +msgid "Shot size:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:69 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:183 +#, elixir-autogen, elixir-format +msgid "Shot type" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:136 +#, elixir-autogen, elixir-format +msgid "Shot type:" +msgstr "" + +#: lib/cannery_web/live/ammo_group_live/index.html.heex:58 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:25 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:37 +#: lib/cannery_web/live/ammo_type_live/show.html.heex:54 +#: lib/cannery_web/live/container_live/show.html.heex:105 +#: lib/cannery_web/live/range_live/index.html.heex:94 +#, elixir-autogen, elixir-format +msgid "Shotgun" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:62 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:143 +#, elixir-autogen, elixir-format +msgid "Slug core" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:187 +#, elixir-autogen, elixir-format +msgid "Target, bird, buck, etc" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:127 +#, elixir-autogen, elixir-format +msgid "Unfired length:" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:55 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:80 +#, elixir-autogen, elixir-format +msgid "Unfired shell length" +msgstr "" + +#: lib/cannery_web/components/ammo_type_table_component.ex:68 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:176 +#, elixir-autogen, elixir-format +msgid "Wadding" +msgstr "" + +#: lib/cannery_web/live/ammo_type_live/show.ex:135 +#, elixir-autogen, elixir-format +msgid "Wadding:" +msgstr "" diff --git a/priv/gettext/ga/LC_MESSAGES/errors.po b/priv/gettext/ga/LC_MESSAGES/errors.po index 3eff837..9a661ea 100644 --- a/priv/gettext/ga/LC_MESSAGES/errors.po +++ b/priv/gettext/ga/LC_MESSAGES/errors.po @@ -70,6 +70,7 @@ msgstr "Seoladh email nó pasfhocal neamhbhailí" msgid "Not found" msgstr "Ní feidir é a fáil" +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:18 #: lib/cannery_web/templates/user_registration/new.html.heex:13 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:13 #: lib/cannery_web/templates/user_settings/edit.html.heex:22 @@ -170,7 +171,7 @@ msgstr "" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgstr "" -#: lib/cannery/ammo.ex:1043 +#: lib/cannery/ammo.ex:1114 #, elixir-autogen, elixir-format msgid "Invalid multiplier" msgstr "" diff --git a/priv/gettext/ga/LC_MESSAGES/prompts.po b/priv/gettext/ga/LC_MESSAGES/prompts.po index b2c8d97..158d876 100644 --- a/priv/gettext/ga/LC_MESSAGES/prompts.po +++ b/priv/gettext/ga/LC_MESSAGES/prompts.po @@ -30,7 +30,7 @@ msgid "%{name} created successfully" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:72 -#: lib/cannery_web/live/ammo_type_live/show.ex:49 +#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/tag_live/index.ex:65 #, elixir-autogen, elixir-format msgid "%{name} deleted succesfully" @@ -61,15 +61,15 @@ msgstr "" msgid "Are you sure you want to delete %{email}? This action is permanent!" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:100 -#: lib/cannery_web/live/container_live/index.html.heex:156 -#: lib/cannery_web/live/container_live/show.html.heex:52 -#: lib/cannery_web/live/tag_live/index.html.heex:64 +#: lib/cannery_web/live/container_live/index.html.heex:99 +#: lib/cannery_web/live/container_live/index.html.heex:157 +#: lib/cannery_web/live/container_live/show.html.heex:45 +#: lib/cannery_web/live/tag_live/index.html.heex:63 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}?" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:169 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:189 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this ammo?" @@ -122,7 +122,7 @@ msgstr "" #: lib/cannery_web/components/add_shot_group_component.html.heex:59 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:85 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:181 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:351 #: lib/cannery_web/live/container_live/form_component.html.heex:59 #: lib/cannery_web/live/invite_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:47 @@ -167,7 +167,7 @@ msgid "Are you sure you want to unstage this ammo?" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:159 -#: lib/cannery_web/live/range_live/index.html.heex:128 +#: lib/cannery_web/live/range_live/index.html.heex:152 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this shot record?" msgstr "" @@ -203,8 +203,8 @@ msgstr "" msgid "%{name} removed successfully" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #, elixir-autogen, elixir-format msgid "You'll need to" msgstr "" @@ -250,7 +250,7 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:122 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" diff --git a/priv/gettext/prompts.pot b/priv/gettext/prompts.pot index e2f587d..bc0ca2d 100644 --- a/priv/gettext/prompts.pot +++ b/priv/gettext/prompts.pot @@ -19,7 +19,7 @@ msgid "%{name} created successfully" msgstr "" #: lib/cannery_web/live/ammo_type_live/index.ex:72 -#: lib/cannery_web/live/ammo_type_live/show.ex:49 +#: lib/cannery_web/live/ammo_type_live/show.ex:27 #: lib/cannery_web/live/tag_live/index.ex:65 #, elixir-autogen, elixir-format msgid "%{name} deleted succesfully" @@ -50,15 +50,15 @@ msgstr "" msgid "Are you sure you want to delete %{email}? This action is permanent!" msgstr "" -#: lib/cannery_web/live/container_live/index.html.heex:100 -#: lib/cannery_web/live/container_live/index.html.heex:156 -#: lib/cannery_web/live/container_live/show.html.heex:52 -#: lib/cannery_web/live/tag_live/index.html.heex:64 +#: lib/cannery_web/live/container_live/index.html.heex:99 +#: lib/cannery_web/live/container_live/index.html.heex:157 +#: lib/cannery_web/live/container_live/show.html.heex:45 +#: lib/cannery_web/live/tag_live/index.html.heex:63 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}?" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:169 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:189 #: lib/cannery_web/live/ammo_group_live/show.html.heex:74 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this ammo?" @@ -111,7 +111,7 @@ msgstr "" #: lib/cannery_web/components/add_shot_group_component.html.heex:59 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:85 -#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:181 +#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:351 #: lib/cannery_web/live/container_live/form_component.html.heex:59 #: lib/cannery_web/live/invite_live/form_component.html.heex:37 #: lib/cannery_web/live/range_live/form_component.html.heex:47 @@ -156,7 +156,7 @@ msgid "Are you sure you want to unstage this ammo?" msgstr "" #: lib/cannery_web/live/ammo_group_live/show.ex:159 -#: lib/cannery_web/live/range_live/index.html.heex:128 +#: lib/cannery_web/live/range_live/index.html.heex:152 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete this shot record?" msgstr "" @@ -192,8 +192,8 @@ msgstr "" msgid "%{name} removed successfully" msgstr "" -#: lib/cannery_web/live/ammo_group_live/index.html.heex:18 -#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:10 +#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #, elixir-autogen, elixir-format msgid "You'll need to" msgstr "" @@ -236,7 +236,7 @@ msgid_plural "Ammo added successfully" msgstr[0] "" msgstr[1] "" -#: lib/cannery_web/live/ammo_type_live/index.html.heex:97 +#: lib/cannery_web/live/ammo_type_live/index.html.heex:122 #: lib/cannery_web/live/ammo_type_live/show.html.heex:29 #, elixir-autogen, elixir-format msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" diff --git a/priv/repo/migrations/20220506015344_add_locale_setting.exs b/priv/repo/migrations/20220506015344_add_locale_setting.exs index 6c75f18..65c9839 100644 --- a/priv/repo/migrations/20220506015344_add_locale_setting.exs +++ b/priv/repo/migrations/20220506015344_add_locale_setting.exs @@ -2,7 +2,7 @@ defmodule Cannery.Repo.Migrations.AddLocaleSetting do use Ecto.Migration def change do - alter table("users") do + alter table(:users) do add :locale, :string end end diff --git a/priv/repo/migrations/20230322005247_add_ammo_type_types_and_shotgun_fields.exs b/priv/repo/migrations/20230322005247_add_ammo_type_types_and_shotgun_fields.exs new file mode 100644 index 0000000..8961997 --- /dev/null +++ b/priv/repo/migrations/20230322005247_add_ammo_type_types_and_shotgun_fields.exs @@ -0,0 +1,98 @@ +defmodule Cannery.Repo.Migrations.AddAmmoTypeTypesAndShotgunFields do + use Ecto.Migration + + def change do + alter table(:ammo_types) do + # rifle/shotgun/pistol + add :type, :string, default: "rifle" + + add :wadding, :string + # target/bird/buck/slug/special + add :shot_type, :string + add :shot_material, :string + add :shot_size, :string + add :unfired_length, :string + add :brass_height, :string + add :chamber_size, :string + add :load_grains, :integer + add :shot_charge_weight, :string + add :dram_equivalent, :string + end + + create index(:ammo_types, [:type]) + + execute(&add_fields_to_search/0, &remove_fields_from_search/0) + end + + defp add_fields_to_search() do + execute """ + ALTER TABLE ammo_types + ALTER COLUMN search tsvector + GENERATED ALWAYS AS ( + setweight(to_tsvector('english', coalesce("name", '')), 'A') || + setweight(to_tsvector('english', coalesce("desc", '')), 'B') || + setweight(to_tsvector('english', coalesce("type", '')), 'B') || + setweight(to_tsvector('english', coalesce("manufacturer", '')), 'C') || + setweight(to_tsvector('english', coalesce("upc", '')), 'C') || + setweight(to_tsvector('english', coalesce("bullet_type", '')), 'D') || + setweight(to_tsvector('english', coalesce("bullet_core", '')), 'D') || + setweight(to_tsvector('english', coalesce("cartridge", '')), 'D') || + setweight(to_tsvector('english', coalesce("caliber", '')), 'D') || + setweight(to_tsvector('english', coalesce("case_material", '')), 'D') || + setweight(to_tsvector('english', coalesce("jacket_type", '')), 'D') || + setweight(to_tsvector('english', immutable_to_string("muzzle_velocity", '')), 'D') || + setweight(to_tsvector('english', coalesce("powder_type", '')), 'D') || + setweight(to_tsvector('english', immutable_to_string("powder_grains_per_charge", '')), 'D') || + setweight(to_tsvector('english', immutable_to_string("grains", '')), 'D') || + setweight(to_tsvector('english', coalesce("pressure", '')), 'D') || + setweight(to_tsvector('english', coalesce("primer_type", '')), 'D') || + setweight(to_tsvector('english', coalesce("firing_type", '')), 'D') || + setweight(to_tsvector('english', coalesce("wadding", '')), 'D') || + setweight(to_tsvector('english', coalesce("shot_type", '')), 'D') || + setweight(to_tsvector('english', coalesce("shot_material", '')), 'D') || + setweight(to_tsvector('english', coalesce("shot_size", '')), 'D') || + setweight(to_tsvector('english', coalesce("unfired_length", '')), 'D') || + setweight(to_tsvector('english', coalesce("brass_height", '')), 'D') || + setweight(to_tsvector('english', coalesce("chamber_size", '')), 'D') || + setweight(to_tsvector('english', coalesce("load_grains", '')), 'D') || + setweight(to_tsvector('english', coalesce("shot_charge_weight,", '')), 'D') || + setweight(to_tsvector('english', coalesce("dram_equivalent", '')), 'D') || + setweight(to_tsvector('english', boolean_to_string("tracer", 'tracer', '')), 'D') || + setweight(to_tsvector('english', boolean_to_string("incendiary", 'incendiary', '')), 'D') || + setweight(to_tsvector('english', boolean_to_string("blank", 'blank', '')), 'D') || + setweight(to_tsvector('english', boolean_to_string("corrosive", 'corrosive', '')), 'D') + setwe + ) STORED + """ + end + + defp remove_fields_from_search() do + execute """ + ALTER TABLE ammo_types + ALTER COLUMN search tsvector + GENERATED ALWAYS AS ( + setweight(to_tsvector('english', coalesce("name", '')), 'A') || + setweight(to_tsvector('english', coalesce("desc", '')), 'B') || + setweight(to_tsvector('english', coalesce("bullet_type", '')), 'C') || + setweight(to_tsvector('english', coalesce("bullet_core", '')), 'C') || + setweight(to_tsvector('english', coalesce("cartridge", '')), 'C') || + setweight(to_tsvector('english', coalesce("caliber", '')), 'C') || + setweight(to_tsvector('english', coalesce("case_material", '')), 'C') || + setweight(to_tsvector('english', coalesce("jacket_type", '')), 'C') || + setweight(to_tsvector('english', immutable_to_string("muzzle_velocity", '')), 'C') || + setweight(to_tsvector('english', coalesce("powder_type", '')), 'C') || + setweight(to_tsvector('english', immutable_to_string("powder_grains_per_charge", '')), 'C') || + setweight(to_tsvector('english', immutable_to_string("grains", '')), 'C') || + setweight(to_tsvector('english', coalesce("pressure", '')), 'C') || + setweight(to_tsvector('english', coalesce("primer_type", '')), 'C') || + setweight(to_tsvector('english', coalesce("firing_type", '')), 'C') || + setweight(to_tsvector('english', boolean_to_string("tracer", 'tracer', '')), 'C') || + setweight(to_tsvector('english', boolean_to_string("incendiary", 'incendiary', '')), 'C') || + setweight(to_tsvector('english', boolean_to_string("blank", 'blank', '')), 'C') || + setweight(to_tsvector('english', boolean_to_string("corrosive", 'corrosive', '')), 'C') || + setweight(to_tsvector('english', coalesce("manufacturer", '')), 'D') || + setweight(to_tsvector('english', coalesce("upc", '')), 'D') + ) STORED + """ + end +end diff --git a/test/cannery/activity_log_test.exs b/test/cannery/activity_log_test.exs index 5a0e02d..333460b 100644 --- a/test/cannery/activity_log_test.exs +++ b/test/cannery/activity_log_test.exs @@ -38,50 +38,6 @@ defmodule Cannery.ActivityLogTest do ] end - test "list_shot_groups/1 returns all shot_groups", - %{shot_group: shot_group, current_user: current_user} do - assert ActivityLog.list_shot_groups(current_user) == [shot_group] - end - - test "list_shot_groups/2 returns relevant shot_groups for a user", %{ - ammo_type: ammo_type, - ammo_group: ammo_group, - container: container, - current_user: current_user - } do - shot_group_a = shot_group_fixture(%{"notes" => "amazing"}, current_user, ammo_group) - - {1, [another_ammo_group]} = - ammo_group_fixture(%{"notes" => "stupendous"}, ammo_type, container, current_user) - - shot_group_b = shot_group_fixture(current_user, another_ammo_group) - - another_ammo_type = ammo_type_fixture(%{"name" => "fabulous ammo"}, current_user) - - {1, [yet_another_ammo_group]} = - ammo_group_fixture(another_ammo_type, container, current_user) - - shot_group_c = shot_group_fixture(current_user, yet_another_ammo_group) - - random_user = user_fixture() - random_container = container_fixture(random_user) - random_ammo_type = ammo_type_fixture(random_user) - - {1, [random_ammo_group]} = - ammo_group_fixture(random_ammo_type, random_container, random_user) - - _shouldnt_return = shot_group_fixture(random_user, random_ammo_group) - - # notes - assert ActivityLog.list_shot_groups("amazing", current_user) == [shot_group_a] - - # ammo group attributes - assert ActivityLog.list_shot_groups("stupendous", current_user) == [shot_group_b] - - # ammo type attributes - assert ActivityLog.list_shot_groups("fabulous", current_user) == [shot_group_c] - end - test "get_shot_group!/2 returns the shot_group with given id", %{shot_group: shot_group, current_user: current_user} do assert ActivityLog.get_shot_group!(shot_group.id, current_user) == shot_group @@ -371,4 +327,99 @@ defmodule Cannery.ActivityLogTest do assert %{^another_ammo_type_id => 6} = used_counts end end + + describe "list_shot_groups/3" do + setup do + current_user = user_fixture() + container = container_fixture(current_user) + ammo_type = ammo_type_fixture(current_user) + {1, [ammo_group]} = ammo_group_fixture(ammo_type, container, current_user) + + [ + current_user: current_user, + container: container, + ammo_type: ammo_type, + ammo_group: ammo_group + ] + end + + test "list_shot_groups/3 returns relevant shot_groups for a type", + %{current_user: current_user, container: container} do + other_user = user_fixture() + other_container = container_fixture(other_user) + + for type <- ["rifle", "shotgun", "pistol"] do + other_ammo_type = ammo_type_fixture(%{"type" => type}, other_user) + {1, [other_ammo_group]} = ammo_group_fixture(other_ammo_type, other_container, other_user) + shot_group_fixture(other_user, other_ammo_group) + end + + rifle_ammo_type = ammo_type_fixture(%{"type" => "rifle"}, current_user) + {1, [rifle_ammo_group]} = ammo_group_fixture(rifle_ammo_type, container, current_user) + rifle_shot_group = shot_group_fixture(current_user, rifle_ammo_group) + + shotgun_ammo_type = ammo_type_fixture(%{"type" => "shotgun"}, current_user) + {1, [shotgun_ammo_group]} = ammo_group_fixture(shotgun_ammo_type, container, current_user) + shotgun_shot_group = shot_group_fixture(current_user, shotgun_ammo_group) + + pistol_ammo_type = ammo_type_fixture(%{"type" => "pistol"}, current_user) + {1, [pistol_ammo_group]} = ammo_group_fixture(pistol_ammo_type, container, current_user) + pistol_shot_group = shot_group_fixture(current_user, pistol_ammo_group) + + assert [^rifle_shot_group] = ActivityLog.list_shot_groups(:rifle, current_user) + assert [^shotgun_shot_group] = ActivityLog.list_shot_groups(:shotgun, current_user) + assert [^pistol_shot_group] = ActivityLog.list_shot_groups(:pistol, current_user) + + shot_groups = ActivityLog.list_shot_groups(:all, current_user) + assert Enum.count(shot_groups) == 3 + assert rifle_shot_group in shot_groups + assert shotgun_shot_group in shot_groups + assert pistol_shot_group in shot_groups + + shot_groups = ActivityLog.list_shot_groups(nil, current_user) + assert Enum.count(shot_groups) == 3 + assert rifle_shot_group in shot_groups + assert shotgun_shot_group in shot_groups + assert pistol_shot_group in shot_groups + end + + test "list_shot_groups/3 returns relevant shot_groups for a search", %{ + ammo_type: ammo_type, + ammo_group: ammo_group, + container: container, + current_user: current_user + } do + shot_group_a = shot_group_fixture(%{"notes" => "amazing"}, current_user, ammo_group) + + {1, [another_ammo_group]} = + ammo_group_fixture(%{"notes" => "stupendous"}, ammo_type, container, current_user) + + shot_group_b = shot_group_fixture(current_user, another_ammo_group) + + another_ammo_type = ammo_type_fixture(%{"name" => "fabulous ammo"}, current_user) + + {1, [yet_another_ammo_group]} = + ammo_group_fixture(another_ammo_type, container, current_user) + + shot_group_c = shot_group_fixture(current_user, yet_another_ammo_group) + + another_user = user_fixture() + another_container = container_fixture(another_user) + another_ammo_type = ammo_type_fixture(another_user) + + {1, [another_ammo_group]} = + ammo_group_fixture(another_ammo_type, another_container, another_user) + + _shouldnt_return = shot_group_fixture(another_user, another_ammo_group) + + # notes + assert ActivityLog.list_shot_groups("amazing", :all, current_user) == [shot_group_a] + + # ammo group attributes + assert ActivityLog.list_shot_groups("stupendous", :all, current_user) == [shot_group_b] + + # ammo type attributes + assert ActivityLog.list_shot_groups("fabulous", :all, current_user) == [shot_group_c] + end + end end diff --git a/test/cannery/ammo_test.exs b/test/cannery/ammo_test.exs index bdf1ae3..6ed9203 100644 --- a/test/cannery/ammo_test.exs +++ b/test/cannery/ammo_test.exs @@ -9,54 +9,55 @@ defmodule Cannery.AmmoTest do @moduletag :ammo_test - describe "ammo_types" do - @valid_attrs %{ - "bullet_type" => "some bullet_type", - "case_material" => "some case_material", - "desc" => "some desc", - "manufacturer" => "some manufacturer", - "name" => "some name", - "grains" => 120 - } - @update_attrs %{ - "bullet_type" => "some updated bullet_type", - "case_material" => "some updated case_material", - "desc" => "some updated desc", - "manufacturer" => "some updated manufacturer", - "name" => "some updated name", - "grains" => 456 - } - @invalid_attrs %{ - "bullet_type" => nil, - "case_material" => nil, - "desc" => nil, - "manufacturer" => nil, - "name" => nil, - "grains" => nil - } + @valid_attrs %{ + "bullet_type" => "some bullet_type", + "case_material" => "some case_material", + "desc" => "some desc", + "manufacturer" => "some manufacturer", + "name" => "some name", + "grains" => 120 + } + @update_attrs %{ + "bullet_type" => "some updated bullet_type", + "case_material" => "some updated case_material", + "desc" => "some updated desc", + "manufacturer" => "some updated manufacturer", + "name" => "some updated name", + "grains" => 456 + } + @invalid_attrs %{ + "bullet_type" => nil, + "case_material" => nil, + "desc" => nil, + "manufacturer" => nil, + "name" => nil, + "grains" => nil + } + describe "list_ammo_types/2" do setup do current_user = user_fixture() - [ammo_type: ammo_type_fixture(current_user), current_user: current_user] - end - test "list_ammo_types/1 returns all ammo_types", - %{ammo_type: ammo_type, current_user: current_user} do - assert Ammo.list_ammo_types(current_user) == [ammo_type] - end - - test "list_ammo_types/2 returns relevant ammo_types for a user", - %{current_user: current_user} do - ammo_type_a = - %{"name" => "bullets", "desc" => "has some pews in it", "grains" => 5} - |> ammo_type_fixture(current_user) - - ammo_type_b = - %{"name" => "hollows", "grains" => 3} - |> ammo_type_fixture(current_user) - - ammo_type_c = + rifle_ammo_type = %{ + "name" => "bullets", + "type" => "rifle", + "desc" => "has some pews in it", + "grains" => 5 + } + |> ammo_type_fixture(current_user) + + shotgun_ammo_type = + %{ + "name" => "hollows", + "type" => "shotgun", + "grains" => 3 + } + |> ammo_type_fixture(current_user) + + pistol_ammo_type = + %{ + "type" => "pistol", "name" => "jackets", "desc" => "brass shell", "tracer" => true @@ -70,23 +71,78 @@ defmodule Cannery.AmmoTest do } |> ammo_type_fixture(user_fixture()) + [ + rifle_ammo_type: rifle_ammo_type, + shotgun_ammo_type: shotgun_ammo_type, + pistol_ammo_type: pistol_ammo_type, + current_user: current_user + ] + end + + test "list_ammo_types/2 returns all ammo_types", %{ + rifle_ammo_type: rifle_ammo_type, + shotgun_ammo_type: shotgun_ammo_type, + pistol_ammo_type: pistol_ammo_type, + current_user: current_user + } do + results = Ammo.list_ammo_types(current_user, :all) + assert results |> Enum.count() == 3 + assert rifle_ammo_type in results + assert shotgun_ammo_type in results + assert pistol_ammo_type in results + end + + test "list_ammo_types/2 returns rifle ammo_types", %{ + rifle_ammo_type: rifle_ammo_type, + current_user: current_user + } do + assert [^rifle_ammo_type] = Ammo.list_ammo_types(current_user, :rifle) + end + + test "list_ammo_types/2 returns shotgun ammo_types", %{ + shotgun_ammo_type: shotgun_ammo_type, + current_user: current_user + } do + assert [^shotgun_ammo_type] = Ammo.list_ammo_types(current_user, :shotgun) + end + + test "list_ammo_types/2 returns pistol ammo_types", %{ + pistol_ammo_type: pistol_ammo_type, + current_user: current_user + } do + assert [^pistol_ammo_type] = Ammo.list_ammo_types(current_user, :pistol) + end + + test "list_ammo_types/2 returns relevant ammo_types for a user", %{ + rifle_ammo_type: rifle_ammo_type, + shotgun_ammo_type: shotgun_ammo_type, + pistol_ammo_type: pistol_ammo_type, + current_user: current_user + } do # name - assert Ammo.list_ammo_types("bullet", current_user) == [ammo_type_a] - assert Ammo.list_ammo_types("bullets", current_user) == [ammo_type_a] - assert Ammo.list_ammo_types("hollow", current_user) == [ammo_type_b] - assert Ammo.list_ammo_types("jacket", current_user) == [ammo_type_c] + assert Ammo.list_ammo_types("bullet", current_user, :all) == [rifle_ammo_type] + assert Ammo.list_ammo_types("bullets", current_user, :all) == [rifle_ammo_type] + assert Ammo.list_ammo_types("hollow", current_user, :all) == [shotgun_ammo_type] + assert Ammo.list_ammo_types("jacket", current_user, :all) == [pistol_ammo_type] # desc - assert Ammo.list_ammo_types("pew", current_user) == [ammo_type_a] - assert Ammo.list_ammo_types("brass", current_user) == [ammo_type_c] - assert Ammo.list_ammo_types("shell", current_user) == [ammo_type_c] + assert Ammo.list_ammo_types("pew", current_user, :all) == [rifle_ammo_type] + assert Ammo.list_ammo_types("brass", current_user, :all) == [pistol_ammo_type] + assert Ammo.list_ammo_types("shell", current_user, :all) == [pistol_ammo_type] # grains (integer) - assert Ammo.list_ammo_types("5", current_user) == [ammo_type_a] - assert Ammo.list_ammo_types("3", current_user) == [ammo_type_b] + assert Ammo.list_ammo_types("5", current_user, :all) == [rifle_ammo_type] + assert Ammo.list_ammo_types("3", current_user, :all) == [shotgun_ammo_type] # tracer (boolean) - assert Ammo.list_ammo_types("tracer", current_user) == [ammo_type_c] + assert Ammo.list_ammo_types("tracer", current_user, :all) == [pistol_ammo_type] + end + end + + describe "ammo types" do + setup do + current_user = user_fixture() + [ammo_type: ammo_type_fixture(current_user), current_user: current_user] end test "get_ammo_type!/2 returns the ammo_type with given id", @@ -94,6 +150,23 @@ defmodule Cannery.AmmoTest do assert Ammo.get_ammo_type!(ammo_type.id, current_user) == ammo_type end + test "get_ammo_types_count!/1 returns the correct amount of ammo", + %{current_user: current_user} do + assert Ammo.get_ammo_types_count!(current_user) == 1 + + ammo_type_fixture(current_user) + assert Ammo.get_ammo_types_count!(current_user) == 2 + + ammo_type_fixture(current_user) + assert Ammo.get_ammo_types_count!(current_user) == 3 + + other_user = user_fixture() + assert Ammo.get_ammo_types_count!(other_user) == 0 + + ammo_type_fixture(other_user) + assert Ammo.get_ammo_types_count!(other_user) == 1 + end + test "create_ammo_type/2 with valid data creates a ammo_type", %{current_user: current_user} do assert {:ok, %AmmoType{} = ammo_type} = Ammo.create_ammo_type(@valid_attrs, current_user) @@ -653,32 +726,85 @@ defmodule Cannery.AmmoTest do ] end - test "list_ammo_groups/3 returns all ammo_groups", - %{ - ammo_type: ammo_type, - ammo_group: ammo_group, - container: container, - current_user: current_user - } do + test "get_ammo_groups_count!/2 returns the correct amount of ammo", + %{ammo_type: ammo_type, container: container, current_user: current_user} do + assert Ammo.get_ammo_groups_count!(current_user) == 1 + + ammo_group_fixture(ammo_type, container, current_user) + assert Ammo.get_ammo_groups_count!(current_user) == 2 + + ammo_group_fixture(ammo_type, container, current_user) + assert Ammo.get_ammo_groups_count!(current_user) == 3 + + other_user = user_fixture() + assert Ammo.get_ammo_groups_count!(other_user) == 0 + assert Ammo.get_ammo_groups_count!(other_user, true) == 0 + + other_ammo_type = ammo_type_fixture(other_user) + other_container = container_fixture(other_user) + + {1, [another_ammo_group]} = + ammo_group_fixture(%{"count" => 30}, other_ammo_type, other_container, other_user) + + shot_group_fixture(%{"count" => 30}, other_user, another_ammo_group) + assert Ammo.get_ammo_groups_count!(other_user) == 0 + assert Ammo.get_ammo_groups_count!(other_user, true) == 1 + end + + test "list_ammo_groups/4 returns all ammo_groups for a type" do + current_user = user_fixture() + container = container_fixture(current_user) + + rifle_ammo_type = ammo_type_fixture(%{"type" => "rifle"}, current_user) + {1, [rifle_ammo_group]} = ammo_group_fixture(rifle_ammo_type, container, current_user) + shotgun_ammo_type = ammo_type_fixture(%{"type" => "shotgun"}, current_user) + {1, [shotgun_ammo_group]} = ammo_group_fixture(shotgun_ammo_type, container, current_user) + pistol_ammo_type = ammo_type_fixture(%{"type" => "pistol"}, current_user) + {1, [pistol_ammo_group]} = ammo_group_fixture(pistol_ammo_type, container, current_user) + + assert [^rifle_ammo_group] = Ammo.list_ammo_groups(nil, :rifle, current_user, false) + assert [^shotgun_ammo_group] = Ammo.list_ammo_groups(nil, :shotgun, current_user, false) + assert [^pistol_ammo_group] = Ammo.list_ammo_groups(nil, :pistol, current_user, false) + + ammo_groups = Ammo.list_ammo_groups(nil, :all, current_user, false) + assert Enum.count(ammo_groups) == 3 + assert rifle_ammo_group in ammo_groups + assert shotgun_ammo_group in ammo_groups + assert pistol_ammo_group in ammo_groups + + ammo_groups = Ammo.list_ammo_groups(nil, nil, current_user, false) + assert Enum.count(ammo_groups) == 3 + assert rifle_ammo_group in ammo_groups + assert shotgun_ammo_group in ammo_groups + assert pistol_ammo_group in ammo_groups + end + + test "list_ammo_groups/4 returns all relevant ammo_groups including used", %{ + ammo_type: ammo_type, + ammo_group: ammo_group, + container: container, + current_user: current_user + } do {1, [%{id: another_ammo_group_id} = another_ammo_group]} = ammo_group_fixture(%{"count" => 30}, ammo_type, container, current_user) shot_group_fixture(%{"count" => 30}, current_user, another_ammo_group) another_ammo_group = Ammo.get_ammo_group!(another_ammo_group_id, current_user) - assert Ammo.list_ammo_groups(nil, false, current_user) == [ammo_group] + assert Ammo.list_ammo_groups(nil, :all, current_user, false) == [ammo_group] - assert Ammo.list_ammo_groups(nil, true, current_user) - |> Enum.sort_by(fn %{count: count} -> count end) == [another_ammo_group, ammo_group] + ammo_groups = Ammo.list_ammo_groups(nil, :all, current_user, true) + assert Enum.count(ammo_groups) == 2 + assert another_ammo_group in ammo_groups + assert ammo_group in ammo_groups end - test "list_ammo_groups/3 returns relevant ammo groups when searched", - %{ - ammo_type: ammo_type, - ammo_group: ammo_group, - container: container, - current_user: current_user - } do + test "list_ammo_groups/4 returns relevant ammo groups when searched", %{ + ammo_type: ammo_type, + ammo_group: ammo_group, + container: container, + current_user: current_user + } do {1, [another_ammo_group]} = %{"count" => 49, "notes" => "cool ammo group"} |> ammo_group_fixture(ammo_type, container, current_user) @@ -695,49 +821,80 @@ defmodule Cannery.AmmoTest do {1, [fantastic_ammo_group]} = ammo_group_fixture(%{"count" => 47}, ammo_type, another_container, current_user) - assert Ammo.list_ammo_groups(nil, false, current_user) - |> Enum.sort_by(fn %{count: count} -> count end) == - [fantastic_ammo_group, amazing_ammo_group, another_ammo_group, ammo_group] + ammo_groups = Ammo.list_ammo_groups(nil, :all, current_user, false) + assert Enum.count(ammo_groups) == 4 + assert fantastic_ammo_group in ammo_groups + assert amazing_ammo_group in ammo_groups + assert another_ammo_group in ammo_groups + assert ammo_group in ammo_groups # search works for ammo group attributes - assert Ammo.list_ammo_groups("cool", true, current_user) == [another_ammo_group] + assert Ammo.list_ammo_groups("cool", :all, current_user, true) == [another_ammo_group] # search works for ammo type attributes - assert Ammo.list_ammo_groups("amazing", true, current_user) == [amazing_ammo_group] + assert Ammo.list_ammo_groups("amazing", :all, current_user, true) == [amazing_ammo_group] # search works for container attributes - assert Ammo.list_ammo_groups("fantastic", true, current_user) == [fantastic_ammo_group] + assert Ammo.list_ammo_groups("fantastic", :all, current_user, true) == + [fantastic_ammo_group] # search works for container tag attributes - assert Ammo.list_ammo_groups("stupendous", true, current_user) == [fantastic_ammo_group] + assert Ammo.list_ammo_groups("stupendous", :all, current_user, true) == + [fantastic_ammo_group] - assert Ammo.list_ammo_groups("random", true, current_user) == [] + assert Ammo.list_ammo_groups("random", :all, current_user, true) == [] end - test "list_ammo_groups_for_type/2 returns all ammo_groups for a type", - %{ - ammo_type: ammo_type, - container: container, - ammo_group: ammo_group, - current_user: current_user - } do - another_ammo_type = ammo_type_fixture(current_user) - {1, [_another]} = ammo_group_fixture(another_ammo_type, container, current_user) + test "list_ammo_groups_for_type/3 returns all ammo_groups for a type", %{ + container: container, + current_user: current_user + } do + ammo_type = ammo_type_fixture(current_user) + {1, [ammo_group]} = ammo_group_fixture(ammo_type, container, current_user) + assert [^ammo_group] = Ammo.list_ammo_groups_for_type(ammo_type, current_user) - assert Ammo.list_ammo_groups_for_type(ammo_type, current_user) == [ammo_group] + shot_group_fixture(current_user, ammo_group) + ammo_group = Ammo.get_ammo_group!(ammo_group.id, current_user) + assert [] == Ammo.list_ammo_groups_for_type(ammo_type, current_user) + assert [^ammo_group] = Ammo.list_ammo_groups_for_type(ammo_type, current_user, true) end - test "list_ammo_groups_for_container/2 returns all ammo_groups for a container", - %{ - ammo_type: ammo_type, - container: container, - ammo_group: ammo_group, - current_user: current_user - } do + test "list_ammo_groups_for_container/3 returns all ammo_groups for a container" do + current_user = user_fixture() + container = container_fixture(current_user) + + rifle_ammo_type = ammo_type_fixture(%{"type" => "rifle"}, current_user) + {1, [rifle_ammo_group]} = ammo_group_fixture(rifle_ammo_type, container, current_user) + shotgun_ammo_type = ammo_type_fixture(%{"type" => "shotgun"}, current_user) + {1, [shotgun_ammo_group]} = ammo_group_fixture(shotgun_ammo_type, container, current_user) + pistol_ammo_type = ammo_type_fixture(%{"type" => "pistol"}, current_user) + {1, [pistol_ammo_group]} = ammo_group_fixture(pistol_ammo_type, container, current_user) + another_container = container_fixture(current_user) - {1, [_another]} = ammo_group_fixture(ammo_type, another_container, current_user) + ammo_group_fixture(rifle_ammo_type, another_container, current_user) + ammo_group_fixture(shotgun_ammo_type, another_container, current_user) + ammo_group_fixture(pistol_ammo_type, another_container, current_user) - assert Ammo.list_ammo_groups_for_container(container, current_user) == [ammo_group] + assert [^rifle_ammo_group] = + Ammo.list_ammo_groups_for_container(container, :rifle, current_user) + + assert [^shotgun_ammo_group] = + Ammo.list_ammo_groups_for_container(container, :shotgun, current_user) + + assert [^pistol_ammo_group] = + Ammo.list_ammo_groups_for_container(container, :pistol, current_user) + + ammo_groups = Ammo.list_ammo_groups_for_container(container, :all, current_user) + assert Enum.count(ammo_groups) == 3 + assert rifle_ammo_group in ammo_groups + assert shotgun_ammo_group in ammo_groups + assert pistol_ammo_group in ammo_groups + + ammo_groups = Ammo.list_ammo_groups_for_container(container, nil, current_user) + assert Enum.count(ammo_groups) == 3 + assert rifle_ammo_group in ammo_groups + assert shotgun_ammo_group in ammo_groups + assert pistol_ammo_group in ammo_groups end test "get_ammo_groups_count_for_type/2 returns count of ammo_groups for a type", %{ @@ -785,12 +942,11 @@ defmodule Cannery.AmmoTest do assert %{^another_ammo_type_id => 1} = ammo_groups_count end - test "list_staged_ammo_groups/1 returns all ammo_groups that are staged", - %{ - ammo_type: ammo_type, - container: container, - current_user: current_user - } do + test "list_staged_ammo_groups/1 returns all ammo_groups that are staged", %{ + ammo_type: ammo_type, + container: container, + current_user: current_user + } do {1, [another_ammo_group]} = ammo_group_fixture(%{"staged" => true}, ammo_type, container, current_user) @@ -816,12 +972,11 @@ defmodule Cannery.AmmoTest do assert %{^another_ammo_group_id => ^another_ammo_group} = ammo_groups end - test "create_ammo_groups/3 with valid data creates a ammo_group", - %{ - ammo_type: ammo_type, - container: container, - current_user: current_user - } do + test "create_ammo_groups/3 with valid data creates a ammo_group", %{ + ammo_type: ammo_type, + container: container, + current_user: current_user + } do assert {:ok, {1, [%AmmoGroup{} = ammo_group]}} = @valid_attrs |> Map.merge(%{"ammo_type_id" => ammo_type.id, "container_id" => container.id}) @@ -832,12 +987,11 @@ defmodule Cannery.AmmoTest do assert ammo_group.price_paid == 120.5 end - test "create_ammo_groups/3 with valid data creates multiple ammo_groups", - %{ - ammo_type: ammo_type, - container: container, - current_user: current_user - } do + test "create_ammo_groups/3 with valid data creates multiple ammo_groups", %{ + ammo_type: ammo_type, + container: container, + current_user: current_user + } do assert {:ok, {3, ammo_groups}} = @valid_attrs |> Map.merge(%{"ammo_type_id" => ammo_type.id, "container_id" => container.id}) diff --git a/test/cannery_web/live/ammo_group_live_test.exs b/test/cannery_web/live/ammo_group_live_test.exs index 91fd9b7..1d05dca 100644 --- a/test/cannery_web/live/ammo_group_live_test.exs +++ b/test/cannery_web/live/ammo_group_live_test.exs @@ -66,6 +66,60 @@ defmodule CanneryWeb.AmmoGroupLiveTest do assert html =~ ammo_group.ammo_type.name end + test "can sort by type", + %{conn: conn, container: container, current_user: current_user} do + rifle_type = ammo_type_fixture(%{"type" => "rifle"}, current_user) + {1, [rifle_ammo_group]} = ammo_group_fixture(rifle_type, container, current_user) + shotgun_type = ammo_type_fixture(%{"type" => "shotgun"}, current_user) + {1, [shotgun_ammo_group]} = ammo_group_fixture(shotgun_type, container, current_user) + pistol_type = ammo_type_fixture(%{"type" => "pistol"}, current_user) + {1, [pistol_ammo_group]} = ammo_group_fixture(pistol_type, container, current_user) + + {:ok, index_live, html} = live(conn, Routes.ammo_group_index_path(conn, :index)) + + assert html =~ "All" + + assert html =~ rifle_ammo_group.ammo_type.name + assert html =~ shotgun_ammo_group.ammo_type.name + assert html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :rifle}) + + assert html =~ rifle_ammo_group.ammo_type.name + refute html =~ shotgun_ammo_group.ammo_type.name + refute html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :shotgun}) + + refute html =~ rifle_ammo_group.ammo_type.name + assert html =~ shotgun_ammo_group.ammo_type.name + refute html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :pistol}) + + refute html =~ rifle_ammo_group.ammo_type.name + refute html =~ shotgun_ammo_group.ammo_type.name + assert html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :all}) + + assert html =~ rifle_ammo_group.ammo_type.name + assert html =~ shotgun_ammo_group.ammo_type.name + assert html =~ pistol_ammo_group.ammo_type.name + end + test "can search for ammo_groups", %{conn: conn, ammo_group: ammo_group} do {:ok, index_live, html} = live(conn, Routes.ammo_group_index_path(conn, :index)) @@ -142,7 +196,7 @@ defmodule CanneryWeb.AmmoGroupLiveTest do |> follow_redirect(conn, Routes.ammo_group_index_path(conn, :index)) assert html =~ dgettext("prompts", "Ammo added successfully") - assert Ammo.list_ammo_groups(nil, false, current_user) |> Enum.count() == multiplier + 1 + assert Ammo.list_ammo_groups(nil, :all, current_user) |> Enum.count() == multiplier + 1 end test "does not save invalid number of new ammo_groups", %{conn: conn} do diff --git a/test/cannery_web/live/ammo_type_live_test.exs b/test/cannery_web/live/ammo_type_live_test.exs index 6e88df2..7f8683f 100644 --- a/test/cannery_web/live/ammo_type_live_test.exs +++ b/test/cannery_web/live/ammo_type_live_test.exs @@ -74,28 +74,77 @@ defmodule CanneryWeb.AmmoTypeLiveTest do assert html =~ ammo_type.bullet_type end + test "can sort by type", %{conn: conn, current_user: current_user} do + rifle_type = ammo_type_fixture(%{"type" => "rifle"}, current_user) + shotgun_type = ammo_type_fixture(%{"type" => "shotgun"}, current_user) + pistol_type = ammo_type_fixture(%{"type" => "pistol"}, current_user) + + {:ok, index_live, html} = live(conn, Routes.ammo_type_index_path(conn, :index)) + + assert html =~ "All" + + assert html =~ rifle_type.name + assert html =~ shotgun_type.name + assert html =~ pistol_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :rifle}) + + assert html =~ rifle_type.name + refute html =~ shotgun_type.name + refute html =~ pistol_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :shotgun}) + + refute html =~ rifle_type.name + assert html =~ shotgun_type.name + refute html =~ pistol_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :pistol}) + + refute html =~ rifle_type.name + refute html =~ shotgun_type.name + assert html =~ pistol_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :all}) + + assert html =~ rifle_type.name + assert html =~ shotgun_type.name + assert html =~ pistol_type.name + end + test "can search for ammo_type", %{conn: conn, ammo_type: ammo_type} do {:ok, index_live, html} = live(conn, Routes.ammo_type_index_path(conn, :index)) assert html =~ ammo_type.bullet_type assert index_live - |> form(~s/form[phx-change="search"]/, - search: %{search_term: ammo_type.bullet_type} - ) - |> render_change() =~ ammo_type.bullet_type + |> form(~s/form[phx-change="search"]/) + |> render_change(search: %{search_term: ammo_type.bullet_type}) =~ + ammo_type.bullet_type assert_patch(index_live, Routes.ammo_type_index_path(conn, :search, ammo_type.bullet_type)) refute index_live - |> form(~s/form[phx-change="search"]/, search: %{search_term: "something_else"}) - |> render_change() =~ ammo_type.bullet_type + |> form(~s/form[phx-change="search"]/) + |> render_change(search: %{search_term: "something_else"}) =~ ammo_type.bullet_type assert_patch(index_live, Routes.ammo_type_index_path(conn, :search, "something_else")) assert index_live - |> form(~s/form[phx-change="search"]/, search: %{search_term: ""}) - |> render_change() =~ ammo_type.bullet_type + |> form(~s/form[phx-change="search"]/) + |> render_change(search: %{search_term: ""}) =~ ammo_type.bullet_type assert_patch(index_live, Routes.ammo_type_index_path(conn, :index)) end @@ -114,8 +163,8 @@ defmodule CanneryWeb.AmmoTypeLiveTest do {:ok, _view, html} = index_live - |> form("#ammo_type-form", ammo_type: @create_attrs) - |> render_submit() + |> form("#ammo_type-form") + |> render_submit(ammo_type: @create_attrs) |> follow_redirect(conn, Routes.ammo_type_index_path(conn, :index)) ammo_type = ammo_type.id |> Ammo.get_ammo_type!(current_user) @@ -138,8 +187,8 @@ defmodule CanneryWeb.AmmoTypeLiveTest do {:ok, _view, html} = index_live - |> form("#ammo_type-form", ammo_type: @update_attrs) - |> render_submit() + |> form("#ammo_type-form") + |> render_submit(ammo_type: @update_attrs) |> follow_redirect(conn, Routes.ammo_type_index_path(conn, :index)) ammo_type = ammo_type.id |> Ammo.get_ammo_type!(current_user) @@ -163,8 +212,8 @@ defmodule CanneryWeb.AmmoTypeLiveTest do {:ok, _view, html} = index_live - |> form("#ammo_type-form", ammo_type: @create_attrs) - |> render_submit() + |> form("#ammo_type-form") + |> render_submit(ammo_type: @create_attrs) |> follow_redirect(conn, Routes.ammo_type_index_path(conn, :index)) ammo_type = ammo_type.id |> Ammo.get_ammo_type!(current_user) @@ -188,10 +237,10 @@ defmodule CanneryWeb.AmmoTypeLiveTest do {:ok, _view, html} = index_live - |> form("#ammo_type-form", + |> form("#ammo_type-form") + |> render_submit( ammo_type: Map.merge(@create_attrs, %{"bullet_type" => "some updated bullet_type"}) ) - |> render_submit() |> follow_redirect(conn, Routes.ammo_type_index_path(conn, :index)) ammo_type = ammo_type.id |> Ammo.get_ammo_type!(current_user) @@ -276,8 +325,8 @@ defmodule CanneryWeb.AmmoTypeLiveTest do {:ok, _view, html} = show_live - |> form("#ammo_type-form", ammo_type: @update_attrs) - |> render_submit() + |> form("#ammo_type-form") + |> render_submit(ammo_type: @update_attrs) |> follow_redirect(conn, Routes.ammo_type_show_path(conn, :show, ammo_type)) ammo_type = ammo_type.id |> Ammo.get_ammo_type!(current_user) diff --git a/test/cannery_web/live/container_live_test.exs b/test/cannery_web/live/container_live_test.exs index 2955c3a..567fb54 100644 --- a/test/cannery_web/live/container_live_test.exs +++ b/test/cannery_web/live/container_live_test.exs @@ -6,7 +6,7 @@ defmodule CanneryWeb.ContainerLiveTest do use CanneryWeb.ConnCase import Phoenix.LiveViewTest import CanneryWeb.Gettext - alias Cannery.{Containers, Repo} + alias Cannery.Containers @moduletag :container_live_test @@ -34,10 +34,6 @@ defmodule CanneryWeb.ContainerLiveTest do "notes" => "some ammo group", "count" => 20 } - @shot_group_attrs %{ - "notes" => "some shot group", - "count" => 20 - } # @invalid_attrs %{desc: nil, location: nil, name: nil, type: nil} @@ -53,15 +49,6 @@ defmodule CanneryWeb.ContainerLiveTest do %{ammo_type: ammo_type, ammo_group: ammo_group} end - defp create_empty_ammo_group(%{container: container, current_user: current_user}) do - ammo_type = ammo_type_fixture(@ammo_type_attrs, current_user) - {1, [ammo_group]} = ammo_group_fixture(@ammo_group_attrs, ammo_type, container, current_user) - shot_group = shot_group_fixture(@shot_group_attrs, current_user, ammo_group) - ammo_group = ammo_group |> Repo.reload!() - - %{ammo_type: ammo_type, ammo_group: ammo_group, shot_group: shot_group} - end - describe "Index" do setup [:register_and_log_in_user, :create_container] @@ -263,6 +250,60 @@ defmodule CanneryWeb.ContainerLiveTest do assert html =~ dgettext("prompts", "%{name} updated successfully", name: container.name) assert html =~ "some updated location" end + + test "can sort by type", + %{conn: conn, container: container, current_user: current_user} do + rifle_type = ammo_type_fixture(%{"type" => "rifle"}, current_user) + {1, [rifle_ammo_group]} = ammo_group_fixture(rifle_type, container, current_user) + shotgun_type = ammo_type_fixture(%{"type" => "shotgun"}, current_user) + {1, [shotgun_ammo_group]} = ammo_group_fixture(shotgun_type, container, current_user) + pistol_type = ammo_type_fixture(%{"type" => "pistol"}, current_user) + {1, [pistol_ammo_group]} = ammo_group_fixture(pistol_type, container, current_user) + + {:ok, index_live, html} = live(conn, Routes.container_show_path(conn, :show, container)) + + assert html =~ "All" + + assert html =~ rifle_ammo_group.ammo_type.name + assert html =~ shotgun_ammo_group.ammo_type.name + assert html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :rifle}) + + assert html =~ rifle_ammo_group.ammo_type.name + refute html =~ shotgun_ammo_group.ammo_type.name + refute html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :shotgun}) + + refute html =~ rifle_ammo_group.ammo_type.name + assert html =~ shotgun_ammo_group.ammo_type.name + refute html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :pistol}) + + refute html =~ rifle_ammo_group.ammo_type.name + refute html =~ shotgun_ammo_group.ammo_type.name + assert html =~ pistol_ammo_group.ammo_type.name + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :all}) + + assert html =~ rifle_ammo_group.ammo_type.name + assert html =~ shotgun_ammo_group.ammo_type.name + assert html =~ pistol_ammo_group.ammo_type.name + end end describe "Show with ammo group" do @@ -289,47 +330,4 @@ defmodule CanneryWeb.ContainerLiveTest do assert html =~ "\n20\n" end end - - describe "Show with empty ammo group" do - setup [:register_and_log_in_user, :create_container, :create_empty_ammo_group] - - test "hides empty ammo groups by default", - %{conn: conn, ammo_type: %{name: ammo_type_name}, container: container} do - {:ok, show_live, html} = live(conn, Routes.container_show_path(conn, :show, container)) - - assert html =~ dgettext("actions", "Show used") - refute html =~ "\n20\n" - - html = - show_live - |> element(~s/input[type="checkbox"][aria-labelledby="toggle_show_used-label"}]/) - |> render_click() - - assert html =~ ammo_type_name - assert html =~ "\n20\n" - assert html =~ "Empty" - end - - test "displays empty ammo groups in table on toggle", - %{conn: conn, ammo_type: %{name: ammo_type_name}, container: container} do - {:ok, show_live, _html} = live(conn, Routes.container_show_path(conn, :show, container)) - - html = - show_live - |> element(~s/input[type="checkbox"][aria-labelledby="toggle_table-label"}]/) - |> render_click() - - assert html =~ dgettext("actions", "Show used") - refute html =~ "\n20\n" - - html = - show_live - |> element(~s/input[type="checkbox"][aria-labelledby="toggle_show_used-label"}]/) - |> render_click() - - assert html =~ ammo_type_name - assert html =~ "\n20\n" - assert html =~ "Empty" - end - end end diff --git a/test/cannery_web/live/range_live_test.exs b/test/cannery_web/live/range_live_test.exs index 45768cc..b0c8cdb 100644 --- a/test/cannery_web/live/range_live_test.exs +++ b/test/cannery_web/live/range_live_test.exs @@ -24,7 +24,12 @@ defmodule CanneryWeb.RangeLiveTest do %{"count" => 5, "date" => ~N[2022-02-13 03:17:00], "notes" => "some notes"} |> shot_group_fixture(current_user, ammo_group) - %{shot_group: shot_group, ammo_group: ammo_group} + [ + container: container, + ammo_type: ammo_type, + ammo_group: ammo_group, + shot_group: shot_group + ] end describe "Index" do @@ -37,6 +42,71 @@ defmodule CanneryWeb.RangeLiveTest do assert html =~ shot_group.notes end + test "can sort by type", + %{conn: conn, container: container, current_user: current_user} do + rifle_ammo_type = ammo_type_fixture(%{"type" => "rifle"}, current_user) + {1, [rifle_ammo_group]} = ammo_group_fixture(rifle_ammo_type, container, current_user) + + rifle_shot_group = + shot_group_fixture(%{"notes" => "group_one"}, current_user, rifle_ammo_group) + + shotgun_ammo_type = ammo_type_fixture(%{"type" => "shotgun"}, current_user) + {1, [shotgun_ammo_group]} = ammo_group_fixture(shotgun_ammo_type, container, current_user) + + shotgun_shot_group = + shot_group_fixture(%{"notes" => "group_two"}, current_user, shotgun_ammo_group) + + pistol_ammo_type = ammo_type_fixture(%{"type" => "pistol"}, current_user) + {1, [pistol_ammo_group]} = ammo_group_fixture(pistol_ammo_type, container, current_user) + + pistol_shot_group = + shot_group_fixture(%{"notes" => "group_three"}, current_user, pistol_ammo_group) + + {:ok, index_live, html} = live(conn, Routes.range_index_path(conn, :index)) + + assert html =~ "All" + + assert html =~ rifle_shot_group.notes + assert html =~ shotgun_shot_group.notes + assert html =~ pistol_shot_group.notes + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :rifle}) + + assert html =~ rifle_shot_group.notes + refute html =~ shotgun_shot_group.notes + refute html =~ pistol_shot_group.notes + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :shotgun}) + + refute html =~ rifle_shot_group.notes + assert html =~ shotgun_shot_group.notes + refute html =~ pistol_shot_group.notes + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :pistol}) + + refute html =~ rifle_shot_group.notes + refute html =~ shotgun_shot_group.notes + assert html =~ pistol_shot_group.notes + + html = + index_live + |> form(~s/form[phx-change="change_type"]/) + |> render_change(ammo_type: %{type: :all}) + + assert html =~ rifle_shot_group.notes + assert html =~ shotgun_shot_group.notes + assert html =~ pistol_shot_group.notes + end + test "can search for shot_group", %{conn: conn, shot_group: shot_group} do {:ok, index_live, html} = live(conn, Routes.range_index_path(conn, :index)) diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index f35a6fd..e1f7af4 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -26,7 +26,7 @@ defmodule CanneryWeb.ConnCase do import Plug.Conn import Phoenix.ConnTest # credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse - import Cannery.Fixtures + import Cannery.{DataCase, Fixtures} import CanneryWeb.ConnCase alias CanneryWeb.Router.Helpers, as: Routes diff --git a/test/support/data_case.ex b/test/support/data_case.ex index 9884d0d..cd74662 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -48,4 +48,15 @@ defmodule Cannery.DataCase do end) end) end + + @doc """ + Generates a random string of any length, default of 12 + """ + @spec random_string(length :: non_neg_integer()) :: String.t() + def random_string(length \\ 12) do + :crypto.strong_rand_bytes(length) |> Base.url_encode64() |> binary_part(0, length) + end + + def unique_user_email, do: "user#{System.unique_integer()}@example.com" + def valid_user_password, do: "hello world!" end diff --git a/test/support/fixtures.ex b/test/support/fixtures.ex index acfab21..f1418b9 100644 --- a/test/support/fixtures.ex +++ b/test/support/fixtures.ex @@ -3,6 +3,8 @@ defmodule Cannery.Fixtures do This module defines test helpers for creating entities """ + import Cannery.DataCase + alias Cannery.{ Accounts, Accounts.User, @@ -17,9 +19,6 @@ defmodule Cannery.Fixtures do Repo } - def unique_user_email, do: "user#{System.unique_integer()}@example.com" - def valid_user_password, do: "hello world!" - @spec user_fixture() :: User.t() @spec user_fixture(attrs :: map()) :: User.t() def user_fixture(attrs \\ %{}) do @@ -79,7 +78,7 @@ defmodule Cannery.Fixtures do |> Enum.into(%{ "count" => 20, "date" => ~N[2022-02-13 03:17:00], - "notes" => "some notes" + "notes" => random_string() }) |> Cannery.ActivityLog.create_shot_group(user, ammo_group) |> unwrap_ok_tuple() @@ -92,7 +91,7 @@ defmodule Cannery.Fixtures do @spec container_fixture(attrs :: map(), User.t()) :: Container.t() def container_fixture(attrs \\ %{}, %User{} = user) do attrs - |> Enum.into(%{"name" => "My container", "type" => "Ammo can"}) + |> Enum.into(%{"name" => random_string(), "type" => "Ammo can"}) |> Containers.create_container(user) |> unwrap_ok_tuple() end @@ -104,7 +103,7 @@ defmodule Cannery.Fixtures do @spec ammo_type_fixture(attrs :: map(), User.t()) :: AmmoType.t() def ammo_type_fixture(attrs \\ %{}, %User{} = user) do attrs - |> Enum.into(%{"name" => "ammo_type"}) + |> Enum.into(%{"name" => random_string(), "type" => "rifle"}) |> Ammo.create_ammo_type(user) |> unwrap_ok_tuple() end @@ -150,7 +149,7 @@ defmodule Cannery.Fixtures do attrs |> Enum.into(%{ "bg_color" => "#100000", - "name" => "some name", + "name" => random_string(), "text_color" => "#000000" }) |> Containers.create_tag(user)