1 Commits

Author SHA1 Message Date
14ff08dc09 update paths
All checks were successful
continuous-integration/drone/push Build is passing
2022-07-01 00:29:33 -04:00
61 changed files with 728 additions and 1201 deletions

View File

@ -1,13 +1,6 @@
# v0.5.4 # v0.5.4
- Rename "Ammo" tab to "Catalog", and "Manage" tab is now "Ammo" - Rename "Ammo" tab to "Catalog", and "Manage" tab is now "Ammo"
- Ammo groups are now just referred to as Ammo or "Packs" - Ammo groups are now just referred to as Ammo
- URL paths now reflect new names
- Add pack and round count to container information
- Add cute logo >:3 Thank you [kalli](https://twitter.com/t0kkuro)!
- Add note about deleting an ammo type deleting all ammo of that type as well
- Prompt to create first ammo type before trying to create first ammo
- Add note about creating unlimited invites
- Update screenshot lol
# v0.5.3 # v0.5.3
- Update French translation: Thank you [duponin](https://udongein.xyz/users/duponin)! - Update French translation: Thank you [duponin](https://udongein.xyz/users/duponin)!

View File

@ -143,4 +143,3 @@ Thank you so much for your contributions!
- shibao (https://misskey.bubbletea.dev/@shibao) - shibao (https://misskey.bubbletea.dev/@shibao)
- kaia (https://shitposter.club/users/kaia) - kaia (https://shitposter.club/users/kaia)
- duponin (https://udongein.xyz/users/duponin) - duponin (https://udongein.xyz/users/duponin)
- kalli (https://twitter.com/t0kkuro)

View File

@ -1,7 +1,6 @@
# Cannery # Cannery
![logo](https://gitea.bubbletea.dev/shibao/cannery/raw/branch/stable/assets/static/images/cannery.png) ![screenshot](https://gitea.bubbletea.dev/shibao/cannery/raw/branch/stable/home.png)
![old screenshot](https://gitea.bubbletea.dev/shibao/cannery/raw/branch/stable/home.png)
The self-hosted firearm tracker website. The self-hosted firearm tracker website.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 516 KiB

BIN
home.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -4,7 +4,8 @@ defmodule Cannery.ActivityLog do
""" """
import Ecto.Query, warn: false import Ecto.Query, warn: false
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo} import CanneryWeb.Gettext
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo, Ammo.AmmoGroup, Repo}
alias Ecto.{Changeset, Multi} alias Ecto.{Changeset, Multi}
@doc """ @doc """
@ -59,30 +60,32 @@ defmodule Cannery.ActivityLog do
""" """
@spec create_shot_group(attrs :: map(), User.t(), AmmoGroup.t()) :: @spec create_shot_group(attrs :: map(), User.t(), AmmoGroup.t()) ::
{:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil} {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil}
def create_shot_group(attrs, user, ammo_group) do def create_shot_group(
Multi.new() attrs,
|> Multi.insert( %User{id: user_id},
:create_shot_group, %AmmoGroup{id: ammo_group_id, count: ammo_group_count, user_id: user_id} = ammo_group
%ShotGroup{} |> ShotGroup.create_changeset(user, ammo_group, attrs) ) do
) attrs = attrs |> Map.merge(%{"user_id" => user_id, "ammo_group_id" => ammo_group_id})
|> Multi.run( changeset = %ShotGroup{} |> ShotGroup.create_changeset(attrs)
:ammo_group, shot_group_count = changeset |> Changeset.get_field(:count)
fn repo, %{create_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} ->
{:ok, if shot_group_count > ammo_group_count do
repo.one(from ag in AmmoGroup, where: ag.id == ^ammo_group_id and ag.user_id == ^user_id)} error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
end changeset = changeset |> Changeset.add_error(:count, error)
) {:error, changeset}
|> Multi.update( else
:update_ammo_group, Multi.new()
fn %{create_shot_group: %{count: shot_group_count}, ammo_group: %{count: ammo_group_count}} -> |> Multi.insert(:create_shot_group, changeset)
|> Multi.update(
:update_ammo_group,
ammo_group |> AmmoGroup.range_changeset(%{"count" => ammo_group_count - shot_group_count}) ammo_group |> AmmoGroup.range_changeset(%{"count" => ammo_group_count - shot_group_count})
)
|> Repo.transaction()
|> case do
{:ok, %{create_shot_group: shot_group}} -> {:ok, shot_group}
{:error, :create_shot_group, changeset, _changes_so_far} -> {:error, changeset}
{:error, _other_transaction, _value, _changes_so_far} -> {:error, nil}
end end
)
|> Repo.transaction()
|> case do
{:ok, %{create_shot_group: shot_group}} -> {:ok, shot_group}
{:error, :create_shot_group, changeset, _changes_so_far} -> {:error, changeset}
{:error, _other_transaction, _value, _changes_so_far} -> {:error, nil}
end end
end end
@ -101,38 +104,42 @@ defmodule Cannery.ActivityLog do
@spec update_shot_group(ShotGroup.t(), attrs :: map(), User.t()) :: @spec update_shot_group(ShotGroup.t(), attrs :: map(), User.t()) ::
{:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil} {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil}
def update_shot_group( def update_shot_group(
%ShotGroup{count: count, user_id: user_id} = shot_group, %ShotGroup{count: count, user_id: user_id, ammo_group_id: ammo_group_id} = shot_group,
attrs, attrs,
%User{id: user_id} = user %User{id: user_id} = user
) do ) do
Multi.new() %{count: ammo_group_count, user_id: ^user_id} =
|> Multi.update( ammo_group = ammo_group_id |> Ammo.get_ammo_group!(user)
:update_shot_group,
shot_group |> ShotGroup.update_changeset(user, attrs) changeset = shot_group |> ShotGroup.update_changeset(attrs)
) new_shot_group_count = changeset |> Changeset.get_field(:count)
|> Multi.run( shot_diff_to_add = new_shot_group_count - count
:ammo_group,
fn repo, %{update_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} -> cond do
{:ok, shot_diff_to_add > ammo_group_count ->
repo.one(from ag in AmmoGroup, where: ag.id == ^ammo_group_id and ag.user_id == ^user_id)} error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
end changeset = changeset |> Changeset.add_error(:count, error)
) {:error, changeset}
|> Multi.update(
:update_ammo_group, new_shot_group_count <= 0 ->
fn %{ error = dgettext("errors", "Count must be at least 1")
update_shot_group: %{count: new_count}, changeset = changeset |> Changeset.add_error(:count, error)
ammo_group: %{count: ammo_group_count} = ammo_group {:error, changeset}
} ->
shot_diff_to_add = new_count - count true ->
new_ammo_group_count = ammo_group_count - shot_diff_to_add Multi.new()
ammo_group |> AmmoGroup.range_changeset(%{"count" => new_ammo_group_count}) |> Multi.update(:update_shot_group, changeset)
end |> Multi.update(
) :update_ammo_group,
|> Repo.transaction() ammo_group
|> case do |> AmmoGroup.range_changeset(%{"count" => ammo_group_count - shot_diff_to_add})
{:ok, %{update_shot_group: shot_group}} -> {:ok, shot_group} )
{:error, :update_shot_group, changeset, _changes_so_far} -> {:error, changeset} |> Repo.transaction()
{:error, _other_transaction, _value, _changes_so_far} -> {:error, nil} |> case do
{:ok, %{update_shot_group: shot_group}} -> {:ok, shot_group}
{:error, :update_shot_group, changeset, _changes_so_far} -> {:error, changeset}
{:error, _other_transaction, _value, _changes_so_far} -> {:error, nil}
end
end end
end end
@ -151,27 +158,18 @@ defmodule Cannery.ActivityLog do
@spec delete_shot_group(ShotGroup.t(), User.t()) :: @spec delete_shot_group(ShotGroup.t(), User.t()) ::
{:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t())} {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t())}
def delete_shot_group( def delete_shot_group(
%ShotGroup{user_id: user_id} = shot_group, %ShotGroup{count: count, user_id: user_id, ammo_group_id: ammo_group_id} = shot_group,
%User{id: user_id} %User{id: user_id} = user
) do ) do
%{count: ammo_group_count, user_id: ^user_id} =
ammo_group = ammo_group_id |> Ammo.get_ammo_group!(user)
Multi.new() Multi.new()
|> Multi.delete(:delete_shot_group, shot_group) |> Multi.delete(:delete_shot_group, shot_group)
|> Multi.run(
:ammo_group,
fn repo, %{delete_shot_group: %{ammo_group_id: ammo_group_id, user_id: user_id}} ->
{:ok,
repo.one(from ag in AmmoGroup, where: ag.id == ^ammo_group_id and ag.user_id == ^user_id)}
end
)
|> Multi.update( |> Multi.update(
:update_ammo_group, :update_ammo_group,
fn %{ ammo_group
delete_shot_group: %{count: count}, |> AmmoGroup.range_changeset(%{"count" => ammo_group_count + count})
ammo_group: %{count: ammo_group_count} = ammo_group
} ->
new_ammo_group_count = ammo_group_count + count
ammo_group |> AmmoGroup.range_changeset(%{"count" => new_ammo_group_count})
end
) )
|> Repo.transaction() |> Repo.transaction()
|> case do |> case do
@ -180,4 +178,21 @@ defmodule Cannery.ActivityLog do
{:error, _other_transaction, _value, _changes_so_far} -> {:error, nil} {:error, _other_transaction, _value, _changes_so_far} -> {:error, nil}
end end
end end
@doc """
Returns an `%Ecto.Changeset{}` for tracking shot_group changes.
## Examples
iex> change_shot_group(shot_group)
%Ecto.Changeset{data: %ShotGroup{}}
"""
@spec change_shot_group(ShotGroup.t() | ShotGroup.new_shot_group()) ::
Changeset.t(ShotGroup.t() | ShotGroup.new_shot_group())
@spec change_shot_group(ShotGroup.t() | ShotGroup.new_shot_group(), attrs :: map()) ::
Changeset.t(ShotGroup.t() | ShotGroup.new_shot_group())
def change_shot_group(%ShotGroup{} = shot_group, attrs \\ %{}) do
shot_group |> ShotGroup.update_changeset(attrs)
end
end end

View File

@ -4,9 +4,8 @@ defmodule Cannery.ActivityLog.ShotGroup do
""" """
use Ecto.Schema use Ecto.Schema
import CanneryWeb.Gettext
import Ecto.Changeset import Ecto.Changeset
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo} alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup}
alias Ecto.{Changeset, UUID} alias Ecto.{Changeset, UUID}
@primary_key {:id, :binary_id, autogenerate: true} @primary_key {:id, :binary_id, autogenerate: true}
@ -38,84 +37,21 @@ defmodule Cannery.ActivityLog.ShotGroup do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset( @spec create_changeset(new_shot_group(), attrs :: map()) :: Changeset.t(new_shot_group())
new_shot_group(), def create_changeset(shot_group, attrs) do
User.t() | any(),
AmmoGroup.t() | any(),
attrs :: map()
) ::
Changeset.t(new_shot_group())
def create_changeset(
shot_group,
%User{id: user_id},
%AmmoGroup{id: ammo_group_id, user_id: user_id} = ammo_group,
attrs
)
when not (user_id |> is_nil()) and not (ammo_group_id |> is_nil()) do
shot_group shot_group
|> change(user_id: user_id) |> cast(attrs, [:count, :notes, :date, :ammo_group_id, :user_id])
|> change(ammo_group_id: ammo_group_id)
|> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0)
|> validate_create_shot_group_count(ammo_group)
|> validate_required([:count, :ammo_group_id, :user_id])
end
def create_changeset(shot_group, _invalid_user, _invalid_ammo_group, attrs) do
shot_group
|> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0) |> validate_number(:count, greater_than: 0)
|> validate_required([:count, :ammo_group_id, :user_id]) |> validate_required([:count, :ammo_group_id, :user_id])
|> add_error(:invalid, dgettext("errors", "Please select a valid user and ammo group"))
end
defp validate_create_shot_group_count(changeset, %AmmoGroup{count: ammo_group_count}) do
if changeset |> Changeset.get_field(:count) > ammo_group_count do
error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
changeset |> Changeset.add_error(:count, error)
else
changeset
end
end end
@doc false @doc false
@spec update_changeset(t() | new_shot_group(), User.t(), attrs :: map()) :: @spec update_changeset(t() | new_shot_group(), attrs :: map()) ::
Changeset.t(t() | new_shot_group()) Changeset.t(t() | new_shot_group())
def update_changeset( def update_changeset(shot_group, attrs) do
%ShotGroup{user_id: user_id} = shot_group,
%User{id: user_id} = user,
attrs
)
when not (user_id |> is_nil()) do
shot_group shot_group
|> cast(attrs, [:count, :notes, :date]) |> cast(attrs, [:count, :notes, :date])
|> validate_number(:count, greater_than: 0) |> validate_number(:count, greater_than: 0)
|> validate_required([:count]) |> validate_required([:count])
|> validate_update_shot_group_count(shot_group, user)
end
defp validate_update_shot_group_count(
changeset,
%ShotGroup{count: count} = shot_group,
%User{id: user_id}
)
when not (user_id |> is_nil()) do
%{ammo_group: %AmmoGroup{count: ammo_group_count, user_id: ^user_id}} =
shot_group |> Repo.preload(:ammo_group)
new_shot_group_count = changeset |> Changeset.get_field(:count)
shot_diff_to_add = new_shot_group_count - count
cond do
shot_diff_to_add > ammo_group_count ->
error = dgettext("errors", "Count must be less than %{count}", count: ammo_group_count)
changeset |> Changeset.add_error(:count, error)
new_shot_group_count <= 0 ->
changeset |> Changeset.add_error(:count, dgettext("errors", "Count must be at least 1"))
true ->
changeset
end
end end
end end

View File

@ -3,7 +3,6 @@ defmodule Cannery.Ammo do
The Ammo context. The Ammo context.
""" """
import CanneryWeb.Gettext
import Ecto.Query, warn: false import Ecto.Query, warn: false
alias Cannery.{Accounts.User, Containers, Repo} alias Cannery.{Accounts.User, Containers, Repo}
alias Cannery.ActivityLog.ShotGroup alias Cannery.ActivityLog.ShotGroup
@ -25,25 +24,6 @@ defmodule Cannery.Ammo do
def list_ammo_types(%User{id: user_id}), def list_ammo_types(%User{id: user_id}),
do: Repo.all(from at in AmmoType, where: at.user_id == ^user_id, order_by: at.name) do: Repo.all(from at in AmmoType, where: at.user_id == ^user_id, order_by: at.name)
@doc """
Returns a count of ammo_types.
## Examples
iex> get_ammo_types_count!(%User{id: 123})
3
"""
@spec get_ammo_types_count!(User.t()) :: integer()
def get_ammo_types_count!(%User{id: user_id}) do
Repo.one(
from at in AmmoType,
where: at.user_id == ^user_id,
select: count(at.id),
distinct: true
)
end
@doc """ @doc """
Gets a single ammo_type. Gets a single ammo_type.
@ -160,8 +140,11 @@ defmodule Cannery.Ammo do
""" """
@spec create_ammo_type(attrs :: map(), User.t()) :: @spec create_ammo_type(attrs :: map(), User.t()) ::
{:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.new_ammo_type())} {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.new_ammo_type())}
def create_ammo_type(attrs \\ %{}, %User{} = user), def create_ammo_type(attrs \\ %{}, %User{id: user_id}) do
do: %AmmoType{} |> AmmoType.create_changeset(user, attrs) |> Repo.insert() %AmmoType{}
|> AmmoType.create_changeset(attrs |> Map.put("user_id", user_id))
|> Repo.insert()
end
@doc """ @doc """
Updates a ammo_type. Updates a ammo_type.
@ -210,6 +193,22 @@ defmodule Cannery.Ammo do
def delete_ammo_type!(%AmmoType{user_id: user_id} = ammo_type, %User{id: user_id}), def delete_ammo_type!(%AmmoType{user_id: user_id} = ammo_type, %User{id: user_id}),
do: ammo_type |> Repo.delete!() do: ammo_type |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking ammo_type changes.
## Examples
iex> change_ammo_type(ammo_type)
%Changeset{data: %AmmoType{}}
"""
@spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type()) ::
Changeset.t(AmmoType.t() | AmmoType.new_ammo_type())
@spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type(), attrs :: map()) ::
Changeset.t(AmmoType.t() | AmmoType.new_ammo_type())
def change_ammo_type(%AmmoType{} = ammo_type, attrs \\ %{}),
do: AmmoType.update_changeset(ammo_type, attrs)
@doc """ @doc """
Returns the list of ammo_groups for a user and type. Returns the list of ammo_groups for a user and type.
@ -351,21 +350,18 @@ defmodule Cannery.Ammo do
def create_ammo_groups( def create_ammo_groups(
%{"ammo_type_id" => ammo_type_id, "container_id" => container_id} = attrs, %{"ammo_type_id" => ammo_type_id, "container_id" => container_id} = attrs,
multiplier, multiplier,
%User{} = user %User{id: user_id} = user
) )
when multiplier >= 1 and multiplier <= @ammo_group_create_limit and when multiplier >= 1 and multiplier <= @ammo_group_create_limit do
not (ammo_type_id |> is_nil()) and not (container_id |> is_nil()) do # validate ammo type and container ids belong to user
_valid_ammo_type = get_ammo_type!(ammo_type_id, user)
_valid_container = Containers.get_container!(container_id, user)
now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second)
changesets = changesets =
Enum.map(1..multiplier, fn _count -> Enum.map(1..multiplier, fn _count ->
%AmmoGroup{} %AmmoGroup{} |> AmmoGroup.create_changeset(attrs |> Map.put("user_id", user_id))
|> AmmoGroup.create_changeset(
get_ammo_type!(ammo_type_id, user),
Containers.get_container!(container_id, user),
user,
attrs
)
end) end)
if changesets |> Enum.all?(fn %{valid?: valid} -> valid end) do if changesets |> Enum.all?(fn %{valid?: valid} -> valid end) do
@ -390,27 +386,8 @@ defmodule Cannery.Ammo do
end end
end end
def create_ammo_groups( def create_ammo_groups(invalid_attrs, _multiplier, _user) do
%{"ammo_type_id" => ammo_type_id, "container_id" => container_id} = attrs, {:error, %AmmoGroup{} |> AmmoGroup.create_changeset(invalid_attrs)}
_multiplier,
user
)
when not (ammo_type_id |> is_nil()) and not (container_id |> is_nil()) do
changeset =
%AmmoGroup{}
|> AmmoGroup.create_changeset(
get_ammo_type!(ammo_type_id, user),
Containers.get_container!(container_id, user),
user,
attrs
)
|> Changeset.add_error(:multiplier, dgettext("errors", "Invalid multiplier"))
{:error, changeset}
end
def create_ammo_groups(invalid_attrs, _multiplier, user) do
{:error, %AmmoGroup{} |> AmmoGroup.create_changeset(nil, nil, user, invalid_attrs)}
end end
@doc """ @doc """
@ -459,4 +436,18 @@ defmodule Cannery.Ammo do
@spec delete_ammo_group!(AmmoGroup.t(), User.t()) :: AmmoGroup.t() @spec delete_ammo_group!(AmmoGroup.t(), User.t()) :: AmmoGroup.t()
def delete_ammo_group!(%AmmoGroup{user_id: user_id} = ammo_group, %User{id: user_id}), def delete_ammo_group!(%AmmoGroup{user_id: user_id} = ammo_group, %User{id: user_id}),
do: ammo_group |> Repo.delete!() do: ammo_group |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking ammo_group changes.
## Examples
iex> change_ammo_group(ammo_group)
%Changeset{data: %AmmoGroup{}}
"""
@spec change_ammo_group(AmmoGroup.t()) :: Changeset.t(AmmoGroup.t())
@spec change_ammo_group(AmmoGroup.t(), attrs :: map()) :: Changeset.t(AmmoGroup.t())
def change_ammo_group(%AmmoGroup{} = ammo_group, attrs \\ %{}),
do: AmmoGroup.update_changeset(ammo_group, attrs)
end end

View File

@ -7,7 +7,6 @@ defmodule Cannery.Ammo.AmmoGroup do
""" """
use Ecto.Schema use Ecto.Schema
import CanneryWeb.Gettext
import Ecto.Changeset import Ecto.Changeset
alias Cannery.Ammo.{AmmoGroup, AmmoType} alias Cannery.Ammo.{AmmoGroup, AmmoType}
alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Containers.Container} alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Containers.Container}
@ -49,49 +48,22 @@ defmodule Cannery.Ammo.AmmoGroup do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset( @spec create_changeset(new_ammo_group(), attrs :: map()) :: Changeset.t(new_ammo_group())
new_ammo_group(), def create_changeset(ammo_group, attrs) do
AmmoType.t() | nil,
Container.t() | nil,
User.t(),
attrs :: map()
) :: Changeset.t(new_ammo_group())
def create_changeset(
ammo_group,
%AmmoType{id: ammo_type_id},
%Container{id: container_id, user_id: user_id},
%User{id: user_id},
attrs
)
when not (ammo_type_id |> is_nil()) and not (container_id |> is_nil()) and
not (user_id |> is_nil()) do
ammo_group ammo_group
|> change(ammo_type_id: ammo_type_id) |> cast(attrs, [:count, :price_paid, :notes, :staged, :ammo_type_id, :container_id, :user_id])
|> change(user_id: user_id)
|> change(container_id: container_id)
|> cast(attrs, [:count, :price_paid, :notes, :staged])
|> validate_number(:count, greater_than: 0) |> validate_number(:count, greater_than: 0)
|> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id]) |> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id])
end end
@doc """
Invalid changeset, used to prompt user to select ammo type and container
"""
def create_changeset(ammo_group, _invalid_ammo_type, _invalid_container, _invalid_user, attrs) do
ammo_group
|> cast(attrs, [:ammo_type_id, :container_id])
|> validate_required([:ammo_type_id, :container_id])
|> add_error(:invalid, dgettext("errors", "Please select an ammo type and container"))
end
@doc false @doc false
@spec update_changeset(t() | new_ammo_group(), attrs :: map()) :: @spec update_changeset(t() | new_ammo_group(), attrs :: map()) ::
Changeset.t(t() | new_ammo_group()) Changeset.t(t() | new_ammo_group())
def update_changeset(ammo_group, attrs) do def update_changeset(ammo_group, attrs) do
ammo_group ammo_group
|> cast(attrs, [:count, :price_paid, :notes, :staged]) |> cast(attrs, [:count, :price_paid, :notes, :staged, :ammo_type_id, :container_id])
|> validate_number(:count, greater_than_or_equal_to: 0) |> validate_number(:count, greater_than_or_equal_to: 0)
|> validate_required([:count, :staged]) |> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id])
end end
@doc """ @doc """
@ -103,6 +75,6 @@ defmodule Cannery.Ammo.AmmoGroup do
def range_changeset(ammo_group, attrs) do def range_changeset(ammo_group, attrs) do
ammo_group ammo_group
|> cast(attrs, [:count, :staged]) |> cast(attrs, [:count, :staged])
|> validate_required([:count, :staged]) |> validate_required([:count, :staged, :ammo_type_id, :container_id, :user_id])
end end
end end

View File

@ -105,12 +105,10 @@ defmodule Cannery.Ammo.AmmoType do
] ]
@doc false @doc false
@spec create_changeset(new_ammo_type(), User.t(), attrs :: map()) :: @spec create_changeset(new_ammo_type(), attrs :: map()) :: Changeset.t(new_ammo_type())
Changeset.t(new_ammo_type()) def create_changeset(ammo_type, attrs) do
def create_changeset(ammo_type, %User{id: user_id}, attrs) do
ammo_type ammo_type
|> change(user_id: user_id) |> cast(attrs, [:user_id | changeset_fields()])
|> cast(attrs, changeset_fields())
|> validate_required([:name, :user_id]) |> validate_required([:name, :user_id])
end end
@ -120,6 +118,6 @@ defmodule Cannery.Ammo.AmmoType do
def update_changeset(ammo_type, attrs) do def update_changeset(ammo_type, attrs) do
ammo_type ammo_type
|> cast(attrs, changeset_fields()) |> cast(attrs, changeset_fields())
|> validate_required(:name) |> validate_required([:name, :user_id])
end end
end end

View File

@ -30,25 +30,6 @@ defmodule Cannery.Containers do
) )
end end
@doc """
Returns a count of containers.
## Examples
iex> get_containers_count!(%User{id: 123})
3
"""
@spec get_containers_count!(User.t()) :: integer()
def get_containers_count!(%User{id: user_id}) do
Repo.one(
from c in Container,
where: c.user_id == ^user_id,
select: count(c.id),
distinct: true
)
end
@doc """ @doc """
Gets a single container. Gets a single container.
@ -90,8 +71,9 @@ defmodule Cannery.Containers do
""" """
@spec create_container(attrs :: map(), User.t()) :: @spec create_container(attrs :: map(), User.t()) ::
{:ok, Container.t()} | {:error, Changeset.t(Container.new_container())} {:ok, Container.t()} | {:error, Changeset.t(Container.new_container())}
def create_container(attrs, %User{} = user) do def create_container(attrs, %User{id: user_id}) do
%Container{} |> Container.create_changeset(user, attrs) |> Repo.insert() attrs = attrs |> Map.put("user_id", user_id)
%Container{} |> Container.create_changeset(attrs) |> Repo.insert()
end end
@doc """ @doc """
@ -140,7 +122,7 @@ defmodule Cannery.Containers do
error = dgettext("errors", "Container must be empty before deleting") error = dgettext("errors", "Container must be empty before deleting")
container container
|> Container.update_changeset(%{}) |> change_container()
|> Changeset.add_error(:ammo_groups, error) |> Changeset.add_error(:ammo_groups, error)
|> Changeset.apply_action(:delete) |> Changeset.apply_action(:delete)
end end
@ -161,6 +143,25 @@ defmodule Cannery.Containers do
container container
end end
@doc """
Returns an `%Changeset{}` for tracking container changes.
## Examples
iex> change_container(container)
%Changeset{data: %Container{}}
iex> change_container(%Changeset{})
%Changeset{data: %Container{}}
"""
@spec change_container(Container.t() | Container.new_container()) ::
Changeset.t(Container.t() | Container.new_container())
@spec change_container(Container.t() | Container.new_container(), attrs :: map()) ::
Changeset.t(Container.t() | Container.new_container())
def change_container(container, attrs \\ %{}),
do: container |> Container.update_changeset(attrs)
@doc """ @doc """
Adds a tag to a container Adds a tag to a container
@ -172,11 +173,14 @@ defmodule Cannery.Containers do
""" """
@spec add_tag!(Container.t(), Tag.t(), User.t()) :: ContainerTag.t() @spec add_tag!(Container.t(), Tag.t(), User.t()) :: ContainerTag.t()
def add_tag!( def add_tag!(
%Container{user_id: user_id} = container, %Container{id: container_id, user_id: user_id},
%Tag{user_id: user_id} = tag, %Tag{id: tag_id, user_id: user_id},
%User{id: user_id} %User{id: user_id}
), ) do
do: %ContainerTag{} |> ContainerTag.create_changeset(tag, container) |> Repo.insert!() %ContainerTag{}
|> ContainerTag.changeset(%{"container_id" => container_id, "tag_id" => tag_id})
|> Repo.insert!()
end
@doc """ @doc """
Removes a tag from a container Removes a tag from a container
@ -203,18 +207,6 @@ defmodule Cannery.Containers do
if count == 0, do: raise("could not delete container tag"), else: count if count == 0, do: raise("could not delete container tag"), else: count
end end
@doc """
Returns number of rounds in container. If data is already preloaded, then
there will be no db hit.
"""
@spec get_container_ammo_group_count!(Container.t()) :: non_neg_integer()
def get_container_ammo_group_count!(%Container{} = container) do
container
|> Repo.preload(:ammo_groups)
|> Map.fetch!(:ammo_groups)
|> Enum.count()
end
@doc """ @doc """
Returns number of rounds in container. If data is already preloaded, then Returns number of rounds in container. If data is already preloaded, then
there will be no db hit. there will be no db hit.

View File

@ -42,12 +42,10 @@ defmodule Cannery.Containers.Container do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset(new_container(), User.t(), attrs :: map()) :: @spec create_changeset(new_container(), attrs :: map()) :: Changeset.t(new_container())
Changeset.t(new_container()) def create_changeset(container, attrs) do
def create_changeset(container, %User{id: user_id}, attrs) do
container container
|> change(user_id: user_id) |> cast(attrs, [:name, :desc, :type, :location, :user_id])
|> cast(attrs, [:name, :desc, :type, :location])
|> validate_required([:name, :type, :user_id]) |> validate_required([:name, :type, :user_id])
end end
@ -57,6 +55,6 @@ defmodule Cannery.Containers.Container do
def update_changeset(container, attrs) do def update_changeset(container, attrs) do
container container
|> cast(attrs, [:name, :desc, :type, :location]) |> cast(attrs, [:name, :desc, :type, :location])
|> validate_required([:name, :type]) |> validate_required([:name, :type, :user_id])
end end
end end

View File

@ -31,16 +31,10 @@ defmodule Cannery.Containers.ContainerTag do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset(new_container_tag(), Tag.t(), Container.t()) :: @spec changeset(new_container_tag(), attrs :: map()) :: Changeset.t(new_container_tag())
Changeset.t(new_container_tag()) def changeset(container_tag, attrs) do
def create_changeset(
container_tag,
%Tag{id: tag_id, user_id: user_id},
%Container{id: container_id, user_id: user_id}
) do
container_tag container_tag
|> change(tag_id: tag_id) |> cast(attrs, [:tag_id, :container_id])
|> change(container_id: container_id)
|> validate_required([:tag_id, :container_id]) |> validate_required([:tag_id, :container_id])
end end
end end

View File

@ -100,13 +100,15 @@ defmodule Cannery.Invites do
""" """
@spec create_invite(User.t(), attrs :: map()) :: @spec create_invite(User.t(), attrs :: map()) ::
{:ok, Invite.t()} | {:error, Changeset.t(Invite.new_invite())} {:ok, Invite.t()} | {:error, Changeset.t(Invite.new_invite())}
def create_invite(%User{role: :admin} = user, attrs) do def create_invite(%User{id: user_id, role: :admin}, attrs) do
token = token =
:crypto.strong_rand_bytes(@invite_token_length) :crypto.strong_rand_bytes(@invite_token_length)
|> Base.url_encode64() |> Base.url_encode64()
|> binary_part(0, @invite_token_length) |> binary_part(0, @invite_token_length)
%Invite{} |> Invite.create_changeset(user, token, attrs) |> Repo.insert() attrs = attrs |> Map.merge(%{"user_id" => user_id, "token" => token})
%Invite{} |> Invite.create_changeset(attrs) |> Repo.insert()
end end
@doc """ @doc """
@ -153,4 +155,19 @@ defmodule Cannery.Invites do
""" """
@spec delete_invite!(Invite.t(), User.t()) :: Invite.t() @spec delete_invite!(Invite.t(), User.t()) :: Invite.t()
def delete_invite!(invite, %User{role: :admin}), do: invite |> Repo.delete!() def delete_invite!(invite, %User{role: :admin}), do: invite |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking invite changes.
## Examples
iex> change_invite(invite)
%Changeset{data: %Invite{}}
"""
@spec change_invite(Invite.t() | Invite.new_invite()) ::
Changeset.t(Invite.t() | Invite.new_invite())
@spec change_invite(Invite.t() | Invite.new_invite(), attrs :: map()) ::
Changeset.t(Invite.t() | Invite.new_invite())
def change_invite(invite, attrs \\ %{}), do: invite |> Invite.update_changeset(attrs)
end end

View File

@ -38,12 +38,10 @@ defmodule Cannery.Invites.Invite do
@type id :: UUID.t() @type id :: UUID.t()
@doc false @doc false
@spec create_changeset(new_invite(), User.t(), token :: binary(), attrs :: map()) :: @spec create_changeset(new_invite(), attrs :: map()) :: Changeset.t(new_invite())
Changeset.t(new_invite()) def create_changeset(invite, attrs) do
def create_changeset(invite, %User{id: user_id}, token, attrs) do
invite invite
|> change(token: token, user_id: user_id) |> cast(attrs, [:name, :token, :uses_left, :disabled_at, :user_id])
|> cast(attrs, [:name, :uses_left, :disabled_at])
|> validate_required([:name, :token, :user_id]) |> validate_required([:name, :token, :user_id])
|> validate_number(:uses_left, greater_than_or_equal_to: 0) |> validate_number(:uses_left, greater_than_or_equal_to: 0)
end end
@ -53,7 +51,7 @@ defmodule Cannery.Invites.Invite do
def update_changeset(invite, attrs) do def update_changeset(invite, attrs) do
invite invite
|> cast(attrs, [:name, :uses_left, :disabled_at]) |> cast(attrs, [:name, :uses_left, :disabled_at])
|> validate_required([:name]) |> validate_required([:name, :token, :user_id])
|> validate_number(:uses_left, greater_than_or_equal_to: 0) |> validate_number(:uses_left, greater_than_or_equal_to: 0)
end end
end end

View File

@ -74,8 +74,8 @@ defmodule Cannery.Tags do
""" """
@spec create_tag(attrs :: map(), User.t()) :: @spec create_tag(attrs :: map(), User.t()) ::
{:ok, Tag.t()} | {:error, Changeset.t(Tag.new_tag())} {:ok, Tag.t()} | {:error, Changeset.t(Tag.new_tag())}
def create_tag(attrs, %User{} = user), def create_tag(attrs, %User{id: user_id}),
do: %Tag{} |> Tag.create_changeset(user, attrs) |> Repo.insert() do: %Tag{} |> Tag.create_changeset(attrs |> Map.put("user_id", user_id)) |> Repo.insert()
@doc """ @doc """
Updates a tag. Updates a tag.
@ -121,6 +121,20 @@ defmodule Cannery.Tags do
@spec delete_tag!(Tag.t(), User.t()) :: Tag.t() @spec delete_tag!(Tag.t(), User.t()) :: Tag.t()
def delete_tag!(%Tag{user_id: user_id} = tag, %User{id: user_id}), do: tag |> Repo.delete!() def delete_tag!(%Tag{user_id: user_id} = tag, %User{id: user_id}), do: tag |> Repo.delete!()
@doc """
Returns an `%Changeset{}` for tracking tag changes.
## Examples
iex> change_tag(tag)
%Changeset{data: %Tag{}}
"""
@spec change_tag(Tag.t() | Tag.new_tag()) :: Changeset.t(Tag.t() | Tag.new_tag())
@spec change_tag(Tag.t() | Tag.new_tag(), attrs :: map()) ::
Changeset.t(Tag.t() | Tag.new_tag())
def change_tag(tag, attrs \\ %{}), do: Tag.update_changeset(tag, attrs)
@doc """ @doc """
Get a random tag bg_color in `#ffffff` hex format Get a random tag bg_color in `#ffffff` hex format

View File

@ -35,11 +35,10 @@ defmodule Cannery.Tags.Tag do
@type id() :: UUID.t() @type id() :: UUID.t()
@doc false @doc false
@spec create_changeset(new_tag(), User.t(), attrs :: map()) :: Changeset.t(new_tag()) @spec create_changeset(new_tag(), attrs :: map()) :: Changeset.t(new_tag())
def create_changeset(tag, %User{id: user_id}, attrs) do def create_changeset(tag, attrs) do
tag tag
|> change(user_id: user_id) |> cast(attrs, [:name, :bg_color, :text_color, :user_id])
|> cast(attrs, [:name, :bg_color, :text_color])
|> validate_required([:name, :bg_color, :text_color, :user_id]) |> validate_required([:name, :bg_color, :text_color, :user_id])
end end
@ -48,6 +47,6 @@ defmodule Cannery.Tags.Tag do
def update_changeset(tag, attrs) do def update_changeset(tag, attrs) do
tag tag
|> cast(attrs, [:name, :bg_color, :text_color]) |> cast(attrs, [:name, :bg_color, :text_color])
|> validate_required([:name, :bg_color, :text_color]) |> validate_required([:name, :bg_color, :text_color, :user_id])
end end
end end

View File

@ -16,10 +16,9 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
}, },
Socket.t() Socket.t()
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{ammo_group: ammo_group, current_user: current_user} = assigns, socket) do def update(%{ammo_group: _ammo_group, current_user: _current_user} = assigns, socket) do
changeset = changeset =
%ShotGroup{date: NaiveDateTime.utc_now(), count: 1} %ShotGroup{date: NaiveDateTime.utc_now(), count: 1} |> ActivityLog.change_shot_group()
|> ShotGroup.create_changeset(current_user, ammo_group, %{})
{:ok, socket |> assign(assigns) |> assign(:changeset, changeset)} {:ok, socket |> assign(assigns) |> assign(:changeset, changeset)}
end end
@ -28,13 +27,21 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
def handle_event( def handle_event(
"validate", "validate",
%{"shot_group" => shot_group_params}, %{"shot_group" => shot_group_params},
%{assigns: %{ammo_group: ammo_group, current_user: current_user}} = socket %{
assigns: %{
ammo_group: %AmmoGroup{id: ammo_group_id} = ammo_group,
current_user: %User{id: user_id}
}
} = socket
) do ) do
params = shot_group_params |> process_params(ammo_group) shot_group_params =
shot_group_params
|> process_params(ammo_group)
|> Map.merge(%{"ammo_group_id" => ammo_group_id, "user_id" => user_id})
changeset = changeset =
%ShotGroup{} %ShotGroup{}
|> ShotGroup.create_changeset(current_user, ammo_group, params) |> ActivityLog.change_shot_group(shot_group_params)
|> Map.put(:action, :validate) |> Map.put(:action, :validate)
{:noreply, socket |> assign(:changeset, changeset)} {:noreply, socket |> assign(:changeset, changeset)}
@ -44,12 +51,17 @@ defmodule CanneryWeb.Components.AddShotGroupComponent do
"save", "save",
%{"shot_group" => shot_group_params}, %{"shot_group" => shot_group_params},
%{ %{
assigns: %{ammo_group: ammo_group, current_user: current_user, return_to: return_to} assigns: %{
ammo_group: %{id: ammo_group_id} = ammo_group,
current_user: %{id: user_id} = current_user,
return_to: return_to
}
} = socket } = socket
) do ) do
socket = socket =
shot_group_params shot_group_params
|> process_params(ammo_group) |> process_params(ammo_group)
|> Map.merge(%{"ammo_group_id" => ammo_group_id, "user_id" => user_id})
|> ActivityLog.create_shot_group(current_user, ammo_group) |> ActivityLog.create_shot_group(current_user, ammo_group)
|> case do |> case do
{:ok, _shot_group} -> {:ok, _shot_group} ->

View File

@ -45,12 +45,7 @@ defmodule CanneryWeb.Components.ContainerCard do
</span> </span>
<% end %> <% end %>
<%= unless @container.ammo_groups |> Enum.empty?() do %> <%= if @container.ammo_groups do %>
<span class="rounded-lg title text-lg">
<%= gettext("Packs:") %>
<%= @container |> Containers.get_container_ammo_group_count!() %>
</span>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Rounds:") %> <%= gettext("Rounds:") %>
<%= @container |> Containers.get_container_rounds!() %> <%= @container |> Containers.get_container_rounds!() %>

View File

@ -22,7 +22,7 @@ defmodule CanneryWeb.Components.MoveAmmoGroupComponent do
assigns, assigns,
socket socket
) do ) do
changeset = ammo_group |> AmmoGroup.update_changeset(%{}) changeset = Ammo.change_ammo_group(ammo_group)
containers = containers =
Containers.list_containers(current_user) Containers.list_containers(current_user)

View File

@ -16,16 +16,10 @@ defmodule CanneryWeb.Components.Topbar do
<nav role="navigation" class="mb-8 px-8 py-4 w-full bg-primary-400"> <nav role="navigation" class="mb-8 px-8 py-4 w-full bg-primary-400">
<div class="flex flex-col sm:flex-row justify-between items-center"> <div class="flex flex-col sm:flex-row justify-between items-center">
<div class="mb-4 sm:mb-0 sm:mr-8 flex flex-row justify-start items-center space-x-2"> <div class="mb-4 sm:mb-0 sm:mr-8 flex flex-row justify-start items-center space-x-2">
<%= live_redirect to: Routes.live_path(Endpoint, HomeLive), <%= live_redirect("Cannery",
class: "inline mx-2 my-1 leading-5 text-xl text-white" to: Routes.live_path(Endpoint, HomeLive),
do %> class: "mx-2 my-1 leading-5 text-xl text-white hover:underline"
<img ) %>
src={Routes.static_path(Endpoint, "/images/cannery.svg")}
alt={gettext("Cannery logo")}
class="inline-block h-8 mx-1"
/>
<h1 class="inline hover:underline">Cannery</h1>
<% end %>
<%= if @title_content do %> <%= if @title_content do %>
<span class="mx-2 my-1"> <span class="mx-2 my-1">

View File

@ -21,30 +21,38 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
end end
@spec update(Socket.t()) :: {:ok, Socket.t()} @spec update(Socket.t()) :: {:ok, Socket.t()}
def update(%{assigns: %{current_user: current_user}} = socket) do def update(%{assigns: %{ammo_group: ammo_group, current_user: current_user}} = socket) do
%{assigns: %{ammo_types: ammo_types, containers: containers}} = socket =
socket =
socket socket
|> assign(:ammo_group_create_limit, @ammo_group_create_limit) |> assign(:ammo_group_create_limit, @ammo_group_create_limit)
|> assign(:changeset, Ammo.change_ammo_group(ammo_group))
|> assign(:ammo_types, Ammo.list_ammo_types(current_user)) |> assign(:ammo_types, Ammo.list_ammo_types(current_user))
|> assign_new(:containers, fn -> Containers.list_containers(current_user) end) |> assign_new(:containers, fn -> Containers.list_containers(current_user) end)
params = {:ok, socket}
if ammo_types |> List.first() |> is_nil(),
do: %{},
else: %{} |> Map.put("ammo_type_id", ammo_types |> List.first() |> Map.get(:id))
params =
if containers |> List.first() |> is_nil(),
do: params,
else: params |> Map.put("container_id", containers |> List.first() |> Map.get(:id))
{:ok, socket |> assign_changeset(params)}
end end
@impl true @impl true
def handle_event("validate", %{"ammo_group" => ammo_group_params}, socket) do def handle_event(
{:noreply, socket |> assign_changeset(ammo_group_params)} "validate",
%{"ammo_group" => ammo_group_params},
%{assigns: %{action: action, ammo_group: ammo_group}} = socket
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset = ammo_group |> Ammo.change_ammo_group(ammo_group_params)
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
{:noreply, socket |> assign(:changeset, changeset)}
end end
def handle_event( def handle_event(
@ -68,44 +76,6 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do
# Save Helpers # Save Helpers
defp assign_changeset(
%{assigns: %{action: action, ammo_group: ammo_group, current_user: user}} = socket,
ammo_group_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new ->
ammo_type =
if ammo_group_params |> Map.has_key?("ammo_type_id"),
do: ammo_group_params |> Map.get("ammo_type_id") |> Ammo.get_ammo_type!(user),
else: nil
container =
if ammo_group_params |> Map.has_key?("container_id"),
do: ammo_group_params |> Map.get("container_id") |> Containers.get_container!(user),
else: nil
ammo_group |> AmmoGroup.create_changeset(ammo_type, container, user, ammo_group_params)
:edit ->
ammo_group |> AmmoGroup.update_changeset(ammo_group_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
defp save_ammo_group( defp save_ammo_group(
%{assigns: %{ammo_group: ammo_group, current_user: current_user, return_to: return_to}} = %{assigns: %{ammo_group: ammo_group, current_user: current_user, return_to: return_to}} =
socket, socket,

View File

@ -74,8 +74,7 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do
ammo_groups = Ammo.list_ammo_groups(current_user) |> Repo.preload([:ammo_type, :container]) ammo_groups = Ammo.list_ammo_groups(current_user) |> Repo.preload([:ammo_type, :container])
ammo_types_count = Ammo.get_ammo_types_count!(current_user) containers = Containers.list_containers(current_user)
containers_count = Containers.get_containers_count!(current_user)
columns = [ columns = [
%{label: gettext("Ammo type"), key: "ammo_type"}, %{label: gettext("Ammo type"), key: "ammo_type"},
@ -93,13 +92,7 @@ defmodule CanneryWeb.AmmoGroupLive.Index do
|> Enum.map(fn ammo_group -> ammo_group |> get_row_data_for_ammo_group(columns) end) |> Enum.map(fn ammo_group -> ammo_group |> get_row_data_for_ammo_group(columns) end)
socket socket
|> assign( |> assign(ammo_groups: ammo_groups, containers: containers, columns: columns, rows: rows)
ammo_groups: ammo_groups,
ammo_types_count: ammo_types_count,
containers_count: containers_count,
columns: columns,
rows: rows
)
end end
@spec get_row_data_for_ammo_group(AmmoGroup.t(), [map()]) :: [map()] @spec get_row_data_for_ammo_group(AmmoGroup.t(), [map()]) :: [map()]

View File

@ -8,10 +8,8 @@
<%= gettext("No Ammo") %> <%= gettext("No Ammo") %>
<%= display_emoji("😔") %> <%= display_emoji("😔") %>
</h2> </h2>
<% end %>
<%= cond do %> <%= if @containers |> Enum.empty?() do %>
<% @containers_count == 0 -> %>
<div class="flex justify-center items-center"> <div class="flex justify-center items-center">
<h2 class="m-2 title text-md text-primary-600"> <h2 class="m-2 title text-md text-primary-600">
<%= dgettext("prompts", "You'll need to") %> <%= dgettext("prompts", "You'll need to") %>
@ -22,30 +20,31 @@
class: "btn btn-primary" class: "btn btn-primary"
) %> ) %>
</div> </div>
<% @ammo_types_count == 0 -> %> <% else %>
<%= live_patch(dgettext("actions", "Add your first box!"),
to: Routes.ammo_group_index_path(Endpoint, :new),
class: "btn btn-primary"
) %>
<% end %>
<% else %>
<%= if @containers |> Enum.empty?() do %>
<div class="flex justify-center items-center"> <div class="flex justify-center items-center">
<h2 class="m-2 title text-md text-primary-600"> <h2 class="m-2 title text-md text-primary-600">
<%= dgettext("prompts", "You'll need to") %> <%= dgettext("prompts", "You'll need to") %>
</h2> </h2>
<%= live_patch(dgettext("actions", "add an ammo type first"), <%= live_patch(dgettext("actions", "add a container first"),
to: Routes.ammo_type_index_path(Endpoint, :new), to: Routes.container_index_path(Endpoint, :new),
class: "btn btn-primary" class: "btn btn-primary"
) %> ) %>
</div> </div>
<% @ammo_groups |> Enum.empty?() -> %> <% else %>
<%= live_patch(dgettext("actions", "Add your first box!"),
to: Routes.ammo_group_index_path(Endpoint, :new),
class: "btn btn-primary"
) %>
<% true -> %>
<%= live_patch(dgettext("actions", "Add Ammo"), <%= live_patch(dgettext("actions", "Add Ammo"),
to: Routes.ammo_group_index_path(Endpoint, :new), to: Routes.ammo_group_index_path(Endpoint, :new),
class: "btn btn-primary" class: "btn btn-primary"
) %> ) %>
<% end %> <% end %>
<%= unless @ammo_groups |> Enum.empty?() do %>
<.live_component <.live_component
module={CanneryWeb.Components.TableComponent} module={CanneryWeb.Components.TableComponent}
id="ammo_groups_index_table" id="ammo_groups_index_table"
@ -67,6 +66,7 @@
ammo_group={@ammo_group} ammo_group={@ammo_group}
return_to={Routes.ammo_group_index_path(Endpoint, :index)} return_to={Routes.ammo_group_index_path(Endpoint, :index)}
current_user={@current_user} current_user={@current_user}
containers={@containers}
/> />
</.modal> </.modal>
<% @live_action == :add_shot_group -> %> <% @live_action == :add_shot_group -> %>

View File

@ -13,13 +13,17 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
%{:ammo_type => AmmoType.t(), :current_user => User.t(), optional(any) => any}, %{:ammo_type => AmmoType.t(), :current_user => User.t(), optional(any) => any},
Socket.t() Socket.t()
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{current_user: _current_user} = assigns, socket) do def update(%{ammo_type: ammo_type, current_user: _current_user} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign_changeset(%{})} {:ok, socket |> assign(assigns) |> assign(:changeset, Ammo.change_ammo_type(ammo_type))}
end end
@impl true @impl true
def handle_event("validate", %{"ammo_type" => ammo_type_params}, socket) do def handle_event(
{:noreply, socket |> assign_changeset(ammo_type_params)} "validate",
%{"ammo_type" => ammo_type_params},
%{assigns: %{ammo_type: ammo_type}} = socket
) do
{:noreply, socket |> assign(:changeset, ammo_type |> Ammo.change_ammo_type(ammo_type_params))}
end end
def handle_event( def handle_event(
@ -30,31 +34,6 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do
save_ammo_type(socket, action, ammo_type_params) save_ammo_type(socket, action, ammo_type_params)
end end
defp assign_changeset(
%{assigns: %{action: action, ammo_type: ammo_type, current_user: user}} = socket,
ammo_type_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> ammo_type |> AmmoType.create_changeset(user, ammo_type_params)
:edit -> ammo_type |> AmmoType.update_changeset(ammo_type_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(changeset: changeset)
end
defp save_ammo_type( defp save_ammo_type(
%{assigns: %{ammo_type: ammo_type, current_user: current_user, return_to: return_to}} = %{assigns: %{ammo_type: ammo_type, current_user: current_user, return_to: return_to}} =
socket, socket,

View File

@ -137,7 +137,7 @@ defmodule CanneryWeb.AmmoTypeLive.Index do
phx_click: "delete", phx_click: "delete",
phx_value_id: ammo_type.id, phx_value_id: ammo_type.id,
data: [ data: [
confirm: dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: ammo_type.name), confirm: dgettext("prompts", "Are you sure you want to delete this ammo?"),
qa: "delete-#{ammo_type.id}" qa: "delete-#{ammo_type.id}"
] do %> ] do %>
<i class="fa-lg fas fa-trash"></i> <i class="fa-lg fas fa-trash"></i>

View File

@ -24,7 +24,7 @@
phx_click: "delete", phx_click: "delete",
data: [ data: [
confirm: confirm:
dgettext("prompts", "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!", name: @ammo_type.name), dgettext("prompts", "Are you sure you want to delete %{name}?", name: @ammo_type.name),
qa: "delete" qa: "delete"
] do %> ] do %>
<i class="fa-fw fa-lg fas fa-trash"></i> <i class="fa-fw fa-lg fas fa-trash"></i>

View File

@ -13,13 +13,18 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
%{:container => Container.t(), :current_user => User.t(), optional(any) => any}, %{:container => Container.t(), :current_user => User.t(), optional(any) => any},
Socket.t() Socket.t()
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{container: _container} = assigns, socket) do def update(%{container: container} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign_changeset(%{})} {:ok, socket |> assign(assigns) |> assign(:changeset, Containers.change_container(container))}
end end
@impl true @impl true
def handle_event("validate", %{"container" => container_params}, socket) do def handle_event(
{:noreply, socket |> assign_changeset(container_params)} "validate",
%{"container" => container_params},
%{assigns: %{container: container}} = socket
) do
changeset = container |> Containers.change_container(container_params)
{:noreply, socket |> assign(:changeset, changeset)}
end end
def handle_event( def handle_event(
@ -30,31 +35,6 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
save_container(socket, action, container_params) save_container(socket, action, container_params)
end end
defp assign_changeset(
%{assigns: %{action: action, container: container, current_user: user}} = socket,
container_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> container |> Container.create_changeset(user, container_params)
:edit -> container |> Container.update_changeset(container_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
defp save_container( defp save_container(
%{assigns: %{container: container, current_user: current_user, return_to: return_to}} = %{assigns: %{container: container, current_user: current_user, return_to: return_to}} =
socket, socket,

View File

@ -22,18 +22,6 @@
</span> </span>
<% end %> <% end %>
<%= unless @container.ammo_groups |> Enum.empty?() do %>
<span class="rounded-lg title text-lg">
<%= gettext("Packs:") %>
<%= @container |> Containers.get_container_ammo_group_count!() %>
</span>
<span class="rounded-lg title text-lg">
<%= gettext("Rounds:") %>
<%= @container |> Containers.get_container_rounds!() %>
</span>
<% end %>
<div class="flex space-x-4 justify-center items-center text-primary-600"> <div class="flex space-x-4 justify-center items-center text-primary-600">
<%= live_patch to: Routes.container_show_path(Endpoint, :edit, @container), <%= live_patch to: Routes.container_show_path(Endpoint, :edit, @container),
class: "text-primary-600 link", class: "text-primary-600 link",

View File

@ -5,7 +5,6 @@ defmodule CanneryWeb.HomeLive do
use CanneryWeb, :live_view use CanneryWeb, :live_view
alias Cannery.Accounts alias Cannery.Accounts
alias CanneryWeb.Endpoint
@impl true @impl true
def mount(_params, _session, socket) do def mount(_params, _session, socket) do
@ -37,13 +36,6 @@ defmodule CanneryWeb.HomeLive do
def render(assigns) do def render(assigns) do
~H""" ~H"""
<div class="mx-auto px-8 sm:px-16 flex flex-col justify-center items-center text-center space-y-4 max-w-3xl"> <div class="mx-auto px-8 sm:px-16 flex flex-col justify-center items-center text-center space-y-4 max-w-3xl">
<img
src={Routes.static_path(Endpoint, "/images/cannery.svg")}
alt={gettext("Cannery logo")}
class="inline-block w-32 hover:-mt-2 hover:mb-2 transition-all duration-500 ease-in-out"
title={gettext("isn't he cute >:3")}
/>
<h1 class="title text-primary-600 text-2xl"> <h1 class="title text-primary-600 text-2xl">
<%= gettext("Welcome to %{name}", name: "Cannery") %> <%= gettext("Welcome to %{name}", name: "Cannery") %>
</h1> </h1>
@ -134,7 +126,7 @@ defmodule CanneryWeb.HomeLive do
to: "https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md", to: "https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md",
target: "_blank", target: "_blank",
rel: "noopener noreferrer" do %> rel: "noopener noreferrer" do %>
<p>0.5.4</p> <p>0.5.3</p>
<i class="fas fa-md fa-info-circle"></i> <i class="fas fa-md fa-info-circle"></i>
<% end %> <% end %>
</li> </li>

View File

@ -13,44 +13,23 @@ defmodule CanneryWeb.InviteLive.FormComponent do
%{:invite => Invite.t(), :current_user => User.t(), optional(any) => any}, %{:invite => Invite.t(), :current_user => User.t(), optional(any) => any},
Socket.t() Socket.t()
) :: {:ok, Socket.t()} ) :: {:ok, Socket.t()}
def update(%{invite: _invite} = assigns, socket) do def update(%{invite: invite} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign_changeset(%{})} {:ok, socket |> assign(assigns) |> assign(:changeset, Invites.change_invite(invite))}
end end
@impl true @impl true
def handle_event("validate", %{"invite" => invite_params}, socket) do def handle_event(
{:noreply, socket |> assign_changeset(invite_params)} "validate",
%{"invite" => invite_params},
%{assigns: %{invite: invite}} = socket
) do
{:noreply, socket |> assign(:changeset, invite |> Invites.change_invite(invite_params))}
end end
def handle_event("save", %{"invite" => invite_params}, %{assigns: %{action: action}} = socket) do def handle_event("save", %{"invite" => invite_params}, %{assigns: %{action: action}} = socket) do
save_invite(socket, action, invite_params) save_invite(socket, action, invite_params)
end end
defp assign_changeset(
%{assigns: %{action: action, current_user: user, invite: invite}} = socket,
invite_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> invite |> Invite.create_changeset(user, "example_token", invite_params)
:edit -> invite |> Invite.update_changeset(invite_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
defp save_invite( defp save_invite(
%{assigns: %{current_user: current_user, invite: invite, return_to: return_to}} = socket, %{assigns: %{current_user: current_user, invite: invite, return_to: return_to}} = socket,
:edit, :edit,

View File

@ -24,9 +24,6 @@
<%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600") %> <%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %> <%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %>
<%= error_tag(f, :uses_left, "col-span-3") %> <%= error_tag(f, :uses_left, "col-span-3") %>
<span class="col-span-3 text-primary-400 italic text-center">
<%= gettext("Leave \"Uses left\" blank to make invite unlimited") %>
</span>
<%= submit(dgettext("actions", "Save"), <%= submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3", class: "mx-auto btn btn-primary col-span-3",

View File

@ -1,6 +1,6 @@
defmodule CanneryWeb.RangeLive.FormComponent do defmodule CanneryWeb.RangeLive.FormComponent do
@moduledoc """ @moduledoc """
Livecomponent that can update a ShotGroup Livecomponent that can update or create a ShotGroup
""" """
use CanneryWeb, :live_component use CanneryWeb, :live_component
@ -24,7 +24,7 @@ defmodule CanneryWeb.RangeLive.FormComponent do
} = assigns, } = assigns,
socket socket
) do ) do
changeset = shot_group |> ShotGroup.update_changeset(current_user, %{}) changeset = shot_group |> ActivityLog.change_shot_group()
ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user) ammo_group = Ammo.get_ammo_group!(ammo_group_id, current_user)
{:ok, socket |> assign(assigns) |> assign(ammo_group: ammo_group, changeset: changeset)} {:ok, socket |> assign(assigns) |> assign(ammo_group: ammo_group, changeset: changeset)}
end end
@ -33,11 +33,11 @@ defmodule CanneryWeb.RangeLive.FormComponent do
def handle_event( def handle_event(
"validate", "validate",
%{"shot_group" => shot_group_params}, %{"shot_group" => shot_group_params},
%{assigns: %{current_user: current_user, shot_group: shot_group}} = socket %{assigns: %{shot_group: shot_group}} = socket
) do ) do
changeset = changeset =
shot_group shot_group
|> ShotGroup.update_changeset(current_user, shot_group_params) |> ActivityLog.change_shot_group(shot_group_params)
|> Map.put(:action, :validate) |> Map.put(:action, :validate)
{:noreply, assign(socket, :changeset, changeset)} {:noreply, assign(socket, :changeset, changeset)}

View File

@ -12,44 +12,19 @@ defmodule CanneryWeb.TagLive.FormComponent do
@impl true @impl true
@spec update(%{:tag => Tag.t(), :current_user => User.t(), optional(any) => any}, Socket.t()) :: @spec update(%{:tag => Tag.t(), :current_user => User.t(), optional(any) => any}, Socket.t()) ::
{:ok, Socket.t()} {:ok, Socket.t()}
def update(%{tag: _tag} = assigns, socket) do def update(%{tag: tag} = assigns, socket) do
{:ok, socket |> assign(assigns) |> assign_changeset(%{})} {:ok, socket |> assign(assigns) |> assign(:changeset, Tags.change_tag(tag))}
end end
@impl true @impl true
def handle_event("validate", %{"tag" => tag_params}, socket) do def handle_event("validate", %{"tag" => tag_params}, %{assigns: %{tag: tag}} = socket) do
{:noreply, socket |> assign_changeset(tag_params)} {:noreply, socket |> assign(:changeset, tag |> Tags.change_tag(tag_params))}
end end
def handle_event("save", %{"tag" => tag_params}, %{assigns: %{action: action}} = socket) do def handle_event("save", %{"tag" => tag_params}, %{assigns: %{action: action}} = socket) do
save_tag(socket, action, tag_params) save_tag(socket, action, tag_params)
end end
defp assign_changeset(
%{assigns: %{action: action, current_user: user, tag: tag}} = socket,
tag_params
) do
changeset_action =
case action do
:new -> :insert
:edit -> :update
end
changeset =
case action do
:new -> tag |> Tag.create_changeset(user, tag_params)
:edit -> tag |> Tag.update_changeset(tag_params)
end
changeset =
case changeset |> Changeset.apply_action(changeset_action) do
{:ok, _data} -> changeset
{:error, changeset} -> changeset
end
socket |> assign(:changeset, changeset)
end
@impl true @impl true
def render(assigns) do def render(assigns) do
~H""" ~H"""

View File

@ -4,7 +4,7 @@ defmodule Cannery.MixProject do
def project do def project do
[ [
app: :cannery, app: :cannery,
version: "0.5.4", version: "0.5.3",
elixir: "1.13.4", elixir: "1.13.4",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:gettext] ++ Mix.compilers(), compilers: [:gettext] ++ Mix.compilers(),

View File

@ -17,7 +17,7 @@ msgid "Add Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 #: lib/cannery_web/live/ammo_group_live/index.html.heex:24
msgid "Add your first box!" msgid "Add your first box!"
msgstr "" msgstr ""
@ -66,7 +66,7 @@ msgid "Invite someone new!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:112 #: lib/cannery_web/components/topbar.ex:106
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -97,7 +97,7 @@ msgid "New Tag"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105 #: lib/cannery_web/components/topbar.ex:99
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -124,9 +124,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:31 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:91 #: lib/cannery_web/live/tag_live/form_component.ex:66
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -136,7 +136,7 @@ msgid "Send instructions to reset password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:65 #: lib/cannery_web/live/container_live/show.html.heex:53
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
@ -156,7 +156,7 @@ msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151 #: lib/cannery_web/live/ammo_group_live/index.ex:144
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
@ -183,7 +183,8 @@ msgid "Copy to clipboard"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #: lib/cannery_web/live/ammo_group_live/index.html.heex:18
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "" msgstr ""
@ -206,8 +207,3 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -30,7 +30,7 @@ msgid "Add Ammo"
msgstr "Munition hinzufügen" msgstr "Munition hinzufügen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 #: lib/cannery_web/live/ammo_group_live/index.html.heex:24
msgid "Add your first box!" msgid "Add your first box!"
msgstr "Fügen Sie ihre erste Box hinzu!" msgstr "Fügen Sie ihre erste Box hinzu!"
@ -79,7 +79,7 @@ msgid "Invite someone new!"
msgstr "Laden Sie jemanden ein!" msgstr "Laden Sie jemanden ein!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:112 #: lib/cannery_web/components/topbar.ex:106
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -110,7 +110,7 @@ msgid "New Tag"
msgstr "Neuer Tag" msgstr "Neuer Tag"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105 #: lib/cannery_web/components/topbar.ex:99
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -137,9 +137,9 @@ msgstr "Passwort zurücksetzen"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:31 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:91 #: lib/cannery_web/live/tag_live/form_component.ex:66
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@ -149,7 +149,7 @@ msgid "Send instructions to reset password"
msgstr "Anleitung zum Passwort zurücksetzen zusenden" msgstr "Anleitung zum Passwort zurücksetzen zusenden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:65 #: lib/cannery_web/live/container_live/show.html.heex:53
msgid "Why not add one?" msgid "Why not add one?"
msgstr "Warum fügen Sie keine hinzu?" msgstr "Warum fügen Sie keine hinzu?"
@ -169,7 +169,7 @@ msgid "Why not get some ready to shoot?"
msgstr "Warum nicht einige für den Schießstand auswählen?" msgstr "Warum nicht einige für den Schießstand auswählen?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151 #: lib/cannery_web/live/ammo_group_live/index.ex:144
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
@ -196,7 +196,8 @@ msgid "Copy to clipboard"
msgstr "In die Zwischenablage kopieren" msgstr "In die Zwischenablage kopieren"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #: lib/cannery_web/live/ammo_group_live/index.html.heex:18
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "Zuerst einen Behälter hinzufügen" msgstr "Zuerst einen Behälter hinzufügen"
@ -219,8 +220,3 @@ msgstr "Sprache wechseln"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -24,14 +24,14 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:64 #: lib/cannery_web/live/home_live.ex:56
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
"Mit %{name} können Sie ihren Munitionsbestand vor und nach dem Schießen " "Mit %{name} können Sie ihren Munitionsbestand vor und nach dem Schießen "
"leicht im Auge behalten" "leicht im Auge behalten"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:86 #: lib/cannery_web/live/home_live.ex:78
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "Zugriff von jedem Internet-fähigen Gerät" msgstr "Zugriff von jedem Internet-fähigen Gerät"
@ -41,12 +41,12 @@ msgid "Admins"
msgstr "Admins" msgstr "Admins"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:100 #: lib/cannery_web/live/home_live.ex:92
msgid "Admins:" msgid "Admins:"
msgstr "Admins:" msgstr "Admins:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -54,7 +54,7 @@ msgstr "Munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:80
msgid "Ammo type" msgid "Ammo type"
msgstr "Munitionsarten" msgstr "Munitionsarten"
@ -65,7 +65,7 @@ msgid "Average Price paid"
msgstr "Durchschnittlicher Kaufpreis" msgstr "Durchschnittlicher Kaufpreis"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:54
msgid "Background color" msgid "Background color"
msgstr "Hintergrundfarbe" msgstr "Hintergrundfarbe"
@ -119,12 +119,12 @@ msgstr "Gehäusematerial"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Container" msgid "Container"
msgstr "Behälter" msgstr "Behälter"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -139,7 +139,7 @@ msgstr "Korrosiv"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Count" msgid "Count"
msgstr "Anzahl" msgstr "Anzahl"
@ -167,7 +167,7 @@ msgid "Disable"
msgstr "Deaktivieren" msgstr "Deaktivieren"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61 #: lib/cannery_web/live/home_live.ex:53
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "Einfache Anwendung:" msgstr "Einfache Anwendung:"
@ -222,7 +222,7 @@ msgid "Incendiary"
msgstr "Brandmunition" msgstr "Brandmunition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:95 #: lib/cannery_web/live/home_live.ex:87
msgid "Instance Information" msgid "Instance Information"
msgstr "Instanzinformationen" msgstr "Instanzinformationen"
@ -232,12 +232,12 @@ msgid "Invite Disabled"
msgstr "Einladung deaktiviert" msgstr "Einladung deaktiviert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:126 #: lib/cannery_web/live/home_live.ex:118
msgid "Invite Only" msgid "Invite Only"
msgstr "Nur mit Einladung" msgstr "Nur mit Einladung"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:75 #: lib/cannery_web/components/topbar.ex:69
#: lib/cannery_web/live/invite_live/index.ex:41 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites" msgid "Invites"
@ -287,7 +287,7 @@ msgstr "Meine coole Munitionskiste"
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75 #: lib/cannery_web/live/tag_live/form_component.ex:50
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@ -371,7 +371,7 @@ msgstr "Druck"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Price paid" msgid "Price paid"
msgstr "Kaufpreis" msgstr "Kaufpreis"
@ -388,17 +388,17 @@ msgid "Primer type"
msgstr "Zündertyp" msgstr "Zündertyp"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125 #: lib/cannery_web/live/home_live.ex:117
msgid "Public Signups" msgid "Public Signups"
msgstr "Öffentliche Registrierung" msgstr "Öffentliche Registrierung"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73 #: lib/cannery_web/live/home_live.ex:65
msgid "Secure:" msgid "Secure:"
msgstr "Sicher:" msgstr "Sicher:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76 #: lib/cannery_web/live/home_live.ex:68
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
"Hosten Sie Ihre eigene Instanz oder verwenden Sie eine Instanz, der Sie " "Hosten Sie Ihre eigene Instanz oder verwenden Sie eine Instanz, der Sie "
@ -421,7 +421,7 @@ msgid "Show Ammo type"
msgstr "Zeige Munitionsarten" msgstr "Zeige Munitionsarten"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83 #: lib/cannery_web/live/home_live.ex:75
msgid "Simple:" msgid "Simple:"
msgstr "Einfach:" msgstr "Einfach:"
@ -436,7 +436,7 @@ msgid "Stored in"
msgstr "Gelagert in" msgstr "Gelagert in"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:38
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -448,12 +448,12 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "Tags können zur besseren Ordnung einem Behälter hinzugefügt werden" msgstr "Tags können zur besseren Ordnung einem Behälter hinzugefügt werden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:85 #: lib/cannery_web/live/tag_live/form_component.ex:60
msgid "Text color" msgid "Text color"
msgstr "Textfarbe" msgstr "Textfarbe"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:52 #: lib/cannery_web/live/home_live.ex:44
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen" msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen"
@ -492,23 +492,23 @@ msgid "Uses left"
msgstr "Verbleibende Nutzung" msgstr "Verbleibende Nutzung"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:48 #: lib/cannery_web/live/home_live.ex:40
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "Willkommen %{name}" msgstr "Willkommen %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:77 #: lib/cannery_web/live/home_live.ex:69
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "Ihre Daten bleiben bei Ihnen, Punkt" msgstr "Ihre Daten bleiben bei Ihnen, Punkt"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:61 #: lib/cannery_web/live/container_live/show.html.heex:49
msgid "No tags for this container" msgid "No tags for this container"
msgstr "Keine Tags für diesen Behälter" msgstr "Keine Tags für diesen Behälter"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:68 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "Range" msgid "Range"
msgstr "Schießplatz" msgstr "Schießplatz"
@ -616,7 +616,7 @@ msgstr "Schießkladde"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:118
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -681,12 +681,12 @@ msgid "New password"
msgstr "Neues Passwort" msgstr "Neues Passwort"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Stage" msgid "Stage"
msgstr "Markiert" msgstr "Markiert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Unstage" msgid "Unstage"
msgstr "Demarkiert" msgstr "Demarkiert"
@ -720,8 +720,7 @@ msgid "Edit %{name} tags"
msgstr "Editiere %{name} Tags" msgstr "Editiere %{name} Tags"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "Patronen:" msgstr "Patronen:"
@ -737,7 +736,7 @@ msgid "No cost information"
msgstr "Keine Preisinformationen" msgstr "Keine Preisinformationen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "% left" msgid "% left"
msgstr "% verbleibend" msgstr "% verbleibend"
@ -823,7 +822,7 @@ msgid "Ammo types"
msgstr "Munitionsart" msgstr "Munitionsart"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Added on" msgid "Added on"
msgstr "Hinzugefügt am" msgstr "Hinzugefügt am"
@ -863,27 +862,27 @@ msgid "Language"
msgstr "Sprache" msgstr "Sprache"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:139
msgid "Get involved!" msgid "Get involved!"
msgstr "Mach mit!" msgstr "Mach mit!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164 #: lib/cannery_web/live/home_live.ex:156
msgid "Help translate" msgid "Help translate"
msgstr "Hilf beim Übersetzen" msgstr "Hilf beim Übersetzen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173 #: lib/cannery_web/live/home_live.ex:165
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "Sende Bugs oder Erweiterungsvorschläge" msgstr "Sende Bugs oder Erweiterungsvorschläge"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155 #: lib/cannery_web/live/home_live.ex:147
msgid "View the source code" msgid "View the source code"
msgstr "Quellcode ansehen" msgstr "Quellcode ansehen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
@ -899,7 +898,7 @@ msgid "Move Ammo"
msgstr "Munition verschieben" msgstr "Munition verschieben"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90 #: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "Keine Munitionsgruppe in diesem Behälter" msgstr "Keine Munitionsgruppe in diesem Behälter"
@ -912,25 +911,3 @@ msgstr "Zeige Munitionsarten"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108 #: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "Diese Munitionsgruppe ist nicht in einem Behälter" msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -24,7 +24,7 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140 #: lib/cannery/containers.ex:122
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "Behälter muss vor dem Löschen leer sein" msgstr "Behälter muss vor dem Löschen leer sein"
@ -152,13 +152,13 @@ msgid "Tag could not be added"
msgstr "Tag konnte nicht hinzugefügt werden" msgstr "Tag konnte nicht hinzugefügt werden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:115 #: lib/cannery/activity_log.ex:125
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "Anzahl muss mindestens 1 sein" msgstr "Anzahl muss mindestens 1 sein"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:74 #: lib/cannery/activity_log.ex:73
#: lib/cannery/activity_log/shot_group.ex:111 #: lib/cannery/activity_log.ex:120
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "Anzahl muss weniger als %{count} betragen" msgstr "Anzahl muss weniger als %{count} betragen"
@ -176,28 +176,13 @@ msgid "Tag could not be removed"
msgstr "Tag konnte nicht gelöscht werden" msgstr "Tag konnte nicht gelöscht werden"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:156 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "Konnte die Anzahl der Kopien nicht verstehen" msgstr "Konnte die Anzahl der Kopien nicht verstehen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:141 #: lib/cannery_web/live/ammo_group_live/form_component.ex:111
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
"Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War " "Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War "
"%{multiplier}" "%{multiplier}"
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -24,10 +24,10 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85 #: lib/cannery_web/live/ammo_type_live/form_component.ex:64
#: lib/cannery_web/live/container_live/form_component.ex:85 #: lib/cannery_web/live/container_live/form_component.ex:65
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:59
#: lib/cannery_web/live/tag_live/form_component.ex:126 #: lib/cannery_web/live/tag_live/form_component.ex:101
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} erfolgreich erstellt" msgstr "%{name} erfolgreich erstellt"
@ -62,10 +62,10 @@ msgid "%{name} updated succesfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:46
#: lib/cannery_web/live/container_live/form_component.ex:67 #: lib/cannery_web/live/container_live/form_component.ex:47
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:41
#: lib/cannery_web/live/tag_live/form_component.ex:108 #: lib/cannery_web/live/tag_live/form_component.ex:83
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} erfolgreich aktualisiert" msgstr "%{name} erfolgreich aktualisiert"
@ -88,8 +88,9 @@ msgstr ""
"zurückgenommen werden!" "zurückgenommen werden!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:37
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?" msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
@ -100,8 +101,9 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "Sind Sie sicher, dass sie die Einladung für %{name} löschen möchten?" msgstr "Sind Sie sicher, dass sie die Einladung für %{name} löschen möchten?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184 #: lib/cannery_web/live/ammo_group_live/index.ex:177
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "Sind Sie sicher, dass sie diese Munition löschen möchten?" msgstr "Sind Sie sicher, dass sie diese Munition löschen möchten?"
@ -111,7 +113,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?" msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:90 #: lib/cannery_web/components/topbar.ex:84
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "Wirklich ausloggen?" msgstr "Wirklich ausloggen?"
@ -160,7 +162,7 @@ msgid "Please check your email to verify your account"
msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto" msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:104 #: lib/cannery_web/live/home_live.ex:96
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "Registrieren Sie sich, um %{name} zu bearbeiten" msgstr "Registrieren Sie sich, um %{name} zu bearbeiten"
@ -169,9 +171,9 @@ msgstr "Registrieren Sie sich, um %{name} zu bearbeiten"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:33 #: lib/cannery_web/live/invite_live/form_component.html.heex:30
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:93 #: lib/cannery_web/live/tag_live/form_component.ex:68
msgid "Saving..." msgid "Saving..."
msgstr "Speichere..." msgstr "Speichere..."
@ -203,7 +205,7 @@ msgid "Adding..."
msgstr "Füge hinzu..." msgstr "Füge hinzu..."
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:68
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Schüsse erfolgreich dokumentiert" msgstr "Schüsse erfolgreich dokumentiert"
@ -250,8 +252,8 @@ msgid "%{name} removed successfully"
msgstr "%{name} erfolgreich entfernt" msgstr "%{name} erfolgreich entfernt"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17 #: lib/cannery_web/live/ammo_group_live/index.html.heex:15
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 #: lib/cannery_web/live/ammo_group_live/index.html.heex:33
msgid "You'll need to" msgid "You'll need to"
msgstr "Sie müssen" msgstr "Sie müssen"
@ -281,19 +283,13 @@ msgid "Ammo unstaged succesfully"
msgstr "Munition erfolgreich demarkiert" msgstr "Munition erfolgreich demarkiert"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "Munitionsgruppe erfolgreich aktualisiert" msgstr "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177 #: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "Munitionsgruppe erfolgreich aktualisiert" msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert" msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"

View File

@ -11,12 +11,12 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:64 #: lib/cannery_web/live/home_live.ex:56
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:86 #: lib/cannery_web/live/home_live.ex:78
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
@ -26,12 +26,12 @@ msgid "Admins"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:100 #: lib/cannery_web/live/home_live.ex:92
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -39,7 +39,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:80
msgid "Ammo type" msgid "Ammo type"
msgstr "" msgstr ""
@ -50,7 +50,7 @@ msgid "Average Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:54
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
@ -104,12 +104,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -124,7 +124,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Count" msgid "Count"
msgstr "" msgstr ""
@ -152,7 +152,7 @@ msgid "Disable"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61 #: lib/cannery_web/live/home_live.ex:53
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
@ -207,7 +207,7 @@ msgid "Incendiary"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:95 #: lib/cannery_web/live/home_live.ex:87
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
@ -217,12 +217,12 @@ msgid "Invite Disabled"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:126 #: lib/cannery_web/live/home_live.ex:118
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:75 #: lib/cannery_web/components/topbar.ex:69
#: lib/cannery_web/live/invite_live/index.ex:41 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites" msgid "Invites"
@ -272,7 +272,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75 #: lib/cannery_web/live/tag_live/form_component.ex:50
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@ -356,7 +356,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
@ -373,17 +373,17 @@ msgid "Primer type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125 #: lib/cannery_web/live/home_live.ex:117
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73 #: lib/cannery_web/live/home_live.ex:65
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76 #: lib/cannery_web/live/home_live.ex:68
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -404,7 +404,7 @@ msgid "Show Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83 #: lib/cannery_web/live/home_live.ex:75
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -419,7 +419,7 @@ msgid "Stored in"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:38
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -431,12 +431,12 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:85 #: lib/cannery_web/live/tag_live/form_component.ex:60
msgid "Text color" msgid "Text color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:52 #: lib/cannery_web/live/home_live.ex:44
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
@ -475,23 +475,23 @@ msgid "Uses left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:48 #: lib/cannery_web/live/home_live.ex:40
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:77 #: lib/cannery_web/live/home_live.ex:69
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:61 #: lib/cannery_web/live/container_live/show.html.heex:49
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:68 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -599,7 +599,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:118
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -664,12 +664,12 @@ msgid "New password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
@ -703,8 +703,7 @@ msgid "Edit %{name} tags"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
@ -720,7 +719,7 @@ msgid "No cost information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "% left" msgid "% left"
msgstr "" msgstr ""
@ -806,7 +805,7 @@ msgid "Ammo types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Added on" msgid "Added on"
msgstr "" msgstr ""
@ -846,27 +845,27 @@ msgid "Language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:139
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164 #: lib/cannery_web/live/home_live.ex:156
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173 #: lib/cannery_web/live/home_live.ex:165
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155 #: lib/cannery_web/live/home_live.ex:147
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
@ -882,7 +881,7 @@ msgid "Move Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:90 #: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "" msgstr ""
@ -895,25 +894,3 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108 #: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -18,7 +18,7 @@ msgid "Add Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 #: lib/cannery_web/live/ammo_group_live/index.html.heex:24
msgid "Add your first box!" msgid "Add your first box!"
msgstr "" msgstr ""
@ -67,7 +67,7 @@ msgid "Invite someone new!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:112 #: lib/cannery_web/components/topbar.ex:106
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -98,7 +98,7 @@ msgid "New Tag"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105 #: lib/cannery_web/components/topbar.ex:99
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -125,9 +125,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:31 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:91 #: lib/cannery_web/live/tag_live/form_component.ex:66
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -137,7 +137,7 @@ msgid "Send instructions to reset password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:65 #: lib/cannery_web/live/container_live/show.html.heex:53
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
@ -157,7 +157,7 @@ msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151 #: lib/cannery_web/live/ammo_group_live/index.ex:144
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
@ -184,7 +184,8 @@ msgid "Copy to clipboard"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #: lib/cannery_web/live/ammo_group_live/index.html.heex:18
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "" msgstr ""
@ -207,8 +208,3 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -12,12 +12,12 @@ msgstr ""
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:64 #: lib/cannery_web/live/home_live.ex:56
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:86 #: lib/cannery_web/live/home_live.ex:78
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
@ -27,12 +27,12 @@ msgid "Admins"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:100 #: lib/cannery_web/live/home_live.ex:92
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -40,7 +40,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:80
msgid "Ammo type" msgid "Ammo type"
msgstr "" msgstr ""
@ -51,7 +51,7 @@ msgid "Average Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:54
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
@ -105,12 +105,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -125,7 +125,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Count" msgid "Count"
msgstr "" msgstr ""
@ -153,7 +153,7 @@ msgid "Disable"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61 #: lib/cannery_web/live/home_live.ex:53
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
@ -208,7 +208,7 @@ msgid "Incendiary"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:95 #: lib/cannery_web/live/home_live.ex:87
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
@ -218,12 +218,12 @@ msgid "Invite Disabled"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:126 #: lib/cannery_web/live/home_live.ex:118
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:75 #: lib/cannery_web/components/topbar.ex:69
#: lib/cannery_web/live/invite_live/index.ex:41 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites" msgid "Invites"
@ -273,7 +273,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75 #: lib/cannery_web/live/tag_live/form_component.ex:50
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@ -357,7 +357,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
@ -374,17 +374,17 @@ msgid "Primer type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125 #: lib/cannery_web/live/home_live.ex:117
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73 #: lib/cannery_web/live/home_live.ex:65
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76 #: lib/cannery_web/live/home_live.ex:68
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -405,7 +405,7 @@ msgid "Show Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83 #: lib/cannery_web/live/home_live.ex:75
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -420,7 +420,7 @@ msgid "Stored in"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:38
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -432,12 +432,12 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:85 #: lib/cannery_web/live/tag_live/form_component.ex:60
msgid "Text color" msgid "Text color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:52 #: lib/cannery_web/live/home_live.ex:44
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
@ -476,23 +476,23 @@ msgid "Uses left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:48 #: lib/cannery_web/live/home_live.ex:40
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:77 #: lib/cannery_web/live/home_live.ex:69
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:61 #: lib/cannery_web/live/container_live/show.html.heex:49
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:68 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -600,7 +600,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:118
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -665,12 +665,12 @@ msgid "New password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
@ -704,8 +704,7 @@ msgid "Edit %{name} tags"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
@ -721,7 +720,7 @@ msgid "No cost information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "% left" msgid "% left"
msgstr "" msgstr ""
@ -807,7 +806,7 @@ msgid "Ammo types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Added on" msgid "Added on"
msgstr "" msgstr ""
@ -847,27 +846,27 @@ msgid "Language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:139
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164 #: lib/cannery_web/live/home_live.ex:156
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173 #: lib/cannery_web/live/home_live.ex:165
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155 #: lib/cannery_web/live/home_live.ex:147
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
@ -883,7 +882,7 @@ msgid "Move Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90 #: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "" msgstr ""
@ -896,25 +895,3 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108 #: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -11,7 +11,7 @@ msgstr ""
"Language: en\n" "Language: en\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140 #: lib/cannery/containers.ex:122
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
@ -139,13 +139,13 @@ msgid "Tag could not be added"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:115 #: lib/cannery/activity_log.ex:125
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:74 #: lib/cannery/activity_log.ex:73
#: lib/cannery/activity_log/shot_group.ex:111 #: lib/cannery/activity_log.ex:120
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "" msgstr ""
@ -161,26 +161,11 @@ msgid "Tag could not be removed"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:156 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:141 #: lib/cannery_web/live/ammo_group_live/form_component.ex:111
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -12,10 +12,10 @@ msgstr ""
"Plural-Forms: nplurals=2\n" "Plural-Forms: nplurals=2\n"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85 #: lib/cannery_web/live/ammo_type_live/form_component.ex:64
#: lib/cannery_web/live/container_live/form_component.ex:85 #: lib/cannery_web/live/container_live/form_component.ex:65
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:59
#: lib/cannery_web/live/tag_live/form_component.ex:126 #: lib/cannery_web/live/tag_live/form_component.ex:101
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
@ -50,10 +50,10 @@ msgid "%{name} updated succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:46
#: lib/cannery_web/live/container_live/form_component.ex:67 #: lib/cannery_web/live/container_live/form_component.ex:47
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:41
#: lib/cannery_web/live/tag_live/form_component.ex:108 #: lib/cannery_web/live/tag_live/form_component.ex:83
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -74,8 +74,9 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:37
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
@ -86,8 +87,9 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184 #: lib/cannery_web/live/ammo_group_live/index.ex:177
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -97,7 +99,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:90 #: lib/cannery_web/components/topbar.ex:84
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -142,7 +144,7 @@ msgid "Please check your email to verify your account"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:104 #: lib/cannery_web/live/home_live.ex:96
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "" msgstr ""
@ -151,9 +153,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:33 #: lib/cannery_web/live/invite_live/form_component.html.heex:30
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:93 #: lib/cannery_web/live/tag_live/form_component.ex:68
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -183,7 +185,7 @@ msgid "Adding..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:68
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
@ -230,8 +232,8 @@ msgid "%{name} removed successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17 #: lib/cannery_web/live/ammo_group_live/index.html.heex:15
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 #: lib/cannery_web/live/ammo_group_live/index.html.heex:33
msgid "You'll need to" msgid "You'll need to"
msgstr "" msgstr ""
@ -261,19 +263,13 @@ msgid "Ammo unstaged succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177 #: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140 #: lib/cannery/containers.ex:122
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
@ -138,13 +138,13 @@ msgid "Tag could not be added"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:115 #: lib/cannery/activity_log.ex:125
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:74 #: lib/cannery/activity_log.ex:73
#: lib/cannery/activity_log/shot_group.ex:111 #: lib/cannery/activity_log.ex:120
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "" msgstr ""
@ -160,26 +160,11 @@ msgid "Tag could not be removed"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:156 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:141 #: lib/cannery_web/live/ammo_group_live/form_component.ex:111
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -28,7 +28,7 @@ msgid "Add Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 #: lib/cannery_web/live/ammo_group_live/index.html.heex:24
msgid "Add your first box!" msgid "Add your first box!"
msgstr "" msgstr ""
@ -77,7 +77,7 @@ msgid "Invite someone new!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:112 #: lib/cannery_web/components/topbar.ex:106
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -108,7 +108,7 @@ msgid "New Tag"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105 #: lib/cannery_web/components/topbar.ex:99
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -135,9 +135,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:31 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:91 #: lib/cannery_web/live/tag_live/form_component.ex:66
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -147,7 +147,7 @@ msgid "Send instructions to reset password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:65 #: lib/cannery_web/live/container_live/show.html.heex:53
msgid "Why not add one?" msgid "Why not add one?"
msgstr "" msgstr ""
@ -167,7 +167,7 @@ msgid "Why not get some ready to shoot?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151 #: lib/cannery_web/live/ammo_group_live/index.ex:144
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
@ -194,7 +194,8 @@ msgid "Copy to clipboard"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #: lib/cannery_web/live/ammo_group_live/index.html.heex:18
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "" msgstr ""
@ -217,8 +218,3 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -22,12 +22,12 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:64 #: lib/cannery_web/live/home_live.ex:56
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:86 #: lib/cannery_web/live/home_live.ex:78
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "" msgstr ""
@ -37,12 +37,12 @@ msgid "Admins"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:100 #: lib/cannery_web/live/home_live.ex:92
msgid "Admins:" msgid "Admins:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -50,7 +50,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:80
msgid "Ammo type" msgid "Ammo type"
msgstr "" msgstr ""
@ -61,7 +61,7 @@ msgid "Average Price paid"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:54
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
@ -115,12 +115,12 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Container" msgid "Container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -135,7 +135,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Count" msgid "Count"
msgstr "" msgstr ""
@ -163,7 +163,7 @@ msgid "Disable"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61 #: lib/cannery_web/live/home_live.ex:53
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "" msgstr ""
@ -218,7 +218,7 @@ msgid "Incendiary"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:95 #: lib/cannery_web/live/home_live.ex:87
msgid "Instance Information" msgid "Instance Information"
msgstr "" msgstr ""
@ -228,12 +228,12 @@ msgid "Invite Disabled"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:126 #: lib/cannery_web/live/home_live.ex:118
msgid "Invite Only" msgid "Invite Only"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:75 #: lib/cannery_web/components/topbar.ex:69
#: lib/cannery_web/live/invite_live/index.ex:41 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites" msgid "Invites"
@ -283,7 +283,7 @@ msgstr ""
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75 #: lib/cannery_web/live/tag_live/form_component.ex:50
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@ -367,7 +367,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Price paid" msgid "Price paid"
msgstr "" msgstr ""
@ -384,17 +384,17 @@ msgid "Primer type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125 #: lib/cannery_web/live/home_live.ex:117
msgid "Public Signups" msgid "Public Signups"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73 #: lib/cannery_web/live/home_live.ex:65
msgid "Secure:" msgid "Secure:"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76 #: lib/cannery_web/live/home_live.ex:68
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
@ -415,7 +415,7 @@ msgid "Show Ammo type"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83 #: lib/cannery_web/live/home_live.ex:75
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
@ -430,7 +430,7 @@ msgid "Stored in"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:38
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -442,12 +442,12 @@ msgid "Tags can be added to your containers to help you organize"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:85 #: lib/cannery_web/live/tag_live/form_component.ex:60
msgid "Text color" msgid "Text color"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:52 #: lib/cannery_web/live/home_live.ex:44
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
@ -486,23 +486,23 @@ msgid "Uses left"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:48 #: lib/cannery_web/live/home_live.ex:40
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:77 #: lib/cannery_web/live/home_live.ex:69
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:61 #: lib/cannery_web/live/container_live/show.html.heex:49
msgid "No tags for this container" msgid "No tags for this container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:68 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -610,7 +610,7 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:118
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -675,12 +675,12 @@ msgid "New password"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Stage" msgid "Stage"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
@ -714,8 +714,7 @@ msgid "Edit %{name} tags"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
@ -731,7 +730,7 @@ msgid "No cost information"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "% left" msgid "% left"
msgstr "" msgstr ""
@ -817,7 +816,7 @@ msgid "Ammo types"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Added on" msgid "Added on"
msgstr "" msgstr ""
@ -857,27 +856,27 @@ msgid "Language"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:139
msgid "Get involved!" msgid "Get involved!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164 #: lib/cannery_web/live/home_live.ex:156
msgid "Help translate" msgid "Help translate"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173 #: lib/cannery_web/live/home_live.ex:165
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155 #: lib/cannery_web/live/home_live.ex:147
msgid "View the source code" msgid "View the source code"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
@ -893,7 +892,7 @@ msgid "Move Ammo"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90 #: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "" msgstr ""
@ -906,25 +905,3 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108 #: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -22,7 +22,7 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140 #: lib/cannery/containers.ex:122
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
@ -149,13 +149,13 @@ msgid "Tag could not be added"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:115 #: lib/cannery/activity_log.ex:125
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:74 #: lib/cannery/activity_log.ex:73
#: lib/cannery/activity_log/shot_group.ex:111 #: lib/cannery/activity_log.ex:120
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "" msgstr ""
@ -171,26 +171,11 @@ msgid "Tag could not be removed"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:156 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:141 #: lib/cannery_web/live/ammo_group_live/form_component.ex:111
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -22,10 +22,10 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85 #: lib/cannery_web/live/ammo_type_live/form_component.ex:64
#: lib/cannery_web/live/container_live/form_component.ex:85 #: lib/cannery_web/live/container_live/form_component.ex:65
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:59
#: lib/cannery_web/live/tag_live/form_component.ex:126 #: lib/cannery_web/live/tag_live/form_component.ex:101
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
@ -60,10 +60,10 @@ msgid "%{name} updated succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:46
#: lib/cannery_web/live/container_live/form_component.ex:67 #: lib/cannery_web/live/container_live/form_component.ex:47
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:41
#: lib/cannery_web/live/tag_live/form_component.ex:108 #: lib/cannery_web/live/tag_live/form_component.ex:83
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -84,8 +84,9 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:37
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
@ -96,8 +97,9 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184 #: lib/cannery_web/live/ammo_group_live/index.ex:177
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -107,7 +109,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:90 #: lib/cannery_web/components/topbar.ex:84
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -152,7 +154,7 @@ msgid "Please check your email to verify your account"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:104 #: lib/cannery_web/live/home_live.ex:96
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "" msgstr ""
@ -161,9 +163,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:33 #: lib/cannery_web/live/invite_live/form_component.html.heex:30
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:93 #: lib/cannery_web/live/tag_live/form_component.ex:68
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -193,7 +195,7 @@ msgid "Adding..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:68
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
@ -240,8 +242,8 @@ msgid "%{name} removed successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17 #: lib/cannery_web/live/ammo_group_live/index.html.heex:15
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 #: lib/cannery_web/live/ammo_group_live/index.html.heex:33
msgid "You'll need to" msgid "You'll need to"
msgstr "" msgstr ""
@ -271,19 +273,13 @@ msgid "Ammo unstaged succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177 #: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -30,7 +30,7 @@ msgid "Add Ammo"
msgstr "ajouter munition" msgstr "ajouter munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:37 #: lib/cannery_web/live/ammo_group_live/index.html.heex:24
msgid "Add your first box!" msgid "Add your first box!"
msgstr "Ajoutez votre première caisse !" msgstr "Ajoutez votre première caisse !"
@ -79,7 +79,7 @@ msgid "Invite someone new!"
msgstr "Invitez une nouvelle personne!" msgstr "Invitez une nouvelle personne!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:112 #: lib/cannery_web/components/topbar.ex:106
#: lib/cannery_web/templates/user_confirmation/new.html.heex:30 #: lib/cannery_web/templates/user_confirmation/new.html.heex:30
#: lib/cannery_web/templates/user_registration/new.html.heex:48 #: lib/cannery_web/templates/user_registration/new.html.heex:48
#: lib/cannery_web/templates/user_reset_password/edit.html.heex:48 #: lib/cannery_web/templates/user_reset_password/edit.html.heex:48
@ -110,7 +110,7 @@ msgid "New Tag"
msgstr "Nouveau tag" msgstr "Nouveau tag"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:105 #: lib/cannery_web/components/topbar.ex:99
#: lib/cannery_web/templates/user_confirmation/new.html.heex:25 #: lib/cannery_web/templates/user_confirmation/new.html.heex:25
#: lib/cannery_web/templates/user_registration/new.html.heex:3 #: lib/cannery_web/templates/user_registration/new.html.heex:3
#: lib/cannery_web/templates/user_registration/new.html.heex:42 #: lib/cannery_web/templates/user_registration/new.html.heex:42
@ -137,9 +137,9 @@ msgstr "Réinitialisé le mot de passe"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:73
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:156
#: lib/cannery_web/live/container_live/form_component.html.heex:50 #: lib/cannery_web/live/container_live/form_component.html.heex:50
#: lib/cannery_web/live/invite_live/form_component.html.heex:31 #: lib/cannery_web/live/invite_live/form_component.html.heex:28
#: lib/cannery_web/live/range_live/form_component.html.heex:40 #: lib/cannery_web/live/range_live/form_component.html.heex:40
#: lib/cannery_web/live/tag_live/form_component.ex:91 #: lib/cannery_web/live/tag_live/form_component.ex:66
msgid "Save" msgid "Save"
msgstr "Sauvegarder" msgstr "Sauvegarder"
@ -149,7 +149,7 @@ msgid "Send instructions to reset password"
msgstr "Envoyer les instructions pour réinitialiser le mot de passe" msgstr "Envoyer les instructions pour réinitialiser le mot de passe"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:65 #: lib/cannery_web/live/container_live/show.html.heex:53
msgid "Why not add one?" msgid "Why not add one?"
msgstr "Pourquoi pas en ajouter un?" msgstr "Pourquoi pas en ajouter un?"
@ -169,7 +169,7 @@ msgid "Why not get some ready to shoot?"
msgstr "Pourquoi pas en préparer pour tirer?" msgstr "Pourquoi pas en préparer pour tirer?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:151 #: lib/cannery_web/live/ammo_group_live/index.ex:144
#: lib/cannery_web/live/ammo_group_live/show.html.heex:91 #: lib/cannery_web/live/ammo_group_live/show.html.heex:91
#: lib/cannery_web/live/range_live/index.html.heex:36 #: lib/cannery_web/live/range_live/index.html.heex:36
msgid "Record shots" msgid "Record shots"
@ -196,7 +196,8 @@ msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier" msgstr "Copier dans le presse-papier"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:20 #: lib/cannery_web/live/ammo_group_live/index.html.heex:18
#: lib/cannery_web/live/ammo_group_live/index.html.heex:36
msgid "add a container first" msgid "add a container first"
msgstr "ajouter un conteneur en premier" msgstr "ajouter un conteneur en premier"
@ -219,8 +220,3 @@ msgstr "Changer la langue"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:55 #: lib/cannery_web/live/ammo_group_live/show.html.heex:55
msgid "View in Catalog" msgid "View in Catalog"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:31
msgid "add an ammo type first"
msgstr ""

View File

@ -24,14 +24,14 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:64 #: lib/cannery_web/live/home_live.ex:56
msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day" msgid "%{name} lets you easily keep an eye on your ammo levels before and after range day"
msgstr "" msgstr ""
"%{name} vous permet de facilement garder un œil sur votre niveau de munition " "%{name} vous permet de facilement garder un œil sur votre niveau de munition "
"avant et après une journée de stand" "avant et après une journée de stand"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:86 #: lib/cannery_web/live/home_live.ex:78
msgid "Access from any internet-capable device" msgid "Access from any internet-capable device"
msgstr "Accédez depuis nimporte quel appareil connecté à internet" msgstr "Accédez depuis nimporte quel appareil connecté à internet"
@ -41,12 +41,12 @@ msgid "Admins"
msgstr "Administrateur·ices" msgstr "Administrateur·ices"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:100 #: lib/cannery_web/live/home_live.ex:92
msgid "Admins:" msgid "Admins:"
msgstr "Administrateur·ices:" msgstr "Administrateur·ices:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:62 #: lib/cannery_web/components/topbar.ex:56
#: lib/cannery_web/live/ammo_group_live/index.html.heex:3 #: lib/cannery_web/live/ammo_group_live/index.html.heex:3
#: lib/cannery_web/live/range_live/index.ex:80 #: lib/cannery_web/live/range_live/index.ex:80
msgid "Ammo" msgid "Ammo"
@ -54,7 +54,7 @@ msgstr "Munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:21
#: lib/cannery_web/live/ammo_group_live/index.ex:81 #: lib/cannery_web/live/ammo_group_live/index.ex:80
msgid "Ammo type" msgid "Ammo type"
msgstr "Type de munition" msgstr "Type de munition"
@ -65,7 +65,7 @@ msgid "Average Price paid"
msgstr "Prix acheté moyen" msgstr "Prix acheté moyen"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:79 #: lib/cannery_web/live/tag_live/form_component.ex:54
msgid "Background color" msgid "Background color"
msgstr "Couleur de fond" msgstr "Couleur de fond"
@ -119,12 +119,12 @@ msgstr "Matériau de la caisse"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/move_ammo_group_component.ex:67 #: lib/cannery_web/components/move_ammo_group_component.ex:67
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:86 #: lib/cannery_web/live/ammo_group_live/index.ex:85
msgid "Container" msgid "Container"
msgstr "Conteneur" msgstr "Conteneur"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:50 #: lib/cannery_web/components/topbar.ex:44
#: lib/cannery_web/live/container_live/index.ex:36 #: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.html.heex:3 #: lib/cannery_web/live/container_live/index.html.heex:3
msgid "Containers" msgid "Containers"
@ -139,7 +139,7 @@ msgstr "Corrosive"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:27
#: lib/cannery_web/live/ammo_group_live/index.ex:82 #: lib/cannery_web/live/ammo_group_live/index.ex:81
msgid "Count" msgid "Count"
msgstr "Quantité" msgstr "Quantité"
@ -167,7 +167,7 @@ msgid "Disable"
msgstr "Désactiver" msgstr "Désactiver"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:61 #: lib/cannery_web/live/home_live.ex:53
msgid "Easy to Use:" msgid "Easy to Use:"
msgstr "Simple à utiliser:" msgstr "Simple à utiliser:"
@ -222,7 +222,7 @@ msgid "Incendiary"
msgstr "Incendiaire" msgstr "Incendiaire"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:95 #: lib/cannery_web/live/home_live.ex:87
msgid "Instance Information" msgid "Instance Information"
msgstr "Information de linstance" msgstr "Information de linstance"
@ -232,12 +232,12 @@ msgid "Invite Disabled"
msgstr "Invitation désactivée" msgstr "Invitation désactivée"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:126 #: lib/cannery_web/live/home_live.ex:118
msgid "Invite Only" msgid "Invite Only"
msgstr "Uniquement sur invitation" msgstr "Uniquement sur invitation"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:75 #: lib/cannery_web/components/topbar.ex:69
#: lib/cannery_web/live/invite_live/index.ex:41 #: lib/cannery_web/live/invite_live/index.ex:41
#: lib/cannery_web/live/invite_live/index.html.heex:3 #: lib/cannery_web/live/invite_live/index.html.heex:3
msgid "Invites" msgid "Invites"
@ -287,7 +287,7 @@ msgstr "Ma superbe boite de munition"
#: lib/cannery_web/live/ammo_type_live/index.ex:51 #: lib/cannery_web/live/ammo_type_live/index.ex:51
#: lib/cannery_web/live/container_live/form_component.html.heex:20 #: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/invite_live/form_component.html.heex:20 #: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75 #: lib/cannery_web/live/tag_live/form_component.ex:50
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
@ -371,7 +371,7 @@ msgstr "Pression"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:34
#: lib/cannery_web/live/ammo_group_live/index.ex:83 #: lib/cannery_web/live/ammo_group_live/index.ex:82
msgid "Price paid" msgid "Price paid"
msgstr "Prix payé" msgstr "Prix payé"
@ -388,17 +388,17 @@ msgid "Primer type"
msgstr "Type damorce" msgstr "Type damorce"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:125 #: lib/cannery_web/live/home_live.ex:117
msgid "Public Signups" msgid "Public Signups"
msgstr "Enregistrements publics" msgstr "Enregistrements publics"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:73 #: lib/cannery_web/live/home_live.ex:65
msgid "Secure:" msgid "Secure:"
msgstr "Sécurisé:" msgstr "Sécurisé:"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:76 #: lib/cannery_web/live/home_live.ex:68
msgid "Self-host your own instance, or use an instance from someone you trust." msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr "" msgstr ""
"Auto-hébergez votre propre instance ou utilisez celle dune personne à " "Auto-hébergez votre propre instance ou utilisez celle dune personne à "
@ -421,7 +421,7 @@ msgid "Show Ammo type"
msgstr "Montrer le type de munition" msgstr "Montrer le type de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:83 #: lib/cannery_web/live/home_live.ex:75
msgid "Simple:" msgid "Simple:"
msgstr "Simple:" msgstr "Simple:"
@ -436,7 +436,7 @@ msgid "Stored in"
msgstr "Est stocké dans" msgstr "Est stocké dans"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:44 #: lib/cannery_web/components/topbar.ex:38
#: lib/cannery_web/live/tag_live/index.ex:32 #: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3 #: lib/cannery_web/live/tag_live/index.html.heex:3
msgid "Tags" msgid "Tags"
@ -450,12 +450,12 @@ msgstr ""
"organiser" "organiser"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/tag_live/form_component.ex:85 #: lib/cannery_web/live/tag_live/form_component.ex:60
msgid "Text color" msgid "Text color"
msgstr "Couleur du texte" msgstr "Couleur du texte"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:52 #: lib/cannery_web/live/home_live.ex:44
msgid "The self-hosted firearm tracker website" msgid "The self-hosted firearm tracker website"
msgstr "Le site web de suivi darme à feux auto-hébergé" msgstr "Le site web de suivi darme à feux auto-hébergé"
@ -494,23 +494,23 @@ msgid "Uses left"
msgstr "Utilisations restantes" msgstr "Utilisations restantes"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:48 #: lib/cannery_web/live/home_live.ex:40
msgid "Welcome to %{name}" msgid "Welcome to %{name}"
msgstr "Bienvenue à %{name}" msgstr "Bienvenue à %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:77 #: lib/cannery_web/live/home_live.ex:69
msgid "Your data stays with you, period" msgid "Your data stays with you, period"
msgstr "Vos données restent avec vous, point final" msgstr "Vos données restent avec vous, point final"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/container_live/show.html.heex:61 #: lib/cannery_web/live/container_live/show.html.heex:49
msgid "No tags for this container" msgid "No tags for this container"
msgstr "Aucun tag pour ce conteneur" msgstr "Aucun tag pour ce conteneur"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:68 #: lib/cannery_web/components/topbar.ex:62
#: lib/cannery_web/live/ammo_group_live/index.ex:85 #: lib/cannery_web/live/ammo_group_live/index.ex:84
msgid "Range" msgid "Range"
msgstr "Portée" msgstr "Portée"
@ -618,7 +618,7 @@ msgstr "Évènements de tir"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/ammo_group_card.ex:48 #: lib/cannery_web/components/ammo_group_card.ex:48
#: lib/cannery_web/live/ammo_group_live/index.ex:125 #: lib/cannery_web/live/ammo_group_live/index.ex:118
#: lib/cannery_web/live/ammo_group_live/show.html.heex:37 #: lib/cannery_web/live/ammo_group_live/show.html.heex:37
#: lib/cannery_web/live/ammo_group_live/show.html.heex:44 #: lib/cannery_web/live/ammo_group_live/show.html.heex:44
#: lib/cannery_web/live/ammo_type_live/index.ex:114 #: lib/cannery_web/live/ammo_type_live/index.ex:114
@ -683,12 +683,12 @@ msgid "New password"
msgstr "Nouveau mot de passe" msgstr "Nouveau mot de passe"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Stage" msgid "Stage"
msgstr "Sélectionné" msgstr "Sélectionné"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:148 #: lib/cannery_web/live/ammo_group_live/index.ex:141
msgid "Unstage" msgid "Unstage"
msgstr "Désélectionner" msgstr "Désélectionner"
@ -722,8 +722,7 @@ msgid "Edit %{name} tags"
msgstr "Éditer les tags de %{name}" msgstr "Éditer les tags de %{name}"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:55 #: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:32
msgid "Rounds:" msgid "Rounds:"
msgstr "Cartouches:" msgstr "Cartouches:"
@ -739,7 +738,7 @@ msgid "No cost information"
msgstr "Aucune information de prix" msgstr "Aucune information de prix"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:84 #: lib/cannery_web/live/ammo_group_live/index.ex:83
msgid "% left" msgid "% left"
msgstr "%restante" msgstr "%restante"
@ -825,7 +824,7 @@ msgid "Ammo types"
msgstr "Types de munition" msgstr "Types de munition"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:87 #: lib/cannery_web/live/ammo_group_live/index.ex:86
msgid "Added on" msgid "Added on"
msgstr "Ajouté le" msgstr "Ajouté le"
@ -865,27 +864,27 @@ msgid "Language"
msgstr "Langue" msgstr "Langue"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:147 #: lib/cannery_web/live/home_live.ex:139
msgid "Get involved!" msgid "Get involved!"
msgstr "Impliquez-vous!" msgstr "Impliquez-vous!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:164 #: lib/cannery_web/live/home_live.ex:156
msgid "Help translate" msgid "Help translate"
msgstr "Aider à la traduction" msgstr "Aider à la traduction"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:173 #: lib/cannery_web/live/home_live.ex:165
msgid "Report bugs or request features" msgid "Report bugs or request features"
msgstr "Remonter des bugs ou une demande de fonctionnalité" msgstr "Remonter des bugs ou une demande de fonctionnalité"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:155 #: lib/cannery_web/live/home_live.ex:147
msgid "View the source code" msgid "View the source code"
msgstr "Voir le code source" msgstr "Voir le code source"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:56 #: lib/cannery_web/components/topbar.ex:50
#: lib/cannery_web/live/ammo_type_live/index.html.heex:3 #: lib/cannery_web/live/ammo_type_live/index.html.heex:3
msgid "Catalog" msgid "Catalog"
msgstr "" msgstr ""
@ -901,7 +900,7 @@ msgid "Move Ammo"
msgstr "Déplacer munition" msgstr "Déplacer munition"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/container_live/show.html.heex:90 #: lib/cannery_web/live/container_live/show.html.heex:78
msgid "No ammo in this container" msgid "No ammo in this container"
msgstr "Aucun groupe de munition pour ce conteneur" msgstr "Aucun groupe de munition pour ce conteneur"
@ -914,25 +913,3 @@ msgstr "Montrer le type de munition"
#: lib/cannery_web/live/ammo_group_live/show.html.heex:108 #: lib/cannery_web/live/ammo_group_live/show.html.heex:108
msgid "This ammo is not in a container" msgid "This ammo is not in a container"
msgstr "Ce groupe de munition nest pas dans un conteneur" msgstr "Ce groupe de munition nest pas dans un conteneur"
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/container_card.ex:50
#: lib/cannery_web/live/container_live/show.html.heex:27
msgid "Packs:"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:24
#: lib/cannery_web/live/home_live.ex:42
msgid "Cannery logo"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:44
msgid "isn't he cute >:3"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""

View File

@ -24,7 +24,7 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/containers.ex:140 #: lib/cannery/containers.ex:122
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "Le conteneur doit être vide pour être supprimé" msgstr "Le conteneur doit être vide pour être supprimé"
@ -153,13 +153,13 @@ msgid "Tag could not be added"
msgstr "Le tag na pas pu être ajouté" msgstr "Le tag na pas pu être ajouté"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:115 #: lib/cannery/activity_log.ex:125
msgid "Count must be at least 1" msgid "Count must be at least 1"
msgstr "Le nombre doit être au moins égal à 1" msgstr "Le nombre doit être au moins égal à 1"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:74 #: lib/cannery/activity_log.ex:73
#: lib/cannery/activity_log/shot_group.ex:111 #: lib/cannery/activity_log.ex:120
msgid "Count must be less than %{count}" msgid "Count must be less than %{count}"
msgstr "La quantité doit être inférieur à %{count}" msgstr "La quantité doit être inférieur à %{count}"
@ -177,26 +177,11 @@ msgid "Tag could not be removed"
msgstr "Le tag na pas pu être retiré" msgstr "Le tag na pas pu être retiré"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:156 #: lib/cannery_web/live/ammo_group_live/form_component.ex:126
msgid "Could not parse number of copies" msgid "Could not parse number of copies"
msgstr "Impossible d'analyser le nombre de copies" msgstr "Impossible d'analyser le nombre de copies"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:141 #: lib/cannery_web/live/ammo_group_live/form_component.ex:111
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" 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}" msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}"
#, elixir-autogen, elixir-format
#: lib/cannery/ammo.ex:407
msgid "Invalid multiplier"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/ammo/ammo_group.ex:84
msgid "Please select an ammo type and container"
msgstr ""
#, elixir-autogen, elixir-format
#: lib/cannery/activity_log/shot_group.ex:69
msgid "Please select a valid user and ammo group"
msgstr ""

View File

@ -24,10 +24,10 @@ msgstr ""
## date. Leave "msgstr"s empty as changing them here has no ## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead. ## effect: edit them in PO (.po) files instead.
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85 #: lib/cannery_web/live/ammo_type_live/form_component.ex:64
#: lib/cannery_web/live/container_live/form_component.ex:85 #: lib/cannery_web/live/container_live/form_component.ex:65
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:59
#: lib/cannery_web/live/tag_live/form_component.ex:126 #: lib/cannery_web/live/tag_live/form_component.ex:101
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "%{name} créé· avec succès" msgstr "%{name} créé· avec succès"
@ -62,10 +62,10 @@ msgid "%{name} updated succesfully"
msgstr "%{name} mis à jour avec succès" msgstr "%{name} mis à jour avec succès"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:46
#: lib/cannery_web/live/container_live/form_component.ex:67 #: lib/cannery_web/live/container_live/form_component.ex:47
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:41
#: lib/cannery_web/live/tag_live/form_component.ex:108 #: lib/cannery_web/live/tag_live/form_component.ex:83
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "%{name} mis à jour avec succès" msgstr "%{name} mis à jour avec succès"
@ -89,8 +89,9 @@ msgstr ""
"Êtes-vous certain·e de supprimer %{email}? Cette action est définitive!" "Êtes-vous certain·e de supprimer %{email}? Cette action est définitive!"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:37
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "Êtes-vous certain·e de supprimer %{name}?" msgstr "Êtes-vous certain·e de supprimer %{name}?"
@ -101,8 +102,9 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "Êtes-vous certain·e de supprimer linvitation pour %{name}?" msgstr "Êtes-vous certain·e de supprimer linvitation pour %{name}?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184 #: lib/cannery_web/live/ammo_group_live/index.ex:177
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "Êtes-vous certain·e de supprimer cette munition?" msgstr "Êtes-vous certain·e de supprimer cette munition?"
@ -112,7 +114,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Êtes-vous certain·e de supprimer votre compte?" msgstr "Êtes-vous certain·e de supprimer votre compte?"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:90 #: lib/cannery_web/components/topbar.ex:84
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "Êtes-vous certain·e de vouloir vous déconnecter?" msgstr "Êtes-vous certain·e de vouloir vous déconnecter?"
@ -161,7 +163,7 @@ msgid "Please check your email to verify your account"
msgstr "Veuillez vérifier votre mél pour confirmer votre compte" msgstr "Veuillez vérifier votre mél pour confirmer votre compte"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:104 #: lib/cannery_web/live/home_live.ex:96
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "Senregistrer pour mettre en place %{name}" msgstr "Senregistrer pour mettre en place %{name}"
@ -170,9 +172,9 @@ msgstr "Senregistrer pour mettre en place %{name}"
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:33 #: lib/cannery_web/live/invite_live/form_component.html.heex:30
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:93 #: lib/cannery_web/live/tag_live/form_component.ex:68
msgid "Saving..." msgid "Saving..."
msgstr "Sauvegarde en cours…" msgstr "Sauvegarde en cours…"
@ -204,7 +206,7 @@ msgid "Adding..."
msgstr "Ajout en cours…" msgstr "Ajout en cours…"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:68
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "Tirs enregistré avec succès" msgstr "Tirs enregistré avec succès"
@ -251,8 +253,8 @@ msgid "%{name} removed successfully"
msgstr "%{name} retiré avec succès" msgstr "%{name} retiré avec succès"
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17 #: lib/cannery_web/live/ammo_group_live/index.html.heex:15
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 #: lib/cannery_web/live/ammo_group_live/index.html.heex:33
msgid "You'll need to" msgid "You'll need to"
msgstr "Vous aurez besoin de" msgstr "Vous aurez besoin de"
@ -282,19 +284,13 @@ msgid "Ammo unstaged succesfully"
msgstr "Groupe de munition désélectionner avec succès" msgstr "Groupe de munition désélectionner avec succès"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "Groupe de munition mis à jour avec succès" msgstr "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177 #: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "Groupe de munition mis à jour avec succès" msgstr[0] "Groupe de munition mis à jour avec succès"
msgstr[1] "Groupe de munition mis à jour avec succès" msgstr[1] "Groupe de munition mis à jour avec succès"
#, elixir-autogen, elixir-format, fuzzy
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Êtes-vous certain·e de supprimer %{name}?"

View File

@ -11,10 +11,10 @@ msgid ""
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:85 #: lib/cannery_web/live/ammo_type_live/form_component.ex:64
#: lib/cannery_web/live/container_live/form_component.ex:85 #: lib/cannery_web/live/container_live/form_component.ex:65
#: lib/cannery_web/live/invite_live/form_component.ex:80 #: lib/cannery_web/live/invite_live/form_component.ex:59
#: lib/cannery_web/live/tag_live/form_component.ex:126 #: lib/cannery_web/live/tag_live/form_component.ex:101
msgid "%{name} created successfully" msgid "%{name} created successfully"
msgstr "" msgstr ""
@ -49,10 +49,10 @@ msgid "%{name} updated succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/form_component.ex:67 #: lib/cannery_web/live/ammo_type_live/form_component.ex:46
#: lib/cannery_web/live/container_live/form_component.ex:67 #: lib/cannery_web/live/container_live/form_component.ex:47
#: lib/cannery_web/live/invite_live/form_component.ex:62 #: lib/cannery_web/live/invite_live/form_component.ex:41
#: lib/cannery_web/live/tag_live/form_component.ex:108 #: lib/cannery_web/live/tag_live/form_component.ex:83
msgid "%{name} updated successfully" msgid "%{name} updated successfully"
msgstr "" msgstr ""
@ -73,8 +73,9 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
#: lib/cannery_web/live/container_live/index.html.heex:46 #: lib/cannery_web/live/container_live/index.html.heex:46
#: lib/cannery_web/live/container_live/show.html.heex:49 #: lib/cannery_web/live/container_live/show.html.heex:37
#: lib/cannery_web/live/tag_live/index.html.heex:38 #: lib/cannery_web/live/tag_live/index.html.heex:38
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
@ -85,8 +86,9 @@ msgid "Are you sure you want to delete the invite for %{name}?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.ex:184 #: lib/cannery_web/live/ammo_group_live/index.ex:177
#: lib/cannery_web/live/ammo_group_live/show.html.heex:71 #: lib/cannery_web/live/ammo_group_live/show.html.heex:71
#: lib/cannery_web/live/ammo_type_live/index.ex:140
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
msgstr "" msgstr ""
@ -96,7 +98,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/topbar.ex:90 #: lib/cannery_web/components/topbar.ex:84
msgid "Are you sure you want to log out?" msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
@ -141,7 +143,7 @@ msgid "Please check your email to verify your account"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/home_live.ex:104 #: lib/cannery_web/live/home_live.ex:96
msgid "Register to setup %{name}" msgid "Register to setup %{name}"
msgstr "" msgstr ""
@ -150,9 +152,9 @@ msgstr ""
#: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74 #: lib/cannery_web/live/ammo_group_live/form_component.html.heex:74
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157 #: lib/cannery_web/live/ammo_type_live/form_component.html.heex:157
#: lib/cannery_web/live/container_live/form_component.html.heex:52 #: lib/cannery_web/live/container_live/form_component.html.heex:52
#: lib/cannery_web/live/invite_live/form_component.html.heex:33 #: lib/cannery_web/live/invite_live/form_component.html.heex:30
#: lib/cannery_web/live/range_live/form_component.html.heex:42 #: lib/cannery_web/live/range_live/form_component.html.heex:42
#: lib/cannery_web/live/tag_live/form_component.ex:93 #: lib/cannery_web/live/tag_live/form_component.ex:68
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -182,7 +184,7 @@ msgid "Adding..."
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/components/add_shot_group_component.ex:56 #: lib/cannery_web/components/add_shot_group_component.ex:68
msgid "Shots recorded successfully" msgid "Shots recorded successfully"
msgstr "" msgstr ""
@ -229,8 +231,8 @@ msgid "%{name} removed successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/index.html.heex:17 #: lib/cannery_web/live/ammo_group_live/index.html.heex:15
#: lib/cannery_web/live/ammo_group_live/index.html.heex:28 #: lib/cannery_web/live/ammo_group_live/index.html.heex:33
msgid "You'll need to" msgid "You'll need to"
msgstr "" msgstr ""
@ -260,19 +262,13 @@ msgid "Ammo unstaged succesfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:118 #: lib/cannery_web/live/ammo_group_live/form_component.ex:88
msgid "Ammo updated successfully" msgid "Ammo updated successfully"
msgstr "" msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_group_live/form_component.ex:177 #: lib/cannery_web/live/ammo_group_live/form_component.ex:147
msgid "Ammo added successfully" msgid "Ammo added successfully"
msgid_plural "Ammo added successfully" msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-autogen, elixir-format
#: lib/cannery_web/live/ammo_type_live/index.ex:140
#: lib/cannery_web/live/ammo_type_live/show.html.heex:27
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -178,5 +178,10 @@ defmodule Cannery.ActivityLogTest do
ActivityLog.get_shot_group!(shot_group.id, current_user) ActivityLog.get_shot_group!(shot_group.id, current_user)
end end
end end
test "change_shot_group/1 returns a shot_group changeset",
%{shot_group: shot_group} do
assert %Ecto.Changeset{} = ActivityLog.change_shot_group(shot_group)
end
end end
end end

View File

@ -92,6 +92,11 @@ defmodule Cannery.AmmoTest do
assert {:ok, %AmmoType{}} = Ammo.delete_ammo_type(ammo_type, current_user) assert {:ok, %AmmoType{}} = Ammo.delete_ammo_type(ammo_type, current_user)
assert_raise Ecto.NoResultsError, fn -> Ammo.get_ammo_type!(ammo_type.id, current_user) end assert_raise Ecto.NoResultsError, fn -> Ammo.get_ammo_type!(ammo_type.id, current_user) end
end end
test "change_ammo_type/1 returns a ammo_type changeset",
%{ammo_type: ammo_type} do
assert %Changeset{} = Ammo.change_ammo_type(ammo_type)
end
end end
describe "ammo_groups" do describe "ammo_groups" do
@ -175,5 +180,9 @@ defmodule Cannery.AmmoTest do
Ammo.get_ammo_group!(ammo_group.id, current_user) Ammo.get_ammo_group!(ammo_group.id, current_user)
end end
end end
test "change_ammo_group/1 returns a ammo_group changeset", %{ammo_group: ammo_group} do
assert %Changeset{} = Ammo.change_ammo_group(ammo_group)
end
end end
end end

View File

@ -87,5 +87,9 @@ defmodule Cannery.ContainersTest do
Containers.get_container!(container.id, current_user) Containers.get_container!(container.id, current_user)
end end
end end
test "change_container/1 returns a container changeset", %{container: container} do
assert %Changeset{} = Containers.change_container(container)
end
end end
end end

View File

@ -68,5 +68,9 @@ defmodule Cannery.InvitesTest do
assert {:ok, %Invite{}} = Invites.delete_invite(invite, current_user) assert {:ok, %Invite{}} = Invites.delete_invite(invite, current_user)
assert_raise Ecto.NoResultsError, fn -> Invites.get_invite!(invite.id, current_user) end assert_raise Ecto.NoResultsError, fn -> Invites.get_invite!(invite.id, current_user) end
end end
test "change_invite/1 returns a invite changeset", %{invite: invite} do
assert %Changeset{} = Invites.change_invite(invite)
end
end end
end end

View File

@ -68,5 +68,9 @@ defmodule Cannery.TagsTest do
assert {:ok, %Tag{}} = Tags.delete_tag(tag, current_user) assert {:ok, %Tag{}} = Tags.delete_tag(tag, current_user)
assert_raise Ecto.NoResultsError, fn -> Tags.get_tag!(tag.id, current_user) end assert_raise Ecto.NoResultsError, fn -> Tags.get_tag!(tag.id, current_user) end
end end
test "change_tag/1 returns a tag changeset", %{tag: tag} do
assert %Changeset{} = Tags.change_tag(tag)
end
end end
end end