Compare commits

...

52 Commits
0.9.3 ... dev

Author SHA1 Message Date
shibao d896257602 actually fix bar graph
continuous-integration/drone/push Build is passing Details
2024-03-19 00:28:30 -04:00
shibao 4ca51a3f53 update dependencies
continuous-integration/drone/tag Build is passing Details
continuous-integration/drone/push Build is passing Details
2024-03-19 00:01:27 -04:00
shibao 96b05e8332 Make bar graph ignore gaps 2024-03-19 00:00:51 -04:00
shibao 557a2cac3d Improve login page autocomplete behavior
continuous-integration/drone/push Build is passing Details
2024-03-18 23:39:06 -04:00
shibao e16e04c114 combine imports
continuous-integration/drone/push Build is passing Details
2024-03-18 23:26:41 -04:00
shibao bbe4d82303 Use bar graph instead of line graph 2024-03-18 23:26:32 -04:00
shibao c69d7843ab fix layout issues
continuous-integration/drone/push Build is passing Details
2024-02-23 23:34:04 -05:00
shibao c18f59050c fix missing ssl and crypto packages
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-02-23 21:57:25 -05:00
shibao 67d688fc1e create italian gettext
continuous-integration/drone/push Build is failing Details
continuous-integration/drone/tag Build is failing Details
2024-02-23 21:22:51 -05:00
Weblate 28e5fa56c3 Added translation using Weblate (Italian) 2024-02-23 21:21:42 -05:00
Weblate e301d3dd17 Added translation using Weblate (Italian) 2024-02-23 21:21:42 -05:00
Weblate 4881cf6edb Added translation using Weblate (Italian) 2024-02-23 21:21:42 -05:00
Weblate 6b61c45889 Added translation using Weblate (Italian) 2024-02-23 21:21:42 -05:00
Weblate 4a674a0504 Added translation using Weblate (Italian) 2024-02-23 21:21:42 -05:00
shibao 7e6959fb3b Added translation using Weblate (Italian) 2024-02-23 21:21:42 -05:00
shibao 22f13b0c57 make ammo packs in containers directly navigable in table view 2024-02-23 21:20:32 -05:00
shibao 31024dcc0d fix test mode warning 2024-02-23 21:16:46 -05:00
shibao e843014502 fix credo check for is_admin? 2024-02-23 21:13:34 -05:00
shibao 5d146ce6af fix credo check for is_already_admin? 2024-02-23 21:13:23 -05:00
shibao 27cda3733e update elixir deps 2024-02-23 21:12:11 -05:00
shibao 1965ecba32 bump version 2024-02-23 21:04:25 -05:00
shibao 69e40c6d18 update elixir deps 2024-02-23 21:04:25 -05:00
shibao 34b4b24e67 update npm deps 2024-02-23 21:04:25 -05:00
shibao 7ebed8d4c0 update tool versions 2024-02-23 21:04:25 -05:00
shibao b5619b8606 run mix format
continuous-integration/drone/push Build is passing Details
2023-09-07 19:15:07 -04:00
shibao ef28de53a1 update hex dependencies 2023-09-07 19:11:57 -04:00
shibao fcd5dbc605 bump version
continuous-integration/drone/push Build is failing Details
2023-09-07 19:07:56 -04:00
shibao 7738e68292 run npm audit fix --force 2023-09-07 19:06:56 -04:00
shibao df645a6188 update node packages 2023-09-07 19:06:21 -04:00
shibao bed4fbaf54 update dependencies 2023-09-07 19:05:35 -04:00
shibao f94ef0a2ca fix range page title
continuous-integration/drone/push Build is passing Details
2023-06-05 23:36:25 -04:00
shibao 7cdb8af690 update dependencies 2023-06-05 23:32:52 -04:00
shibao 52c4ab45d5 fix class filter helper functions
continuous-integration/drone/push Build is passing Details
2023-06-05 23:17:43 -04:00
shibao a35f43d6df rename Ammo.get_average_cost and Ammo.get_historical_count 2023-06-05 23:17:43 -04:00
shibao 9edeb1e803 improve Ammo.get_grouped_round_count 2023-06-05 23:17:43 -04:00
shibao 7e55446b3e improve ActivityLog.list_shot_records 2023-06-05 23:17:43 -04:00
shibao 9643e9f46d improve Ammo.get_round_count 2023-06-05 23:17:39 -04:00
shibao 8466fcd1f9 improve ActivityLog.get_grouped_used_counts 2023-06-05 23:16:47 -04:00
shibao e713a2e108 improve ActivityLog.get_used_count 2023-06-05 23:16:00 -04:00
shibao a8fa321040 use sr for shot record in sql 2023-06-05 23:16:00 -04:00
shibao f0536f3030 improve Ammo.get_grouped_packs_count 2023-06-05 23:15:57 -04:00
shibao a94d2eebf4 improve Ammo.get_packs_count 2023-06-05 23:06:28 -04:00
shibao cfc56519f5 fix user registration controller 2023-06-04 00:07:31 -04:00
shibao e80c2018be improve Ammo.list_packs 2023-06-04 00:00:51 -04:00
shibao 71fdd42d96 improve Ammo.list_types 2023-06-03 20:14:20 -04:00
shibao 8e99a57994 improve Containers.list_containers 2023-06-03 20:12:06 -04:00
shibao 7c42dd8a3a improve Containers.list_tags 2023-06-03 19:54:51 -04:00
shibao 79c97d7502 fix error/404 pages not rendering properly 2023-05-12 22:59:53 -04:00
shibao 2e488fa26c fix ammo type sql naming issues 2023-05-12 22:22:46 -04:00
shibao 2179bd5d86 fix table component ids 2023-05-12 21:55:59 -04:00
shibao 49628cb9bb pattern match on user struct in more cases 2023-05-12 21:48:19 -04:00
shibao 8a58d53dc1 fix pack sql naming issues 2023-05-12 21:48:04 -04:00
82 changed files with 9185 additions and 15557 deletions

View File

@ -17,7 +17,7 @@ steps:
- .mix - .mix
- name: test - name: test
image: elixir:1.14.4-alpine image: elixir:1.16.1-alpine
environment: environment:
TEST_DATABASE_URL: ecto://postgres:postgres@database/cannery_test TEST_DATABASE_URL: ecto://postgres:postgres@database/cannery_test
HOST: testing.example.tld HOST: testing.example.tld

View File

@ -1,3 +1,3 @@
elixir 1.14.4-otp-25 elixir 1.16.1-otp-26
erlang 25.3 erlang 26.2.2
nodejs 18.15.0 nodejs 21.6.2

View File

@ -1,3 +1,28 @@
# v0.9.9
- Actually fix bar graph
# v0.9.8
- Make bar graph ignore empty days
- Update dependencies
# v0.9.7
- Fix margin on bottom of page
- Use bar graph instead of line graph
- Improve login page autocomplete behavior
# v0.9.6
- Make ammo packs in containers directly navigable in table view
- Update dependencies
# v0.9.5
- Update dependencies
# v0.9.4
- Code quality fixes
- Fix error/404 pages not rendering properly
- Update dependencies
- Fix Range page title
# v0.9.3 # v0.9.3
- Update dependencies - Update dependencies
- Add pack lot number to search - Add pack lot number to search

View File

@ -1,4 +1,4 @@
FROM elixir:1.14.4-alpine AS build FROM elixir:1.16.1-alpine AS build
# install build dependencies # install build dependencies
RUN apk add --no-cache build-base npm git python3 RUN apk add --no-cache build-base npm git python3
@ -37,7 +37,7 @@ RUN mix do compile, release
FROM alpine:latest AS app FROM alpine:latest AS app
RUN apk upgrade --no-cache && \ RUN apk upgrade --no-cache && \
apk add --no-cache bash openssl libssl1.1 libcrypto1.1 libgcc libstdc++ ncurses-libs apk add --no-cache bash openssl libssl3 libcrypto3 libgcc libstdc++ ncurses-libs
WORKDIR /app WORKDIR /app

View File

@ -1,13 +1,12 @@
import { Chart, Title, Tooltip, Legend, LineController, LineElement, PointElement, TimeScale, LinearScale } from 'chart.js' import Chart from 'chart.js/auto'
import 'chartjs-adapter-date-fns' import 'chartjs-adapter-date-fns'
Chart.register(Title, Tooltip, Legend, LineController, LineElement, PointElement, TimeScale, LinearScale)
export default { export default {
initalizeChart (el) { initalizeChart (el) {
const data = JSON.parse(el.dataset.chartData) const data = JSON.parse(el.dataset.chartData)
this.el.chart = new Chart(el, { this.el.chart = new Chart(el, {
type: 'line', type: 'bar',
data: { data: {
datasets: [{ datasets: [{
label: el.dataset.label, label: el.dataset.label,
@ -51,13 +50,17 @@ export default {
stacked: true, stacked: true,
grace: '15%', grace: '15%',
ticks: { ticks: {
padding: 15 padding: 15,
precision: 0
} }
}, },
x: { x: {
type: 'time', type: 'timeseries',
time: { time: {
unit: 'day' unit: 'day'
},
ticks: {
source: 'data'
} }
} }
}, },

18856
assets/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,8 +3,8 @@
"description": " ", "description": " ",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": "v18.15.0", "node": "v21.6.2",
"npm": "9.5.0" "npm": "10.2.4"
}, },
"scripts": { "scripts": {
"deploy": "NODE_ENV=production webpack --mode production", "deploy": "NODE_ENV=production webpack --mode production",
@ -13,37 +13,37 @@
"test": "standard" "test": "standard"
}, },
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-free": "^6.4.0", "@fortawesome/fontawesome-free": "^6.5.1",
"chart.js": "^4.2.1", "chart.js": "^4.4.1",
"chartjs-adapter-date-fns": "^3.0.0", "chartjs-adapter-date-fns": "^3.0.0",
"date-fns": "^2.29.3", "date-fns": "^3.3.1",
"phoenix": "file:../deps/phoenix", "phoenix": "file:../deps/phoenix",
"phoenix_html": "file:../deps/phoenix_html", "phoenix_html": "file:../deps/phoenix_html",
"phoenix_live_view": "file:../deps/phoenix_live_view", "phoenix_live_view": "file:../deps/phoenix_live_view",
"topbar": "^2.0.1" "topbar": "^2.0.2"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.21.4", "@babel/core": "^7.23.9",
"@babel/preset-env": "^7.21.4", "@babel/preset-env": "^7.23.9",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.17",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.3",
"copy-webpack-plugin": "^11.0.0", "copy-webpack-plugin": "^12.0.2",
"css-loader": "^6.7.3", "css-loader": "^6.10.0",
"css-minimizer-webpack-plugin": "^5.0.0", "css-minimizer-webpack-plugin": "^6.0.0",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"mini-css-extract-plugin": "^2.7.5", "mini-css-extract-plugin": "^2.8.0",
"npm-check-updates": "^16.10.8", "npm-check-updates": "^16.14.15",
"postcss": "^8.4.21", "postcss": "^8.4.35",
"postcss-import": "^15.1.0", "postcss-import": "^16.0.1",
"postcss-loader": "^7.2.4", "postcss-loader": "^8.1.0",
"postcss-preset-env": "^8.3.1", "postcss-preset-env": "^9.4.0",
"sass": "^1.62.0", "sass": "^1.71.1",
"sass-loader": "^13.2.2", "sass-loader": "^14.1.1",
"standard": "^17.0.0", "standard": "^17.1.0",
"tailwindcss": "^3.3.1", "tailwindcss": "^3.4.1",
"terser-webpack-plugin": "^5.3.7", "terser-webpack-plugin": "^5.3.10",
"webpack": "^5.79.0", "webpack": "^5.90.3",
"webpack-cli": "^5.0.1", "webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^5.0.2"
} }
} }

View File

@ -18,7 +18,10 @@ config :cannery, CanneryWeb.Endpoint,
url: [scheme: "https", host: System.get_env("HOST") || "localhost", port: "443"], url: [scheme: "https", host: System.get_env("HOST") || "localhost", port: "443"],
http: [port: String.to_integer(System.get_env("PORT") || "4000")], http: [port: String.to_integer(System.get_env("PORT") || "4000")],
secret_key_base: "KH59P0iZixX5gP/u+zkxxG8vAAj6vgt0YqnwEB5JP5K+E567SsqkCz69uWShjE7I", secret_key_base: "KH59P0iZixX5gP/u+zkxxG8vAAj6vgt0YqnwEB5JP5K+E567SsqkCz69uWShjE7I",
render_errors: [view: CanneryWeb.ErrorView, accepts: ~w(html json), layout: false], render_errors: [
formats: [html: CanneryWeb.ErrorHTML, json: CanneryWeb.ErrorJSON],
layout: false
],
pubsub_server: Cannery.PubSub, pubsub_server: Cannery.PubSub,
live_view: [signing_salt: "zOLgd3lr"] live_view: [signing_salt: "zOLgd3lr"]

View File

@ -26,7 +26,7 @@ config :cannery, Cannery.Mailer, adapter: Swoosh.Adapters.Test
config :cannery, Cannery.Accounts, registration: "public" config :cannery, Cannery.Accounts, registration: "public"
# Print only warnings and errors during test # Print only warnings and errors during test
config :logger, level: :warn config :logger, level: :warning
# Initialize plugs at runtime for faster test compilation # Initialize plugs at runtime for faster test compilation
config :phoenix, :plug_init_mode, :runtime config :phoenix, :plug_init_mode, :runtime

View File

@ -404,15 +404,15 @@ defmodule Cannery.Accounts do
## Examples ## Examples
iex> is_admin?(%User{role: :admin}) iex> admin?(%User{role: :admin})
true true
iex> is_admin?(%User{}) iex> admin?(%User{})
false false
""" """
@spec is_admin?(User.t()) :: boolean() @spec admin?(User.t()) :: boolean()
def is_admin?(%User{id: user_id}) do def admin?(%User{id: user_id}) do
Repo.exists?(from u in User, where: u.id == ^user_id, where: u.role == :admin) Repo.exists?(from u in User, where: u.id == ^user_id, where: u.role == :admin)
end end
@ -421,16 +421,16 @@ defmodule Cannery.Accounts do
## Examples ## Examples
iex> is_already_admin?(%User{role: :admin}) iex> already_admin?(%User{role: :admin})
true true
iex> is_already_admin?(%User{}) iex> already_admin?(%User{})
false false
""" """
@spec is_already_admin?(User.t() | nil) :: boolean() @spec already_admin?(User.t() | nil) :: boolean()
def is_already_admin?(%User{role: :admin}), do: true def already_admin?(%User{role: :admin}), do: true
def is_already_admin?(_invalid_user), do: false def already_admin?(_invalid_user), do: false
## Confirmation ## Confirmation

View File

@ -8,38 +8,49 @@ defmodule Cannery.ActivityLog do
alias Cannery.{Accounts.User, ActivityLog.ShotRecord, Repo} alias Cannery.{Accounts.User, ActivityLog.ShotRecord, Repo}
alias Ecto.{Multi, Queryable} alias Ecto.{Multi, Queryable}
@type list_shot_records_option ::
{:search, String.t() | nil}
| {:class, Type.class() | :all | nil}
| {:pack_id, Pack.id() | nil}
@type list_shot_records_options :: [list_shot_records_option()]
@doc """ @doc """
Returns the list of shot_records. Returns the list of shot_records.
## Examples ## Examples
iex> list_shot_records(:all, %User{id: 123}) iex> list_shot_records(%User{id: 123})
[%ShotRecord{}, ...] [%ShotRecord{}, ...]
iex> list_shot_records("cool", :all, %User{id: 123}) iex> list_shot_records(%User{id: 123}, search: "cool")
[%ShotRecord{notes: "My cool shot record"}, ...] [%ShotRecord{notes: "My cool shot record"}, ...]
iex> list_shot_records("cool", :rifle, %User{id: 123}) iex> list_shot_records(%User{id: 123}, search: "cool", class: :rifle)
[%ShotRecord{notes: "Shot some rifle rounds"}, ...] [%ShotRecord{notes: "Shot some rifle rounds"}, ...]
iex> list_shot_records(%User{id: 123}, pack_id: 456)
[%ShotRecord{pack_id: 456}, ...]
""" """
@spec list_shot_records(Type.class() | :all, User.t()) :: [ShotRecord.t()] @spec list_shot_records(User.t()) :: [ShotRecord.t()]
@spec list_shot_records(search :: nil | String.t(), Type.class() | :all, User.t()) :: @spec list_shot_records(User.t(), list_shot_records_options()) :: [ShotRecord.t()]
[ShotRecord.t()] def list_shot_records(%User{id: user_id}, opts \\ []) do
def list_shot_records(search \\ nil, type, %{id: user_id}) do from(sr in ShotRecord,
from(sg in ShotRecord, as: :sr,
as: :sg, left_join: p in Pack,
left_join: ag in Pack, as: :p,
as: :ag, on: sr.pack_id == p.id,
on: sg.pack_id == ag.id, on: p.user_id == ^user_id,
left_join: at in Type, left_join: t in Type,
as: :at, as: :t,
on: ag.type_id == at.id, on: p.type_id == t.id,
where: sg.user_id == ^user_id, on: t.user_id == ^user_id,
distinct: sg.id where: sr.user_id == ^user_id,
distinct: sr.id
) )
|> list_shot_records_search(search) |> list_shot_records_search(Keyword.get(opts, :search))
|> list_shot_records_filter_type(type) |> list_shot_records_class(Keyword.get(opts, :class))
|> list_shot_records_pack_id(Keyword.get(opts, :pack_id))
|> Repo.all() |> Repo.all()
end end
@ -52,45 +63,44 @@ defmodule Cannery.ActivityLog do
query query
|> where( |> where(
[sg: sg, ag: ag, at: at], [sr: sr, p: p, t: t],
fragment( fragment(
"? @@ websearch_to_tsquery('english', ?)", "? @@ websearch_to_tsquery('english', ?)",
sg.search, sr.search,
^trimmed_search ^trimmed_search
) or ) or
fragment( fragment(
"? @@ websearch_to_tsquery('english', ?)", "? @@ websearch_to_tsquery('english', ?)",
ag.search, p.search,
^trimmed_search ^trimmed_search
) or ) or
fragment( fragment(
"? @@ websearch_to_tsquery('english', ?)", "? @@ websearch_to_tsquery('english', ?)",
at.search, t.search,
^trimmed_search ^trimmed_search
) )
) )
|> order_by([sg: sg], { |> order_by([sr: sr], {
:desc, :desc,
fragment( fragment(
"ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)", "ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)",
sg.search, sr.search,
^trimmed_search ^trimmed_search
) )
}) })
end end
@spec list_shot_records_filter_type(Queryable.t(), Type.class() | :all) :: @spec list_shot_records_class(Queryable.t(), Type.class() | :all | nil) :: Queryable.t()
Queryable.t() defp list_shot_records_class(query, class) when class in [:rifle, :pistol, :shotgun],
defp list_shot_records_filter_type(query, :rifle), do: query |> where([t: t], t.class == ^class)
do: query |> where([at: at], at.class == :rifle)
defp list_shot_records_filter_type(query, :pistol), defp list_shot_records_class(query, _all), do: query
do: query |> where([at: at], at.class == :pistol)
defp list_shot_records_filter_type(query, :shotgun), @spec list_shot_records_pack_id(Queryable.t(), Pack.id() | nil) :: Queryable.t()
do: query |> where([at: at], at.class == :shotgun) defp list_shot_records_pack_id(query, pack_id) when pack_id |> is_binary(),
do: query |> where([sr: sr], sr.pack_id == ^pack_id)
defp list_shot_records_filter_type(query, _all), do: query defp list_shot_records_pack_id(query, _all), do: query
@doc """ @doc """
Returns a count of shot records. Returns a count of shot records.
@ -104,25 +114,13 @@ defmodule Cannery.ActivityLog do
@spec get_shot_record_count!(User.t()) :: integer() @spec get_shot_record_count!(User.t()) :: integer()
def get_shot_record_count!(%User{id: user_id}) do def get_shot_record_count!(%User{id: user_id}) do
Repo.one( Repo.one(
from sg in ShotRecord, from sr in ShotRecord,
where: sg.user_id == ^user_id, where: sr.user_id == ^user_id,
select: count(sg.id), select: count(sr.id),
distinct: true distinct: true
) || 0 ) || 0
end end
@spec list_shot_records_for_pack(Pack.t(), User.t()) :: [ShotRecord.t()]
def list_shot_records_for_pack(
%Pack{id: pack_id, user_id: user_id},
%User{id: user_id}
) do
Repo.all(
from sg in ShotRecord,
where: sg.pack_id == ^pack_id,
where: sg.user_id == ^user_id
)
end
@doc """ @doc """
Gets a single shot_record. Gets a single shot_record.
@ -140,10 +138,10 @@ defmodule Cannery.ActivityLog do
@spec get_shot_record!(ShotRecord.id(), User.t()) :: ShotRecord.t() @spec get_shot_record!(ShotRecord.id(), User.t()) :: ShotRecord.t()
def get_shot_record!(id, %User{id: user_id}) do def get_shot_record!(id, %User{id: user_id}) do
Repo.one!( Repo.one!(
from sg in ShotRecord, from sr in ShotRecord,
where: sg.id == ^id, where: sr.id == ^id,
where: sg.user_id == ^user_id, where: sr.user_id == ^user_id,
order_by: sg.date order_by: sr.date
) )
end end
@ -172,9 +170,9 @@ defmodule Cannery.ActivityLog do
fn _repo, %{create_shot_record: %{pack_id: pack_id, user_id: user_id}} -> fn _repo, %{create_shot_record: %{pack_id: pack_id, user_id: user_id}} ->
pack = pack =
Repo.one( Repo.one(
from ag in Pack, from p in Pack,
where: ag.id == ^pack_id, where: p.id == ^pack_id,
where: ag.user_id == ^user_id where: p.user_id == ^user_id
) )
{:ok, pack} {:ok, pack}
@ -221,7 +219,7 @@ defmodule Cannery.ActivityLog do
|> Multi.run( |> Multi.run(
:pack, :pack,
fn repo, %{update_shot_record: %{pack_id: pack_id, user_id: user_id}} -> fn repo, %{update_shot_record: %{pack_id: pack_id, user_id: user_id}} ->
{:ok, repo.one(from ag in Pack, where: ag.id == ^pack_id and ag.user_id == ^user_id)} {:ok, repo.one(from p in Pack, where: p.id == ^pack_id and p.user_id == ^user_id)}
end end
) )
|> Multi.update( |> Multi.update(
@ -266,7 +264,7 @@ defmodule Cannery.ActivityLog do
|> Multi.run( |> Multi.run(
:pack, :pack,
fn repo, %{delete_shot_record: %{pack_id: pack_id, user_id: user_id}} -> fn repo, %{delete_shot_record: %{pack_id: pack_id, user_id: user_id}} ->
{:ok, repo.one(from ag in Pack, where: ag.id == ^pack_id and ag.user_id == ^user_id)} {:ok, repo.one(from p in Pack, where: p.id == ^pack_id and p.user_id == ^user_id)}
end end
) )
|> Multi.update( |> Multi.update(
@ -287,36 +285,6 @@ defmodule Cannery.ActivityLog do
end end
end end
@doc """
Returns the number of shot rounds for a pack
"""
@spec get_used_count(Pack.t(), User.t()) :: non_neg_integer()
def get_used_count(%Pack{id: pack_id} = pack, user) do
[pack]
|> get_used_counts(user)
|> Map.get(pack_id, 0)
end
@doc """
Returns the number of shot rounds for multiple packs
"""
@spec get_used_counts([Pack.t()], User.t()) ::
%{optional(Pack.id()) => non_neg_integer()}
def get_used_counts(packs, %User{id: user_id}) do
pack_ids =
packs
|> Enum.map(fn %{id: pack_id} -> pack_id end)
Repo.all(
from sg in ShotRecord,
where: sg.pack_id in ^pack_ids,
where: sg.user_id == ^user_id,
group_by: sg.pack_id,
select: {sg.pack_id, sum(sg.count)}
)
|> Map.new()
end
@doc """ @doc """
Returns the last entered shot record date for a pack Returns the last entered shot record date for a pack
""" """
@ -337,15 +305,18 @@ defmodule Cannery.ActivityLog do
|> Enum.map(fn %Pack{id: pack_id, user_id: ^user_id} -> pack_id end) |> Enum.map(fn %Pack{id: pack_id, user_id: ^user_id} -> pack_id end)
Repo.all( Repo.all(
from sg in ShotRecord, from sr in ShotRecord,
where: sg.pack_id in ^pack_ids, where: sr.pack_id in ^pack_ids,
where: sg.user_id == ^user_id, where: sr.user_id == ^user_id,
group_by: sg.pack_id, group_by: sr.pack_id,
select: {sg.pack_id, max(sg.date)} select: {sr.pack_id, max(sr.date)}
) )
|> Map.new() |> Map.new()
end end
@type get_used_count_option :: {:pack_id, Pack.id() | nil} | {:type_id, Type.id() | nil}
@type get_used_count_options :: [get_used_count_option()]
@doc """ @doc """
Gets the total number of rounds shot for a type Gets the total number of rounds shot for a type
@ -353,45 +324,116 @@ defmodule Cannery.ActivityLog do
## Examples ## Examples
iex> get_used_count_for_type(123, %User{id: 123}) iex> get_used_count(%User{id: 123}, type_id: 123)
35 35
iex> get_used_count_for_type(456, %User{id: 123}) iex> get_used_count(%User{id: 123}, pack_id: 456)
** (Ecto.NoResultsError) 50
""" """
@spec get_used_count_for_type(Type.t(), User.t()) :: non_neg_integer() @spec get_used_count(User.t(), get_used_count_options()) :: non_neg_integer()
def get_used_count_for_type(%Type{id: type_id} = type, user) do def get_used_count(%User{id: user_id}, opts) do
[type] from(sr in ShotRecord,
|> get_used_count_for_types(user) as: :sr,
|> Map.get(type_id, 0) left_join: p in Pack,
on: sr.pack_id == p.id,
on: p.user_id == ^user_id,
as: :p,
where: sr.user_id == ^user_id,
where: not (sr.count |> is_nil()),
select: sum(sr.count),
distinct: true
)
|> get_used_count_type_id(Keyword.get(opts, :type_id))
|> get_used_count_pack_id(Keyword.get(opts, :pack_id))
|> Repo.one() || 0
end end
@spec get_used_count_pack_id(Queryable.t(), Pack.id() | nil) :: Queryable.t()
defp get_used_count_pack_id(query, pack_id) when pack_id |> is_binary() do
query |> where([sr: sr], sr.pack_id == ^pack_id)
end
defp get_used_count_pack_id(query, _nil), do: query
@spec get_used_count_type_id(Queryable.t(), Type.id() | nil) :: Queryable.t()
defp get_used_count_type_id(query, type_id) when type_id |> is_binary() do
query |> where([p: p], p.type_id == ^type_id)
end
defp get_used_count_type_id(query, _nil), do: query
@type get_grouped_used_counts_option ::
{:packs, [Pack.t()] | nil}
| {:types, [Type.t()] | nil}
| {:group_by, :type_id | :pack_id}
@type get_grouped_used_counts_options :: [get_grouped_used_counts_option()]
@doc """ @doc """
Gets the total number of rounds shot for multiple types Gets the total number of rounds shot for multiple types or packs
## Examples ## Examples
iex> get_used_count_for_types(123, %User{id: 123}) iex> get_grouped_used_counts(
...> %User{id: 123},
...> group_by: :type_id,
...> types: [%Type{id: 456, user_id: 123}]
...> )
35 35
""" iex> get_grouped_used_counts(
@spec get_used_count_for_types([Type.t()], User.t()) :: ...> %User{id: 123},
%{optional(Type.id()) => non_neg_integer()} ...> group_by: :pack_id,
def get_used_count_for_types(types, %User{id: user_id}) do ...> packs: [%Pack{id: 456, user_id: 123}]
type_ids = ...> )
types 22
|> Enum.map(fn %Type{id: type_id, user_id: ^user_id} -> type_id end)
Repo.all( """
from ag in Pack, @spec get_grouped_used_counts(User.t(), get_grouped_used_counts_options()) ::
left_join: sg in ShotRecord, %{optional(Type.id() | Pack.id()) => non_neg_integer()}
on: ag.id == sg.pack_id, def get_grouped_used_counts(%User{id: user_id}, opts) do
where: ag.type_id in ^type_ids, from(p in Pack,
where: not (sg.count |> is_nil()), as: :p,
group_by: ag.type_id, left_join: sr in ShotRecord,
select: {ag.type_id, sum(sg.count)} on: p.id == sr.pack_id,
on: p.user_id == ^user_id,
as: :sr,
where: sr.user_id == ^user_id,
where: not (sr.count |> is_nil())
) )
|> get_grouped_used_counts_group_by(Keyword.fetch!(opts, :group_by))
|> get_grouped_used_counts_types(Keyword.get(opts, :types))
|> get_grouped_used_counts_packs(Keyword.get(opts, :packs))
|> Repo.all()
|> Map.new() |> Map.new()
end end
@spec get_grouped_used_counts_group_by(Queryable.t(), :type_id | :pack_id) :: Queryable.t()
defp get_grouped_used_counts_group_by(query, :type_id) do
query
|> group_by([p: p], p.type_id)
|> select([sr: sr, p: p], {p.type_id, sum(sr.count)})
end
defp get_grouped_used_counts_group_by(query, :pack_id) do
query
|> group_by([sr: sr], sr.pack_id)
|> select([sr: sr], {sr.pack_id, sum(sr.count)})
end
@spec get_grouped_used_counts_types(Queryable.t(), [Type.t()] | nil) :: Queryable.t()
defp get_grouped_used_counts_types(query, types) when types |> is_list() do
type_ids = types |> Enum.map(fn %Type{id: type_id} -> type_id end)
query |> where([p: p], p.type_id in ^type_ids)
end
defp get_grouped_used_counts_types(query, _nil), do: query
@spec get_grouped_used_counts_packs(Queryable.t(), [Pack.t()] | nil) :: Queryable.t()
defp get_grouped_used_counts_packs(query, packs) when packs |> is_list() do
pack_ids = packs |> Enum.map(fn %Pack{id: pack_id} -> pack_id end)
query |> where([p: p], p.id in ^pack_ids)
end
defp get_grouped_used_counts_packs(query, _nil), do: query
end end

File diff suppressed because it is too large Load Diff

View File

@ -7,10 +7,13 @@ defmodule Cannery.Containers do
import Ecto.Query, warn: false import Ecto.Query, warn: false
alias Cannery.{Accounts.User, Ammo.Pack, Repo} alias Cannery.{Accounts.User, Ammo.Pack, Repo}
alias Cannery.Containers.{Container, ContainerTag, Tag} alias Cannery.Containers.{Container, ContainerTag, Tag}
alias Ecto.Changeset alias Ecto.{Changeset, Queryable}
@container_preloads [:tags] @container_preloads [:tags]
@type list_containers_option :: {:search, String.t() | nil}
@type list_containers_options :: [list_containers_option()]
@doc """ @doc """
Returns the list of containers. Returns the list of containers.
@ -19,30 +22,31 @@ defmodule Cannery.Containers do
iex> list_containers(%User{id: 123}) iex> list_containers(%User{id: 123})
[%Container{}, ...] [%Container{}, ...]
iex> list_containers("cool", %User{id: 123}) iex> list_containers(%User{id: 123}, search: "cool")
[%Container{name: "my cool container"}, ...] [%Container{name: "my cool container"}, ...]
""" """
@spec list_containers(User.t()) :: [Container.t()] @spec list_containers(User.t()) :: [Container.t()]
@spec list_containers(search :: nil | String.t(), User.t()) :: [Container.t()] @spec list_containers(User.t(), list_containers_options()) :: [Container.t()]
def list_containers(search \\ nil, %User{id: user_id}) do def list_containers(%User{id: user_id}, opts \\ []) do
from(c in Container, from(c in Container,
as: :c, as: :c,
left_join: t in assoc(c, :tags), left_join: t in assoc(c, :tags),
on: c.user_id == t.user_id,
as: :t, as: :t,
where: c.user_id == ^user_id, where: c.user_id == ^user_id,
order_by: c.name,
distinct: c.id, distinct: c.id,
preload: ^@container_preloads preload: ^@container_preloads
) )
|> list_containers_search(search) |> list_containers_search(Keyword.get(opts, :search))
|> Repo.all() |> Repo.all()
end end
defp list_containers_search(query, nil), do: query @spec list_containers_search(Queryable.t(), search :: String.t() | nil) :: Queryable.t()
defp list_containers_search(query, ""), do: query defp list_containers_search(query, search) when search in ["", nil],
do: query |> order_by([c: c], c.name)
defp list_containers_search(query, search) do defp list_containers_search(query, search) when search |> is_binary() do
trimmed_search = String.trim(search) trimmed_search = String.trim(search)
query query
@ -203,9 +207,9 @@ defmodule Cannery.Containers do
{:ok, Container.t()} | {:error, Container.changeset()} {:ok, Container.t()} | {:error, Container.changeset()}
def delete_container(%Container{user_id: user_id} = container, %User{id: user_id}) do def delete_container(%Container{user_id: user_id} = container, %User{id: user_id}) do
Repo.one( Repo.one(
from ag in Pack, from p in Pack,
where: ag.container_id == ^container.id, where: p.container_id == ^container.id,
select: count(ag.id) select: count(p.id)
) )
|> case do |> case do
0 -> 0 ->
@ -289,6 +293,9 @@ defmodule Cannery.Containers do
# Container Tags # Container Tags
@type list_tags_option :: {:search, String.t() | nil}
@type list_tags_options :: [list_tags_option()]
@doc """ @doc """
Returns the list of tags. Returns the list of tags.
@ -297,38 +304,42 @@ defmodule Cannery.Containers do
iex> list_tags(%User{id: 123}) iex> list_tags(%User{id: 123})
[%Tag{}, ...] [%Tag{}, ...]
iex> list_tags("cool", %User{id: 123}) iex> list_tags(%User{id: 123}, search: "cool")
[%Tag{name: "my cool tag"}, ...] [%Tag{name: "my cool tag"}, ...]
""" """
@spec list_tags(User.t()) :: [Tag.t()] @spec list_tags(User.t()) :: [Tag.t()]
@spec list_tags(search :: nil | String.t(), User.t()) :: [Tag.t()] @spec list_tags(User.t(), list_tags_options()) :: [Tag.t()]
def list_tags(search \\ nil, user) def list_tags(%User{id: user_id}, opts \\ []) do
from(t in Tag, as: :t, where: t.user_id == ^user_id)
|> list_tags_search(Keyword.get(opts, :search))
|> Repo.all()
end
def list_tags(search, %{id: user_id}) when search |> is_nil() or search == "", @spec list_tags_search(Queryable.t(), search :: String.t() | nil) :: Queryable.t()
do: Repo.all(from t in Tag, where: t.user_id == ^user_id, order_by: t.name) defp list_tags_search(query, search) when search in ["", nil],
do: query |> order_by([t: t], t.name)
def list_tags(search, %{id: user_id}) when search |> is_binary() do defp list_tags_search(query, search) when search |> is_binary() do
trimmed_search = String.trim(search) trimmed_search = String.trim(search)
Repo.all( query
from t in Tag, |> where(
where: t.user_id == ^user_id, [t: t],
where: fragment(
fragment( "? @@ websearch_to_tsquery('english', ?)",
"? @@ websearch_to_tsquery('english', ?)", t.search,
t.search, ^trimmed_search
^trimmed_search )
),
order_by: {
:desc,
fragment(
"ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)",
t.search,
^trimmed_search
)
}
) )
|> order_by([t: t], {
:desc,
fragment(
"ts_rank_cd(?, websearch_to_tsquery('english', ?), 4)",
t.search,
^trimmed_search
)
})
end end
@doc """ @doc """

View File

@ -69,6 +69,7 @@ defmodule CanneryWeb do
def html do def html do
quote do quote do
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
use Phoenix.Component use Phoenix.Component
# Import convenience functions from controllers # Import convenience functions from controllers
@ -82,11 +83,8 @@ defmodule CanneryWeb do
defp html_helpers do defp html_helpers do
quote do quote do
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse use PhoenixHTMLHelpers
use Phoenix.HTML import Phoenix.{Component, HTML, HTML.Form}
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
import Phoenix.Component
import CanneryWeb.{ErrorHelpers, Gettext, CoreComponents, HTMLHelpers} import CanneryWeb.{ErrorHelpers, Gettext, CoreComponents, HTMLHelpers}
# Shortcut for generating JS commands # Shortcut for generating JS commands

View File

@ -71,8 +71,16 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
current_user: current_user, current_user: current_user,
tag_actions: tag_actions, tag_actions: tag_actions,
actions: actions, actions: actions,
pack_count: Ammo.get_packs_count_for_containers(containers, current_user), pack_count:
round_count: Ammo.get_round_count_for_containers(containers, current_user) Ammo.get_grouped_packs_count(current_user,
containers: containers,
group_by: :container_id
),
round_count:
Ammo.get_grouped_round_count(current_user,
containers: containers,
group_by: :container_id
)
} }
rows = rows =

View File

@ -27,15 +27,15 @@
<%= @container.location %> <%= @container.location %>
</span> </span>
<%= if @container |> Ammo.get_packs_count_for_container!(@current_user) != 0 do %> <%= if Ammo.get_packs_count(@current_user, container_id: @container.id) != 0 do %>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Packs:") %> <%= gettext("Packs:") %>
<%= @container |> Ammo.get_packs_count_for_container!(@current_user) %> <%= Ammo.get_packs_count(@current_user, container_id: @container.id) %>
</span> </span>
<span class="rounded-lg title text-lg"> <span class="rounded-lg title text-lg">
<%= gettext("Rounds:") %> <%= gettext("Rounds:") %>
<%= @container |> Ammo.get_round_count_for_container!(@current_user) %> <%= Ammo.get_round_count(@current_user, container_id: @container.id) %>
</span> </span>
<% end %> <% end %>

View File

@ -48,7 +48,7 @@
<%= gettext("Range") %> <%= gettext("Range") %>
</.link> </.link>
</li> </li>
<li :if={@current_user |> Accounts.is_already_admin?()} class="mx-2 my-1"> <li :if={@current_user |> Accounts.already_admin?()} class="mx-2 my-1">
<.link navigate={~p"/invites"} class="text-white hover:underline"> <.link navigate={~p"/invites"} class="text-white hover:underline">
<%= gettext("Invites") %> <%= gettext("Invites") %>
</.link> </.link>
@ -70,7 +70,7 @@
</li> </li>
<li <li
:if={ :if={
@current_user |> Accounts.is_already_admin?() and @current_user |> Accounts.already_admin?() and
function_exported?(Routes, :live_dashboard_path, 2) function_exported?(Routes, :live_dashboard_path, 2)
} }
class="mx-2 my-1" class="mx-2 my-1"

View File

@ -1,18 +1,45 @@
<main role="main" class="min-h-full min-w-full"> <main class="pb-8 min-w-full">
<header> <header>
<.topbar current_user={assigns[:current_user]} /> <.topbar current_user={assigns[:current_user]} />
<div class="mx-8 my-2 flex flex-col space-y-4 text-center"> <div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p :if={@flash["info"]} class="alert alert-info" role="alert"> <p
<%= @flash["info"] %> :if={@flash && @flash |> Map.has_key?("info")}
class="alert alert-info"
role="alert"
phx-click="lv:clear-flash"
phx-value-key="info"
>
<%= live_flash(@flash, "info") %>
</p> </p>
<p :if={@flash["error"]} class="alert alert-danger" role="alert">
<%= @flash["error"] %> <p
:if={@flash && @flash |> Map.has_key?("error")}
class="alert alert-danger"
role="alert"
phx-click="lv:clear-flash"
phx-value-key="error"
>
<%= live_flash(@flash, "error") %>
</p> </p>
</div> </div>
</header> </header>
<div class="mx-4 sm:mx-8 md:mx-16"> <div class="mx-4 sm:mx-8 md:mx-16 flex flex-col justify-center items-stretch">
<%= @inner_content %> <%= @inner_content %>
</div> </div>
</main> </main>
<div
id="disconnect"
class="z-50 fixed opacity-0 bottom-12 right-12 px-8 py-4 w-max h-max
border border-primary-200 shadow-lg rounded-lg bg-white
flex justify-center items-center space-x-4
transition-opacity ease-in-out duration-500 delay-[2000ms]"
>
<i class="fas fa-fade text-md fa-satellite-dish"></i>
<h1 class="title text-md title-primary-500">
<%= gettext("Reconnecting...") %>
</h1>
</div>

View File

@ -0,0 +1 @@
<%= @inner_block %>

View File

@ -1,45 +0,0 @@
<main class="pb-8 min-w-full">
<header>
<.topbar current_user={assigns[:current_user]} />
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p
:if={@flash && @flash |> Map.has_key?("info")}
class="alert alert-info"
role="alert"
phx-click="lv:clear-flash"
phx-value-key="info"
>
<%= live_flash(@flash, "info") %>
</p>
<p
:if={@flash && @flash |> Map.has_key?("error")}
class="alert alert-danger"
role="alert"
phx-click="lv:clear-flash"
phx-value-key="error"
>
<%= live_flash(@flash, "error") %>
</p>
</div>
</header>
<div class="mx-4 sm:mx-8 md:mx-16 flex flex-col justify-center items-stretch">
<%= @inner_content %>
</div>
</main>
<div
id="disconnect"
class="z-50 fixed opacity-0 bottom-12 right-12 px-8 py-4 w-max h-max
border border-primary-200 shadow-lg rounded-lg bg-white
flex justify-center items-center space-x-4
transition-opacity ease-in-out duration-500 delay-[2000ms]"
>
<i class="fas fa-fade text-md fa-satellite-dish"></i>
<h1 class="title text-md title-primary-500">
<%= gettext("Reconnecting...") %>
</h1>
</div>

View File

@ -89,7 +89,7 @@ defmodule CanneryWeb.Components.MovePackComponent do
<% else %> <% else %>
<.live_component <.live_component
module={CanneryWeb.Components.TableComponent} module={CanneryWeb.Components.TableComponent}
id="move_pack_table" id="move-pack-table"
columns={@columns} columns={@columns}
rows={@rows} rows={@rows}
/> />

View File

@ -141,7 +141,12 @@ defmodule CanneryWeb.Components.PackTableComponent do
def render(assigns) do def render(assigns) do
~H""" ~H"""
<div id={@id} class="w-full"> <div id={@id} class="w-full">
<.live_component module={TableComponent} id={"table-#{@id}"} columns={@columns} rows={@rows} /> <.live_component
module={TableComponent}
id={"pack-table-#{@id}"}
columns={@columns}
rows={@rows}
/>
</div> </div>
""" """
end end

View File

@ -74,7 +74,7 @@ defmodule CanneryWeb.Components.ShotRecordTableComponent do
<div id={@id} class="w-full"> <div id={@id} class="w-full">
<.live_component <.live_component
module={CanneryWeb.Components.TableComponent} module={CanneryWeb.Components.TableComponent}
id={"table-#{@id}"} id={"shot-record-table-#{@id}"}
columns={@columns} columns={@columns}
rows={@rows} rows={@rows}
initial_key={:date} initial_key={:date}

View File

@ -151,17 +151,25 @@ defmodule CanneryWeb.Components.TypeTableComponent do
) )
|> TableComponent.maybe_compose_columns(%{label: gettext("Name"), key: :name, type: :name}) |> TableComponent.maybe_compose_columns(%{label: gettext("Name"), key: :name, type: :name})
round_counts = types |> Ammo.get_round_count_for_types(current_user) round_counts = Ammo.get_grouped_round_count(current_user, types: types, group_by: :type_id)
packs_count = types |> Ammo.get_packs_count_for_types(current_user) packs_count = Ammo.get_grouped_packs_count(current_user, types: types, group_by: :type_id)
average_costs = types |> Ammo.get_average_cost_for_types(current_user) average_costs = Ammo.get_average_costs(types, current_user)
[used_counts, historical_round_counts, historical_pack_counts, used_pack_counts] = [used_counts, historical_round_counts, historical_pack_counts, used_pack_counts] =
if show_used do if show_used do
[ [
types |> ActivityLog.get_used_count_for_types(current_user), ActivityLog.get_grouped_used_counts(current_user, types: types, group_by: :type_id),
types |> Ammo.get_historical_count_for_types(current_user), Ammo.get_historical_counts(types, current_user),
types |> Ammo.get_packs_count_for_types(current_user, true), Ammo.get_grouped_packs_count(current_user,
types |> Ammo.get_used_packs_count_for_types(current_user) types: types,
group_by: :type_id,
show_used: true
),
Ammo.get_grouped_packs_count(current_user,
types: types,
group_by: :type_id,
show_used: :only_used
)
] ]
else else
[nil, nil, nil, nil] [nil, nil, nil, nil]
@ -192,7 +200,12 @@ defmodule CanneryWeb.Components.TypeTableComponent do
def render(assigns) do def render(assigns) do
~H""" ~H"""
<div id={@id} class="w-full"> <div id={@id} class="w-full">
<.live_component module={TableComponent} id={"table-#{@id}"} columns={@columns} rows={@rows} /> <.live_component
module={TableComponent}
id={"type-table-#{@id}"}
columns={@columns}
rows={@rows}
/>
</div> </div>
""" """
end end

View File

@ -3,14 +3,22 @@ defmodule CanneryWeb.ExportController do
alias Cannery.{ActivityLog, Ammo, Containers} alias Cannery.{ActivityLog, Ammo, Containers}
def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do
types = Ammo.list_types(current_user, :all) types = Ammo.list_types(current_user)
used_counts = types |> ActivityLog.get_used_count_for_types(current_user)
round_counts = types |> Ammo.get_round_count_for_types(current_user)
pack_counts = types |> Ammo.get_packs_count_for_types(current_user)
total_pack_counts = types |> Ammo.get_packs_count_for_types(current_user, true) used_counts =
ActivityLog.get_grouped_used_counts(current_user, types: types, group_by: :type_id)
average_costs = types |> Ammo.get_average_cost_for_types(current_user) round_counts = Ammo.get_grouped_round_count(current_user, types: types, group_by: :type_id)
pack_counts = Ammo.get_grouped_packs_count(current_user, types: types, group_by: :type_id)
total_pack_counts =
Ammo.get_grouped_packs_count(current_user,
types: types,
group_by: :type_id,
show_used: true
)
average_costs = Ammo.get_average_costs(types, current_user)
types = types =
types types
@ -27,8 +35,11 @@ defmodule CanneryWeb.ExportController do
}) })
end) end)
packs = Ammo.list_packs(nil, :all, current_user, true) packs = Ammo.list_packs(current_user, show_used: true)
used_counts = packs |> ActivityLog.get_used_counts(current_user)
used_counts =
ActivityLog.get_grouped_used_counts(current_user, packs: packs, group_by: :pack_id)
original_counts = packs |> Ammo.get_original_counts(current_user) original_counts = packs |> Ammo.get_original_counts(current_user)
cprs = packs |> Ammo.get_cprs(current_user) cprs = packs |> Ammo.get_cprs(current_user)
percentages_remaining = packs |> Ammo.get_percentages_remaining(current_user) percentages_remaining = packs |> Ammo.get_percentages_remaining(current_user)
@ -47,20 +58,17 @@ defmodule CanneryWeb.ExportController do
}) })
end) end)
shot_records = ActivityLog.list_shot_records(:all, current_user) shot_records = ActivityLog.list_shot_records(current_user)
containers = containers =
Containers.list_containers(current_user) Containers.list_containers(current_user)
|> Enum.map(fn container -> |> Enum.map(fn container ->
pack_count = container |> Ammo.get_packs_count_for_container!(current_user)
round_count = container |> Ammo.get_round_count_for_container!(current_user)
container container
|> Jason.encode!() |> Jason.encode!()
|> Jason.decode!() |> Jason.decode!()
|> Map.merge(%{ |> Map.merge(%{
"pack_count" => pack_count, "pack_count" => Ammo.get_packs_count(current_user, container_id: container.id),
"round_count" => round_count "round_count" => Ammo.get_round_count(current_user, container_id: container.id)
}) })
end) end)

View File

@ -71,7 +71,7 @@ defmodule CanneryWeb.UserRegistrationController do
|> redirect(to: ~p"/") |> redirect(to: ~p"/")
{:error, %Changeset{} = changeset} -> {:error, %Changeset{} = changeset} ->
conn |> render("new.html", changeset: changeset, invite_token: invite_token) conn |> render(:new, changeset: changeset, invite_token: invite_token)
end end
end end
end end

View File

@ -15,10 +15,18 @@
</p> </p>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %> <%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %> <%= email_input(f, :email,
autocomplete: :email,
class: "input input-primary col-span-2",
required: true
) %>
<%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %> <%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %> <%= password_input(f, :password,
autocomplete: "current-password",
class: "input input-primary col-span-2",
required: true
) %>
<%= label(f, :remember_me, gettext("Keep me logged in for 60 days"), <%= label(f, :remember_me, gettext("Keep me logged in for 60 days"),
class: "title text-lg text-primary-600" class: "title text-lg text-primary-600"

View File

@ -3,8 +3,8 @@ defmodule CanneryWeb.ErrorHelpers do
Conveniences for translating and building error messages. Conveniences for translating and building error messages.
""" """
use Phoenix.HTML use PhoenixHTMLHelpers
import Phoenix.Component import Phoenix.{Component, HTML.Form}
alias Ecto.Changeset alias Ecto.Changeset
alias Phoenix.{HTML.Form, LiveView.Rendered} alias Phoenix.{HTML.Form, LiveView.Rendered}
@ -65,7 +65,7 @@ defmodule CanneryWeb.ErrorHelpers do
changeset changeset
|> changeset_error_map() |> changeset_error_map()
|> Enum.map_join(". ", fn {key, errors} -> |> Enum.map_join(". ", fn {key, errors} ->
"#{key |> humanize()}: #{errors |> Enum.join(", ")}" "#{key |> Phoenix.Naming.humanize()}: #{errors |> Enum.join(", ")}"
end) end)
end end

View File

@ -113,6 +113,6 @@ defmodule CanneryWeb.ContainerLive.Index do
end end
defp display_containers(%{assigns: %{search: search, current_user: current_user}} = socket) do defp display_containers(%{assigns: %{search: search, current_user: current_user}} = socket) do
socket |> assign(:containers, Containers.list_containers(search, current_user)) socket |> assign(:containers, Containers.list_containers(current_user, search: search))
end end
end end

View File

@ -51,7 +51,7 @@
<%= if @view_table do %> <%= if @view_table do %>
<.live_component <.live_component
module={CanneryWeb.Components.ContainerTableComponent} module={CanneryWeb.Components.ContainerTableComponent}
id="containers_index_table" id="containers-index-table"
action={@live_action} action={@live_action}
containers={@containers} containers={@containers}
current_user={@current_user} current_user={@current_user}

View File

@ -104,8 +104,10 @@ defmodule CanneryWeb.ContainerLive.Show do
id, id,
current_user current_user
) do ) do
%{name: container_name} = container = Containers.get_container!(id, current_user) %{id: container_id, name: container_name} =
packs = Ammo.list_packs_for_container(container, class, current_user) container = Containers.get_container!(id, current_user)
packs = Ammo.list_packs(current_user, container_id: container_id, class: class)
original_counts = packs |> Ammo.get_original_counts(current_user) original_counts = packs |> Ammo.get_original_counts(current_user)
cprs = packs |> Ammo.get_cprs(current_user) cprs = packs |> Ammo.get_cprs(current_user)
last_used_dates = packs |> ActivityLog.get_last_used_dates(current_user) last_used_dates = packs |> ActivityLog.get_last_used_dates(current_user)
@ -120,8 +122,8 @@ defmodule CanneryWeb.ContainerLive.Show do
socket socket
|> assign( |> assign(
container: container, container: container,
round_count: Ammo.get_round_count_for_container!(container, current_user), round_count: Ammo.get_round_count(current_user, container_id: container.id),
packs_count: Ammo.get_packs_count_for_container!(container, current_user), packs_count: Ammo.get_packs_count(current_user, container_id: container.id),
packs: packs, packs: packs,
original_counts: original_counts, original_counts: original_counts,
cprs: cprs, cprs: cprs,

View File

@ -120,7 +120,7 @@
<%= if @view_table do %> <%= if @view_table do %>
<.live_component <.live_component
module={CanneryWeb.Components.PackTableComponent} module={CanneryWeb.Components.PackTableComponent}
id="type-show-table" id="pack-show-table"
packs={@packs} packs={@packs}
current_user={@current_user} current_user={@current_user}
show_used={false} show_used={false}
@ -130,6 +130,21 @@
<%= type_name %> <%= type_name %>
</.link> </.link>
</:type> </:type>
<:actions :let={%{count: pack_count} = pack}>
<div class="py-2 px-4 h-full space-x-4 flex justify-center items-center">
<.link
navigate={~p"/ammo/show/#{pack}"}
class="text-primary-600 link"
aria-label={
dgettext("actions", "View pack of %{pack_count} bullets",
pack_count: pack_count
)
}
>
<i class="fa-fw fa-lg fas fa-eye"></i>
</.link>
</div>
</:actions>
</.live_component> </.live_component>
<% else %> <% else %>
<div class="flex flex-wrap justify-center items-stretch"> <div class="flex flex-wrap justify-center items-stretch">

View File

@ -26,7 +26,7 @@ defmodule CanneryWeb.PackLive.FormComponent do
socket = socket =
socket socket
|> assign(:pack_create_limit, @pack_create_limit) |> assign(:pack_create_limit, @pack_create_limit)
|> assign(:types, Ammo.list_types(current_user, :all)) |> assign(:types, Ammo.list_types(current_user))
|> assign_new(:containers, fn -> Containers.list_containers(current_user) end) |> assign_new(:containers, fn -> Containers.list_containers(current_user) end)
params = params =

View File

@ -148,8 +148,8 @@ defmodule CanneryWeb.PackLive.Index do
) do ) do
# get total number of packs to determine whether to display onboarding # get total number of packs to determine whether to display onboarding
# prompts # prompts
packs_count = Ammo.get_packs_count!(current_user, true) packs_count = Ammo.get_packs_count(current_user, show_used: true)
packs = Ammo.list_packs(search, class, current_user, show_used) packs = Ammo.list_packs(current_user, search: search, class: class, show_used: show_used)
types_count = Ammo.get_types_count!(current_user) types_count = Ammo.get_types_count!(current_user)
containers_count = Containers.get_containers_count!(current_user) containers_count = Containers.get_containers_count!(current_user)

View File

@ -145,7 +145,9 @@
navigate={~p"/ammo/show/#{pack}"} navigate={~p"/ammo/show/#{pack}"}
class="text-primary-600 link" class="text-primary-600 link"
aria-label={ aria-label={
dgettext("actions", "View pack of %{pack_count} bullets", pack_count: pack_count) dgettext("actions", "View pack of %{pack_count} bullets",
pack_count: pack_count
)
} }
> >
<i class="fa-fw fa-lg fas fa-eye"></i> <i class="fa-fw fa-lg fas fa-eye"></i>
@ -155,7 +157,9 @@
patch={~p"/ammo/edit/#{pack}"} patch={~p"/ammo/edit/#{pack}"}
class="text-primary-600 link" class="text-primary-600 link"
aria-label={ aria-label={
dgettext("actions", "Edit pack of %{pack_count} bullets", pack_count: pack_count) dgettext("actions", "Edit pack of %{pack_count} bullets",
pack_count: pack_count
)
} }
> >
<i class="fa-fw fa-lg fas fa-edit"></i> <i class="fa-fw fa-lg fas fa-edit"></i>

View File

@ -92,7 +92,7 @@ defmodule CanneryWeb.PackLive.Show do
%{label: gettext("Actions"), key: :actions, sortable: false} %{label: gettext("Actions"), key: :actions, sortable: false}
] ]
shot_records = ActivityLog.list_shot_records_for_pack(pack, current_user) shot_records = ActivityLog.list_shot_records(current_user, pack_id: pack.id)
rows = rows =
shot_records shot_records

View File

@ -115,7 +115,7 @@
<.live_component <.live_component
module={CanneryWeb.Components.TableComponent} module={CanneryWeb.Components.TableComponent}
id="pack_shot_records_table" id="pack-shot-records-table"
columns={@columns} columns={@columns}
rows={@rows} rows={@rows}
/> />

View File

@ -44,7 +44,7 @@ defmodule CanneryWeb.RangeLive.Index do
defp apply_action(socket, :new, _params) do defp apply_action(socket, :new, _params) do
socket socket
|> assign( |> assign(
page_title: gettext("New Shot Records"), page_title: gettext("Record Shots"),
shot_record: %ShotRecord{} shot_record: %ShotRecord{}
) )
end end
@ -52,7 +52,7 @@ defmodule CanneryWeb.RangeLive.Index do
defp apply_action(socket, :index, _params) do defp apply_action(socket, :index, _params) do
socket socket
|> assign( |> assign(
page_title: gettext("Shot Records"), page_title: gettext("Range"),
search: nil, search: nil,
shot_record: nil shot_record: nil
) )
@ -62,7 +62,7 @@ defmodule CanneryWeb.RangeLive.Index do
defp apply_action(socket, :search, %{"search" => search}) do defp apply_action(socket, :search, %{"search" => search}) do
socket socket
|> assign( |> assign(
page_title: gettext("Shot Records"), page_title: gettext("Range"),
search: search, search: search,
shot_record: nil shot_record: nil
) )
@ -120,8 +120,8 @@ defmodule CanneryWeb.RangeLive.Index do
defp display_shot_records( defp display_shot_records(
%{assigns: %{class: class, search: search, current_user: current_user}} = socket %{assigns: %{class: class, search: search, current_user: current_user}} = socket
) do ) do
shot_records = ActivityLog.list_shot_records(search, class, current_user) shot_records = ActivityLog.list_shot_records(current_user, search: search, class: class)
packs = Ammo.list_staged_packs(current_user) packs = Ammo.list_packs(current_user, staged: true)
chart_data = shot_records |> get_chart_data_for_shot_record() chart_data = shot_records |> get_chart_data_for_shot_record()
original_counts = packs |> Ammo.get_original_counts(current_user) original_counts = packs |> Ammo.get_original_counts(current_user)
cprs = packs |> Ammo.get_cprs(current_user) cprs = packs |> Ammo.get_cprs(current_user)

View File

@ -80,7 +80,9 @@
phx-submit="change_class" phx-submit="change_class"
class="flex items-center" class="flex items-center"
> >
<%= label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center") %> <%= label(f, :class, gettext("Class"),
class: "title text-primary-600 text-lg text-center"
) %>
<%= select( <%= select(
f, f,
@ -122,7 +124,7 @@
<% else %> <% else %>
<.live_component <.live_component
module={CanneryWeb.Components.ShotRecordTableComponent} module={CanneryWeb.Components.ShotRecordTableComponent}
id="shot_records_index_table" id="shot-records-index-table"
shot_records={@shot_records} shot_records={@shot_records}
current_user={@current_user} current_user={@current_user}
> >

View File

@ -75,6 +75,6 @@ defmodule CanneryWeb.TagLive.Index do
end end
defp display_tags(%{assigns: %{search: search, current_user: current_user}} = socket) do defp display_tags(%{assigns: %{search: search, current_user: current_user}} = socket) do
socket |> assign(tags: Containers.list_tags(search, current_user)) socket |> assign(tags: Containers.list_tags(current_user, search: search))
end end
end end

View File

@ -85,14 +85,18 @@
) %> ) %>
<%= error_tag(f, :unfired_length, "col-span-3 text-center") %> <%= error_tag(f, :unfired_length, "col-span-3 text-center") %>
<%= label(f, :brass_height, gettext("Brass height"), class: "title text-lg text-primary-600") %> <%= label(f, :brass_height, gettext("Brass height"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :brass_height, <%= text_input(f, :brass_height,
class: "text-center col-span-2 input input-primary", class: "text-center col-span-2 input input-primary",
maxlength: 255 maxlength: 255
) %> ) %>
<%= error_tag(f, :brass_height, "col-span-3 text-center") %> <%= error_tag(f, :brass_height, "col-span-3 text-center") %>
<%= label(f, :chamber_size, gettext("Chamber size"), class: "title text-lg text-primary-600") %> <%= label(f, :chamber_size, gettext("Chamber size"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :chamber_size, <%= text_input(f, :chamber_size,
class: "text-center col-span-2 input input-primary", class: "text-center col-span-2 input input-primary",
maxlength: 255 maxlength: 255
@ -167,7 +171,9 @@
<%= hidden_input(f, :jacket_type, value: nil) %> <%= hidden_input(f, :jacket_type, value: nil) %>
<% end %> <% end %>
<%= label(f, :case_material, gettext("Case material"), class: "title text-lg text-primary-600") %> <%= label(f, :case_material, gettext("Case material"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :case_material, <%= text_input(f, :case_material,
class: "text-center col-span-2 input input-primary", class: "text-center col-span-2 input input-primary",
maxlength: 255, maxlength: 255,

View File

@ -106,7 +106,7 @@ defmodule CanneryWeb.TypeLive.Index do
) do ) do
socket socket
|> assign( |> assign(
types: Ammo.list_types(search, current_user, class), types: Ammo.list_types(current_user, class: class, search: search),
types_count: Ammo.get_types_count!(current_user) types_count: Ammo.get_types_count!(current_user)
) )
end end

View File

@ -26,7 +26,9 @@
phx-submit="change_class" phx-submit="change_class"
class="flex items-center" class="flex items-center"
> >
<%= label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center") %> <%= label(f, :class, gettext("Class"),
class: "title text-primary-600 text-lg text-center"
) %>
<%= select( <%= select(
f, f,
@ -74,7 +76,7 @@
<% else %> <% else %>
<.live_component <.live_component
module={CanneryWeb.Components.TypeTableComponent} module={CanneryWeb.Components.TypeTableComponent}
id="types_index_table" id="types-index-table"
action={@live_action} action={@live_action}
types={@types} types={@types}
current_user={@current_user} current_user={@current_user}

View File

@ -40,7 +40,7 @@ defmodule CanneryWeb.TypeLive.Show do
defp display_type( defp display_type(
%{assigns: %{live_action: live_action, current_user: current_user, show_used: show_used}} = %{assigns: %{live_action: live_action, current_user: current_user, show_used: show_used}} =
socket, socket,
%Type{name: type_name} = type %Type{id: type_id, name: type_name} = type
) do ) do
custom_fields? = custom_fields? =
fields_to_display(type) fields_to_display(type)
@ -54,7 +54,7 @@ defmodule CanneryWeb.TypeLive.Show do
type |> Map.get(field) != default_value type |> Map.get(field) != default_value
end) end)
packs = type |> Ammo.list_packs_for_type(current_user, show_used) packs = Ammo.list_packs(current_user, type_id: type_id, show_used: show_used)
[ [
original_counts, original_counts,
@ -66,10 +66,10 @@ defmodule CanneryWeb.TypeLive.Show do
if show_used do if show_used do
[ [
packs |> Ammo.get_original_counts(current_user), packs |> Ammo.get_original_counts(current_user),
type |> Ammo.get_used_packs_count_for_type(current_user), Ammo.get_packs_count(current_user, type_id: type.id, show_used: :only_used),
type |> Ammo.get_packs_count_for_type(current_user, true), Ammo.get_packs_count(current_user, type_id: type.id, show_used: true),
type |> ActivityLog.get_used_count_for_type(current_user), ActivityLog.get_used_count(current_user, type_id: type.id),
type |> Ammo.get_historical_count_for_type(current_user) Ammo.get_historical_count(type, current_user)
] ]
else else
[nil, nil, nil, nil, nil] [nil, nil, nil, nil, nil]
@ -94,12 +94,12 @@ defmodule CanneryWeb.TypeLive.Show do
containers: containers, containers: containers,
cprs: packs |> Ammo.get_cprs(current_user), cprs: packs |> Ammo.get_cprs(current_user),
last_used_dates: packs |> ActivityLog.get_last_used_dates(current_user), last_used_dates: packs |> ActivityLog.get_last_used_dates(current_user),
avg_cost_per_round: type |> Ammo.get_average_cost_for_type(current_user), avg_cost_per_round: Ammo.get_average_cost(type, current_user),
rounds: type |> Ammo.get_round_count_for_type(current_user), rounds: Ammo.get_round_count(current_user, type_id: type.id),
original_counts: original_counts, original_counts: original_counts,
used_rounds: used_rounds, used_rounds: used_rounds,
historical_round_count: historical_round_count, historical_round_count: historical_round_count,
packs_count: type |> Ammo.get_packs_count_for_type(current_user), packs_count: Ammo.get_packs_count(current_user, type_id: type.id),
used_packs_count: used_packs_count, used_packs_count: used_packs_count,
historical_packs_count: historical_packs_count, historical_packs_count: historical_packs_count,
fields_to_display: fields_to_display(type), fields_to_display: fields_to_display(type),

View File

@ -198,7 +198,9 @@
navigate={~p"/ammo/show/#{pack}"} navigate={~p"/ammo/show/#{pack}"}
class="text-primary-600 link" class="text-primary-600 link"
aria-label={ aria-label={
dgettext("actions", "View pack of %{pack_count} bullets", pack_count: pack_count) dgettext("actions", "View pack of %{pack_count} bullets",
pack_count: pack_count
)
} }
> >
<i class="fa-fw fa-lg fas fa-eye"></i> <i class="fa-fw fa-lg fas fa-eye"></i>

39
mix.exs
View File

@ -4,8 +4,8 @@ defmodule Cannery.MixProject do
def project do def project do
[ [
app: :cannery, app: :cannery,
version: "0.9.3", version: "0.9.9",
elixir: "1.14.4", elixir: "1.16.1",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod, start_permanent: Mix.env() == :prod,
aliases: aliases(), aliases: aliases(),
@ -47,29 +47,30 @@ defmodule Cannery.MixProject do
defp deps do defp deps do
[ [
{:bcrypt_elixir, "~> 3.0"}, {:bcrypt_elixir, "~> 3.0"},
{:phoenix, "~> 1.7.0"}, {:credo, "~> 1.5", only: [:dev, :test], runtime: false},
{:phoenix_ecto, "~> 4.4"}, {:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false},
{:phoenix_html, "~> 3.0"}, {:ecto_psql_extras, "~> 0.6"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.18.0"},
{:phoenix_live_dashboard, "~> 0.6"},
{:ecto_sql, "~> 3.6"}, {:ecto_sql, "~> 3.6"},
{:postgrex, ">= 0.0.0"}, {:eqrcode, "~> 0.1.10"},
{:floki, ">= 0.30.0", only: :test},
# {:esbuild, "~> 0.3", runtime: Mix.env() == :dev}, # {:esbuild, "~> 0.3", runtime: Mix.env() == :dev},
{:ex_doc, "~> 0.27", only: :dev, runtime: false}, {:ex_doc, "~> 0.27", only: :dev, runtime: false},
{:swoosh, "~> 1.6"}, {:floki, ">= 0.30.0", only: :test},
{:gen_smtp, "~> 1.0"}, {:gen_smtp, "~> 1.0"},
{:oban, "~> 2.10"},
{:telemetry_metrics, "~> 0.6"},
{:telemetry_poller, "~> 1.0"},
{:gettext, "~> 0.18"}, {:gettext, "~> 0.18"},
{:jason, "~> 1.2"}, {:jason, "~> 1.2"},
{:plug_cowboy, "~> 2.5"}, {:oban, "~> 2.10"},
{:ecto_psql_extras, "~> 0.6"}, {:phoenix_ecto, "~> 4.4"},
{:eqrcode, "~> 0.1.10"}, {:phoenix_html_helpers, "~> 1.0"},
{:credo, "~> 1.5", only: [:dev, :test], runtime: false}, {:phoenix_html, "~> 4.0"},
{:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false} {:phoenix_live_dashboard, "~> 0.8"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.20.0"},
{:phoenix, "~> 1.7.11"},
{:plug_cowboy, "~> 2.7"},
{:postgrex, ">= 0.0.0"},
{:swoosh, "~> 1.6"},
{:telemetry_metrics, "~> 0.6"},
{:telemetry_poller, "~> 1.0"}
] ]
end end

View File

@ -1,54 +1,54 @@
%{ %{
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.0.1", "9be815469e6bfefec40fa74658ecbbe6897acfb57614df1416eeccd4903f602c", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "486bb95efb645d1efc6794c1ddd776a186a9a713abf06f45708a6ce324fb96cf"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "3.1.0", "0b110a9a6c619b19a7f73fa3004aa11d6e719a67e672d1633dc36b6b2290a0f7", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "2ad2acb5a8bc049e8d5aa267802631912bb80d5f4110a178ae7999e69dca1bf7"},
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
"castore": {:hex, :castore, "1.0.1", "240b9edb4e9e94f8f56ab39d8d2d0a57f49e46c56aced8f873892df8ff64ff5a", [:mix], [], "hexpm", "b4951de93c224d44fac71614beabd88b71932d0b1dea80d2f80fb9044e01bbb3"}, "castore": {:hex, :castore, "1.0.6", "ffc42f110ebfdafab0ea159cd43d31365fa0af0ce4a02ecebf1707ae619ee727", [:mix], [], "hexpm", "374c6e7ca752296be3d6780a6d5b922854ffcc74123da90f2f328996b962d33a"},
"comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"}, "comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"},
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"},
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
"credo": {:hex, :credo, "1.7.0", "6119bee47272e85995598ee04f2ebbed3e947678dee048d10b5feca139435f75", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "6839fcf63d1f0d1c0f450abc8564a57c43d644077ab96f2934563e68b8a769d7"}, "credo": {:hex, :credo, "1.7.5", "643213503b1c766ec0496d828c90c424471ea54da77c8a168c725686377b9545", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f799e9b5cd1891577d8c773d245668aa74a2fcd15eb277f51a0131690ebfb3fd"},
"db_connection": {:hex, :db_connection, "2.5.0", "bb6d4f30d35ded97b29fe80d8bd6f928a1912ca1ff110831edcd238a1973652c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c92d5ba26cd69ead1ff7582dbb860adeedfff39774105a4f1c92cbb654b55aa2"}, "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"},
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
"dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"}, "dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"},
"earmark_parser": {:hex, :earmark_parser, "1.4.31", "a93921cdc6b9b869f519213d5bc79d9e218ba768d7270d46fdcf1c01bacff9e2", [:mix], [], "hexpm", "317d367ee0335ef037a87e46c91a2269fef6306413f731e8ec11fc45a7efd059"}, "earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"},
"ecto": {:hex, :ecto, "3.10.1", "c6757101880e90acc6125b095853176a02da8f1afe056f91f1f90b80c9389822", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d2ac4255f1601bdf7ac74c0ed971102c6829dc158719b94bd30041bbad77f87a"}, "ecto": {:hex, :ecto, "3.11.2", "e1d26be989db350a633667c5cda9c3d115ae779b66da567c68c80cfb26a8c9ee", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c38bca2c6f8d8023f2145326cc8a80100c3ffe4dcbd9842ff867f7fc6156c65"},
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.10", "e14d400930f401ca9f541b3349212634e44027d7f919bbb71224d7ac0d0e8acd", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.15.7 or ~> 0.16.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "505e8cd81e4f17c090be0f99e92b1b3f0fd915f98e76965130b8ccfb891e7088"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.15", "0fc29dbae0e444a29bd6abeee4cf3c4c037e692a272478a234a1cc765077dbb1", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "b6127f3a5c6fc3d84895e4768cc7c199f22b48b67d6c99b13fbf4a374e73f039"},
"ecto_sql": {:hex, :ecto_sql, "3.10.1", "6ea6b3036a0b0ca94c2a02613fd9f742614b5cfe494c41af2e6571bb034dd94c", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f6a25bdbbd695f12c8171eaff0851fa4c8e72eec1e98c7364402dda9ce11c56b"}, "ecto_sql": {:hex, :ecto_sql, "3.11.1", "e9abf28ae27ef3916b43545f9578b4750956ccea444853606472089e7d169470", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ce14063ab3514424276e7e360108ad6c2308f6d88164a076aac8a387e1fea634"},
"elixir_make": {:hex, :elixir_make, "0.7.6", "67716309dc5d43e16b5abbd00c01b8df6a0c2ab54a8f595468035a50189f9169", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5a0569756b0f7873a77687800c164cca6dfc03a09418e6fcf853d78991f49940"}, "elixir_make": {:hex, :elixir_make, "0.8.2", "cd4a5a75891362e9207adaac7e66223fd256ec2518ae013af7f10c9c85b50b5c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "9d9607d640c372a7291e5a56ce655aa2351897929be20bd211648fdb79e725dc"},
"eqrcode": {:hex, :eqrcode, "0.1.10", "6294fece9d68ad64eef1c3c92cf111cfd6469f4fbf230a2d4cc905a682178f3f", [:mix], [], "hexpm", "da30e373c36a0fd37ab6f58664b16029919896d6c45a68a95cc4d713e81076f1"}, "eqrcode": {:hex, :eqrcode, "0.1.10", "6294fece9d68ad64eef1c3c92cf111cfd6469f4fbf230a2d4cc905a682178f3f", [:mix], [], "hexpm", "da30e373c36a0fd37ab6f58664b16029919896d6c45a68a95cc4d713e81076f1"},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"}, "ex_doc": {:hex, :ex_doc, "0.31.2", "8b06d0a5ac69e1a54df35519c951f1f44a7b7ca9a5bb7a260cd8a174d6322ece", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.1", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "317346c14febaba9ca40fd97b5b5919f7751fb85d399cc8e7e8872049f37e0af"},
"expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"}, "expo": {:hex, :expo, "0.5.2", "beba786aab8e3c5431813d7a44b828e7b922bfa431d6bfbada0904535342efe2", [:mix], [], "hexpm", "8c9bfa06ca017c9cb4020fabe980bc7fdb1aaec059fd004c2ab3bff03b1c599c"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"},
"floki": {:hex, :floki, "0.34.2", "5fad07ef153b3b8ec110b6b155ec3780c4b2c4906297d0b4be1a7162d04a7e02", [:mix], [], "hexpm", "26b9d50f0f01796bc6be611ca815c5e0de034d2128e39cc9702eee6b66a4d1c8"}, "floki": {:hex, :floki, "0.36.1", "712b7f2ba19a4d5a47dfe3e74d81876c95bbcbee44fe551f0af3d2a388abb3da", [:mix], [], "hexpm", "21ba57abb8204bcc70c439b423fc0dd9f0286de67dc82773a14b0200ada0995f"},
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"}, "gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
"gettext": {:hex, :gettext, "0.22.1", "e7942988383c3d9eed4bdc22fc63e712b655ae94a672a27e4900e3d4a2c43581", [:mix], [{:expo, "~> 0.4.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "ad105b8dab668ee3f90c0d3d94ba75e9aead27a62495c101d94f2657a190ac5d"}, "gettext": {:hex, :gettext, "0.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"},
"jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, "makeup": {:hex, :makeup, "1.1.1", "fa0bc768698053b2b3869fa8a62616501ff9d11a562f3ce39580d60860c3a55e", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5dc62fbdd0de44de194898b6710692490be74baa02d9d108bc29f007783b0b48"},
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"}, "makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"},
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"},
"mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"}, "mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
"nimble_parsec": {:hex, :nimble_parsec, "1.3.0", "9e18a119d9efc3370a3ef2a937bf0b24c088d9c4bf0ba9d7c3751d49d347d035", [:mix], [], "hexpm", "7977f183127a7cbe9346981e2f480dc04c55ffddaef746bd58debd566070eef8"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
"oban": {:hex, :oban, "2.15.0", "27b9c2845cdff30c98c8060b11a64318e79bbc1bd32b8dc95fa59a1580a8d90c", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "22e181c540335d1dd5c995be00435927075519207d62b3de32477d95dbf9dfd3"}, "oban": {:hex, :oban, "2.17.6", "bac1dacd836edbf6a200ddd880db10faa2d39bb2e550ec6d19b3eb9c43852c2a", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "623f3554212e9a776e015156c47f076d66c7b74115ac47a7d3acba0294e65acb"},
"phoenix": {:hex, :phoenix, "1.7.2", "c375ffb482beb4e3d20894f84dd7920442884f5f5b70b9f4528cbe0cedefec63", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.4", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1ebca94b32b4d0e097ab2444a9742ed8ff3361acad17365e4e6b2e79b4792159"}, "phoenix": {:hex, :phoenix, "1.7.11", "1d88fc6b05ab0c735b250932c4e6e33bfa1c186f76dcf623d8dd52f07d6379c7", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "b1ec57f2e40316b306708fe59b92a16b9f6f4bf50ccfa41aa8c7feb79e0ec02a"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.5.1", "6fdbc334ea53620e71655664df6f33f670747b3a7a6c4041cdda3e2c32df6257", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ebe43aa580db129e54408e719fb9659b7f9e0d52b965c5be26cdca416ecead28"},
"phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"}, "phoenix_html": {:hex, :phoenix_html, "4.1.1", "4c064fd3873d12ebb1388425a8f2a19348cef56e7289e1998e2d2fa758aa982e", [:mix], [], "hexpm", "f2f2df5a72bc9a2f510b21497fd7d2b86d932ec0598f0210fed4114adc546c6f"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.7.2", "97cc4ff2dba1ebe504db72cb45098cb8e91f11160528b980bd282cc45c73b29c", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.18.3", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "0e5fdf063c7a3b620c566a30fcf68b7ee02e5e46fe48ee46a6ec3ba382dc05b7"}, "phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.3", "7ff51c9b6609470f681fbea20578dede0e548302b0c8bdf338b5a753a4f045bf", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "f9470a0a8bae4f56430a23d42f977b5a6205fdba6559d76f932b876bfaec652d"},
"phoenix_live_view": {:hex, :phoenix_live_view, "0.18.18", "1f38fbd7c363723f19aad1a04b5490ff3a178e37daaf6999594d5f34796c47fc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a5810d0472f3189ede6d2a95bda7f31c6113156b91784a3426cb0ab6a6d85214"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.2", "354460993a480656b71c3887f5565f612b3bdbdd8688c83f9e6f512307067dd4", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "2bb3722f327e14a7aa47b1acf27ed633c8cd27b167e18b8237954b9b4804af39"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"}, "phoenix_live_view": {:hex, :phoenix_live_view, "0.20.14", "70fa101aa0539e81bed4238777498f6215e9dda3461bdaa067cad6908110c364", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "82f6d006c5264f979ed5eb75593d808bbe39020f20df2e78426f4f2d570e2402"},
"phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
"plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
"plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"}, "plug": {:hex, :plug, "1.15.3", "712976f504418f6dff0a3e554c40d705a9bcf89a7ccef92fc6a5ef8f16a30a97", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cc4365a3c010a56af402e0809208873d113e9c38c401cabd88027ef4f5c01fd2"},
"plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "plug_cowboy": {:hex, :plug_cowboy, "2.7.0", "3ae9369c60641084363b08fe90267cbdd316df57e3557ea522114b30b63256ea", [:mix], [{:cowboy, "~> 2.7.0 or ~> 2.8.0 or ~> 2.9.0 or ~> 2.10.0", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "d85444fb8aa1f2fc62eabe83bbe387d81510d773886774ebdcb429b3da3c1a4a"},
"postgrex": {:hex, :postgrex, "0.16.5", "fcc4035cc90e23933c5d69a9cd686e329469446ef7abba2cf70f08e2c4b69810", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "edead639dc6e882618c01d8fc891214c481ab9a3788dfe38dd5e37fd1d5fb2e8"}, "plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"},
"postgrex": {:hex, :postgrex, "0.17.5", "0483d054938a8dc069b21bdd636bf56c487404c241ce6c319c1f43588246b281", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "50b8b11afbb2c4095a3ba675b4f055c416d0f3d7de6633a595fc131a828a67eb"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"swoosh": {:hex, :swoosh, "1.9.1", "0a5d7bf9954eb41d7e55525bc0940379982b090abbaef67cd8e1fd2ed7f8ca1a", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "76dffff3ffcab80f249d5937a592eaef7cc49ac6f4cdd27e622868326ed6371e"}, "swoosh": {:hex, :swoosh, "1.16.3", "4ab7dc429e84afaf8ffe1c7c06ce1acbc7ddde758d2cb9152dd2ac32289d5498", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.1.0", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.4 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ff70980087650a72951ebd109a286d83c270e2b6610aba447140562adff8cf0a"},
"table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, "table_rex": {:hex, :table_rex, "4.0.0", "3c613a68ebdc6d4d1e731bc973c233500974ec3993c99fcdabb210407b90959b", [:mix], [], "hexpm", "c35c4d5612ca49ebb0344ea10387da4d2afe278387d4019e4d8111e815df8f55"},
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"},
"telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"}, "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
"websock": {:hex, :websock, "0.5.0", "f6bbce90226121d62a0715bca7c986c5e43de0ccc9475d79c55381d1796368cc", [:mix], [], "hexpm", "b51ac706df8a7a48a2c622ee02d09d68be8c40418698ffa909d73ae207eb5fb8"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},
"websock_adapter": {:hex, :websock_adapter, "0.5.0", "cea35d8bbf1a6964e32d4b02ceb561dfb769c04f16d60d743885587e7d2ca55b", [:mix], [{:bandit, "~> 0.6", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "16318b124effab8209b1eb7906c636374f623dc9511a8278ad09c083cea5bb83"}, "websock_adapter": {:hex, :websock_adapter, "0.5.5", "9dfeee8269b27e958a65b3e235b7e447769f66b5b5925385f5a569269164a210", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "4b977ba4a01918acbf77045ff88de7f6972c2a009213c515a445c48f224ffce9"},
} }

View File

@ -56,7 +56,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:38 #: lib/cannery_web/controllers/user_session_html/new.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Forgot your password?" msgid "Forgot your password?"
msgstr "" msgstr ""
@ -72,7 +72,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3 #: lib/cannery_web/controllers/user_session_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:28 #: lib/cannery_web/controllers/user_session_html/new.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
@ -98,7 +98,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/cannery_web/controllers/user_session_html/new.html.heex:35 #: lib/cannery_web/controllers/user_session_html/new.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
@ -121,7 +121,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:90 #: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:44 #: lib/cannery_web/live/range_live/form_component.html.heex:44
#: lib/cannery_web/live/tag_live/form_component.html.heex:37 #: lib/cannery_web/live/tag_live/form_component.html.heex:37
#: lib/cannery_web/live/type_live/form_component.html.heex:353 #: lib/cannery_web/live/type_live/form_component.html.heex:359
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -288,23 +288,24 @@ msgstr ""
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:168 #: lib/cannery_web/live/pack_live/index.html.heex:172
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone pack of %{pack_count} bullets" msgid "Clone pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:183 #: lib/cannery_web/live/pack_live/index.html.heex:187
#: lib/cannery_web/live/pack_live/show.html.heex:71 #: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete pack of %{pack_count} bullets" msgid "Delete pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:158 #: lib/cannery_web/live/pack_live/index.html.heex:160
#: lib/cannery_web/live/pack_live/show.html.heex:59 #: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit pack of %{pack_count} bullets" msgid "Edit pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:139
#: lib/cannery_web/live/pack_live/index.html.heex:148 #: lib/cannery_web/live/pack_live/index.html.heex:148
#: lib/cannery_web/live/type_live/show.html.heex:201 #: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -312,29 +313,29 @@ msgid "View pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:159 #: lib/cannery_web/live/pack_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:152 #: lib/cannery_web/live/range_live/index.html.heex:154
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_record_count} shots" msgid "Delete shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:144 #: lib/cannery_web/live/pack_live/show.ex:144
#: lib/cannery_web/live/range_live/index.html.heex:135 #: lib/cannery_web/live/range_live/index.html.heex:137
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_record_count} shots" msgid "Edit shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:105 #: lib/cannery_web/live/type_live/index.html.heex:107
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Clone %{type_name}" msgid "Clone %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:122 #: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35 #: lib/cannery_web/live/type_live/show.html.heex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete %{type_name}" msgid "Delete %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:97 #: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19 #: lib/cannery_web/live/type_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{type_name}" msgid "Edit %{type_name}"
@ -345,7 +346,7 @@ msgstr ""
msgid "New Type" msgid "New Type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:89 #: lib/cannery_web/live/type_live/index.html.heex:91
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "View %{type_name}" msgid "View %{type_name}"
msgstr "" msgstr ""

View File

@ -69,7 +69,7 @@ msgstr "Benutzer löschen"
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:38 #: lib/cannery_web/controllers/user_session_html/new.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Forgot your password?" msgid "Forgot your password?"
msgstr "Passwort vergessen?" msgstr "Passwort vergessen?"
@ -85,7 +85,7 @@ msgstr "Laden Sie jemanden ein!"
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3 #: lib/cannery_web/controllers/user_session_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:28 #: lib/cannery_web/controllers/user_session_html/new.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Log in" msgid "Log in"
msgstr "Einloggen" msgstr "Einloggen"
@ -111,7 +111,7 @@ msgstr "Neuer Tag"
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/cannery_web/controllers/user_session_html/new.html.heex:35 #: lib/cannery_web/controllers/user_session_html/new.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Registrieren" msgstr "Registrieren"
@ -134,7 +134,7 @@ msgstr "Passwort zurücksetzen"
#: lib/cannery_web/live/pack_live/form_component.html.heex:90 #: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:44 #: lib/cannery_web/live/range_live/form_component.html.heex:44
#: lib/cannery_web/live/tag_live/form_component.html.heex:37 #: lib/cannery_web/live/tag_live/form_component.html.heex:37
#: lib/cannery_web/live/type_live/form_component.html.heex:353 #: lib/cannery_web/live/type_live/form_component.html.heex:359
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@ -301,23 +301,24 @@ msgstr ""
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:168 #: lib/cannery_web/live/pack_live/index.html.heex:172
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets" msgid "Clone pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:183 #: lib/cannery_web/live/pack_live/index.html.heex:187
#: lib/cannery_web/live/pack_live/show.html.heex:71 #: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets" msgid "Delete pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:158 #: lib/cannery_web/live/pack_live/index.html.heex:160
#: lib/cannery_web/live/pack_live/show.html.heex:59 #: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets" msgid "Edit pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:139
#: lib/cannery_web/live/pack_live/index.html.heex:148 #: lib/cannery_web/live/pack_live/index.html.heex:148
#: lib/cannery_web/live/type_live/show.html.heex:201 #: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
@ -325,29 +326,29 @@ msgid "View pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:159 #: lib/cannery_web/live/pack_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:152 #: lib/cannery_web/live/range_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots" msgid "Delete shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:144 #: lib/cannery_web/live/pack_live/show.ex:144
#: lib/cannery_web/live/range_live/index.html.heex:135 #: lib/cannery_web/live/range_live/index.html.heex:137
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots" msgid "Edit shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:105 #: lib/cannery_web/live/type_live/index.html.heex:107
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}" msgid "Clone %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:122 #: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35 #: lib/cannery_web/live/type_live/show.html.heex:35
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}" msgid "Delete %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:97 #: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19 #: lib/cannery_web/live/type_live/show.html.heex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}" msgid "Edit %{type_name}"
@ -358,7 +359,7 @@ msgstr ""
msgid "New Type" msgid "New Type"
msgstr "Neue Munitionsart" msgstr "Neue Munitionsart"
#: lib/cannery_web/live/type_live/index.html.heex:89 #: lib/cannery_web/live/type_live/index.html.heex:91
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}" msgid "View %{type_name}"
msgstr "" msgstr ""

View File

@ -44,24 +44,24 @@ msgid "Background color"
msgstr "Hintergrundfarbe" msgstr "Hintergrundfarbe"
#: lib/cannery_web/components/type_table_component.ex:86 #: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:327 #: lib/cannery_web/live/type_live/form_component.html.heex:333
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank" msgid "Blank"
msgstr "Knallpatrone" msgstr "Knallpatrone"
#: lib/cannery_web/live/type_live/form_component.html.heex:174 #: lib/cannery_web/live/type_live/form_component.html.heex:180
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Brass" msgid "Brass"
msgstr "Messing" msgstr "Messing"
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:147 #: lib/cannery_web/live/type_live/form_component.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core" msgid "Bullet core"
msgstr "Projektilkern" msgstr "Projektilkern"
#: lib/cannery_web/components/type_table_component.ex:59 #: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:121 #: lib/cannery_web/live/type_live/form_component.html.heex:125
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type" msgid "Bullet type"
msgstr "Patronenart" msgstr "Patronenart"
@ -79,7 +79,7 @@ msgid "Cartridge"
msgstr "Patrone" msgstr "Patrone"
#: lib/cannery_web/components/type_table_component.ex:66 #: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:170 #: lib/cannery_web/live/type_live/form_component.html.heex:174
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material" msgid "Case material"
msgstr "Gehäusematerial" msgstr "Gehäusematerial"
@ -100,7 +100,7 @@ msgid "Containers"
msgstr "Behälter" msgstr "Behälter"
#: lib/cannery_web/components/type_table_component.ex:87 #: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:331 #: lib/cannery_web/live/type_live/form_component.html.heex:337
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive" msgid "Corrosive"
msgstr "Korrosiv" msgstr "Korrosiv"
@ -145,19 +145,19 @@ msgstr "Einladung bearbeiten"
msgid "Edit Tag" msgid "Edit Tag"
msgstr "Tag bearbeiten" msgstr "Tag bearbeiten"
#: lib/cannery_web/live/type_live/form_component.html.heex:135 #: lib/cannery_web/live/type_live/form_component.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "FMJ" msgid "FMJ"
msgstr "VM" msgstr "VM"
#: lib/cannery_web/components/type_table_component.ex:58 #: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:111 #: lib/cannery_web/live/type_live/form_component.html.heex:115
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains" msgid "Grains"
msgstr "Körner" msgstr "Körner"
#: lib/cannery_web/components/type_table_component.ex:85 #: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:323 #: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary" msgid "Incendiary"
msgstr "Brandmunition" msgstr "Brandmunition"
@ -184,7 +184,7 @@ msgstr "Nur mit Einladung"
msgid "Invites" msgid "Invites"
msgstr "Einladungen" msgstr "Einladungen"
#: lib/cannery_web/controllers/user_session_html/new.html.heex:23 #: lib/cannery_web/controllers/user_session_html/new.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "Für 60 Tage eingeloggt bleiben" msgstr "Für 60 Tage eingeloggt bleiben"
@ -208,8 +208,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Magazin, Ladestreifen, Munitionskiste usw." msgstr "Magazin, Ladestreifen, Munitionskiste usw."
#: lib/cannery_web/components/type_table_component.ex:88 #: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:336 #: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:339 #: lib/cannery_web/live/type_live/form_component.html.heex:345
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer" msgid "Manufacturer"
msgstr "Hersteller" msgstr "Hersteller"
@ -299,7 +299,7 @@ msgid "On the bookshelf"
msgstr "Auf dem Bücherregal" msgstr "Auf dem Bücherregal"
#: lib/cannery_web/components/type_table_component.ex:79 #: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:260 #: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure" msgid "Pressure"
msgstr "Druck" msgstr "Druck"
@ -316,7 +316,7 @@ msgid "Price paid:"
msgstr "Kaufpreis:" msgstr "Kaufpreis:"
#: lib/cannery_web/components/type_table_component.ex:82 #: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:299 #: lib/cannery_web/live/type_live/form_component.html.heex:305
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type" msgid "Primer type"
msgstr "Zündertyp" msgstr "Zündertyp"
@ -349,7 +349,7 @@ msgstr "Einstellungen"
msgid "Simple:" msgid "Simple:"
msgstr "Einfach:" msgstr "Einfach:"
#: lib/cannery_web/live/type_live/form_component.html.heex:154 #: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Steel" msgid "Steel"
msgstr "Stahl" msgstr "Stahl"
@ -384,7 +384,7 @@ 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"
#: lib/cannery_web/components/type_table_component.ex:84 #: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:319 #: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer" msgid "Tracer"
msgstr "Leuchtspur" msgstr "Leuchtspur"
@ -426,6 +426,8 @@ msgstr "Keine Tags für diesen Behälter"
#: lib/cannery_web/components/core_components/topbar.html.heex:48 #: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80 #: lib/cannery_web/components/pack_table_component.ex:80
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "Schießplatz" msgstr "Schießplatz"
@ -459,13 +461,8 @@ msgstr "Keine Munition selektiert"
msgid "Record shots" msgid "Record shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr "Neue Schießkladde"
#: lib/cannery_web/live/range_live/index.html.heex:52 #: lib/cannery_web/live/range_live/index.html.heex:52
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:121
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "Keine Schüsse dokumentiert" msgstr "Keine Schüsse dokumentiert"
@ -477,12 +474,6 @@ msgstr "Keine Schüsse dokumentiert"
msgid "Rounds shot" msgid "Rounds shot"
msgstr "Patronen abgefeuert" msgstr "Patronen abgefeuert"
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr "Schießkladde"
#: lib/cannery_web/live/pack_live/index.ex:43 #: lib/cannery_web/live/pack_live/index.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
@ -500,9 +491,9 @@ msgstr "Schießkladde"
#: lib/cannery_web/components/core_components/pack_card.html.heex:42 #: lib/cannery_web/components/core_components/pack_card.html.heex:42
#: lib/cannery_web/components/core_components/pack_card.html.heex:47 #: lib/cannery_web/components/core_components/pack_card.html.heex:47
#: lib/cannery_web/components/pack_table_component.ex:176 #: lib/cannery_web/components/pack_table_component.ex:181
#: lib/cannery_web/components/pack_table_component.ex:259 #: lib/cannery_web/components/pack_table_component.ex:264
#: lib/cannery_web/components/type_table_component.ex:260 #: lib/cannery_web/components/type_table_component.ex:273
#: lib/cannery_web/live/pack_live/show.html.heex:37 #: lib/cannery_web/live/pack_live/show.html.heex:37
#: lib/cannery_web/live/pack_live/show.html.heex:42 #: lib/cannery_web/live/pack_live/show.html.heex:42
#: lib/cannery_web/live/type_live/show.html.heex:150 #: lib/cannery_web/live/type_live/show.html.heex:150
@ -510,36 +501,36 @@ msgstr "Schießkladde"
msgid "$%{amount}" msgid "$%{amount}"
msgstr "$%{amount}" msgstr "$%{amount}"
#: lib/cannery_web/live/type_live/form_component.html.heex:163 #: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bimetal" msgid "Bimetal"
msgstr "Bimetall" msgstr "Bimetall"
#: lib/cannery_web/components/type_table_component.ex:65 #: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:159 #: lib/cannery_web/live/type_live/form_component.html.heex:163
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type" msgid "Jacket type"
msgstr "Patronenhülse" msgstr "Patronenhülse"
#: lib/cannery_web/components/type_table_component.ex:81 #: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:282 #: lib/cannery_web/live/type_live/form_component.html.heex:288
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity" msgid "Muzzle velocity"
msgstr "Mündungsgeschwindigkeit" msgstr "Mündungsgeschwindigkeit"
#: lib/cannery_web/components/type_table_component.ex:75 #: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:247 #: lib/cannery_web/live/type_live/form_component.html.heex:253
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge" msgid "Powder grains per charge"
msgstr "Pulverkörner pro Ladung" msgstr "Pulverkörner pro Ladung"
#: lib/cannery_web/components/type_table_component.ex:73 #: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:239 #: lib/cannery_web/live/type_live/form_component.html.heex:245
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type" msgid "Powder type"
msgstr "Pulverart" msgstr "Pulverart"
#: lib/cannery_web/live/type_live/form_component.html.heex:346 #: lib/cannery_web/live/type_live/form_component.html.heex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC" msgid "UPC"
msgstr "UPC" msgstr "UPC"
@ -563,24 +554,24 @@ msgid "New password"
msgstr "Neues Passwort" msgstr "Neues Passwort"
#: lib/cannery_web/components/type_table_component.ex:83 #: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:307 #: lib/cannery_web/live/type_live/form_component.html.heex:313
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type" msgid "Firing type"
msgstr "Patronenhülsenform" msgstr "Patronenhülsenform"
#: lib/cannery_web/components/layouts/live.html.heex:43 #: lib/cannery_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "Neu verbinden..." msgstr "Neu verbinden..."
#: lib/cannery_web/live/container_live/index.ex:28 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:116 #: lib/cannery_web/live/container_live/show.ex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "%{name} bearbeiten" msgstr "%{name} bearbeiten"
#: lib/cannery_web/live/container_live/index.ex:63 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:117 #: lib/cannery_web/live/container_live/show.ex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "Editiere %{name} Tags" msgstr "Editiere %{name} Tags"
@ -592,9 +583,9 @@ msgstr "Editiere %{name} Tags"
msgid "Rounds:" msgid "Rounds:"
msgstr "Patronen:" msgstr "Patronen:"
#: lib/cannery_web/components/pack_table_component.ex:173 #: lib/cannery_web/components/pack_table_component.ex:178
#: lib/cannery_web/components/pack_table_component.ex:255 #: lib/cannery_web/components/pack_table_component.ex:260
#: lib/cannery_web/components/type_table_component.ex:259 #: lib/cannery_web/components/type_table_component.ex:272
#: lib/cannery_web/live/type_live/show.html.heex:154 #: lib/cannery_web/live/type_live/show.html.heex:154
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
@ -657,6 +648,7 @@ msgstr "Passwort zurücksetzen"
#: lib/cannery_web/live/pack_live/show.ex:40 #: lib/cannery_web/live/pack_live/show.ex:40
#: lib/cannery_web/live/range_live/index.ex:31 #: lib/cannery_web/live/range_live/index.ex:31
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "Schüsse dokumentieren" msgstr "Schüsse dokumentieren"
@ -774,13 +766,13 @@ msgid "Container:"
msgstr "Behälter" msgstr "Behälter"
#: lib/cannery_web/live/pack_live/index.html.heex:87 #: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:64 #: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164 #: lib/cannery_web/live/type_live/show.html.heex:164
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:214 #: lib/cannery_web/components/pack_table_component.ex:219
#: lib/cannery_web/live/pack_live/show.html.heex:19 #: lib/cannery_web/live/pack_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
@ -957,7 +949,7 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:17 #: lib/cannery_web/components/core_components/pack_card.html.heex:17
#: lib/cannery_web/components/pack_table_component.ex:263 #: lib/cannery_web/components/pack_table_component.ex:268
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -997,7 +989,7 @@ msgstr ""
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:194 #: lib/cannery_web/components/pack_table_component.ex:199
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1019,7 +1011,7 @@ msgstr ""
msgid "Edit ammo" msgid "Edit ammo"
msgstr "Munitionstyp bearbeiten" msgstr "Munitionstyp bearbeiten"
#: lib/cannery_web/live/type_live/index.html.heex:58 #: lib/cannery_web/live/type_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
@ -1039,7 +1031,7 @@ msgstr ""
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:112 #: lib/cannery_web/live/range_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1143,12 +1135,12 @@ msgid "Email"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
#: lib/cannery_web/controllers/user_session_html/new.html.heex:20 #: lib/cannery_web/controllers/user_session_html/new.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:264 #: lib/cannery_web/live/type_live/form_component.html.heex:270
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "+P" msgid "+P"
msgstr "" msgstr ""
@ -1163,12 +1155,12 @@ msgstr ""
msgid "5.56x46mm NATO" msgid "5.56x46mm NATO"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:303 #: lib/cannery_web/live/type_live/form_component.html.heex:309
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Boxer" msgid "Boxer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:311 #: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Centerfire" msgid "Centerfire"
msgstr "" msgstr ""
@ -1212,13 +1204,13 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:97 #: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58 #: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:35 #: lib/cannery_web/live/type_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All" msgid "All"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:316 #: lib/cannery_web/live/type_live/form_component.html.heex:322
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Attributes" msgid "Attributes"
msgstr "" msgstr ""
@ -1235,7 +1227,7 @@ msgid "Brass height:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57 #: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:95 #: lib/cannery_web/live/type_live/form_component.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Chamber size" msgid "Chamber size"
msgstr "" msgstr ""
@ -1251,7 +1243,7 @@ msgid "Dimensions"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80 #: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:269 #: lib/cannery_web/live/type_live/form_component.html.heex:275
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Dram equivalent" msgid "Dram equivalent"
msgstr "" msgstr ""
@ -1273,7 +1265,7 @@ msgid "Gauge:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71 #: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:210 #: lib/cannery_web/live/type_live/form_component.html.heex:216
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Load grains" msgid "Load grains"
msgstr "" msgstr ""
@ -1295,41 +1287,41 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100 #: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61 #: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:92 #: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38 #: lib/cannery_web/live/type_live/index.html.heex:40
#: lib/cannery_web/live/type_live/show.html.heex:56 #: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pistol" msgid "Pistol"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:236 #: lib/cannery_web/live/type_live/form_component.html.heex:242
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder" msgid "Powder"
msgstr "Pulverart" msgstr "Pulverart"
#: lib/cannery_web/live/type_live/form_component.html.heex:296 #: lib/cannery_web/live/type_live/form_component.html.heex:302
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer" msgid "Primer"
msgstr "Zündertyp" msgstr "Zündertyp"
#: lib/cannery_web/live/type_live/form_component.html.heex:108 #: lib/cannery_web/live/type_live/form_component.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Projectile" msgid "Projectile"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98 #: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59 #: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:90 #: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36 #: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54 #: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rifle" msgid "Rifle"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72 #: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:218 #: lib/cannery_web/live/type_live/form_component.html.heex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot charge weight" msgid "Shot charge weight"
msgstr "" msgstr ""
@ -1340,7 +1332,7 @@ msgid "Shot charge weight:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:69 #: lib/cannery_web/components/type_table_component.ex:69
#: lib/cannery_web/live/type_live/form_component.html.heex:194 #: lib/cannery_web/live/type_live/form_component.html.heex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot material" msgid "Shot material"
msgstr "" msgstr ""
@ -1351,7 +1343,7 @@ msgid "Shot material:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70 #: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:203 #: lib/cannery_web/live/type_live/form_component.html.heex:209
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Shot size" msgid "Shot size"
msgstr "Schüsse abgegeben" msgstr "Schüsse abgegeben"
@ -1362,7 +1354,7 @@ msgid "Shot size:"
msgstr "Schüsse abgegeben" msgstr "Schüsse abgegeben"
#: lib/cannery_web/components/type_table_component.ex:68 #: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:186 #: lib/cannery_web/live/type_live/form_component.html.heex:192
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot type" msgid "Shot type"
msgstr "" msgstr ""
@ -1374,21 +1366,21 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99 #: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60 #: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:91 #: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37 #: lib/cannery_web/live/type_live/index.html.heex:39
#: lib/cannery_web/live/type_live/show.html.heex:52 #: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shotgun" msgid "Shotgun"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:146 #: lib/cannery_web/live/type_live/form_component.html.heex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Slug core" msgid "Slug core"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:190 #: lib/cannery_web/live/type_live/form_component.html.heex:196
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc" msgid "Target, bird, buck, etc"
msgstr "" msgstr ""
@ -1405,7 +1397,7 @@ msgid "Unfired shell length"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67 #: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:179 #: lib/cannery_web/live/type_live/form_component.html.heex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wadding" msgid "Wadding"
msgstr "" msgstr ""
@ -1456,7 +1448,7 @@ msgid "New Type"
msgstr "Neuer Munitionstyp" msgstr "Neuer Munitionstyp"
#: lib/cannery_web/live/type_live/index.html.heex:8 #: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:71 #: lib/cannery_web/live/type_live/index.html.heex:73
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Types" msgid "No Types"
msgstr "Art" msgstr "Art"

View File

@ -23,7 +23,7 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## 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.
#: lib/cannery/containers.ex:220 #: lib/cannery/containers.ex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
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"
@ -170,7 +170,7 @@ 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}"
#: lib/cannery/ammo.ex:1121 #: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -73,7 +73,7 @@ msgstr ""
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?"
#: lib/cannery_web/live/pack_live/index.html.heex:181 #: lib/cannery_web/live/pack_live/index.html.heex:185
#: lib/cannery_web/live/pack_live/show.html.heex:69 #: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
@ -134,7 +134,7 @@ msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
#: lib/cannery_web/live/pack_live/form_component.html.heex:91 #: lib/cannery_web/live/pack_live/form_component.html.heex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:46 #: lib/cannery_web/live/range_live/form_component.html.heex:46
#: lib/cannery_web/live/tag_live/form_component.html.heex:39 #: lib/cannery_web/live/tag_live/form_component.html.heex:39
#: lib/cannery_web/live/type_live/form_component.html.heex:354 #: lib/cannery_web/live/type_live/form_component.html.heex:360
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "Speichere..." msgstr "Speichere..."
@ -177,7 +177,7 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?" msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?"
#: lib/cannery_web/live/pack_live/show.ex:157 #: lib/cannery_web/live/pack_live/show.ex:157
#: lib/cannery_web/live/range_live/index.html.heex:149 #: lib/cannery_web/live/range_live/index.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?" msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?"
@ -257,7 +257,7 @@ 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"
#: lib/cannery_web/live/type_live/index.html.heex:116 #: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29 #: lib/cannery_web/live/type_live/show.html.heex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"

View File

@ -40,24 +40,24 @@ msgid "Background color"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:86 #: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:327 #: lib/cannery_web/live/type_live/form_component.html.heex:333
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank" msgid "Blank"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:174 #: lib/cannery_web/live/type_live/form_component.html.heex:180
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Brass" msgid "Brass"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:147 #: lib/cannery_web/live/type_live/form_component.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core" msgid "Bullet core"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:59 #: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:121 #: lib/cannery_web/live/type_live/form_component.html.heex:125
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type" msgid "Bullet type"
msgstr "" msgstr ""
@ -75,7 +75,7 @@ msgid "Cartridge"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:66 #: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:170 #: lib/cannery_web/live/type_live/form_component.html.heex:174
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material" msgid "Case material"
msgstr "" msgstr ""
@ -96,7 +96,7 @@ msgid "Containers"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:87 #: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:331 #: lib/cannery_web/live/type_live/form_component.html.heex:337
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive" msgid "Corrosive"
msgstr "" msgstr ""
@ -141,19 +141,19 @@ msgstr ""
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:135 #: lib/cannery_web/live/type_live/form_component.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "FMJ" msgid "FMJ"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:58 #: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:111 #: lib/cannery_web/live/type_live/form_component.html.heex:115
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains" msgid "Grains"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:85 #: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:323 #: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary" msgid "Incendiary"
msgstr "" msgstr ""
@ -180,7 +180,7 @@ msgstr ""
msgid "Invites" msgid "Invites"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_session_html/new.html.heex:23 #: lib/cannery_web/controllers/user_session_html/new.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "" msgstr ""
@ -204,8 +204,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:88 #: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:336 #: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:339 #: lib/cannery_web/live/type_live/form_component.html.heex:345
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer" msgid "Manufacturer"
msgstr "" msgstr ""
@ -295,7 +295,7 @@ msgid "On the bookshelf"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:79 #: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:260 #: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure" msgid "Pressure"
msgstr "" msgstr ""
@ -312,7 +312,7 @@ msgid "Price paid:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:82 #: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:299 #: lib/cannery_web/live/type_live/form_component.html.heex:305
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type" msgid "Primer type"
msgstr "" msgstr ""
@ -343,7 +343,7 @@ msgstr ""
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:154 #: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Steel" msgid "Steel"
msgstr "" msgstr ""
@ -378,7 +378,7 @@ msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:84 #: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:319 #: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer" msgid "Tracer"
msgstr "" msgstr ""
@ -420,6 +420,8 @@ msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:48 #: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80 #: lib/cannery_web/components/pack_table_component.ex:80
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -453,13 +455,8 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:52 #: lib/cannery_web/live/range_live/index.html.heex:52
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:121
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "" msgstr ""
@ -471,12 +468,6 @@ msgstr ""
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr ""
#: lib/cannery_web/live/pack_live/index.ex:43 #: lib/cannery_web/live/pack_live/index.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
@ -494,9 +485,9 @@ msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:42 #: lib/cannery_web/components/core_components/pack_card.html.heex:42
#: lib/cannery_web/components/core_components/pack_card.html.heex:47 #: lib/cannery_web/components/core_components/pack_card.html.heex:47
#: lib/cannery_web/components/pack_table_component.ex:176 #: lib/cannery_web/components/pack_table_component.ex:181
#: lib/cannery_web/components/pack_table_component.ex:259 #: lib/cannery_web/components/pack_table_component.ex:264
#: lib/cannery_web/components/type_table_component.ex:260 #: lib/cannery_web/components/type_table_component.ex:273
#: lib/cannery_web/live/pack_live/show.html.heex:37 #: lib/cannery_web/live/pack_live/show.html.heex:37
#: lib/cannery_web/live/pack_live/show.html.heex:42 #: lib/cannery_web/live/pack_live/show.html.heex:42
#: lib/cannery_web/live/type_live/show.html.heex:150 #: lib/cannery_web/live/type_live/show.html.heex:150
@ -504,36 +495,36 @@ msgstr ""
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:163 #: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bimetal" msgid "Bimetal"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:65 #: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:159 #: lib/cannery_web/live/type_live/form_component.html.heex:163
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type" msgid "Jacket type"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:81 #: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:282 #: lib/cannery_web/live/type_live/form_component.html.heex:288
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity" msgid "Muzzle velocity"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:75 #: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:247 #: lib/cannery_web/live/type_live/form_component.html.heex:253
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge" msgid "Powder grains per charge"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:73 #: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:239 #: lib/cannery_web/live/type_live/form_component.html.heex:245
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type" msgid "Powder type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:346 #: lib/cannery_web/live/type_live/form_component.html.heex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC" msgid "UPC"
msgstr "" msgstr ""
@ -557,24 +548,24 @@ msgid "New password"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:83 #: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:307 #: lib/cannery_web/live/type_live/form_component.html.heex:313
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type" msgid "Firing type"
msgstr "" msgstr ""
#: lib/cannery_web/components/layouts/live.html.heex:43 #: lib/cannery_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:28 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:116 #: lib/cannery_web/live/container_live/show.ex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:63 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:117 #: lib/cannery_web/live/container_live/show.ex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
@ -586,9 +577,9 @@ msgstr ""
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:173 #: lib/cannery_web/components/pack_table_component.ex:178
#: lib/cannery_web/components/pack_table_component.ex:255 #: lib/cannery_web/components/pack_table_component.ex:260
#: lib/cannery_web/components/type_table_component.ex:259 #: lib/cannery_web/components/type_table_component.ex:272
#: lib/cannery_web/live/type_live/show.html.heex:154 #: lib/cannery_web/live/type_live/show.html.heex:154
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
@ -651,6 +642,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:40 #: lib/cannery_web/live/pack_live/show.ex:40
#: lib/cannery_web/live/range_live/index.ex:31 #: lib/cannery_web/live/range_live/index.ex:31
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -768,13 +760,13 @@ msgid "Container:"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:87 #: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:64 #: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164 #: lib/cannery_web/live/type_live/show.html.heex:164
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:214 #: lib/cannery_web/components/pack_table_component.ex:219
#: lib/cannery_web/live/pack_live/show.html.heex:19 #: lib/cannery_web/live/pack_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
@ -951,7 +943,7 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:17 #: lib/cannery_web/components/core_components/pack_card.html.heex:17
#: lib/cannery_web/components/pack_table_component.ex:263 #: lib/cannery_web/components/pack_table_component.ex:268
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -991,7 +983,7 @@ msgstr ""
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:194 #: lib/cannery_web/components/pack_table_component.ex:199
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1013,7 +1005,7 @@ msgstr ""
msgid "Edit ammo" msgid "Edit ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:58 #: lib/cannery_web/live/type_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
@ -1033,7 +1025,7 @@ msgstr ""
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:112 #: lib/cannery_web/live/range_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1126,12 +1118,12 @@ msgid "Email"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
#: lib/cannery_web/controllers/user_session_html/new.html.heex:20 #: lib/cannery_web/controllers/user_session_html/new.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:264 #: lib/cannery_web/live/type_live/form_component.html.heex:270
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "+P" msgid "+P"
msgstr "" msgstr ""
@ -1146,12 +1138,12 @@ msgstr ""
msgid "5.56x46mm NATO" msgid "5.56x46mm NATO"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:303 #: lib/cannery_web/live/type_live/form_component.html.heex:309
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Boxer" msgid "Boxer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:311 #: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Centerfire" msgid "Centerfire"
msgstr "" msgstr ""
@ -1195,13 +1187,13 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:97 #: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58 #: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:35 #: lib/cannery_web/live/type_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All" msgid "All"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:316 #: lib/cannery_web/live/type_live/form_component.html.heex:322
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Attributes" msgid "Attributes"
msgstr "" msgstr ""
@ -1218,7 +1210,7 @@ msgid "Brass height:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57 #: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:95 #: lib/cannery_web/live/type_live/form_component.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Chamber size" msgid "Chamber size"
msgstr "" msgstr ""
@ -1234,7 +1226,7 @@ msgid "Dimensions"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80 #: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:269 #: lib/cannery_web/live/type_live/form_component.html.heex:275
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Dram equivalent" msgid "Dram equivalent"
msgstr "" msgstr ""
@ -1256,7 +1248,7 @@ msgid "Gauge:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71 #: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:210 #: lib/cannery_web/live/type_live/form_component.html.heex:216
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Load grains" msgid "Load grains"
msgstr "" msgstr ""
@ -1278,41 +1270,41 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100 #: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61 #: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:92 #: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38 #: lib/cannery_web/live/type_live/index.html.heex:40
#: lib/cannery_web/live/type_live/show.html.heex:56 #: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pistol" msgid "Pistol"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:236 #: lib/cannery_web/live/type_live/form_component.html.heex:242
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder" msgid "Powder"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:296 #: lib/cannery_web/live/type_live/form_component.html.heex:302
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer" msgid "Primer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:108 #: lib/cannery_web/live/type_live/form_component.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Projectile" msgid "Projectile"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98 #: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59 #: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:90 #: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36 #: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54 #: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rifle" msgid "Rifle"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72 #: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:218 #: lib/cannery_web/live/type_live/form_component.html.heex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot charge weight" msgid "Shot charge weight"
msgstr "" msgstr ""
@ -1323,7 +1315,7 @@ msgid "Shot charge weight:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:69 #: lib/cannery_web/components/type_table_component.ex:69
#: lib/cannery_web/live/type_live/form_component.html.heex:194 #: lib/cannery_web/live/type_live/form_component.html.heex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot material" msgid "Shot material"
msgstr "" msgstr ""
@ -1334,7 +1326,7 @@ msgid "Shot material:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70 #: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:203 #: lib/cannery_web/live/type_live/form_component.html.heex:209
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot size" msgid "Shot size"
msgstr "" msgstr ""
@ -1345,7 +1337,7 @@ msgid "Shot size:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:68 #: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:186 #: lib/cannery_web/live/type_live/form_component.html.heex:192
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot type" msgid "Shot type"
msgstr "" msgstr ""
@ -1357,21 +1349,21 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99 #: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60 #: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:91 #: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37 #: lib/cannery_web/live/type_live/index.html.heex:39
#: lib/cannery_web/live/type_live/show.html.heex:52 #: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shotgun" msgid "Shotgun"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:146 #: lib/cannery_web/live/type_live/form_component.html.heex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Slug core" msgid "Slug core"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:190 #: lib/cannery_web/live/type_live/form_component.html.heex:196
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc" msgid "Target, bird, buck, etc"
msgstr "" msgstr ""
@ -1388,7 +1380,7 @@ msgid "Unfired shell length"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67 #: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:179 #: lib/cannery_web/live/type_live/form_component.html.heex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wadding" msgid "Wadding"
msgstr "" msgstr ""
@ -1439,7 +1431,7 @@ msgid "New Type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:8 #: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:71 #: lib/cannery_web/live/type_live/index.html.heex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No Types" msgid "No Types"
msgstr "" msgstr ""

View File

@ -56,7 +56,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:38 #: lib/cannery_web/controllers/user_session_html/new.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Forgot your password?" msgid "Forgot your password?"
msgstr "" msgstr ""
@ -72,7 +72,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3 #: lib/cannery_web/controllers/user_session_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:28 #: lib/cannery_web/controllers/user_session_html/new.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
@ -98,7 +98,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/cannery_web/controllers/user_session_html/new.html.heex:35 #: lib/cannery_web/controllers/user_session_html/new.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
@ -121,7 +121,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:90 #: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:44 #: lib/cannery_web/live/range_live/form_component.html.heex:44
#: lib/cannery_web/live/tag_live/form_component.html.heex:37 #: lib/cannery_web/live/tag_live/form_component.html.heex:37
#: lib/cannery_web/live/type_live/form_component.html.heex:353 #: lib/cannery_web/live/type_live/form_component.html.heex:359
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -288,23 +288,24 @@ msgstr ""
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:168 #: lib/cannery_web/live/pack_live/index.html.heex:172
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets" msgid "Clone pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:183 #: lib/cannery_web/live/pack_live/index.html.heex:187
#: lib/cannery_web/live/pack_live/show.html.heex:71 #: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets" msgid "Delete pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:158 #: lib/cannery_web/live/pack_live/index.html.heex:160
#: lib/cannery_web/live/pack_live/show.html.heex:59 #: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets" msgid "Edit pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:139
#: lib/cannery_web/live/pack_live/index.html.heex:148 #: lib/cannery_web/live/pack_live/index.html.heex:148
#: lib/cannery_web/live/type_live/show.html.heex:201 #: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
@ -312,29 +313,29 @@ msgid "View pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:159 #: lib/cannery_web/live/pack_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:152 #: lib/cannery_web/live/range_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots" msgid "Delete shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:144 #: lib/cannery_web/live/pack_live/show.ex:144
#: lib/cannery_web/live/range_live/index.html.heex:135 #: lib/cannery_web/live/range_live/index.html.heex:137
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots" msgid "Edit shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:105 #: lib/cannery_web/live/type_live/index.html.heex:107
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}" msgid "Clone %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:122 #: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35 #: lib/cannery_web/live/type_live/show.html.heex:35
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}" msgid "Delete %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:97 #: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19 #: lib/cannery_web/live/type_live/show.html.heex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}" msgid "Edit %{type_name}"
@ -345,7 +346,7 @@ msgstr ""
msgid "New Type" msgid "New Type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:89 #: lib/cannery_web/live/type_live/index.html.heex:91
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}" msgid "View %{type_name}"
msgstr "" msgstr ""

View File

@ -40,24 +40,24 @@ msgid "Background color"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:86 #: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:327 #: lib/cannery_web/live/type_live/form_component.html.heex:333
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank" msgid "Blank"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:174 #: lib/cannery_web/live/type_live/form_component.html.heex:180
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Brass" msgid "Brass"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:147 #: lib/cannery_web/live/type_live/form_component.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core" msgid "Bullet core"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:59 #: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:121 #: lib/cannery_web/live/type_live/form_component.html.heex:125
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type" msgid "Bullet type"
msgstr "" msgstr ""
@ -75,7 +75,7 @@ msgid "Cartridge"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:66 #: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:170 #: lib/cannery_web/live/type_live/form_component.html.heex:174
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material" msgid "Case material"
msgstr "" msgstr ""
@ -96,7 +96,7 @@ msgid "Containers"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:87 #: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:331 #: lib/cannery_web/live/type_live/form_component.html.heex:337
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive" msgid "Corrosive"
msgstr "" msgstr ""
@ -141,19 +141,19 @@ msgstr ""
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:135 #: lib/cannery_web/live/type_live/form_component.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "FMJ" msgid "FMJ"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:58 #: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:111 #: lib/cannery_web/live/type_live/form_component.html.heex:115
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains" msgid "Grains"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:85 #: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:323 #: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary" msgid "Incendiary"
msgstr "" msgstr ""
@ -180,7 +180,7 @@ msgstr ""
msgid "Invites" msgid "Invites"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_session_html/new.html.heex:23 #: lib/cannery_web/controllers/user_session_html/new.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "" msgstr ""
@ -204,8 +204,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:88 #: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:336 #: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:339 #: lib/cannery_web/live/type_live/form_component.html.heex:345
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer" msgid "Manufacturer"
msgstr "" msgstr ""
@ -295,7 +295,7 @@ msgid "On the bookshelf"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:79 #: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:260 #: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure" msgid "Pressure"
msgstr "" msgstr ""
@ -312,7 +312,7 @@ msgid "Price paid:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:82 #: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:299 #: lib/cannery_web/live/type_live/form_component.html.heex:305
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type" msgid "Primer type"
msgstr "" msgstr ""
@ -343,7 +343,7 @@ msgstr ""
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:154 #: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Steel" msgid "Steel"
msgstr "" msgstr ""
@ -378,7 +378,7 @@ msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:84 #: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:319 #: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer" msgid "Tracer"
msgstr "" msgstr ""
@ -420,6 +420,8 @@ msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:48 #: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80 #: lib/cannery_web/components/pack_table_component.ex:80
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -453,13 +455,8 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:52 #: lib/cannery_web/live/range_live/index.html.heex:52
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:121
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "" msgstr ""
@ -471,12 +468,6 @@ msgstr ""
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr ""
#: lib/cannery_web/live/pack_live/index.ex:43 #: lib/cannery_web/live/pack_live/index.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
@ -494,9 +485,9 @@ msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:42 #: lib/cannery_web/components/core_components/pack_card.html.heex:42
#: lib/cannery_web/components/core_components/pack_card.html.heex:47 #: lib/cannery_web/components/core_components/pack_card.html.heex:47
#: lib/cannery_web/components/pack_table_component.ex:176 #: lib/cannery_web/components/pack_table_component.ex:181
#: lib/cannery_web/components/pack_table_component.ex:259 #: lib/cannery_web/components/pack_table_component.ex:264
#: lib/cannery_web/components/type_table_component.ex:260 #: lib/cannery_web/components/type_table_component.ex:273
#: lib/cannery_web/live/pack_live/show.html.heex:37 #: lib/cannery_web/live/pack_live/show.html.heex:37
#: lib/cannery_web/live/pack_live/show.html.heex:42 #: lib/cannery_web/live/pack_live/show.html.heex:42
#: lib/cannery_web/live/type_live/show.html.heex:150 #: lib/cannery_web/live/type_live/show.html.heex:150
@ -504,36 +495,36 @@ msgstr ""
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:163 #: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bimetal" msgid "Bimetal"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:65 #: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:159 #: lib/cannery_web/live/type_live/form_component.html.heex:163
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type" msgid "Jacket type"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:81 #: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:282 #: lib/cannery_web/live/type_live/form_component.html.heex:288
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity" msgid "Muzzle velocity"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:75 #: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:247 #: lib/cannery_web/live/type_live/form_component.html.heex:253
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge" msgid "Powder grains per charge"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:73 #: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:239 #: lib/cannery_web/live/type_live/form_component.html.heex:245
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type" msgid "Powder type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:346 #: lib/cannery_web/live/type_live/form_component.html.heex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC" msgid "UPC"
msgstr "" msgstr ""
@ -557,24 +548,24 @@ msgid "New password"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:83 #: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:307 #: lib/cannery_web/live/type_live/form_component.html.heex:313
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type" msgid "Firing type"
msgstr "" msgstr ""
#: lib/cannery_web/components/layouts/live.html.heex:43 #: lib/cannery_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:28 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:116 #: lib/cannery_web/live/container_live/show.ex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:63 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:117 #: lib/cannery_web/live/container_live/show.ex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
@ -586,9 +577,9 @@ msgstr ""
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:173 #: lib/cannery_web/components/pack_table_component.ex:178
#: lib/cannery_web/components/pack_table_component.ex:255 #: lib/cannery_web/components/pack_table_component.ex:260
#: lib/cannery_web/components/type_table_component.ex:259 #: lib/cannery_web/components/type_table_component.ex:272
#: lib/cannery_web/live/type_live/show.html.heex:154 #: lib/cannery_web/live/type_live/show.html.heex:154
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
@ -651,6 +642,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:40 #: lib/cannery_web/live/pack_live/show.ex:40
#: lib/cannery_web/live/range_live/index.ex:31 #: lib/cannery_web/live/range_live/index.ex:31
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -768,13 +760,13 @@ msgid "Container:"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:87 #: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:64 #: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164 #: lib/cannery_web/live/type_live/show.html.heex:164
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:214 #: lib/cannery_web/components/pack_table_component.ex:219
#: lib/cannery_web/live/pack_live/show.html.heex:19 #: lib/cannery_web/live/pack_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
@ -951,7 +943,7 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:17 #: lib/cannery_web/components/core_components/pack_card.html.heex:17
#: lib/cannery_web/components/pack_table_component.ex:263 #: lib/cannery_web/components/pack_table_component.ex:268
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -991,7 +983,7 @@ msgstr ""
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:194 #: lib/cannery_web/components/pack_table_component.ex:199
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1013,7 +1005,7 @@ msgstr ""
msgid "Edit ammo" msgid "Edit ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:58 #: lib/cannery_web/live/type_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
@ -1033,7 +1025,7 @@ msgstr ""
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:112 #: lib/cannery_web/live/range_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1126,12 +1118,12 @@ msgid "Email"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
#: lib/cannery_web/controllers/user_session_html/new.html.heex:20 #: lib/cannery_web/controllers/user_session_html/new.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:264 #: lib/cannery_web/live/type_live/form_component.html.heex:270
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "+P" msgid "+P"
msgstr "" msgstr ""
@ -1146,12 +1138,12 @@ msgstr ""
msgid "5.56x46mm NATO" msgid "5.56x46mm NATO"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:303 #: lib/cannery_web/live/type_live/form_component.html.heex:309
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Boxer" msgid "Boxer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:311 #: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Centerfire" msgid "Centerfire"
msgstr "" msgstr ""
@ -1195,13 +1187,13 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:97 #: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58 #: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:35 #: lib/cannery_web/live/type_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All" msgid "All"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:316 #: lib/cannery_web/live/type_live/form_component.html.heex:322
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Attributes" msgid "Attributes"
msgstr "" msgstr ""
@ -1218,7 +1210,7 @@ msgid "Brass height:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57 #: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:95 #: lib/cannery_web/live/type_live/form_component.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Chamber size" msgid "Chamber size"
msgstr "" msgstr ""
@ -1234,7 +1226,7 @@ msgid "Dimensions"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80 #: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:269 #: lib/cannery_web/live/type_live/form_component.html.heex:275
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Dram equivalent" msgid "Dram equivalent"
msgstr "" msgstr ""
@ -1256,7 +1248,7 @@ msgid "Gauge:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71 #: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:210 #: lib/cannery_web/live/type_live/form_component.html.heex:216
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Load grains" msgid "Load grains"
msgstr "" msgstr ""
@ -1278,41 +1270,41 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100 #: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61 #: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:92 #: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38 #: lib/cannery_web/live/type_live/index.html.heex:40
#: lib/cannery_web/live/type_live/show.html.heex:56 #: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pistol" msgid "Pistol"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:236 #: lib/cannery_web/live/type_live/form_component.html.heex:242
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder" msgid "Powder"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:296 #: lib/cannery_web/live/type_live/form_component.html.heex:302
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer" msgid "Primer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:108 #: lib/cannery_web/live/type_live/form_component.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Projectile" msgid "Projectile"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98 #: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59 #: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:90 #: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36 #: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54 #: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rifle" msgid "Rifle"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72 #: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:218 #: lib/cannery_web/live/type_live/form_component.html.heex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot charge weight" msgid "Shot charge weight"
msgstr "" msgstr ""
@ -1323,7 +1315,7 @@ msgid "Shot charge weight:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:69 #: lib/cannery_web/components/type_table_component.ex:69
#: lib/cannery_web/live/type_live/form_component.html.heex:194 #: lib/cannery_web/live/type_live/form_component.html.heex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot material" msgid "Shot material"
msgstr "" msgstr ""
@ -1334,7 +1326,7 @@ msgid "Shot material:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70 #: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:203 #: lib/cannery_web/live/type_live/form_component.html.heex:209
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Shot size" msgid "Shot size"
msgstr "" msgstr ""
@ -1345,7 +1337,7 @@ msgid "Shot size:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:68 #: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:186 #: lib/cannery_web/live/type_live/form_component.html.heex:192
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot type" msgid "Shot type"
msgstr "" msgstr ""
@ -1357,21 +1349,21 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99 #: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60 #: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:91 #: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37 #: lib/cannery_web/live/type_live/index.html.heex:39
#: lib/cannery_web/live/type_live/show.html.heex:52 #: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shotgun" msgid "Shotgun"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:146 #: lib/cannery_web/live/type_live/form_component.html.heex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Slug core" msgid "Slug core"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:190 #: lib/cannery_web/live/type_live/form_component.html.heex:196
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc" msgid "Target, bird, buck, etc"
msgstr "" msgstr ""
@ -1388,7 +1380,7 @@ msgid "Unfired shell length"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67 #: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:179 #: lib/cannery_web/live/type_live/form_component.html.heex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wadding" msgid "Wadding"
msgstr "" msgstr ""
@ -1439,7 +1431,7 @@ msgid "New Type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:8 #: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:71 #: lib/cannery_web/live/type_live/index.html.heex:73
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Types" msgid "No Types"
msgstr "" msgstr ""

View File

@ -10,7 +10,7 @@ msgid ""
msgstr "" msgstr ""
"Language: en\n" "Language: en\n"
#: lib/cannery/containers.ex:220 #: lib/cannery/containers.ex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
@ -153,7 +153,7 @@ msgstr ""
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 ""
#: lib/cannery/ammo.ex:1121 #: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -58,7 +58,7 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:181 #: lib/cannery_web/live/pack_live/index.html.heex:185
#: lib/cannery_web/live/pack_live/show.html.heex:69 #: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
@ -115,7 +115,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:91 #: lib/cannery_web/live/pack_live/form_component.html.heex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:46 #: lib/cannery_web/live/range_live/form_component.html.heex:46
#: lib/cannery_web/live/tag_live/form_component.html.heex:39 #: lib/cannery_web/live/tag_live/form_component.html.heex:39
#: lib/cannery_web/live/type_live/form_component.html.heex:354 #: lib/cannery_web/live/type_live/form_component.html.heex:360
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -156,7 +156,7 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:157 #: lib/cannery_web/live/pack_live/show.ex:157
#: lib/cannery_web/live/range_live/index.html.heex:149 #: lib/cannery_web/live/range_live/index.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "" msgstr ""
@ -236,7 +236,7 @@ msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: lib/cannery_web/live/type_live/index.html.heex:116 #: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29 #: lib/cannery_web/live/type_live/show.html.heex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"

View File

@ -10,7 +10,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
#: lib/cannery/containers.ex:220 #: lib/cannery/containers.ex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "" msgstr ""
@ -152,7 +152,7 @@ msgstr ""
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 ""
#: lib/cannery/ammo.ex:1121 #: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -69,7 +69,7 @@ msgstr "Eliminar cuenta de Usuario"
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:38 #: lib/cannery_web/controllers/user_session_html/new.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Forgot your password?" msgid "Forgot your password?"
msgstr "¿Has olvidado tu contraseña?" msgstr "¿Has olvidado tu contraseña?"
@ -85,7 +85,7 @@ msgstr "¡Invita a alguien nuevo!"
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3 #: lib/cannery_web/controllers/user_session_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:28 #: lib/cannery_web/controllers/user_session_html/new.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Log in" msgid "Log in"
msgstr "Entrar" msgstr "Entrar"
@ -111,7 +111,7 @@ msgstr "Nueva Etiqueta"
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/cannery_web/controllers/user_session_html/new.html.heex:35 #: lib/cannery_web/controllers/user_session_html/new.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Registrarse" msgstr "Registrarse"
@ -134,7 +134,7 @@ msgstr "Resetear contraseña"
#: lib/cannery_web/live/pack_live/form_component.html.heex:90 #: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:44 #: lib/cannery_web/live/range_live/form_component.html.heex:44
#: lib/cannery_web/live/tag_live/form_component.html.heex:37 #: lib/cannery_web/live/tag_live/form_component.html.heex:37
#: lib/cannery_web/live/type_live/form_component.html.heex:353 #: lib/cannery_web/live/type_live/form_component.html.heex:359
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
@ -301,23 +301,24 @@ msgstr ""
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:168 #: lib/cannery_web/live/pack_live/index.html.heex:172
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets" msgid "Clone pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:183 #: lib/cannery_web/live/pack_live/index.html.heex:187
#: lib/cannery_web/live/pack_live/show.html.heex:71 #: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets" msgid "Delete pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:158 #: lib/cannery_web/live/pack_live/index.html.heex:160
#: lib/cannery_web/live/pack_live/show.html.heex:59 #: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets" msgid "Edit pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:139
#: lib/cannery_web/live/pack_live/index.html.heex:148 #: lib/cannery_web/live/pack_live/index.html.heex:148
#: lib/cannery_web/live/type_live/show.html.heex:201 #: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
@ -325,29 +326,29 @@ msgid "View pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:159 #: lib/cannery_web/live/pack_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:152 #: lib/cannery_web/live/range_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots" msgid "Delete shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:144 #: lib/cannery_web/live/pack_live/show.ex:144
#: lib/cannery_web/live/range_live/index.html.heex:135 #: lib/cannery_web/live/range_live/index.html.heex:137
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots" msgid "Edit shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:105 #: lib/cannery_web/live/type_live/index.html.heex:107
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}" msgid "Clone %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:122 #: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35 #: lib/cannery_web/live/type_live/show.html.heex:35
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}" msgid "Delete %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:97 #: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19 #: lib/cannery_web/live/type_live/show.html.heex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}" msgid "Edit %{type_name}"
@ -358,7 +359,7 @@ msgstr ""
msgid "New Type" msgid "New Type"
msgstr "Nuevo tipo de Munición" msgstr "Nuevo tipo de Munición"
#: lib/cannery_web/live/type_live/index.html.heex:89 #: lib/cannery_web/live/type_live/index.html.heex:91
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}" msgid "View %{type_name}"
msgstr "" msgstr ""

View File

@ -44,24 +44,24 @@ msgid "Background color"
msgstr "Color de fondo" msgstr "Color de fondo"
#: lib/cannery_web/components/type_table_component.ex:86 #: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:327 #: lib/cannery_web/live/type_live/form_component.html.heex:333
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank" msgid "Blank"
msgstr "Fogueo" msgstr "Fogueo"
#: lib/cannery_web/live/type_live/form_component.html.heex:174 #: lib/cannery_web/live/type_live/form_component.html.heex:180
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Brass" msgid "Brass"
msgstr "Latón" msgstr "Latón"
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:147 #: lib/cannery_web/live/type_live/form_component.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core" msgid "Bullet core"
msgstr "Núcleo de bala" msgstr "Núcleo de bala"
#: lib/cannery_web/components/type_table_component.ex:59 #: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:121 #: lib/cannery_web/live/type_live/form_component.html.heex:125
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type" msgid "Bullet type"
msgstr "Tipo de bala" msgstr "Tipo de bala"
@ -79,7 +79,7 @@ msgid "Cartridge"
msgstr "Cartucho" msgstr "Cartucho"
#: lib/cannery_web/components/type_table_component.ex:66 #: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:170 #: lib/cannery_web/live/type_live/form_component.html.heex:174
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material" msgid "Case material"
msgstr "Material del casquillo" msgstr "Material del casquillo"
@ -100,7 +100,7 @@ msgid "Containers"
msgstr "Contenedores" msgstr "Contenedores"
#: lib/cannery_web/components/type_table_component.ex:87 #: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:331 #: lib/cannery_web/live/type_live/form_component.html.heex:337
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive" msgid "Corrosive"
msgstr "Corrosiva" msgstr "Corrosiva"
@ -145,19 +145,19 @@ msgstr "Editar Invitación"
msgid "Edit Tag" msgid "Edit Tag"
msgstr "Editar Etiqueta" msgstr "Editar Etiqueta"
#: lib/cannery_web/live/type_live/form_component.html.heex:135 #: lib/cannery_web/live/type_live/form_component.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "FMJ" msgid "FMJ"
msgstr "Bala encamisada" msgstr "Bala encamisada"
#: lib/cannery_web/components/type_table_component.ex:58 #: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:111 #: lib/cannery_web/live/type_live/form_component.html.heex:115
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains" msgid "Grains"
msgstr "Grano" msgstr "Grano"
#: lib/cannery_web/components/type_table_component.ex:85 #: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:323 #: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary" msgid "Incendiary"
msgstr "Incendiaria" msgstr "Incendiaria"
@ -184,7 +184,7 @@ msgstr "Solo Invitación"
msgid "Invites" msgid "Invites"
msgstr "Invitaciones" msgstr "Invitaciones"
#: lib/cannery_web/controllers/user_session_html/new.html.heex:23 #: lib/cannery_web/controllers/user_session_html/new.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "Mantener registrado durante 60 días" msgstr "Mantener registrado durante 60 días"
@ -208,8 +208,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Cargador, Clip, Caja de Munición, etc" msgstr "Cargador, Clip, Caja de Munición, etc"
#: lib/cannery_web/components/type_table_component.ex:88 #: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:336 #: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:339 #: lib/cannery_web/live/type_live/form_component.html.heex:345
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer" msgid "Manufacturer"
msgstr "Fabricante" msgstr "Fabricante"
@ -299,7 +299,7 @@ msgid "On the bookshelf"
msgstr "En la estantería" msgstr "En la estantería"
#: lib/cannery_web/components/type_table_component.ex:79 #: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:260 #: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure" msgid "Pressure"
msgstr "Presión" msgstr "Presión"
@ -316,7 +316,7 @@ msgid "Price paid:"
msgstr "Precio pagado:" msgstr "Precio pagado:"
#: lib/cannery_web/components/type_table_component.ex:82 #: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:299 #: lib/cannery_web/live/type_live/form_component.html.heex:305
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type" msgid "Primer type"
msgstr "Tipo de espoleta" msgstr "Tipo de espoleta"
@ -349,7 +349,7 @@ msgstr "Ajustes"
msgid "Simple:" msgid "Simple:"
msgstr "Simple:" msgstr "Simple:"
#: lib/cannery_web/live/type_live/form_component.html.heex:154 #: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Steel" msgid "Steel"
msgstr "Acero" msgstr "Acero"
@ -385,7 +385,7 @@ msgid "The self-hosted firearm tracker website"
msgstr "La página de seguimiento de armas autogestionada" msgstr "La página de seguimiento de armas autogestionada"
#: lib/cannery_web/components/type_table_component.ex:84 #: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:319 #: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer" msgid "Tracer"
msgstr "Trazadora" msgstr "Trazadora"
@ -427,6 +427,8 @@ msgstr "Contenedor sin etiquetas"
#: lib/cannery_web/components/core_components/topbar.html.heex:48 #: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80 #: lib/cannery_web/components/pack_table_component.ex:80
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "Campo de tiro" msgstr "Campo de tiro"
@ -460,13 +462,8 @@ msgstr "No hay munición preparada"
msgid "Record shots" msgid "Record shots"
msgstr "Tiros récord" msgstr "Tiros récord"
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr "Nuevos Tiros Récord"
#: lib/cannery_web/live/range_live/index.html.heex:52 #: lib/cannery_web/live/range_live/index.html.heex:52
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:121
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "No se han grabado tiros" msgstr "No se han grabado tiros"
@ -478,12 +475,6 @@ msgstr "No se han grabado tiros"
msgid "Rounds shot" msgid "Rounds shot"
msgstr "Balas disparadas" msgstr "Balas disparadas"
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr "Récords de Tiro"
#: lib/cannery_web/live/pack_live/index.ex:43 #: lib/cannery_web/live/pack_live/index.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
@ -501,9 +492,9 @@ msgstr "Registro de tiros"
#: lib/cannery_web/components/core_components/pack_card.html.heex:42 #: lib/cannery_web/components/core_components/pack_card.html.heex:42
#: lib/cannery_web/components/core_components/pack_card.html.heex:47 #: lib/cannery_web/components/core_components/pack_card.html.heex:47
#: lib/cannery_web/components/pack_table_component.ex:176 #: lib/cannery_web/components/pack_table_component.ex:181
#: lib/cannery_web/components/pack_table_component.ex:259 #: lib/cannery_web/components/pack_table_component.ex:264
#: lib/cannery_web/components/type_table_component.ex:260 #: lib/cannery_web/components/type_table_component.ex:273
#: lib/cannery_web/live/pack_live/show.html.heex:37 #: lib/cannery_web/live/pack_live/show.html.heex:37
#: lib/cannery_web/live/pack_live/show.html.heex:42 #: lib/cannery_web/live/pack_live/show.html.heex:42
#: lib/cannery_web/live/type_live/show.html.heex:150 #: lib/cannery_web/live/type_live/show.html.heex:150
@ -511,36 +502,36 @@ msgstr "Registro de tiros"
msgid "$%{amount}" msgid "$%{amount}"
msgstr "$%{amount}" msgstr "$%{amount}"
#: lib/cannery_web/live/type_live/form_component.html.heex:163 #: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bimetal" msgid "Bimetal"
msgstr "Bimetal" msgstr "Bimetal"
#: lib/cannery_web/components/type_table_component.ex:65 #: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:159 #: lib/cannery_web/live/type_live/form_component.html.heex:163
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type" msgid "Jacket type"
msgstr "Tipo de camisa" msgstr "Tipo de camisa"
#: lib/cannery_web/components/type_table_component.ex:81 #: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:282 #: lib/cannery_web/live/type_live/form_component.html.heex:288
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity" msgid "Muzzle velocity"
msgstr "Velocidad de boca" msgstr "Velocidad de boca"
#: lib/cannery_web/components/type_table_component.ex:75 #: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:247 #: lib/cannery_web/live/type_live/form_component.html.heex:253
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge" msgid "Powder grains per charge"
msgstr "Granos de polvora por carga" msgstr "Granos de polvora por carga"
#: lib/cannery_web/components/type_table_component.ex:73 #: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:239 #: lib/cannery_web/live/type_live/form_component.html.heex:245
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type" msgid "Powder type"
msgstr "Tipo de polvora" msgstr "Tipo de polvora"
#: lib/cannery_web/live/type_live/form_component.html.heex:346 #: lib/cannery_web/live/type_live/form_component.html.heex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC" msgid "UPC"
msgstr "" msgstr ""
@ -564,24 +555,24 @@ msgid "New password"
msgstr "Nueva contraseña" msgstr "Nueva contraseña"
#: lib/cannery_web/components/type_table_component.ex:83 #: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:307 #: lib/cannery_web/live/type_live/form_component.html.heex:313
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type" msgid "Firing type"
msgstr "Tipo de fuego" msgstr "Tipo de fuego"
#: lib/cannery_web/components/layouts/live.html.heex:43 #: lib/cannery_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "Reconectando..." msgstr "Reconectando..."
#: lib/cannery_web/live/container_live/index.ex:28 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:116 #: lib/cannery_web/live/container_live/show.ex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "Editar %{name}" msgstr "Editar %{name}"
#: lib/cannery_web/live/container_live/index.ex:63 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:117 #: lib/cannery_web/live/container_live/show.ex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "Editar etiquetas de %{name}" msgstr "Editar etiquetas de %{name}"
@ -593,9 +584,9 @@ msgstr "Editar etiquetas de %{name}"
msgid "Rounds:" msgid "Rounds:"
msgstr "Balas:" msgstr "Balas:"
#: lib/cannery_web/components/pack_table_component.ex:173 #: lib/cannery_web/components/pack_table_component.ex:178
#: lib/cannery_web/components/pack_table_component.ex:255 #: lib/cannery_web/components/pack_table_component.ex:260
#: lib/cannery_web/components/type_table_component.ex:259 #: lib/cannery_web/components/type_table_component.ex:272
#: lib/cannery_web/live/type_live/show.html.heex:154 #: lib/cannery_web/live/type_live/show.html.heex:154
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
@ -658,6 +649,7 @@ msgstr "Reestablecer contraseña"
#: lib/cannery_web/live/pack_live/show.ex:40 #: lib/cannery_web/live/pack_live/show.ex:40
#: lib/cannery_web/live/range_live/index.ex:31 #: lib/cannery_web/live/range_live/index.ex:31
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "Tiros Récord" msgstr "Tiros Récord"
@ -776,13 +768,13 @@ msgid "Container:"
msgstr "Contenedor:" msgstr "Contenedor:"
#: lib/cannery_web/live/pack_live/index.html.heex:87 #: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:64 #: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164 #: lib/cannery_web/live/type_live/show.html.heex:164
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "Mostrar usadas" msgstr "Mostrar usadas"
#: lib/cannery_web/components/pack_table_component.ex:214 #: lib/cannery_web/components/pack_table_component.ex:219
#: lib/cannery_web/live/pack_live/show.html.heex:19 #: lib/cannery_web/live/pack_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
@ -959,7 +951,7 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:17 #: lib/cannery_web/components/core_components/pack_card.html.heex:17
#: lib/cannery_web/components/pack_table_component.ex:263 #: lib/cannery_web/components/pack_table_component.ex:268
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "Vacio" msgstr "Vacio"
@ -999,7 +991,7 @@ msgstr "Usada por última vez en"
msgid "Last used on:" msgid "Last used on:"
msgstr "Usada por última vez en:" msgstr "Usada por última vez en:"
#: lib/cannery_web/components/pack_table_component.ex:194 #: lib/cannery_web/components/pack_table_component.ex:199
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "Nunca usada" msgstr "Nunca usada"
@ -1021,7 +1013,7 @@ msgstr "Comprada en:"
msgid "Edit ammo" msgid "Edit ammo"
msgstr "Editar munición" msgstr "Editar munición"
#: lib/cannery_web/live/type_live/index.html.heex:58 #: lib/cannery_web/live/type_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
@ -1041,7 +1033,7 @@ msgstr ""
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:112 #: lib/cannery_web/live/range_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1145,12 +1137,12 @@ msgid "Email"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
#: lib/cannery_web/controllers/user_session_html/new.html.heex:20 #: lib/cannery_web/controllers/user_session_html/new.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:264 #: lib/cannery_web/live/type_live/form_component.html.heex:270
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "+P" msgid "+P"
msgstr "" msgstr ""
@ -1165,12 +1157,12 @@ msgstr ""
msgid "5.56x46mm NATO" msgid "5.56x46mm NATO"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:303 #: lib/cannery_web/live/type_live/form_component.html.heex:309
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Boxer" msgid "Boxer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:311 #: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Centerfire" msgid "Centerfire"
msgstr "" msgstr ""
@ -1214,13 +1206,13 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:97 #: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58 #: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:35 #: lib/cannery_web/live/type_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All" msgid "All"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:316 #: lib/cannery_web/live/type_live/form_component.html.heex:322
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Attributes" msgid "Attributes"
msgstr "" msgstr ""
@ -1237,7 +1229,7 @@ msgid "Brass height:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57 #: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:95 #: lib/cannery_web/live/type_live/form_component.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Chamber size" msgid "Chamber size"
msgstr "" msgstr ""
@ -1253,7 +1245,7 @@ msgid "Dimensions"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80 #: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:269 #: lib/cannery_web/live/type_live/form_component.html.heex:275
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Dram equivalent" msgid "Dram equivalent"
msgstr "" msgstr ""
@ -1275,7 +1267,7 @@ msgid "Gauge:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71 #: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:210 #: lib/cannery_web/live/type_live/form_component.html.heex:216
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Load grains" msgid "Load grains"
msgstr "" msgstr ""
@ -1297,41 +1289,41 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100 #: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61 #: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:92 #: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38 #: lib/cannery_web/live/type_live/index.html.heex:40
#: lib/cannery_web/live/type_live/show.html.heex:56 #: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pistol" msgid "Pistol"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:236 #: lib/cannery_web/live/type_live/form_component.html.heex:242
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder" msgid "Powder"
msgstr "Tipo de polvora" msgstr "Tipo de polvora"
#: lib/cannery_web/live/type_live/form_component.html.heex:296 #: lib/cannery_web/live/type_live/form_component.html.heex:302
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer" msgid "Primer"
msgstr "Tipo de espoleta" msgstr "Tipo de espoleta"
#: lib/cannery_web/live/type_live/form_component.html.heex:108 #: lib/cannery_web/live/type_live/form_component.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Projectile" msgid "Projectile"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98 #: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59 #: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:90 #: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36 #: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54 #: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rifle" msgid "Rifle"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72 #: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:218 #: lib/cannery_web/live/type_live/form_component.html.heex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot charge weight" msgid "Shot charge weight"
msgstr "" msgstr ""
@ -1342,7 +1334,7 @@ msgid "Shot charge weight:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:69 #: lib/cannery_web/components/type_table_component.ex:69
#: lib/cannery_web/live/type_live/form_component.html.heex:194 #: lib/cannery_web/live/type_live/form_component.html.heex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot material" msgid "Shot material"
msgstr "" msgstr ""
@ -1353,7 +1345,7 @@ msgid "Shot material:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70 #: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:203 #: lib/cannery_web/live/type_live/form_component.html.heex:209
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Shot size" msgid "Shot size"
msgstr "Tiros disparados" msgstr "Tiros disparados"
@ -1364,7 +1356,7 @@ msgid "Shot size:"
msgstr "Tiros disparados" msgstr "Tiros disparados"
#: lib/cannery_web/components/type_table_component.ex:68 #: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:186 #: lib/cannery_web/live/type_live/form_component.html.heex:192
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot type" msgid "Shot type"
msgstr "" msgstr ""
@ -1376,21 +1368,21 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99 #: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60 #: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:91 #: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37 #: lib/cannery_web/live/type_live/index.html.heex:39
#: lib/cannery_web/live/type_live/show.html.heex:52 #: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shotgun" msgid "Shotgun"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:146 #: lib/cannery_web/live/type_live/form_component.html.heex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Slug core" msgid "Slug core"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:190 #: lib/cannery_web/live/type_live/form_component.html.heex:196
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc" msgid "Target, bird, buck, etc"
msgstr "" msgstr ""
@ -1407,7 +1399,7 @@ msgid "Unfired shell length"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67 #: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:179 #: lib/cannery_web/live/type_live/form_component.html.heex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wadding" msgid "Wadding"
msgstr "" msgstr ""
@ -1458,7 +1450,7 @@ msgid "New Type"
msgstr "Nuevo tipo de Munición" msgstr "Nuevo tipo de Munición"
#: lib/cannery_web/live/type_live/index.html.heex:8 #: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:71 #: lib/cannery_web/live/type_live/index.html.heex:73
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Types" msgid "No Types"
msgstr "Tipo" msgstr "Tipo"

View File

@ -23,7 +23,7 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## 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.
#: lib/cannery/containers.ex:220 #: lib/cannery/containers.ex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "El contenedor debe estar vacío antes de ser borrado" msgstr "El contenedor debe estar vacío antes de ser borrado"
@ -168,7 +168,7 @@ msgstr "No se ha podido procesar el número de copias"
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}" msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier" msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier"
#: lib/cannery/ammo.ex:1121 #: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "Multiplicador inválido" msgstr "Multiplicador inválido"

View File

@ -73,7 +73,7 @@ msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "Está seguro que desea eliminar %{name}?" msgstr "Está seguro que desea eliminar %{name}?"
#: lib/cannery_web/live/pack_live/index.html.heex:181 #: lib/cannery_web/live/pack_live/index.html.heex:185
#: lib/cannery_web/live/pack_live/show.html.heex:69 #: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
@ -134,7 +134,7 @@ msgstr "Por favor chequea el correo para verificar tu cuenta"
#: lib/cannery_web/live/pack_live/form_component.html.heex:91 #: lib/cannery_web/live/pack_live/form_component.html.heex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:46 #: lib/cannery_web/live/range_live/form_component.html.heex:46
#: lib/cannery_web/live/tag_live/form_component.html.heex:39 #: lib/cannery_web/live/tag_live/form_component.html.heex:39
#: lib/cannery_web/live/type_live/form_component.html.heex:354 #: lib/cannery_web/live/type_live/form_component.html.heex:360
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "Guardando..." msgstr "Guardando..."
@ -176,7 +176,7 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "Está seguro que desea desmontar esta munición?" msgstr "Está seguro que desea desmontar esta munición?"
#: lib/cannery_web/live/pack_live/show.ex:157 #: lib/cannery_web/live/pack_live/show.ex:157
#: lib/cannery_web/live/range_live/index.html.heex:149 #: lib/cannery_web/live/range_live/index.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "¿Está segure que quiere borrar este récord de disparos?" msgstr "¿Está segure que quiere borrar este récord de disparos?"
@ -256,7 +256,7 @@ msgid_plural "Ammo added successfully"
msgstr[0] "Munición añadida exitosamente" msgstr[0] "Munición añadida exitosamente"
msgstr[1] "Municiones añadidas exitosamente" msgstr[1] "Municiones añadidas exitosamente"
#: lib/cannery_web/live/type_live/index.html.heex:116 #: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29 #: lib/cannery_web/live/type_live/show.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"

View File

@ -69,7 +69,7 @@ msgstr "Supprimer utilisateur"
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:38 #: lib/cannery_web/controllers/user_session_html/new.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Forgot your password?" msgid "Forgot your password?"
msgstr "Mot de passe oublié?" msgstr "Mot de passe oublié?"
@ -85,7 +85,7 @@ msgstr "Invitez une nouvelle personne!"
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3 #: lib/cannery_web/controllers/user_session_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:28 #: lib/cannery_web/controllers/user_session_html/new.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Log in" msgid "Log in"
msgstr "Se connecter" msgstr "Se connecter"
@ -111,7 +111,7 @@ msgstr "Nouveau tag"
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/cannery_web/controllers/user_session_html/new.html.heex:35 #: lib/cannery_web/controllers/user_session_html/new.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "Senregistrer" msgstr "Senregistrer"
@ -134,7 +134,7 @@ msgstr "Réinitialisé le mot de passe"
#: lib/cannery_web/live/pack_live/form_component.html.heex:90 #: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:44 #: lib/cannery_web/live/range_live/form_component.html.heex:44
#: lib/cannery_web/live/tag_live/form_component.html.heex:37 #: lib/cannery_web/live/tag_live/form_component.html.heex:37
#: lib/cannery_web/live/type_live/form_component.html.heex:353 #: lib/cannery_web/live/type_live/form_component.html.heex:359
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "Sauvegarder" msgstr "Sauvegarder"
@ -301,23 +301,24 @@ msgstr ""
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:168 #: lib/cannery_web/live/pack_live/index.html.heex:172
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets" msgid "Clone pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:183 #: lib/cannery_web/live/pack_live/index.html.heex:187
#: lib/cannery_web/live/pack_live/show.html.heex:71 #: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets" msgid "Delete pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:158 #: lib/cannery_web/live/pack_live/index.html.heex:160
#: lib/cannery_web/live/pack_live/show.html.heex:59 #: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets" msgid "Edit pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:139
#: lib/cannery_web/live/pack_live/index.html.heex:148 #: lib/cannery_web/live/pack_live/index.html.heex:148
#: lib/cannery_web/live/type_live/show.html.heex:201 #: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
@ -325,29 +326,29 @@ msgid "View pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:159 #: lib/cannery_web/live/pack_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:152 #: lib/cannery_web/live/range_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots" msgid "Delete shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:144 #: lib/cannery_web/live/pack_live/show.ex:144
#: lib/cannery_web/live/range_live/index.html.heex:135 #: lib/cannery_web/live/range_live/index.html.heex:137
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots" msgid "Edit shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:105 #: lib/cannery_web/live/type_live/index.html.heex:107
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}" msgid "Clone %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:122 #: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35 #: lib/cannery_web/live/type_live/show.html.heex:35
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}" msgid "Delete %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:97 #: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19 #: lib/cannery_web/live/type_live/show.html.heex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}" msgid "Edit %{type_name}"
@ -358,7 +359,7 @@ msgstr ""
msgid "New Type" msgid "New Type"
msgstr "Nouveau type de munition" msgstr "Nouveau type de munition"
#: lib/cannery_web/live/type_live/index.html.heex:89 #: lib/cannery_web/live/type_live/index.html.heex:91
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}" msgid "View %{type_name}"
msgstr "" msgstr ""

View File

@ -44,24 +44,24 @@ msgid "Background color"
msgstr "Couleur de fond" msgstr "Couleur de fond"
#: lib/cannery_web/components/type_table_component.ex:86 #: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:327 #: lib/cannery_web/live/type_live/form_component.html.heex:333
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank" msgid "Blank"
msgstr "Vide" msgstr "Vide"
#: lib/cannery_web/live/type_live/form_component.html.heex:174 #: lib/cannery_web/live/type_live/form_component.html.heex:180
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Brass" msgid "Brass"
msgstr "Cuivre" msgstr "Cuivre"
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:147 #: lib/cannery_web/live/type_live/form_component.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core" msgid "Bullet core"
msgstr "Noyau de balle" msgstr "Noyau de balle"
#: lib/cannery_web/components/type_table_component.ex:59 #: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:121 #: lib/cannery_web/live/type_live/form_component.html.heex:125
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type" msgid "Bullet type"
msgstr "Type de balle" msgstr "Type de balle"
@ -79,7 +79,7 @@ msgid "Cartridge"
msgstr "Cartouche" msgstr "Cartouche"
#: lib/cannery_web/components/type_table_component.ex:66 #: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:170 #: lib/cannery_web/live/type_live/form_component.html.heex:174
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material" msgid "Case material"
msgstr "Matériau de la caisse" msgstr "Matériau de la caisse"
@ -100,7 +100,7 @@ msgid "Containers"
msgstr "Conteneurs" msgstr "Conteneurs"
#: lib/cannery_web/components/type_table_component.ex:87 #: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:331 #: lib/cannery_web/live/type_live/form_component.html.heex:337
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive" msgid "Corrosive"
msgstr "Corrosive" msgstr "Corrosive"
@ -145,19 +145,19 @@ msgstr "Modifier linvitation"
msgid "Edit Tag" msgid "Edit Tag"
msgstr "Modifier le tag" msgstr "Modifier le tag"
#: lib/cannery_web/live/type_live/form_component.html.heex:135 #: lib/cannery_web/live/type_live/form_component.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "FMJ" msgid "FMJ"
msgstr "FMJ" msgstr "FMJ"
#: lib/cannery_web/components/type_table_component.ex:58 #: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:111 #: lib/cannery_web/live/type_live/form_component.html.heex:115
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains" msgid "Grains"
msgstr "Graines" msgstr "Graines"
#: lib/cannery_web/components/type_table_component.ex:85 #: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:323 #: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary" msgid "Incendiary"
msgstr "Incendiaire" msgstr "Incendiaire"
@ -184,7 +184,7 @@ msgstr "Uniquement sur invitation"
msgid "Invites" msgid "Invites"
msgstr "Invitations" msgstr "Invitations"
#: lib/cannery_web/controllers/user_session_html/new.html.heex:23 #: lib/cannery_web/controllers/user_session_html/new.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "Me garder authentifié durant 60 jours" msgstr "Me garder authentifié durant 60 jours"
@ -208,8 +208,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Chargeur, lame-chargeur, boite de munition, etc." msgstr "Chargeur, lame-chargeur, boite de munition, etc."
#: lib/cannery_web/components/type_table_component.ex:88 #: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:336 #: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:339 #: lib/cannery_web/live/type_live/form_component.html.heex:345
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer" msgid "Manufacturer"
msgstr "Fabricant" msgstr "Fabricant"
@ -299,7 +299,7 @@ msgid "On the bookshelf"
msgstr "Sur létagère" msgstr "Sur létagère"
#: lib/cannery_web/components/type_table_component.ex:79 #: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:260 #: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure" msgid "Pressure"
msgstr "Pression" msgstr "Pression"
@ -316,7 +316,7 @@ msgid "Price paid:"
msgstr "Prix payé:" msgstr "Prix payé:"
#: lib/cannery_web/components/type_table_component.ex:82 #: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:299 #: lib/cannery_web/live/type_live/form_component.html.heex:305
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type" msgid "Primer type"
msgstr "Type damorce" msgstr "Type damorce"
@ -349,7 +349,7 @@ msgstr "Paramètres"
msgid "Simple:" msgid "Simple:"
msgstr "Simple:" msgstr "Simple:"
#: lib/cannery_web/live/type_live/form_component.html.heex:154 #: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Steel" msgid "Steel"
msgstr "Acier" msgstr "Acier"
@ -386,7 +386,7 @@ 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é"
#: lib/cannery_web/components/type_table_component.ex:84 #: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:319 #: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer" msgid "Tracer"
msgstr "Traceuse" msgstr "Traceuse"
@ -428,6 +428,8 @@ msgstr "Aucun tag pour ce conteneur"
#: lib/cannery_web/components/core_components/topbar.html.heex:48 #: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80 #: lib/cannery_web/components/pack_table_component.ex:80
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "Portée" msgstr "Portée"
@ -461,13 +463,8 @@ msgstr "Aucune munition sélectionnée"
msgid "Record shots" msgid "Record shots"
msgstr "Tirs enregistrés" msgstr "Tirs enregistrés"
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr "Nouveaux enregistrements de tir"
#: lib/cannery_web/live/range_live/index.html.heex:52 #: lib/cannery_web/live/range_live/index.html.heex:52
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:121
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "Aucun tir enregistré" msgstr "Aucun tir enregistré"
@ -479,12 +476,6 @@ msgstr "Aucun tir enregistré"
msgid "Rounds shot" msgid "Rounds shot"
msgstr "Cartouches tirées" msgstr "Cartouches tirées"
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr "Enregistrements de tir"
#: lib/cannery_web/live/pack_live/index.ex:43 #: lib/cannery_web/live/pack_live/index.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
@ -502,9 +493,9 @@ msgstr "Évènements de tir"
#: lib/cannery_web/components/core_components/pack_card.html.heex:42 #: lib/cannery_web/components/core_components/pack_card.html.heex:42
#: lib/cannery_web/components/core_components/pack_card.html.heex:47 #: lib/cannery_web/components/core_components/pack_card.html.heex:47
#: lib/cannery_web/components/pack_table_component.ex:176 #: lib/cannery_web/components/pack_table_component.ex:181
#: lib/cannery_web/components/pack_table_component.ex:259 #: lib/cannery_web/components/pack_table_component.ex:264
#: lib/cannery_web/components/type_table_component.ex:260 #: lib/cannery_web/components/type_table_component.ex:273
#: lib/cannery_web/live/pack_live/show.html.heex:37 #: lib/cannery_web/live/pack_live/show.html.heex:37
#: lib/cannery_web/live/pack_live/show.html.heex:42 #: lib/cannery_web/live/pack_live/show.html.heex:42
#: lib/cannery_web/live/type_live/show.html.heex:150 #: lib/cannery_web/live/type_live/show.html.heex:150
@ -512,36 +503,36 @@ msgstr "Évènements de tir"
msgid "$%{amount}" msgid "$%{amount}"
msgstr "%{amount}$" msgstr "%{amount}$"
#: lib/cannery_web/live/type_live/form_component.html.heex:163 #: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bimetal" msgid "Bimetal"
msgstr "Bi-métal" msgstr "Bi-métal"
#: lib/cannery_web/components/type_table_component.ex:65 #: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:159 #: lib/cannery_web/live/type_live/form_component.html.heex:163
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type" msgid "Jacket type"
msgstr "Type de douille" msgstr "Type de douille"
#: lib/cannery_web/components/type_table_component.ex:81 #: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:282 #: lib/cannery_web/live/type_live/form_component.html.heex:288
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity" msgid "Muzzle velocity"
msgstr "Vélocité du canon" msgstr "Vélocité du canon"
#: lib/cannery_web/components/type_table_component.ex:75 #: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:247 #: lib/cannery_web/live/type_live/form_component.html.heex:253
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge" msgid "Powder grains per charge"
msgstr "Graines de poudre par charge" msgstr "Graines de poudre par charge"
#: lib/cannery_web/components/type_table_component.ex:73 #: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:239 #: lib/cannery_web/live/type_live/form_component.html.heex:245
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type" msgid "Powder type"
msgstr "Type de poudre" msgstr "Type de poudre"
#: lib/cannery_web/live/type_live/form_component.html.heex:346 #: lib/cannery_web/live/type_live/form_component.html.heex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC" msgid "UPC"
msgstr "UPC" msgstr "UPC"
@ -565,24 +556,24 @@ msgid "New password"
msgstr "Nouveau mot de passe" msgstr "Nouveau mot de passe"
#: lib/cannery_web/components/type_table_component.ex:83 #: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:307 #: lib/cannery_web/live/type_live/form_component.html.heex:313
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type" msgid "Firing type"
msgstr "Type dallumage" msgstr "Type dallumage"
#: lib/cannery_web/components/layouts/live.html.heex:43 #: lib/cannery_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "Reconnexion en cours…" msgstr "Reconnexion en cours…"
#: lib/cannery_web/live/container_live/index.ex:28 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:116 #: lib/cannery_web/live/container_live/show.ex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "Éditer %{name}" msgstr "Éditer %{name}"
#: lib/cannery_web/live/container_live/index.ex:63 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:117 #: lib/cannery_web/live/container_live/show.ex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "Éditer les tags de %{name}" msgstr "Éditer les tags de %{name}"
@ -594,9 +585,9 @@ msgstr "Éditer les tags de %{name}"
msgid "Rounds:" msgid "Rounds:"
msgstr "Cartouches:" msgstr "Cartouches:"
#: lib/cannery_web/components/pack_table_component.ex:173 #: lib/cannery_web/components/pack_table_component.ex:178
#: lib/cannery_web/components/pack_table_component.ex:255 #: lib/cannery_web/components/pack_table_component.ex:260
#: lib/cannery_web/components/type_table_component.ex:259 #: lib/cannery_web/components/type_table_component.ex:272
#: lib/cannery_web/live/type_live/show.html.heex:154 #: lib/cannery_web/live/type_live/show.html.heex:154
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
@ -659,6 +650,7 @@ msgstr "Réinitialiser votre mot de passe"
#: lib/cannery_web/live/pack_live/show.ex:40 #: lib/cannery_web/live/pack_live/show.ex:40
#: lib/cannery_web/live/range_live/index.ex:31 #: lib/cannery_web/live/range_live/index.ex:31
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "Enregistrer des tirs" msgstr "Enregistrer des tirs"
@ -777,13 +769,13 @@ msgid "Container:"
msgstr "Conteneur" msgstr "Conteneur"
#: lib/cannery_web/live/pack_live/index.html.heex:87 #: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:64 #: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164 #: lib/cannery_web/live/type_live/show.html.heex:164
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:214 #: lib/cannery_web/components/pack_table_component.ex:219
#: lib/cannery_web/live/pack_live/show.html.heex:19 #: lib/cannery_web/live/pack_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
@ -960,7 +952,7 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:17 #: lib/cannery_web/components/core_components/pack_card.html.heex:17
#: lib/cannery_web/components/pack_table_component.ex:263 #: lib/cannery_web/components/pack_table_component.ex:268
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -1000,7 +992,7 @@ msgstr ""
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:194 #: lib/cannery_web/components/pack_table_component.ex:199
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1022,7 +1014,7 @@ msgstr ""
msgid "Edit ammo" msgid "Edit ammo"
msgstr "Éditer le type de munition" msgstr "Éditer le type de munition"
#: lib/cannery_web/live/type_live/index.html.heex:58 #: lib/cannery_web/live/type_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
@ -1042,7 +1034,7 @@ msgstr ""
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:112 #: lib/cannery_web/live/range_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1146,12 +1138,12 @@ msgid "Email"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
#: lib/cannery_web/controllers/user_session_html/new.html.heex:20 #: lib/cannery_web/controllers/user_session_html/new.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:264 #: lib/cannery_web/live/type_live/form_component.html.heex:270
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "+P" msgid "+P"
msgstr "" msgstr ""
@ -1166,12 +1158,12 @@ msgstr ""
msgid "5.56x46mm NATO" msgid "5.56x46mm NATO"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:303 #: lib/cannery_web/live/type_live/form_component.html.heex:309
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Boxer" msgid "Boxer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:311 #: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Centerfire" msgid "Centerfire"
msgstr "" msgstr ""
@ -1215,13 +1207,13 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:97 #: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58 #: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:35 #: lib/cannery_web/live/type_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All" msgid "All"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:316 #: lib/cannery_web/live/type_live/form_component.html.heex:322
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Attributes" msgid "Attributes"
msgstr "" msgstr ""
@ -1238,7 +1230,7 @@ msgid "Brass height:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57 #: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:95 #: lib/cannery_web/live/type_live/form_component.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Chamber size" msgid "Chamber size"
msgstr "" msgstr ""
@ -1254,7 +1246,7 @@ msgid "Dimensions"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80 #: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:269 #: lib/cannery_web/live/type_live/form_component.html.heex:275
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Dram equivalent" msgid "Dram equivalent"
msgstr "" msgstr ""
@ -1276,7 +1268,7 @@ msgid "Gauge:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71 #: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:210 #: lib/cannery_web/live/type_live/form_component.html.heex:216
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Load grains" msgid "Load grains"
msgstr "" msgstr ""
@ -1298,41 +1290,41 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100 #: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61 #: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:92 #: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38 #: lib/cannery_web/live/type_live/index.html.heex:40
#: lib/cannery_web/live/type_live/show.html.heex:56 #: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pistol" msgid "Pistol"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:236 #: lib/cannery_web/live/type_live/form_component.html.heex:242
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder" msgid "Powder"
msgstr "Type de poudre" msgstr "Type de poudre"
#: lib/cannery_web/live/type_live/form_component.html.heex:296 #: lib/cannery_web/live/type_live/form_component.html.heex:302
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer" msgid "Primer"
msgstr "Type damorce" msgstr "Type damorce"
#: lib/cannery_web/live/type_live/form_component.html.heex:108 #: lib/cannery_web/live/type_live/form_component.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Projectile" msgid "Projectile"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98 #: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59 #: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:90 #: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36 #: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54 #: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rifle" msgid "Rifle"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72 #: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:218 #: lib/cannery_web/live/type_live/form_component.html.heex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot charge weight" msgid "Shot charge weight"
msgstr "" msgstr ""
@ -1343,7 +1335,7 @@ msgid "Shot charge weight:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:69 #: lib/cannery_web/components/type_table_component.ex:69
#: lib/cannery_web/live/type_live/form_component.html.heex:194 #: lib/cannery_web/live/type_live/form_component.html.heex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot material" msgid "Shot material"
msgstr "" msgstr ""
@ -1354,7 +1346,7 @@ msgid "Shot material:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70 #: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:203 #: lib/cannery_web/live/type_live/form_component.html.heex:209
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Shot size" msgid "Shot size"
msgstr "Tirs réalisés" msgstr "Tirs réalisés"
@ -1365,7 +1357,7 @@ msgid "Shot size:"
msgstr "Tirs réalisés" msgstr "Tirs réalisés"
#: lib/cannery_web/components/type_table_component.ex:68 #: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:186 #: lib/cannery_web/live/type_live/form_component.html.heex:192
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot type" msgid "Shot type"
msgstr "" msgstr ""
@ -1377,21 +1369,21 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99 #: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60 #: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:91 #: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37 #: lib/cannery_web/live/type_live/index.html.heex:39
#: lib/cannery_web/live/type_live/show.html.heex:52 #: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shotgun" msgid "Shotgun"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:146 #: lib/cannery_web/live/type_live/form_component.html.heex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Slug core" msgid "Slug core"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:190 #: lib/cannery_web/live/type_live/form_component.html.heex:196
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc" msgid "Target, bird, buck, etc"
msgstr "" msgstr ""
@ -1408,7 +1400,7 @@ msgid "Unfired shell length"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67 #: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:179 #: lib/cannery_web/live/type_live/form_component.html.heex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wadding" msgid "Wadding"
msgstr "" msgstr ""
@ -1459,7 +1451,7 @@ msgid "New Type"
msgstr "Nouveau type de munition" msgstr "Nouveau type de munition"
#: lib/cannery_web/live/type_live/index.html.heex:8 #: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:71 #: lib/cannery_web/live/type_live/index.html.heex:73
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Types" msgid "No Types"
msgstr "Type" msgstr "Type"

View File

@ -23,7 +23,7 @@ msgstr ""
# # Run "mix gettext.extract" to bring this file up to # # Run "mix gettext.extract" to bring this file up to
# # 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.
#: lib/cannery/containers.ex:220 #: lib/cannery/containers.ex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
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é"
@ -169,7 +169,7 @@ msgstr "Impossible d'analyser le nombre de copies"
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}"
#: lib/cannery/ammo.ex:1121 #: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "Multiplicateur invalide" msgstr "Multiplicateur invalide"

View File

@ -74,7 +74,7 @@ msgstr ""
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}?"
#: lib/cannery_web/live/pack_live/index.html.heex:181 #: lib/cannery_web/live/pack_live/index.html.heex:185
#: lib/cannery_web/live/pack_live/show.html.heex:69 #: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
@ -135,7 +135,7 @@ msgstr "Veuillez vérifier votre mél pour confirmer votre compte"
#: lib/cannery_web/live/pack_live/form_component.html.heex:91 #: lib/cannery_web/live/pack_live/form_component.html.heex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:46 #: lib/cannery_web/live/range_live/form_component.html.heex:46
#: lib/cannery_web/live/tag_live/form_component.html.heex:39 #: lib/cannery_web/live/tag_live/form_component.html.heex:39
#: lib/cannery_web/live/type_live/form_component.html.heex:354 #: lib/cannery_web/live/type_live/form_component.html.heex:360
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "Sauvegarde en cours…" msgstr "Sauvegarde en cours…"
@ -178,7 +178,7 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition?" msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition?"
#: lib/cannery_web/live/pack_live/show.ex:157 #: lib/cannery_web/live/pack_live/show.ex:157
#: lib/cannery_web/live/range_live/index.html.heex:149 #: lib/cannery_web/live/range_live/index.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir?" msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir?"
@ -258,7 +258,7 @@ 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"
#: lib/cannery_web/live/type_live/index.html.heex:116 #: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29 #: lib/cannery_web/live/type_live/show.html.heex:29
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"

View File

@ -67,7 +67,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:38 #: lib/cannery_web/controllers/user_session_html/new.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Forgot your password?" msgid "Forgot your password?"
msgstr "" msgstr ""
@ -83,7 +83,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3 #: lib/cannery_web/controllers/user_session_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:28 #: lib/cannery_web/controllers/user_session_html/new.html.heex:36
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
@ -109,7 +109,7 @@ msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38 #: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25 #: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/cannery_web/controllers/user_session_html/new.html.heex:35 #: lib/cannery_web/controllers/user_session_html/new.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Register" msgid "Register"
msgstr "" msgstr ""
@ -132,7 +132,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:90 #: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:44 #: lib/cannery_web/live/range_live/form_component.html.heex:44
#: lib/cannery_web/live/tag_live/form_component.html.heex:37 #: lib/cannery_web/live/tag_live/form_component.html.heex:37
#: lib/cannery_web/live/type_live/form_component.html.heex:353 #: lib/cannery_web/live/type_live/form_component.html.heex:359
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -299,23 +299,24 @@ msgstr ""
msgid "Unstage" msgid "Unstage"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:168 #: lib/cannery_web/live/pack_live/index.html.heex:172
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets" msgid "Clone pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:183 #: lib/cannery_web/live/pack_live/index.html.heex:187
#: lib/cannery_web/live/pack_live/show.html.heex:71 #: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets" msgid "Delete pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:158 #: lib/cannery_web/live/pack_live/index.html.heex:160
#: lib/cannery_web/live/pack_live/show.html.heex:59 #: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets" msgid "Edit pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:139
#: lib/cannery_web/live/pack_live/index.html.heex:148 #: lib/cannery_web/live/pack_live/index.html.heex:148
#: lib/cannery_web/live/type_live/show.html.heex:201 #: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
@ -323,29 +324,29 @@ msgid "View pack of %{pack_count} bullets"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:159 #: lib/cannery_web/live/pack_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:152 #: lib/cannery_web/live/range_live/index.html.heex:154
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots" msgid "Delete shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:144 #: lib/cannery_web/live/pack_live/show.ex:144
#: lib/cannery_web/live/range_live/index.html.heex:135 #: lib/cannery_web/live/range_live/index.html.heex:137
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots" msgid "Edit shot record of %{shot_record_count} shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:105 #: lib/cannery_web/live/type_live/index.html.heex:107
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}" msgid "Clone %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:122 #: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35 #: lib/cannery_web/live/type_live/show.html.heex:35
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}" msgid "Delete %{type_name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:97 #: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19 #: lib/cannery_web/live/type_live/show.html.heex:19
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}" msgid "Edit %{type_name}"
@ -356,7 +357,7 @@ msgstr ""
msgid "New Type" msgid "New Type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:89 #: lib/cannery_web/live/type_live/index.html.heex:91
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}" msgid "View %{type_name}"
msgstr "" msgstr ""

View File

@ -42,24 +42,24 @@ msgid "Background color"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:86 #: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:327 #: lib/cannery_web/live/type_live/form_component.html.heex:333
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Blank" msgid "Blank"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:174 #: lib/cannery_web/live/type_live/form_component.html.heex:180
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Brass" msgid "Brass"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:147 #: lib/cannery_web/live/type_live/form_component.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet core" msgid "Bullet core"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:59 #: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:121 #: lib/cannery_web/live/type_live/form_component.html.heex:125
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bullet type" msgid "Bullet type"
msgstr "" msgstr ""
@ -77,7 +77,7 @@ msgid "Cartridge"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:66 #: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:170 #: lib/cannery_web/live/type_live/form_component.html.heex:174
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Case material" msgid "Case material"
msgstr "" msgstr ""
@ -98,7 +98,7 @@ msgid "Containers"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:87 #: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:331 #: lib/cannery_web/live/type_live/form_component.html.heex:337
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Corrosive" msgid "Corrosive"
msgstr "" msgstr ""
@ -143,19 +143,19 @@ msgstr ""
msgid "Edit Tag" msgid "Edit Tag"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:135 #: lib/cannery_web/live/type_live/form_component.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "FMJ" msgid "FMJ"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:58 #: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:111 #: lib/cannery_web/live/type_live/form_component.html.heex:115
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Grains" msgid "Grains"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:85 #: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:323 #: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Incendiary" msgid "Incendiary"
msgstr "" msgstr ""
@ -182,7 +182,7 @@ msgstr ""
msgid "Invites" msgid "Invites"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_session_html/new.html.heex:23 #: lib/cannery_web/controllers/user_session_html/new.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days" msgid "Keep me logged in for 60 days"
msgstr "" msgstr ""
@ -206,8 +206,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:88 #: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:336 #: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:339 #: lib/cannery_web/live/type_live/form_component.html.heex:345
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Manufacturer" msgid "Manufacturer"
msgstr "" msgstr ""
@ -297,7 +297,7 @@ msgid "On the bookshelf"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:79 #: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:260 #: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pressure" msgid "Pressure"
msgstr "" msgstr ""
@ -314,7 +314,7 @@ msgid "Price paid:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:82 #: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:299 #: lib/cannery_web/live/type_live/form_component.html.heex:305
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Primer type" msgid "Primer type"
msgstr "" msgstr ""
@ -345,7 +345,7 @@ msgstr ""
msgid "Simple:" msgid "Simple:"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:154 #: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Steel" msgid "Steel"
msgstr "" msgstr ""
@ -380,7 +380,7 @@ msgid "The self-hosted firearm tracker website"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:84 #: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:319 #: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Tracer" msgid "Tracer"
msgstr "" msgstr ""
@ -422,6 +422,8 @@ msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:48 #: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80 #: lib/cannery_web/components/pack_table_component.ex:80
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Range" msgid "Range"
msgstr "" msgstr ""
@ -455,13 +457,8 @@ msgstr ""
msgid "Record shots" msgid "Record shots"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:52 #: lib/cannery_web/live/range_live/index.html.heex:52
#: lib/cannery_web/live/range_live/index.html.heex:119 #: lib/cannery_web/live/range_live/index.html.heex:121
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No shots recorded" msgid "No shots recorded"
msgstr "" msgstr ""
@ -473,12 +470,6 @@ msgstr ""
msgid "Rounds shot" msgid "Rounds shot"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.ex:55
#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr ""
#: lib/cannery_web/live/pack_live/index.ex:43 #: lib/cannery_web/live/pack_live/index.ex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Move ammo" msgid "Move ammo"
@ -496,9 +487,9 @@ msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:42 #: lib/cannery_web/components/core_components/pack_card.html.heex:42
#: lib/cannery_web/components/core_components/pack_card.html.heex:47 #: lib/cannery_web/components/core_components/pack_card.html.heex:47
#: lib/cannery_web/components/pack_table_component.ex:176 #: lib/cannery_web/components/pack_table_component.ex:181
#: lib/cannery_web/components/pack_table_component.ex:259 #: lib/cannery_web/components/pack_table_component.ex:264
#: lib/cannery_web/components/type_table_component.ex:260 #: lib/cannery_web/components/type_table_component.ex:273
#: lib/cannery_web/live/pack_live/show.html.heex:37 #: lib/cannery_web/live/pack_live/show.html.heex:37
#: lib/cannery_web/live/pack_live/show.html.heex:42 #: lib/cannery_web/live/pack_live/show.html.heex:42
#: lib/cannery_web/live/type_live/show.html.heex:150 #: lib/cannery_web/live/type_live/show.html.heex:150
@ -506,36 +497,36 @@ msgstr ""
msgid "$%{amount}" msgid "$%{amount}"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:163 #: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Bimetal" msgid "Bimetal"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:65 #: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:159 #: lib/cannery_web/live/type_live/form_component.html.heex:163
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Jacket type" msgid "Jacket type"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:81 #: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:282 #: lib/cannery_web/live/type_live/form_component.html.heex:288
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Muzzle velocity" msgid "Muzzle velocity"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:75 #: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:247 #: lib/cannery_web/live/type_live/form_component.html.heex:253
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder grains per charge" msgid "Powder grains per charge"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:73 #: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:239 #: lib/cannery_web/live/type_live/form_component.html.heex:245
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Powder type" msgid "Powder type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:346 #: lib/cannery_web/live/type_live/form_component.html.heex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "UPC" msgid "UPC"
msgstr "" msgstr ""
@ -559,24 +550,24 @@ msgid "New password"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:83 #: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:307 #: lib/cannery_web/live/type_live/form_component.html.heex:313
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Firing type" msgid "Firing type"
msgstr "" msgstr ""
#: lib/cannery_web/components/layouts/live.html.heex:43 #: lib/cannery_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:28 #: lib/cannery_web/live/container_live/index.ex:28
#: lib/cannery_web/live/container_live/show.ex:116 #: lib/cannery_web/live/container_live/show.ex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name}" msgid "Edit %{name}"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/index.ex:63 #: lib/cannery_web/live/container_live/index.ex:63
#: lib/cannery_web/live/container_live/show.ex:117 #: lib/cannery_web/live/container_live/show.ex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit %{name} tags" msgid "Edit %{name} tags"
msgstr "" msgstr ""
@ -588,9 +579,9 @@ msgstr ""
msgid "Rounds:" msgid "Rounds:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:173 #: lib/cannery_web/components/pack_table_component.ex:178
#: lib/cannery_web/components/pack_table_component.ex:255 #: lib/cannery_web/components/pack_table_component.ex:260
#: lib/cannery_web/components/type_table_component.ex:259 #: lib/cannery_web/components/type_table_component.ex:272
#: lib/cannery_web/live/type_live/show.html.heex:154 #: lib/cannery_web/live/type_live/show.html.heex:154
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No cost information" msgid "No cost information"
@ -653,6 +644,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:40 #: lib/cannery_web/live/pack_live/show.ex:40
#: lib/cannery_web/live/range_live/index.ex:31 #: lib/cannery_web/live/range_live/index.ex:31
#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record Shots" msgid "Record Shots"
msgstr "" msgstr ""
@ -770,13 +762,13 @@ msgid "Container:"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:87 #: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:64 #: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164 #: lib/cannery_web/live/type_live/show.html.heex:164
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show used" msgid "Show used"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:214 #: lib/cannery_web/components/pack_table_component.ex:219
#: lib/cannery_web/live/pack_live/show.html.heex:19 #: lib/cannery_web/live/pack_live/show.html.heex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{percentage}%" msgid "%{percentage}%"
@ -953,7 +945,7 @@ msgid "Average CPR"
msgstr "" msgstr ""
#: lib/cannery_web/components/core_components/pack_card.html.heex:17 #: lib/cannery_web/components/core_components/pack_card.html.heex:17
#: lib/cannery_web/components/pack_table_component.ex:263 #: lib/cannery_web/components/pack_table_component.ex:268
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Empty" msgid "Empty"
msgstr "" msgstr ""
@ -993,7 +985,7 @@ msgstr ""
msgid "Last used on:" msgid "Last used on:"
msgstr "" msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:194 #: lib/cannery_web/components/pack_table_component.ex:199
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Never used" msgid "Never used"
msgstr "" msgstr ""
@ -1015,7 +1007,7 @@ msgstr ""
msgid "Edit ammo" msgid "Edit ammo"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:58 #: lib/cannery_web/live/type_live/index.html.heex:60
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search catalog" msgid "Search catalog"
msgstr "" msgstr ""
@ -1035,7 +1027,7 @@ msgstr ""
msgid "Search tags" msgid "Search tags"
msgstr "" msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:112 #: lib/cannery_web/live/range_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search shot records" msgid "Search shot records"
msgstr "" msgstr ""
@ -1137,12 +1129,12 @@ msgid "Email"
msgstr "" msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24 #: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
#: lib/cannery_web/controllers/user_session_html/new.html.heex:20 #: lib/cannery_web/controllers/user_session_html/new.html.heex:24
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:264 #: lib/cannery_web/live/type_live/form_component.html.heex:270
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "+P" msgid "+P"
msgstr "" msgstr ""
@ -1157,12 +1149,12 @@ msgstr ""
msgid "5.56x46mm NATO" msgid "5.56x46mm NATO"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:303 #: lib/cannery_web/live/type_live/form_component.html.heex:309
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Boxer" msgid "Boxer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:311 #: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Centerfire" msgid "Centerfire"
msgstr "" msgstr ""
@ -1206,13 +1198,13 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:97 #: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58 #: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:89 #: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:35 #: lib/cannery_web/live/type_live/index.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All" msgid "All"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:316 #: lib/cannery_web/live/type_live/form_component.html.heex:322
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Attributes" msgid "Attributes"
msgstr "" msgstr ""
@ -1229,7 +1221,7 @@ msgid "Brass height:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57 #: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:95 #: lib/cannery_web/live/type_live/form_component.html.heex:97
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Chamber size" msgid "Chamber size"
msgstr "" msgstr ""
@ -1245,7 +1237,7 @@ msgid "Dimensions"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80 #: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:269 #: lib/cannery_web/live/type_live/form_component.html.heex:275
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Dram equivalent" msgid "Dram equivalent"
msgstr "" msgstr ""
@ -1267,7 +1259,7 @@ msgid "Gauge:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71 #: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:210 #: lib/cannery_web/live/type_live/form_component.html.heex:216
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Load grains" msgid "Load grains"
msgstr "" msgstr ""
@ -1289,41 +1281,41 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:100 #: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61 #: lib/cannery_web/live/pack_live/index.html.heex:61
#: lib/cannery_web/live/range_live/index.html.heex:92 #: lib/cannery_web/live/range_live/index.html.heex:94
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38 #: lib/cannery_web/live/type_live/index.html.heex:40
#: lib/cannery_web/live/type_live/show.html.heex:56 #: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Pistol" msgid "Pistol"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:236 #: lib/cannery_web/live/type_live/form_component.html.heex:242
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Powder" msgid "Powder"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:296 #: lib/cannery_web/live/type_live/form_component.html.heex:302
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Primer" msgid "Primer"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:108 #: lib/cannery_web/live/type_live/form_component.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Projectile" msgid "Projectile"
msgstr "" msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:98 #: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59 #: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:90 #: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36 #: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54 #: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Rifle" msgid "Rifle"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72 #: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:218 #: lib/cannery_web/live/type_live/form_component.html.heex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot charge weight" msgid "Shot charge weight"
msgstr "" msgstr ""
@ -1334,7 +1326,7 @@ msgid "Shot charge weight:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:69 #: lib/cannery_web/components/type_table_component.ex:69
#: lib/cannery_web/live/type_live/form_component.html.heex:194 #: lib/cannery_web/live/type_live/form_component.html.heex:200
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot material" msgid "Shot material"
msgstr "" msgstr ""
@ -1345,7 +1337,7 @@ msgid "Shot material:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70 #: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:203 #: lib/cannery_web/live/type_live/form_component.html.heex:209
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Shot size" msgid "Shot size"
msgstr "" msgstr ""
@ -1356,7 +1348,7 @@ msgid "Shot size:"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:68 #: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:186 #: lib/cannery_web/live/type_live/form_component.html.heex:192
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shot type" msgid "Shot type"
msgstr "" msgstr ""
@ -1368,21 +1360,21 @@ msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:99 #: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60 #: lib/cannery_web/live/pack_live/index.html.heex:60
#: lib/cannery_web/live/range_live/index.html.heex:91 #: lib/cannery_web/live/range_live/index.html.heex:93
#: lib/cannery_web/live/type_live/form_component.html.heex:25 #: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37 #: lib/cannery_web/live/type_live/index.html.heex:39
#: lib/cannery_web/live/type_live/show.html.heex:52 #: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Shotgun" msgid "Shotgun"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61 #: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:146 #: lib/cannery_web/live/type_live/form_component.html.heex:150
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Slug core" msgid "Slug core"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:190 #: lib/cannery_web/live/type_live/form_component.html.heex:196
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc" msgid "Target, bird, buck, etc"
msgstr "" msgstr ""
@ -1399,7 +1391,7 @@ msgid "Unfired shell length"
msgstr "" msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67 #: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:179 #: lib/cannery_web/live/type_live/form_component.html.heex:185
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wadding" msgid "Wadding"
msgstr "" msgstr ""
@ -1450,7 +1442,7 @@ msgid "New Type"
msgstr "" msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:8 #: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:71 #: lib/cannery_web/live/type_live/index.html.heex:73
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "No Types" msgid "No Types"
msgstr "" msgstr ""

View File

@ -24,7 +24,7 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to ## Run "mix gettext.extract" to bring this file up to
## 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.
#: lib/cannery/containers.ex:220 #: lib/cannery/containers.ex:224
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Container must be empty before deleting" msgid "Container must be empty before deleting"
msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh" msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh"
@ -168,7 +168,7 @@ msgstr ""
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 ""
#: lib/cannery/ammo.ex:1121 #: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid multiplier" msgid "Invalid multiplier"
msgstr "" msgstr ""

View File

@ -69,7 +69,7 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:181 #: lib/cannery_web/live/pack_live/index.html.heex:185
#: lib/cannery_web/live/pack_live/show.html.heex:69 #: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
@ -126,7 +126,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:91 #: lib/cannery_web/live/pack_live/form_component.html.heex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:46 #: lib/cannery_web/live/range_live/form_component.html.heex:46
#: lib/cannery_web/live/tag_live/form_component.html.heex:39 #: lib/cannery_web/live/tag_live/form_component.html.heex:39
#: lib/cannery_web/live/type_live/form_component.html.heex:354 #: lib/cannery_web/live/type_live/form_component.html.heex:360
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -167,7 +167,7 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:157 #: lib/cannery_web/live/pack_live/show.ex:157
#: lib/cannery_web/live/range_live/index.html.heex:149 #: lib/cannery_web/live/range_live/index.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "" msgstr ""
@ -250,7 +250,7 @@ msgstr[2] ""
msgstr[3] "" msgstr[3] ""
msgstr[4] "" msgstr[4] ""
#: lib/cannery_web/live/type_live/index.html.heex:116 #: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29 #: lib/cannery_web/live/type_live/show.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"

View File

@ -0,0 +1,368 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-20 05:05+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.10.1\n"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/pack_live/index.ex:59
#: lib/cannery_web/live/pack_live/index.ex:67
#: lib/cannery_web/live/pack_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Add Ammo"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:34
#, elixir-autogen, elixir-format
msgid "Add your first box!"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:13
#, elixir-autogen, elixir-format
msgid "Add your first container!"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:13
#, elixir-autogen, elixir-format
msgid "Add your first type!"
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:15
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:57
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:17
#, elixir-autogen, elixir-format
msgid "Create Invite"
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:155
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:46
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:13
#, elixir-autogen, elixir-format
msgid "Invite someone new!"
msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:94
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
#: lib/cannery_web/controllers/user_session_html/new.html.heex:36
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:15
#, elixir-autogen, elixir-format
msgid "Make your first tag!"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:17
#, elixir-autogen, elixir-format
msgid "New Container"
msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:19
#, elixir-autogen, elixir-format
msgid "New Tag"
msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:89
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/cannery_web/controllers/user_session_html/new.html.heex:43
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:3
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr ""
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:56
#: lib/cannery_web/live/container_live/form_component.html.heex:55
#: lib/cannery_web/live/invite_live/form_component.html.heex:35
#: lib/cannery_web/live/pack_live/form_component.html.heex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:44
#: lib/cannery_web/live/tag_live/form_component.html.heex:37
#: lib/cannery_web/live/type_live/form_component.html.heex:359
#, elixir-autogen, elixir-format
msgid "Save"
msgstr ""
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Send instructions to reset password"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:65
#, elixir-autogen, elixir-format
msgid "Why not add one?"
msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
#, elixir-autogen, elixir-format
msgid "Add"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:17
#, elixir-autogen, elixir-format
msgid "Stage ammo"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:13
#, elixir-autogen, elixir-format
msgid "Why not get some ready to shoot?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:127
#: lib/cannery_web/live/pack_live/show.html.heex:90
#: lib/cannery_web/live/range_live/index.html.heex:42
#, elixir-autogen, elixir-format
msgid "Record shots"
msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:87
#, elixir-autogen, elixir-format
msgid "Add another container!"
msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:123
#, elixir-autogen, elixir-format
msgid "Select"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Copy to clipboard"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:14
#, elixir-autogen, elixir-format
msgid "add a container first"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:83
#, elixir-autogen, elixir-format
msgid "Create"
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:110
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr ""
#: lib/cannery_web/live/pack_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "View in Catalog"
msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:77
#: lib/cannery_web/live/pack_live/index.html.heex:138
#: lib/cannery_web/live/pack_live/show.html.heex:86
#, elixir-autogen, elixir-format
msgid "Move ammo"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format
msgid "Set Unlimited"
msgstr ""
#: lib/cannery_web/live/pack_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Stage for range"
msgstr ""
#: lib/cannery_web/live/pack_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format
msgid "Unstage from range"
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:146
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:87
#: lib/cannery_web/live/container_live/index.html.heex:145
#, elixir-autogen, elixir-format
msgid "Clone %{container_name}"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "Copy invite link for %{invite_name}"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:104
#: lib/cannery_web/live/container_live/index.html.heex:162
#: lib/cannery_web/live/container_live/show.html.heex:48
#, elixir-autogen, elixir-format
msgid "Delete %{container_name}"
msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:65
#, elixir-autogen, elixir-format
msgid "Delete %{tag_name}"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:63
#, elixir-autogen, elixir-format
msgid "Delete invite for %{invite_name}"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:77
#: lib/cannery_web/live/container_live/index.html.heex:135
#: lib/cannery_web/live/container_live/show.html.heex:35
#, elixir-autogen, elixir-format
msgid "Edit %{container_name}"
msgstr ""
#: lib/cannery_web/live/tag_live/index.html.heex:52
#, elixir-autogen, elixir-format
msgid "Edit %{tag_name}"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:46
#, elixir-autogen, elixir-format
msgid "Edit invite for %{invite_name}"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:120
#, elixir-autogen, elixir-format
msgid "Stage"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:65
#: lib/cannery_web/live/container_live/index.html.heex:124
#, elixir-autogen, elixir-format
msgid "Tag %{container_name}"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:119
#, elixir-autogen, elixir-format
msgid "Unstage"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:172
#, elixir-autogen, elixir-format
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:187
#: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format
msgid "Delete pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:160
#: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format
msgid "Edit pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/container_live/show.html.heex:139
#: lib/cannery_web/live/pack_live/index.html.heex:148
#: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format
msgid "View pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:159
#: lib/cannery_web/live/range_live/index.html.heex:154
#, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:144
#: lib/cannery_web/live/range_live/index.html.heex:137
#, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:107
#, elixir-autogen, elixir-format
msgid "Clone %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35
#, elixir-autogen, elixir-format
msgid "Delete %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19
#, elixir-autogen, elixir-format
msgid "Edit %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:17
#, elixir-autogen, elixir-format
msgid "New Type"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:91
#, elixir-autogen, elixir-format
msgid "View %{type_name}"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:24
#, elixir-autogen, elixir-format
msgid "add a type first"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,103 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-20 05:05+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.10.1\n"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/components/email_html/confirm_email.html.heex:3
#: lib/cannery_web/components/email_html/confirm_email.txt.eex:2
#: lib/cannery_web/components/email_html/reset_password.html.heex:3
#: lib/cannery_web/components/email_html/reset_password.txt.eex:2
#: lib/cannery_web/components/email_html/update_email.html.heex:3
#: lib/cannery_web/components/email_html/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr ""
#: lib/cannery_web/components/email_html/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
#: lib/cannery_web/components/email_html/reset_password.txt.eex:8
#: lib/cannery_web/components/email_html/update_email.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/cannery_web/components/email_html/update_email.html.heex:8
#: lib/cannery_web/components/email_html/update_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
#: lib/cannery_web/components/email_html/confirm_email.html.heex:14
#: lib/cannery_web/components/email_html/confirm_email.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
#: lib/cannery_web/components/email_html/reset_password.html.heex:8
#: lib/cannery_web/components/email_html/reset_password.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
#: lib/cannery/accounts/email.ex:31
#, elixir-autogen, elixir-format
msgid "Confirm your Cannery account"
msgstr ""
#: lib/cannery_web/components/email_html/confirm_email.html.heex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr ""
#: lib/cannery_web/components/email_html/reset_password.html.heex:16
#: lib/cannery_web/components/email_html/update_email.html.heex:16
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
#: lib/cannery/accounts/email.ex:38
#, elixir-autogen, elixir-format
msgid "Reset your Cannery password"
msgstr ""
#: lib/cannery_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
#: lib/cannery/accounts/email.ex:45
#, elixir-autogen, elixir-format
msgid "Update your Cannery email"
msgstr ""
#: lib/cannery_web/components/email_html/confirm_email.html.heex:9
#: lib/cannery_web/components/email_html/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to Cannery"
msgstr ""

View File

@ -0,0 +1,220 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-20 05:05+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.10.1\n"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery/containers.ex:224
#, elixir-autogen, elixir-format
msgid "Container must be empty before deleting"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/show.ex:67
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:74
#, elixir-autogen, elixir-format
msgid "Could not find that container"
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:84
#, elixir-autogen, elixir-format
msgid "Email change link is invalid or it has expired."
msgstr ""
#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr ""
#: lib/cannery_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "Go back home"
msgstr ""
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr ""
#: lib/cannery_web/controllers/error_html.ex:9
#: lib/cannery_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "Not found"
msgstr ""
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:13
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:13
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:22
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:64
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:118
#: lib/cannery_web/live/type_live/form_component.html.heex:18
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
#: lib/cannery_web/controllers/user_reset_password_controller.ex:62
#, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired."
msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:22
#: lib/cannery_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:12
#: lib/cannery_web/controllers/user_registration_controller.ex:41
#: lib/cannery_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:99
#, elixir-autogen, elixir-format
msgid "Unable to delete user"
msgstr ""
#: lib/cannery_web/controllers/error_html.ex:10
#: lib/cannery_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "Unauthorized"
msgstr ""
#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr ""
#: lib/cannery_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr ""
#: lib/cannery/accounts/user.ex:145
#, elixir-autogen, elixir-format
msgid "did not change"
msgstr ""
#: lib/cannery/accounts/user.ex:166
#, elixir-autogen, elixir-format
msgid "does not match password"
msgstr ""
#: lib/cannery/accounts/user.ex:203
#, elixir-autogen, elixir-format
msgid "is not valid"
msgstr ""
#: lib/cannery/accounts/user.ex:100
#, elixir-autogen, elixir-format
msgid "must have the @ sign and no spaces"
msgstr ""
#: lib/cannery_web/live/container_live/show.ex:45
#, elixir-autogen, elixir-format
msgid "Tag not found"
msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:46
#, elixir-autogen, elixir-format
msgid "Tag could not be added"
msgstr ""
#: lib/cannery_web/controllers/user_auth.ex:38
#: lib/cannery_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:73
#, elixir-autogen, elixir-format
msgid "Tag could not be removed"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:159
#, elixir-autogen, elixir-format
msgid "Could not parse number of copies"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:149
#, elixir-autogen, elixir-format
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
msgstr ""
#: lib/cannery/ammo.ex:974
#, elixir-autogen, elixir-format
msgid "Invalid multiplier"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
msgstr ""
#: lib/cannery/activity_log/shot_record.ex:74
#, elixir-autogen, elixir-format
msgid "Please select a valid user and ammo pack"
msgstr ""
#: lib/cannery/activity_log/shot_record.ex:88
#, elixir-autogen, elixir-format
msgid "Ammo left can be at most %{count} rounds"
msgstr ""
#: lib/cannery/activity_log/shot_record.ex:84
#, elixir-autogen, elixir-format
msgid "Ammo left must be at least 0"
msgstr ""
#: lib/cannery/activity_log/shot_record.ex:119
#, elixir-autogen, elixir-format
msgid "Count can be at most %{count} shots"
msgstr ""
#: lib/cannery/activity_log/shot_record.ex:80
#, elixir-autogen, elixir-format
msgid "can't be blank"
msgstr ""
#: lib/cannery/ammo/pack.ex:100
#, elixir-autogen, elixir-format
msgid "Please select a type and container"
msgstr ""
#: lib/cannery_web/controllers/error_html.ex:11
#: lib/cannery_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format
msgid "Internal server error"
msgstr ""
#: lib/cannery_web/controllers/user_auth.ex:195
#, elixir-autogen, elixir-format
msgid "You must log in as an administrator to access this page."
msgstr ""
#: lib/cannery_web/controllers/user_auth.ex:178
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""

View File

@ -0,0 +1,294 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-20 05:05+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.10.1\n"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/cannery_web/live/container_live/form_component.ex:89
#: lib/cannery_web/live/invite_live/form_component.ex:80
#: lib/cannery_web/live/tag_live/form_component.ex:78
#: lib/cannery_web/live/type_live/form_component.ex:88
#, elixir-autogen, elixir-format
msgid "%{name} created successfully"
msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:65
#: lib/cannery_web/live/type_live/index.ex:72
#: lib/cannery_web/live/type_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:79
#: lib/cannery_web/live/container_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
msgstr ""
#: lib/cannery_web/live/container_live/form_component.ex:70
#: lib/cannery_web/live/invite_live/form_component.ex:62
#: lib/cannery_web/live/tag_live/form_component.ex:60
#: lib/cannery_web/live/type_live/form_component.ex:69
#, elixir-autogen, elixir-format
msgid "%{name} updated successfully"
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:29
#, elixir-autogen, elixir-format
msgid "A link to confirm your email change has been sent to the new address."
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:110
#: lib/cannery_web/live/invite_live/index.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:99
#: lib/cannery_web/live/container_live/index.html.heex:157
#: lib/cannery_web/live/container_live/show.html.heex:45
#: lib/cannery_web/live/tag_live/index.html.heex:63
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:185
#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:153
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr ""
#: lib/cannery_web/components/core_components/topbar.html.heex:65
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:77
#, elixir-autogen, elixir-format
msgid "Email changed successfully."
msgstr ""
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
#, elixir-autogen, elixir-format
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
msgstr ""
#: lib/cannery_web/controllers/user_reset_password_controller.ex:24
#, elixir-autogen, elixir-format
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
msgstr ""
#: lib/cannery_web/controllers/user_session_controller.ex:23
#, elixir-autogen, elixir-format
msgid "Logged out successfully."
msgstr ""
#: lib/cannery_web/controllers/user_reset_password_controller.ex:45
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:49
#, elixir-autogen, elixir-format
msgid "Password updated successfully."
msgstr ""
#: lib/cannery_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Please check your email to verify your account"
msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:58
#: lib/cannery_web/live/container_live/form_component.html.heex:57
#: lib/cannery_web/live/invite_live/form_component.html.heex:37
#: lib/cannery_web/live/pack_live/form_component.html.heex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:46
#: lib/cannery_web/live/tag_live/form_component.html.heex:39
#: lib/cannery_web/live/type_live/form_component.html.heex:360
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:95
#, elixir-autogen, elixir-format
msgid "Your account has been deleted"
msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:16
#, elixir-autogen, elixir-format
msgid "Are you sure you want to remove the %{tag_name} tag from %{container_name}?"
msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:51
#, elixir-autogen, elixir-format
msgid "%{name} added successfully"
msgstr ""
#: lib/cannery_web/live/container_live/show.ex:37
#, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}"
msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
#, elixir-autogen, elixir-format
msgid "Adding..."
msgstr ""
#: lib/cannery_web/components/add_shot_record_component.ex:60
#, elixir-autogen, elixir-format
msgid "Shots recorded successfully"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:34
#, elixir-autogen, elixir-format
msgid "Are you sure you want to unstage this ammo?"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:157
#: lib/cannery_web/live/range_live/index.html.heex:151
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:79
#: lib/cannery_web/live/range_live/index.ex:78
#, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully"
msgstr ""
#: lib/cannery_web/live/range_live/form_component.ex:54
#, elixir-autogen, elixir-format
msgid "Shot records updated successfully"
msgstr ""
#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:51
#, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully"
msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:116
#, elixir-autogen, elixir-format
msgid "Copied to clipboard"
msgstr ""
#: lib/cannery_web/live/container_live/edit_tags_component.ex:78
#, elixir-autogen, elixir-format
msgid "%{name} removed successfully"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:10
#: lib/cannery_web/live/pack_live/index.html.heex:20
#, elixir-autogen, elixir-format
msgid "You'll need to"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
#, elixir-autogen, elixir-format
msgid "Creating..."
msgstr ""
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Language updated successfully."
msgstr ""
#: lib/cannery_web/live/pack_live/index.ex:94
#: lib/cannery_web/live/pack_live/show.ex:54
#, elixir-autogen, elixir-format
msgid "Ammo deleted succesfully"
msgstr ""
#: lib/cannery_web/live/range_live/index.ex:91
#, elixir-autogen, elixir-format
msgid "Ammo unstaged succesfully"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:125
#, elixir-autogen, elixir-format
msgid "Ammo updated successfully"
msgstr ""
#: lib/cannery_web/live/pack_live/form_component.ex:184
#, elixir-autogen, elixir-format
msgid "Ammo added successfully"
msgid_plural "Ammo added successfully"
msgstr[0] ""
msgstr[1] ""
#: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""
#: lib/cannery_web/live/home_live.html.heex:63
#, elixir-autogen, elixir-format
msgid "Register to setup Cannery"
msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:43
#, elixir-autogen, elixir-format
msgid "%{invite_name} deleted succesfully"
msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:104
#, elixir-autogen, elixir-format
msgid "%{invite_name} disabled succesfully"
msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:80
#, elixir-autogen, elixir-format
msgid "%{invite_name} enabled succesfully"
msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:58
#, elixir-autogen, elixir-format
msgid "%{invite_name} updated succesfully"
msgstr ""
#: lib/cannery_web/live/invite_live/index.ex:125
#, elixir-autogen, elixir-format
msgid "%{user_email} deleted succesfully"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete the invite for %{invite_name}?"
msgstr ""
#: lib/cannery_web/live/invite_live/index.html.heex:85
#, elixir-autogen, elixir-format
msgid "Are you sure you want to make %{invite_name} unlimited?"
msgstr ""

View File

@ -58,7 +58,7 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?" msgid "Are you sure you want to delete %{name}?"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:181 #: lib/cannery_web/live/pack_live/index.html.heex:185
#: lib/cannery_web/live/pack_live/show.html.heex:69 #: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?" msgid "Are you sure you want to delete this ammo?"
@ -115,7 +115,7 @@ msgstr ""
#: lib/cannery_web/live/pack_live/form_component.html.heex:91 #: lib/cannery_web/live/pack_live/form_component.html.heex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:46 #: lib/cannery_web/live/range_live/form_component.html.heex:46
#: lib/cannery_web/live/tag_live/form_component.html.heex:39 #: lib/cannery_web/live/tag_live/form_component.html.heex:39
#: lib/cannery_web/live/type_live/form_component.html.heex:354 #: lib/cannery_web/live/type_live/form_component.html.heex:360
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@ -156,7 +156,7 @@ msgid "Are you sure you want to unstage this ammo?"
msgstr "" msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:157 #: lib/cannery_web/live/pack_live/show.ex:157
#: lib/cannery_web/live/range_live/index.html.heex:149 #: lib/cannery_web/live/range_live/index.html.heex:151
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?" msgid "Are you sure you want to delete this shot record?"
msgstr "" msgstr ""
@ -236,7 +236,7 @@ msgid_plural "Ammo added successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: lib/cannery_web/live/type_live/index.html.heex:116 #: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29 #: lib/cannery_web/live/type_live/show.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!" msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"

10
priv/i18n/it.tbx Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!DOCTYPE martif PUBLIC "ISO 12200:1999A//DTD MARTIF core (DXFcdV04)//EN" "TBXcdv04.dtd">
<martif type="TBX">
<martifHeader>
<fileDesc>
<sourceDesc><p>Translate Toolkit</p></sourceDesc>
</fileDesc>
</martifHeader>
<text><body></body></text>
</martif>

View File

@ -188,27 +188,27 @@ defmodule Cannery.ActivityLogTest do
end end
end end
test "get_used_count/2 returns accurate used count", %{ test "get_used_count/2 returns accurate used count for pack_id", %{
pack: pack, pack: pack,
type: type, type: type,
container: container, container: container,
current_user: current_user current_user: current_user
} do } do
{1, [another_pack]} = pack_fixture(type, container, current_user) {1, [another_pack]} = pack_fixture(type, container, current_user)
assert 0 = another_pack |> ActivityLog.get_used_count(current_user) assert 0 = ActivityLog.get_used_count(current_user, pack_id: another_pack.id)
assert 5 = pack |> ActivityLog.get_used_count(current_user) assert 5 = ActivityLog.get_used_count(current_user, pack_id: pack.id)
shot_record_fixture(%{count: 15}, current_user, pack) shot_record_fixture(%{count: 15}, current_user, pack)
assert 20 = pack |> ActivityLog.get_used_count(current_user) assert 20 = ActivityLog.get_used_count(current_user, pack_id: pack.id)
shot_record_fixture(%{count: 10}, current_user, pack) shot_record_fixture(%{count: 10}, current_user, pack)
assert 30 = pack |> ActivityLog.get_used_count(current_user) assert 30 = ActivityLog.get_used_count(current_user, pack_id: pack.id)
{1, [another_pack]} = pack_fixture(type, container, current_user) {1, [another_pack]} = pack_fixture(type, container, current_user)
assert 0 = another_pack |> ActivityLog.get_used_count(current_user) assert 0 = ActivityLog.get_used_count(current_user, pack_id: another_pack.id)
end end
test "get_used_counts/2 returns accurate used counts", %{ test "get_grouped_used_counts/2 returns accurate used counts for packs", %{
pack: %{id: pack_id} = pack, pack: %{id: pack_id} = pack,
type: type, type: type,
container: container, container: container,
@ -217,20 +217,41 @@ defmodule Cannery.ActivityLogTest do
{1, [%{id: another_pack_id} = another_pack]} = pack_fixture(type, container, current_user) {1, [%{id: another_pack_id} = another_pack]} = pack_fixture(type, container, current_user)
assert %{pack_id => 5} == assert %{pack_id => 5} ==
[pack, another_pack] |> ActivityLog.get_used_counts(current_user) ActivityLog.get_grouped_used_counts(current_user,
packs: [pack, another_pack],
group_by: :pack_id
)
shot_record_fixture(%{count: 5}, current_user, another_pack) shot_record_fixture(%{count: 5}, current_user, another_pack)
used_counts = [pack, another_pack] |> ActivityLog.get_used_counts(current_user)
used_counts =
ActivityLog.get_grouped_used_counts(current_user,
packs: [pack, another_pack],
group_by: :pack_id
)
assert %{^pack_id => 5} = used_counts assert %{^pack_id => 5} = used_counts
assert %{^another_pack_id => 5} = used_counts assert %{^another_pack_id => 5} = used_counts
shot_record_fixture(%{count: 15}, current_user, pack) shot_record_fixture(%{count: 15}, current_user, pack)
used_counts = [pack, another_pack] |> ActivityLog.get_used_counts(current_user)
used_counts =
ActivityLog.get_grouped_used_counts(current_user,
packs: [pack, another_pack],
group_by: :pack_id
)
assert %{^pack_id => 20} = used_counts assert %{^pack_id => 20} = used_counts
assert %{^another_pack_id => 5} = used_counts assert %{^another_pack_id => 5} = used_counts
shot_record_fixture(%{count: 10}, current_user, pack) shot_record_fixture(%{count: 10}, current_user, pack)
used_counts = [pack, another_pack] |> ActivityLog.get_used_counts(current_user)
used_counts =
ActivityLog.get_grouped_used_counts(current_user,
packs: [pack, another_pack],
group_by: :pack_id
)
assert %{^pack_id => 30} = used_counts assert %{^pack_id => 30} = used_counts
assert %{^another_pack_id => 5} = used_counts assert %{^another_pack_id => 5} = used_counts
end end
@ -294,17 +315,17 @@ defmodule Cannery.ActivityLogTest do
assert %{^another_pack_id => ~D[2022-11-09]} = last_used_shot_records assert %{^another_pack_id => ~D[2022-11-09]} = last_used_shot_records
end end
test "get_used_count_for_type/2 gets accurate used round count for type", test "get_used_count/2 gets accurate used round count for type_id",
%{type: type, pack: pack, current_user: current_user} do %{type: type, pack: pack, current_user: current_user} do
another_type = type_fixture(current_user) another_type = type_fixture(current_user)
assert 0 = another_type |> ActivityLog.get_used_count_for_type(current_user) assert 0 = ActivityLog.get_used_count(current_user, type_id: another_type.id)
assert 5 = type |> ActivityLog.get_used_count_for_type(current_user) assert 5 = ActivityLog.get_used_count(current_user, type_id: type.id)
shot_record_fixture(%{count: 5}, current_user, pack) shot_record_fixture(%{count: 5}, current_user, pack)
assert 10 = type |> ActivityLog.get_used_count_for_type(current_user) assert 10 = ActivityLog.get_used_count(current_user, type_id: type.id)
shot_record_fixture(%{count: 1}, current_user, pack) shot_record_fixture(%{count: 1}, current_user, pack)
assert 11 = type |> ActivityLog.get_used_count_for_type(current_user) assert 11 = ActivityLog.get_used_count(current_user, type_id: type.id)
end end
test "get_used_count_for_types/2 gets accurate used round count for types", %{ test "get_used_count_for_types/2 gets accurate used round count for types", %{
@ -317,13 +338,19 @@ defmodule Cannery.ActivityLogTest do
{1, [pack]} = pack_fixture(another_type, container, current_user) {1, [pack]} = pack_fixture(another_type, container, current_user)
assert %{type_id => 5} == assert %{type_id => 5} ==
[type, another_type] ActivityLog.get_grouped_used_counts(current_user,
|> ActivityLog.get_used_count_for_types(current_user) types: [type, another_type],
group_by: :type_id
)
# use generated pack # use generated pack
shot_record_fixture(%{count: 5}, current_user, pack) shot_record_fixture(%{count: 5}, current_user, pack)
used_counts = [type, another_type] |> ActivityLog.get_used_count_for_types(current_user) used_counts =
ActivityLog.get_grouped_used_counts(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 5} = used_counts assert %{^type_id => 5} = used_counts
assert %{^another_type_id => 5} = used_counts assert %{^another_type_id => 5} = used_counts
@ -331,7 +358,11 @@ defmodule Cannery.ActivityLogTest do
# use generated pack again # use generated pack again
shot_record_fixture(%{count: 1}, current_user, pack) shot_record_fixture(%{count: 1}, current_user, pack)
used_counts = [type, another_type] |> ActivityLog.get_used_count_for_types(current_user) used_counts =
ActivityLog.get_grouped_used_counts(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 5} = used_counts assert %{^type_id => 5} = used_counts
assert %{^another_type_id => 6} = used_counts assert %{^another_type_id => 6} = used_counts
@ -376,17 +407,17 @@ defmodule Cannery.ActivityLogTest do
{1, [pistol_pack]} = pack_fixture(pistol_type, container, current_user) {1, [pistol_pack]} = pack_fixture(pistol_type, container, current_user)
pistol_shot_record = shot_record_fixture(current_user, pistol_pack) pistol_shot_record = shot_record_fixture(current_user, pistol_pack)
assert [^rifle_shot_record] = ActivityLog.list_shot_records(:rifle, current_user) assert [^rifle_shot_record] = ActivityLog.list_shot_records(current_user, class: :rifle)
assert [^shotgun_shot_record] = ActivityLog.list_shot_records(:shotgun, current_user) assert [^shotgun_shot_record] = ActivityLog.list_shot_records(current_user, class: :shotgun)
assert [^pistol_shot_record] = ActivityLog.list_shot_records(:pistol, current_user) assert [^pistol_shot_record] = ActivityLog.list_shot_records(current_user, class: :pistol)
shot_records = ActivityLog.list_shot_records(:all, current_user) shot_records = ActivityLog.list_shot_records(current_user, class: :all)
assert Enum.count(shot_records) == 3 assert Enum.count(shot_records) == 3
assert rifle_shot_record in shot_records assert rifle_shot_record in shot_records
assert shotgun_shot_record in shot_records assert shotgun_shot_record in shot_records
assert pistol_shot_record in shot_records assert pistol_shot_record in shot_records
shot_records = ActivityLog.list_shot_records(nil, current_user) shot_records = ActivityLog.list_shot_records(current_user, class: nil)
assert Enum.count(shot_records) == 3 assert Enum.count(shot_records) == 3
assert rifle_shot_record in shot_records assert rifle_shot_record in shot_records
assert shotgun_shot_record in shot_records assert shotgun_shot_record in shot_records
@ -420,13 +451,13 @@ defmodule Cannery.ActivityLogTest do
_shouldnt_return = shot_record_fixture(another_user, another_pack) _shouldnt_return = shot_record_fixture(another_user, another_pack)
# notes # notes
assert ActivityLog.list_shot_records("amazing", :all, current_user) == [shot_record_a] assert ActivityLog.list_shot_records(current_user, search: "amazing") == [shot_record_a]
# pack attributes # pack attributes
assert ActivityLog.list_shot_records("stupendous", :all, current_user) == [shot_record_b] assert ActivityLog.list_shot_records(current_user, search: "stupendous") == [shot_record_b]
# type attributes # type attributes
assert ActivityLog.list_shot_records("fabulous", :all, current_user) == [shot_record_c] assert ActivityLog.list_shot_records(current_user, search: "fabulous") == [shot_record_c]
end end
end end
end end

View File

@ -85,7 +85,7 @@ defmodule Cannery.AmmoTest do
pistol_type: pistol_type, pistol_type: pistol_type,
current_user: current_user current_user: current_user
} do } do
results = Ammo.list_types(current_user, :all) results = Ammo.list_types(current_user, class: :all)
assert results |> Enum.count() == 3 assert results |> Enum.count() == 3
assert rifle_type in results assert rifle_type in results
assert shotgun_type in results assert shotgun_type in results
@ -96,21 +96,21 @@ defmodule Cannery.AmmoTest do
rifle_type: rifle_type, rifle_type: rifle_type,
current_user: current_user current_user: current_user
} do } do
assert [^rifle_type] = Ammo.list_types(current_user, :rifle) assert [^rifle_type] = Ammo.list_types(current_user, class: :rifle)
end end
test "list_types/2 returns shotgun types", %{ test "list_types/2 returns shotgun types", %{
shotgun_type: shotgun_type, shotgun_type: shotgun_type,
current_user: current_user current_user: current_user
} do } do
assert [^shotgun_type] = Ammo.list_types(current_user, :shotgun) assert [^shotgun_type] = Ammo.list_types(current_user, class: :shotgun)
end end
test "list_types/2 returns pistol types", %{ test "list_types/2 returns pistol types", %{
pistol_type: pistol_type, pistol_type: pistol_type,
current_user: current_user current_user: current_user
} do } do
assert [^pistol_type] = Ammo.list_types(current_user, :pistol) assert [^pistol_type] = Ammo.list_types(current_user, class: :pistol)
end end
test "list_types/2 returns relevant types for a user", %{ test "list_types/2 returns relevant types for a user", %{
@ -120,22 +120,22 @@ defmodule Cannery.AmmoTest do
current_user: current_user current_user: current_user
} do } do
# name # name
assert Ammo.list_types("bullet", current_user, :all) == [rifle_type] assert Ammo.list_types(current_user, search: "bullet") == [rifle_type]
assert Ammo.list_types("bullets", current_user, :all) == [rifle_type] assert Ammo.list_types(current_user, search: "bullets") == [rifle_type]
assert Ammo.list_types("hollow", current_user, :all) == [shotgun_type] assert Ammo.list_types(current_user, search: "hollow") == [shotgun_type]
assert Ammo.list_types("jacket", current_user, :all) == [pistol_type] assert Ammo.list_types(current_user, search: "jacket") == [pistol_type]
# desc # desc
assert Ammo.list_types("pew", current_user, :all) == [rifle_type] assert Ammo.list_types(current_user, search: "pew") == [rifle_type]
assert Ammo.list_types("brass", current_user, :all) == [pistol_type] assert Ammo.list_types(current_user, search: "brass") == [pistol_type]
assert Ammo.list_types("shell", current_user, :all) == [pistol_type] assert Ammo.list_types(current_user, search: "shell") == [pistol_type]
# grains (integer) # grains (integer)
assert Ammo.list_types("53453", current_user, :all) == [rifle_type] assert Ammo.list_types(current_user, search: "53453") == [rifle_type]
assert Ammo.list_types("3234234", current_user, :all) == [shotgun_type] assert Ammo.list_types(current_user, search: "3234234") == [shotgun_type]
# tracer (boolean) # tracer (boolean)
assert Ammo.list_types("tracer", current_user, :all) == [pistol_type] assert Ammo.list_types(current_user, search: "tracer") == [pistol_type]
end end
end end
@ -222,7 +222,7 @@ defmodule Cannery.AmmoTest do
] ]
end end
test "get_average_cost_for_type/2 gets average cost for type", test "get_average_cost/2 gets average cost for type",
%{type: type, current_user: current_user, container: container} do %{type: type, current_user: current_user, container: container} do
{1, [_pack]} = {1, [_pack]} =
pack_fixture( pack_fixture(
@ -232,7 +232,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 25.0 = Ammo.get_average_cost_for_type(type, current_user) assert 25.0 = Ammo.get_average_cost(type, current_user)
{1, [_pack]} = {1, [_pack]} =
pack_fixture( pack_fixture(
@ -242,7 +242,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 25.0 = Ammo.get_average_cost_for_type(type, current_user) assert 25.0 = Ammo.get_average_cost(type, current_user)
{1, [_pack]} = {1, [_pack]} =
pack_fixture( pack_fixture(
@ -252,7 +252,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 40.0 = Ammo.get_average_cost_for_type(type, current_user) assert 40.0 = Ammo.get_average_cost(type, current_user)
{1, [_pack]} = {1, [_pack]} =
pack_fixture( pack_fixture(
@ -262,21 +262,21 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
assert 37.5 = Ammo.get_average_cost_for_type(type, current_user) assert 37.5 = Ammo.get_average_cost(type, current_user)
end end
test "get_average_cost_for_types/2 gets average costs for types", %{ test "get_average_costs/2 gets average costs for types", %{
type: %{id: type_id} = type, type: %{id: type_id} = type,
current_user: current_user, current_user: current_user,
container: container container: container
} do } do
assert %{} == [type] |> Ammo.get_average_cost_for_types(current_user) assert %{} == [type] |> Ammo.get_average_costs(current_user)
%{id: another_type_id} = another_type = type_fixture(current_user) %{id: another_type_id} = another_type = type_fixture(current_user)
assert %{} == assert %{} ==
[type, another_type] [type, another_type]
|> Ammo.get_average_cost_for_types(current_user) |> Ammo.get_average_costs(current_user)
{1, [_pack]} = {1, [_pack]} =
pack_fixture( pack_fixture(
@ -288,7 +288,7 @@ defmodule Cannery.AmmoTest do
assert %{another_type_id => 25.0} == assert %{another_type_id => 25.0} ==
[type, another_type] [type, another_type]
|> Ammo.get_average_cost_for_types(current_user) |> Ammo.get_average_costs(current_user)
{1, [_pack]} = {1, [_pack]} =
pack_fixture( pack_fixture(
@ -298,7 +298,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
average_costs = [type, another_type] |> Ammo.get_average_cost_for_types(current_user) average_costs = [type, another_type] |> Ammo.get_average_costs(current_user)
assert %{^type_id => 25.0} = average_costs assert %{^type_id => 25.0} = average_costs
assert %{^another_type_id => 25.0} = average_costs assert %{^another_type_id => 25.0} = average_costs
@ -311,7 +311,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
average_costs = [type, another_type] |> Ammo.get_average_cost_for_types(current_user) average_costs = [type, another_type] |> Ammo.get_average_costs(current_user)
assert %{^type_id => 25.0} = average_costs assert %{^type_id => 25.0} = average_costs
assert %{^another_type_id => 25.0} = average_costs assert %{^another_type_id => 25.0} = average_costs
@ -324,7 +324,7 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
average_costs = [type, another_type] |> Ammo.get_average_cost_for_types(current_user) average_costs = [type, another_type] |> Ammo.get_average_costs(current_user)
assert %{^type_id => 40.0} = average_costs assert %{^type_id => 40.0} = average_costs
assert %{^another_type_id => 25.0} = average_costs assert %{^another_type_id => 25.0} = average_costs
@ -337,30 +337,30 @@ defmodule Cannery.AmmoTest do
current_user current_user
) )
average_costs = [type, another_type] |> Ammo.get_average_cost_for_types(current_user) average_costs = [type, another_type] |> Ammo.get_average_costs(current_user)
assert %{^type_id => 37.5} = average_costs assert %{^type_id => 37.5} = average_costs
assert %{^another_type_id => 25.0} = average_costs assert %{^another_type_id => 25.0} = average_costs
end end
test "get_round_count_for_type/2 gets accurate round count for type", test "get_round_count/2 gets accurate round count for type",
%{type: type, current_user: current_user, container: container} do %{type: type, current_user: current_user, container: container} do
another_type = type_fixture(current_user) another_type = type_fixture(current_user)
assert 0 = Ammo.get_round_count_for_type(another_type, current_user) assert 0 = Ammo.get_round_count(current_user, type_id: another_type.id)
{1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user)
assert 1 = Ammo.get_round_count_for_type(type, current_user) assert 1 = Ammo.get_round_count(current_user, type_id: type.id)
{1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user) {1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user)
assert 51 = Ammo.get_round_count_for_type(type, current_user) assert 51 = Ammo.get_round_count(current_user, type_id: type.id)
shot_record_fixture(%{count: 26}, current_user, pack) shot_record_fixture(%{count: 26}, current_user, pack)
assert 25 = Ammo.get_round_count_for_type(type, current_user) assert 25 = Ammo.get_round_count(current_user, type_id: type.id)
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
assert 24 = Ammo.get_round_count_for_type(type, current_user) assert 24 = Ammo.get_round_count(current_user, type_id: type.id)
end end
test "get_round_count_for_types/2 gets accurate round counts for types", %{ test "get_round_count_for_types/2 gets accurate round counts for types", %{
@ -371,147 +371,170 @@ defmodule Cannery.AmmoTest do
{1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user)
assert %{type_id => 1} == assert %{type_id => 1} ==
[type] |> Ammo.get_round_count_for_types(current_user) Ammo.get_grouped_round_count(current_user, types: [type], group_by: :type_id)
%{id: another_type_id} = another_type = type_fixture(current_user) %{id: another_type_id} = another_type = type_fixture(current_user)
{1, [_another_pack]} = pack_fixture(%{count: 1}, another_type, container, current_user) {1, [_another_pack]} = pack_fixture(%{count: 1}, another_type, container, current_user)
round_counts = [type, another_type] |> Ammo.get_round_count_for_types(current_user) round_counts =
Ammo.get_grouped_round_count(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 1} = round_counts assert %{^type_id => 1} = round_counts
assert %{^another_type_id => 1} = round_counts assert %{^another_type_id => 1} = round_counts
{1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user) {1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user)
round_counts = [type, another_type] |> Ammo.get_round_count_for_types(current_user) round_counts =
Ammo.get_grouped_round_count(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 51} = round_counts assert %{^type_id => 51} = round_counts
assert %{^another_type_id => 1} = round_counts assert %{^another_type_id => 1} = round_counts
shot_record_fixture(%{count: 26}, current_user, pack) shot_record_fixture(%{count: 26}, current_user, pack)
round_counts = [type, another_type] |> Ammo.get_round_count_for_types(current_user) round_counts =
Ammo.get_grouped_round_count(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 25} = round_counts assert %{^type_id => 25} = round_counts
assert %{^another_type_id => 1} = round_counts assert %{^another_type_id => 1} = round_counts
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
round_counts = [type, another_type] |> Ammo.get_round_count_for_types(current_user) round_counts =
Ammo.get_grouped_round_count(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 24} = round_counts assert %{^type_id => 24} = round_counts
assert %{^another_type_id => 1} = round_counts assert %{^another_type_id => 1} = round_counts
end end
test "get_historical_count_for_type/2 gets accurate total round count for type", test "get_historical_count/2 gets accurate total round count for type",
%{type: type, current_user: current_user, container: container} do %{type: type, current_user: current_user, container: container} do
assert 0 = Ammo.get_historical_count_for_type(type, current_user) assert 0 = Ammo.get_historical_count(type, current_user)
{1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user)
assert 1 = Ammo.get_historical_count_for_type(type, current_user) assert 1 = Ammo.get_historical_count(type, current_user)
{1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user) {1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user)
assert 51 = Ammo.get_historical_count_for_type(type, current_user) assert 51 = Ammo.get_historical_count(type, current_user)
shot_record_fixture(%{count: 26}, current_user, pack) shot_record_fixture(%{count: 26}, current_user, pack)
assert 51 = Ammo.get_historical_count_for_type(type, current_user) assert 51 = Ammo.get_historical_count(type, current_user)
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
assert 51 = Ammo.get_historical_count_for_type(type, current_user) assert 51 = Ammo.get_historical_count(type, current_user)
end end
test "get_historical_count_for_types/2 gets accurate total round counts for types", test "get_historical_counts/2 gets accurate total round counts for types",
%{ %{
type: %{id: type_id} = type, type: %{id: type_id} = type,
current_user: current_user, current_user: current_user,
container: container container: container
} do } do
assert %{} == [type] |> Ammo.get_historical_count_for_types(current_user) assert %{} == [type] |> Ammo.get_historical_counts(current_user)
{1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user)
assert %{type_id => 1} == assert %{type_id => 1} ==
[type] |> Ammo.get_historical_count_for_types(current_user) [type] |> Ammo.get_historical_counts(current_user)
%{id: another_type_id} = another_type = type_fixture(current_user) %{id: another_type_id} = another_type = type_fixture(current_user)
{1, [_pack]} = pack_fixture(%{count: 1}, another_type, container, current_user) {1, [_pack]} = pack_fixture(%{count: 1}, another_type, container, current_user)
historical_counts = historical_counts = [type, another_type] |> Ammo.get_historical_counts(current_user)
[type, another_type] |> Ammo.get_historical_count_for_types(current_user)
assert %{^type_id => 1} = historical_counts assert %{^type_id => 1} = historical_counts
assert %{^another_type_id => 1} = historical_counts assert %{^another_type_id => 1} = historical_counts
{1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user) {1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user)
historical_counts = historical_counts = [type, another_type] |> Ammo.get_historical_counts(current_user)
[type, another_type] |> Ammo.get_historical_count_for_types(current_user)
assert %{^type_id => 51} = historical_counts assert %{^type_id => 51} = historical_counts
assert %{^another_type_id => 1} = historical_counts assert %{^another_type_id => 1} = historical_counts
shot_record_fixture(%{count: 26}, current_user, pack) shot_record_fixture(%{count: 26}, current_user, pack)
historical_counts = historical_counts = [type, another_type] |> Ammo.get_historical_counts(current_user)
[type, another_type] |> Ammo.get_historical_count_for_types(current_user)
assert %{^type_id => 51} = historical_counts assert %{^type_id => 51} = historical_counts
assert %{^another_type_id => 1} = historical_counts assert %{^another_type_id => 1} = historical_counts
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
historical_counts = historical_counts = [type, another_type] |> Ammo.get_historical_counts(current_user)
[type, another_type] |> Ammo.get_historical_count_for_types(current_user)
assert %{^type_id => 51} = historical_counts assert %{^type_id => 51} = historical_counts
assert %{^another_type_id => 1} = historical_counts assert %{^another_type_id => 1} = historical_counts
end end
test "get_used_packs_count_for_type/2 gets accurate total ammo count for type", test "get_packs_count/2 gets accurate total ammo count for type with show_used",
%{type: type, current_user: current_user, container: container} do %{type: type, current_user: current_user, container: container} do
assert 0 = Ammo.get_used_packs_count_for_type(type, current_user) assert 0 = Ammo.get_packs_count(current_user, type_id: type.id, show_used: :only_used)
{1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user)
assert 0 = Ammo.get_used_packs_count_for_type(type, current_user) assert 0 = Ammo.get_packs_count(current_user, type_id: type.id, show_used: :only_used)
{1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user) {1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user)
assert 0 = Ammo.get_used_packs_count_for_type(type, current_user) assert 0 = Ammo.get_packs_count(current_user, type_id: type.id, show_used: :only_used)
shot_record_fixture(%{count: 50}, current_user, pack) shot_record_fixture(%{count: 50}, current_user, pack)
assert 1 = Ammo.get_used_packs_count_for_type(type, current_user) assert 1 = Ammo.get_packs_count(current_user, type_id: type.id, show_used: :only_used)
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
assert 2 = Ammo.get_used_packs_count_for_type(type, current_user) assert 2 = Ammo.get_packs_count(current_user, type_id: type.id, show_used: :only_used)
end end
test "get_used_packs_count_for_types/2 gets accurate total ammo counts for types", test "get_grouped_packs_count/2 gets accurate total ammo counts for types",
%{ %{
type: %{id: type_id} = type, type: %{id: type_id} = type,
current_user: current_user, current_user: current_user,
container: container container: container
} do } do
# testing empty type # testing empty type
assert %{} == [type] |> Ammo.get_used_packs_count_for_types(current_user) assert %{} ==
Ammo.get_grouped_packs_count(current_user,
types: [type],
group_by: :type_id,
show_used: :only_used
)
# testing two empty types # testing two empty types
%{id: another_type_id} = another_type = type_fixture(current_user) %{id: another_type_id} = another_type = type_fixture(current_user)
assert %{} == assert %{} ==
[type, another_type] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_used_packs_count_for_types(current_user) types: [type, another_type],
group_by: :type_id,
show_used: :only_used
)
# testing type with pack # testing type with pack
{1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 1}, type, container, current_user)
assert %{} == assert %{} ==
[type, another_type] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_used_packs_count_for_types(current_user) types: [type, another_type],
group_by: :type_id,
show_used: :only_used
)
# testing type with used pack # testing type with used pack
{1, [another_pack]} = pack_fixture(%{count: 50}, another_type, container, current_user) {1, [another_pack]} = pack_fixture(%{count: 50}, another_type, container, current_user)
@ -519,14 +542,22 @@ defmodule Cannery.AmmoTest do
shot_record_fixture(%{count: 50}, current_user, another_pack) shot_record_fixture(%{count: 50}, current_user, another_pack)
assert %{another_type_id => 1} == assert %{another_type_id => 1} ==
[type, another_type] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_used_packs_count_for_types(current_user) types: [type, another_type],
group_by: :type_id,
show_used: :only_used
)
# testing two types with zero and one used packs # testing two types with zero and one used packs
{1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user) {1, [pack]} = pack_fixture(%{count: 50}, type, container, current_user)
shot_record_fixture(%{count: 50}, current_user, pack) shot_record_fixture(%{count: 50}, current_user, pack)
used_counts = [type, another_type] |> Ammo.get_used_packs_count_for_types(current_user) used_counts =
Ammo.get_grouped_packs_count(current_user,
types: [type, another_type],
group_by: :type_id,
show_used: :only_used
)
assert %{^type_id => 1} = used_counts assert %{^type_id => 1} = used_counts
assert %{^another_type_id => 1} = used_counts assert %{^another_type_id => 1} = used_counts
@ -534,30 +565,35 @@ defmodule Cannery.AmmoTest do
# testing two type with one and two used packs # testing two type with one and two used packs
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
used_counts = [type, another_type] |> Ammo.get_used_packs_count_for_types(current_user) used_counts =
Ammo.get_grouped_packs_count(current_user,
types: [type, another_type],
group_by: :type_id,
show_used: :only_used
)
assert %{^type_id => 2} = used_counts assert %{^type_id => 2} = used_counts
assert %{^another_type_id => 1} = used_counts assert %{^another_type_id => 1} = used_counts
end end
test "get_packs_count_for_container!/2 gets accurate ammo count for container", test "get_packs_count/2 gets accurate ammo count for container by container_id",
%{type: type, current_user: current_user, container: container} do %{type: type, current_user: current_user, container: container} do
{1, [first_pack]} = pack_fixture(%{count: 5}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 5}, type, container, current_user)
assert 1 = Ammo.get_packs_count_for_container!(container, current_user) assert 1 = Ammo.get_packs_count(current_user, container_id: container.id)
{25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user) {25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user)
assert 26 = Ammo.get_packs_count_for_container!(container, current_user) assert 26 = Ammo.get_packs_count(current_user, container_id: container.id)
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
assert 26 = Ammo.get_packs_count_for_container!(container, current_user) assert 26 = Ammo.get_packs_count(current_user, container_id: container.id)
shot_record_fixture(%{count: 4}, current_user, first_pack) shot_record_fixture(%{count: 4}, current_user, first_pack)
assert 25 = Ammo.get_packs_count_for_container!(container, current_user) assert 25 = Ammo.get_packs_count(current_user, container_id: container.id)
end end
test "get_packs_count_for_containers/2 gets accurate ammo count for containers", %{ test "get_grouped_packs_count/2 gets accurate ammo count for containers", %{
type: type, type: type,
current_user: current_user, current_user: current_user,
container: %{id: container_id} = container container: %{id: container_id} = container
@ -569,8 +605,10 @@ defmodule Cannery.AmmoTest do
{1, [_first_pack]} = pack_fixture(%{count: 5}, type, another_container, current_user) {1, [_first_pack]} = pack_fixture(%{count: 5}, type, another_container, current_user)
packs_count = packs_count =
[container, another_container] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_packs_count_for_containers(current_user) containers: [container, another_container],
group_by: :container_id
)
assert %{^container_id => 1} = packs_count assert %{^container_id => 1} = packs_count
assert %{^another_container_id => 1} = packs_count assert %{^another_container_id => 1} = packs_count
@ -578,8 +616,10 @@ defmodule Cannery.AmmoTest do
{25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user) {25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user)
packs_count = packs_count =
[container, another_container] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_packs_count_for_containers(current_user) containers: [container, another_container],
group_by: :container_id
)
assert %{^container_id => 26} = packs_count assert %{^container_id => 26} = packs_count
assert %{^another_container_id => 1} = packs_count assert %{^another_container_id => 1} = packs_count
@ -587,8 +627,10 @@ defmodule Cannery.AmmoTest do
shot_record_fixture(%{count: 1}, current_user, first_pack) shot_record_fixture(%{count: 1}, current_user, first_pack)
packs_count = packs_count =
[container, another_container] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_packs_count_for_containers(current_user) containers: [container, another_container],
group_by: :container_id
)
assert %{^container_id => 26} = packs_count assert %{^container_id => 26} = packs_count
assert %{^another_container_id => 1} = packs_count assert %{^another_container_id => 1} = packs_count
@ -596,28 +638,30 @@ defmodule Cannery.AmmoTest do
shot_record_fixture(%{count: 4}, current_user, first_pack) shot_record_fixture(%{count: 4}, current_user, first_pack)
packs_count = packs_count =
[container, another_container] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_packs_count_for_containers(current_user) containers: [container, another_container],
group_by: :container_id
)
assert %{^container_id => 25} = packs_count assert %{^container_id => 25} = packs_count
assert %{^another_container_id => 1} = packs_count assert %{^another_container_id => 1} = packs_count
end end
test "get_round_count_for_container!/2 gets accurate total round count for container", test "get_round_count/2 gets accurate total round count for container_id",
%{type: type, current_user: current_user, container: container} do %{type: type, current_user: current_user, container: container} do
{1, [first_pack]} = pack_fixture(%{count: 5}, type, container, current_user) {1, [first_pack]} = pack_fixture(%{count: 5}, type, container, current_user)
assert 5 = Ammo.get_round_count_for_container!(container, current_user) assert 5 = Ammo.get_round_count(current_user, container_id: container.id)
{25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user) {25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user)
assert 130 = Ammo.get_round_count_for_container!(container, current_user) assert 130 = Ammo.get_round_count(current_user, container_id: container.id)
shot_record_fixture(%{count: 5}, current_user, first_pack) shot_record_fixture(%{count: 5}, current_user, first_pack)
assert 125 = Ammo.get_round_count_for_container!(container, current_user) assert 125 = Ammo.get_round_count(current_user, container_id: container.id)
end end
test "get_round_count_for_containers/2 gets accurate total round count for containers", test "get_grouped_round_count/2 gets accurate total round count for containers",
%{ %{
type: type, type: type,
current_user: current_user, current_user: current_user,
@ -630,7 +674,10 @@ defmodule Cannery.AmmoTest do
{1, [_first_pack]} = pack_fixture(%{count: 5}, type, another_container, current_user) {1, [_first_pack]} = pack_fixture(%{count: 5}, type, another_container, current_user)
round_counts = round_counts =
[container, another_container] |> Ammo.get_round_count_for_containers(current_user) Ammo.get_grouped_round_count(current_user,
containers: [container, another_container],
group_by: :container_id
)
assert %{^container_id => 5} = round_counts assert %{^container_id => 5} = round_counts
assert %{^another_container_id => 5} = round_counts assert %{^another_container_id => 5} = round_counts
@ -638,7 +685,10 @@ defmodule Cannery.AmmoTest do
{25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user) {25, _packs} = pack_fixture(%{count: 5}, 25, type, container, current_user)
round_counts = round_counts =
[container, another_container] |> Ammo.get_round_count_for_containers(current_user) Ammo.get_grouped_round_count(current_user,
containers: [container, another_container],
group_by: :container_id
)
assert %{^container_id => 130} = round_counts assert %{^container_id => 130} = round_counts
assert %{^another_container_id => 5} = round_counts assert %{^another_container_id => 5} = round_counts
@ -646,7 +696,10 @@ defmodule Cannery.AmmoTest do
shot_record_fixture(%{count: 5}, current_user, first_pack) shot_record_fixture(%{count: 5}, current_user, first_pack)
round_counts = round_counts =
[container, another_container] |> Ammo.get_round_count_for_containers(current_user) Ammo.get_grouped_round_count(current_user,
containers: [container, another_container],
group_by: :container_id
)
assert %{^container_id => 125} = round_counts assert %{^container_id => 125} = round_counts
assert %{^another_container_id => 5} = round_counts assert %{^another_container_id => 5} = round_counts
@ -692,19 +745,19 @@ defmodule Cannery.AmmoTest do
] ]
end end
test "get_packs_count!/2 returns the correct amount of ammo", test "get_packs_count/2 returns the correct amount of ammo",
%{type: type, container: container, current_user: current_user} do %{type: type, container: container, current_user: current_user} do
assert Ammo.get_packs_count!(current_user) == 1 assert Ammo.get_packs_count(current_user) == 1
pack_fixture(type, container, current_user) pack_fixture(type, container, current_user)
assert Ammo.get_packs_count!(current_user) == 2 assert Ammo.get_packs_count(current_user) == 2
pack_fixture(type, container, current_user) pack_fixture(type, container, current_user)
assert Ammo.get_packs_count!(current_user) == 3 assert Ammo.get_packs_count(current_user) == 3
other_user = user_fixture() other_user = user_fixture()
assert Ammo.get_packs_count!(other_user) == 0 assert Ammo.get_packs_count(other_user) == 0
assert Ammo.get_packs_count!(other_user, true) == 0 assert Ammo.get_packs_count(other_user, show_used: true) == 0
other_type = type_fixture(other_user) other_type = type_fixture(other_user)
other_container = container_fixture(other_user) other_container = container_fixture(other_user)
@ -712,11 +765,11 @@ defmodule Cannery.AmmoTest do
{1, [another_pack]} = pack_fixture(%{count: 30}, other_type, other_container, other_user) {1, [another_pack]} = pack_fixture(%{count: 30}, other_type, other_container, other_user)
shot_record_fixture(%{count: 30}, other_user, another_pack) shot_record_fixture(%{count: 30}, other_user, another_pack)
assert Ammo.get_packs_count!(other_user) == 0 assert Ammo.get_packs_count(other_user) == 0
assert Ammo.get_packs_count!(other_user, true) == 1 assert Ammo.get_packs_count(other_user, show_used: true) == 1
end end
test "list_packs/4 returns all packs for a type" do test "list_packs/2 returns all packs for a type" do
current_user = user_fixture() current_user = user_fixture()
container = container_fixture(current_user) container = container_fixture(current_user)
@ -727,24 +780,24 @@ defmodule Cannery.AmmoTest do
pistol_type = type_fixture(%{class: :pistol}, current_user) pistol_type = type_fixture(%{class: :pistol}, current_user)
{1, [pistol_pack]} = pack_fixture(pistol_type, container, current_user) {1, [pistol_pack]} = pack_fixture(pistol_type, container, current_user)
assert [^rifle_pack] = Ammo.list_packs(nil, :rifle, current_user, false) assert [^rifle_pack] = Ammo.list_packs(current_user, class: :rifle)
assert [^shotgun_pack] = Ammo.list_packs(nil, :shotgun, current_user, false) assert [^shotgun_pack] = Ammo.list_packs(current_user, class: :shotgun)
assert [^pistol_pack] = Ammo.list_packs(nil, :pistol, current_user, false) assert [^pistol_pack] = Ammo.list_packs(current_user, class: :pistol)
packs = Ammo.list_packs(nil, :all, current_user, false) packs = Ammo.list_packs(current_user, class: :all)
assert Enum.count(packs) == 3 assert Enum.count(packs) == 3
assert rifle_pack in packs assert rifle_pack in packs
assert shotgun_pack in packs assert shotgun_pack in packs
assert pistol_pack in packs assert pistol_pack in packs
packs = Ammo.list_packs(nil, nil, current_user, false) packs = Ammo.list_packs(current_user)
assert Enum.count(packs) == 3 assert Enum.count(packs) == 3
assert rifle_pack in packs assert rifle_pack in packs
assert shotgun_pack in packs assert shotgun_pack in packs
assert pistol_pack in packs assert pistol_pack in packs
end end
test "list_packs/4 returns all relevant packs including used", %{ test "list_packs/2 returns all relevant packs including used", %{
type: type, type: type,
pack: pack, pack: pack,
container: container, container: container,
@ -756,15 +809,15 @@ defmodule Cannery.AmmoTest do
shot_record_fixture(%{count: 30}, current_user, another_pack) shot_record_fixture(%{count: 30}, current_user, another_pack)
another_pack = Ammo.get_pack!(another_pack_id, current_user) another_pack = Ammo.get_pack!(another_pack_id, current_user)
assert Ammo.list_packs(nil, :all, current_user, false) == [pack] assert Ammo.list_packs(current_user, show_used: false) == [pack]
packs = Ammo.list_packs(nil, :all, current_user, true) packs = Ammo.list_packs(current_user, show_used: true)
assert Enum.count(packs) == 2 assert Enum.count(packs) == 2
assert another_pack in packs assert another_pack in packs
assert pack in packs assert pack in packs
end end
test "list_packs/4 returns relevant packs when searched", %{ test "list_packs/2 returns relevant packs when searched", %{
type: type, type: type,
pack: pack, pack: pack,
container: container, container: container,
@ -784,7 +837,7 @@ defmodule Cannery.AmmoTest do
{1, [fantastic_pack]} = pack_fixture(%{count: 47}, type, another_container, current_user) {1, [fantastic_pack]} = pack_fixture(%{count: 47}, type, another_container, current_user)
packs = Ammo.list_packs(nil, :all, current_user, false) packs = Ammo.list_packs(current_user, search: nil)
assert Enum.count(packs) == 4 assert Enum.count(packs) == 4
assert fantastic_pack in packs assert fantastic_pack in packs
assert amazing_pack in packs assert amazing_pack in packs
@ -792,37 +845,51 @@ defmodule Cannery.AmmoTest do
assert pack in packs assert pack in packs
# search works for pack attributes # search works for pack attributes
assert Ammo.list_packs("cool", :all, current_user, true) == [another_pack] assert Ammo.list_packs(current_user, search: "cool") == [another_pack]
# search works for type attributes # search works for type attributes
assert Ammo.list_packs("amazing", :all, current_user, true) == [amazing_pack] assert Ammo.list_packs(current_user, search: "amazing") == [amazing_pack]
# search works for container attributes # search works for container attributes
assert Ammo.list_packs("fantastic", :all, current_user, true) == assert Ammo.list_packs(current_user, search: "fantastic") == [fantastic_pack]
[fantastic_pack]
# search works for container tag attributes # search works for container tag attributes
assert Ammo.list_packs("stupendous", :all, current_user, true) == assert Ammo.list_packs(current_user, search: "stupendous") == [fantastic_pack]
[fantastic_pack] assert Ammo.list_packs(current_user, search: "random") == []
assert Ammo.list_packs("random", :all, current_user, true) == []
end end
test "list_packs_for_type/3 returns all packs for a type", %{ test "list_packs/2 returns all relevant packs including staged", %{
type: type,
container: container,
pack: unstaged_pack,
current_user: current_user
} do
{1, [staged_pack]} = pack_fixture(%{staged: true}, type, container, current_user)
assert Ammo.list_packs(current_user, staged: false) == [unstaged_pack]
assert Ammo.list_packs(current_user, staged: true) == [staged_pack]
packs = Ammo.list_packs(current_user)
assert Enum.count(packs) == 2
assert unstaged_pack in packs
assert staged_pack in packs
end
test "list_packs/2 returns all relevant packs for a type", %{
container: container, container: container,
current_user: current_user current_user: current_user
} do } do
type = type_fixture(current_user) type = type_fixture(current_user)
{1, [pack]} = pack_fixture(type, container, current_user) {1, [pack]} = pack_fixture(type, container, current_user)
assert [^pack] = Ammo.list_packs_for_type(type, current_user) assert [^pack] = Ammo.list_packs(current_user, type_id: type.id)
shot_record_fixture(current_user, pack) shot_record_fixture(current_user, pack)
pack = Ammo.get_pack!(pack.id, current_user) pack = Ammo.get_pack!(pack.id, current_user)
assert [] == Ammo.list_packs_for_type(type, current_user) assert [] == Ammo.list_packs(current_user, type_id: type.id)
assert [^pack] = Ammo.list_packs_for_type(type, current_user, true) assert [^pack] = Ammo.list_packs(current_user, type_id: type.id, show_used: true)
end end
test "list_packs_for_container/3 returns all packs for a container" do test "list_packs/2 returns all relevant packs for a container" do
current_user = user_fixture() current_user = user_fixture()
container = container_fixture(current_user) container = container_fixture(current_user)
@ -838,78 +905,81 @@ defmodule Cannery.AmmoTest do
pack_fixture(shotgun_type, another_container, current_user) pack_fixture(shotgun_type, another_container, current_user)
pack_fixture(pistol_type, another_container, current_user) pack_fixture(pistol_type, another_container, current_user)
assert [^rifle_pack] = Ammo.list_packs_for_container(container, :rifle, current_user) assert [^rifle_pack] =
Ammo.list_packs(current_user, container_id: container.id, class: :rifle)
assert [^shotgun_pack] = Ammo.list_packs_for_container(container, :shotgun, current_user) assert [^shotgun_pack] =
Ammo.list_packs(current_user, container_id: container.id, class: :shotgun)
assert [^pistol_pack] = Ammo.list_packs_for_container(container, :pistol, current_user) assert [^pistol_pack] =
Ammo.list_packs(current_user, container_id: container.id, class: :pistol)
packs = Ammo.list_packs_for_container(container, :all, current_user) packs = Ammo.list_packs(current_user, container_id: container.id, class: :all)
assert Enum.count(packs) == 3 assert Enum.count(packs) == 3
assert rifle_pack in packs assert rifle_pack in packs
assert shotgun_pack in packs assert shotgun_pack in packs
assert pistol_pack in packs assert pistol_pack in packs
packs = Ammo.list_packs_for_container(container, nil, current_user) packs = Ammo.list_packs(current_user, container_id: container.id)
assert Enum.count(packs) == 3 assert Enum.count(packs) == 3
assert rifle_pack in packs assert rifle_pack in packs
assert shotgun_pack in packs assert shotgun_pack in packs
assert pistol_pack in packs assert pistol_pack in packs
end end
test "get_packs_count_for_type/2 returns count of packs for a type", %{ test "get_packs_count/2 with type_id returns count of packs for a type", %{
type: type, type: type,
container: container, container: container,
current_user: current_user current_user: current_user
} do } do
assert 1 = Ammo.get_packs_count_for_type(type, current_user) assert 1 = Ammo.get_packs_count(current_user, type_id: type.id)
another_type = type_fixture(current_user) another_type = type_fixture(current_user)
assert 0 = Ammo.get_packs_count_for_type(another_type, current_user) assert 0 = Ammo.get_packs_count(current_user, type_id: another_type.id)
{5, _packs} = pack_fixture(%{}, 5, type, container, current_user) {5, _packs} = pack_fixture(%{}, 5, type, container, current_user)
assert 6 = Ammo.get_packs_count_for_type(type, current_user) assert 6 = Ammo.get_packs_count(current_user, type_id: type.id)
end end
test "get_packs_count_for_types/2 returns counts of packs for types", %{ test "get_grouped_packs_count/2 returns counts of packs for types", %{
type: %{id: type_id} = type, type: %{id: type_id} = type,
container: container, container: container,
current_user: current_user current_user: current_user
} do } do
assert %{type_id => 1} == assert %{type_id => 1} ==
[type] |> Ammo.get_packs_count_for_types(current_user) Ammo.get_grouped_packs_count(current_user, types: [type], group_by: :type_id)
%{id: another_type_id} = another_type = type_fixture(current_user) %{id: another_type_id} = another_type = type_fixture(current_user)
assert %{type_id => 1} == assert %{type_id => 1} ==
[type, another_type] Ammo.get_grouped_packs_count(current_user,
|> Ammo.get_packs_count_for_types(current_user) types: [type, another_type],
group_by: :type_id
)
{1, [_pack]} = pack_fixture(another_type, container, current_user) {1, [_pack]} = pack_fixture(another_type, container, current_user)
packs_count = [type, another_type] |> Ammo.get_packs_count_for_types(current_user) packs_count =
Ammo.get_grouped_packs_count(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 1} = packs_count assert %{^type_id => 1} = packs_count
assert %{^another_type_id => 1} = packs_count assert %{^another_type_id => 1} = packs_count
{5, _packs} = pack_fixture(%{}, 5, type, container, current_user) {5, _packs} = pack_fixture(%{}, 5, type, container, current_user)
packs_count = [type, another_type] |> Ammo.get_packs_count_for_types(current_user) packs_count =
Ammo.get_grouped_packs_count(current_user,
types: [type, another_type],
group_by: :type_id
)
assert %{^type_id => 6} = packs_count assert %{^type_id => 6} = packs_count
assert %{^another_type_id => 1} = packs_count assert %{^another_type_id => 1} = packs_count
end end
test "list_staged_packs/1 returns all packs that are staged", %{
type: type,
container: container,
current_user: current_user
} do
{1, [another_pack]} = pack_fixture(%{staged: true}, type, container, current_user)
assert Ammo.list_staged_packs(current_user) == [another_pack]
end
test "get_pack!/2 returns the pack with given id", test "get_pack!/2 returns the pack with given id",
%{pack: %{id: pack_id} = pack, current_user: current_user} do %{pack: %{id: pack_id} = pack, current_user: current_user} do
assert Ammo.get_pack!(pack_id, current_user) == pack assert Ammo.get_pack!(pack_id, current_user) == pack

View File

@ -77,16 +77,16 @@ defmodule Cannery.ContainersTest do
_shouldnt_return = container_fixture(%{name: "another person's container"}, user_fixture()) _shouldnt_return = container_fixture(%{name: "another person's container"}, user_fixture())
# attributes # attributes
assert Containers.list_containers("cool", current_user) == [container_a] assert Containers.list_containers(current_user, search: "cool") == [container_a]
assert Containers.list_containers("fascinating", current_user) == [container_b] assert Containers.list_containers(current_user, search: "fascinating") == [container_b]
assert Containers.list_containers("secret", current_user) == [container_c] assert Containers.list_containers(current_user, search: "secret") == [container_c]
assert Containers.list_containers("box", current_user) == [container_d] assert Containers.list_containers(current_user, search: "box") == [container_d]
# tags # tags
assert Containers.list_containers("stupendous", current_user) == [container_c] assert Containers.list_containers(current_user, search: "stupendous") == [container_c]
assert Containers.list_containers("amazing", current_user) == [container_d] assert Containers.list_containers(current_user, search: "amazing") == [container_d]
assert Containers.list_containers("asajslkdflskdf", current_user) == [] assert Containers.list_containers(current_user, search: "asajslkdflskdf") == []
end end
test "get_container!/2 returns the container with given id", test "get_container!/2 returns the container with given id",
@ -168,10 +168,10 @@ defmodule Cannery.ContainersTest do
tag_fixture(%{name: "bullet", desc: "pews brass shell"}, user_fixture()) tag_fixture(%{name: "bullet", desc: "pews brass shell"}, user_fixture())
# name # name
assert Containers.list_tags("bullet", current_user) == [tag_a] assert Containers.list_tags(current_user, search: "bullet") == [tag_a]
assert Containers.list_tags("bullets", current_user) == [tag_a] assert Containers.list_tags(current_user, search: "bullets") == [tag_a]
assert Containers.list_tags("hollow", current_user) == [tag_b] assert Containers.list_tags(current_user, search: "hollow") == [tag_b]
assert Containers.list_tags("hollows", current_user) == [tag_b] assert Containers.list_tags(current_user, search: "hollows") == [tag_b]
end end
test "get_tag!/2 returns the tag with given id", %{tag: tag, current_user: current_user} do test "get_tag!/2 returns the tag with given id", %{tag: tag, current_user: current_user} do

View File

@ -51,7 +51,7 @@ defmodule CanneryWeb.ExportControllerTest do
"price_paid" => pack.price_paid, "price_paid" => pack.price_paid,
"lot_number" => pack.lot_number, "lot_number" => pack.lot_number,
"staged" => pack.staged, "staged" => pack.staged,
"used_count" => pack |> ActivityLog.get_used_count(current_user), "used_count" => ActivityLog.get_used_count(current_user, pack_id: pack.id),
"original_count" => pack |> Ammo.get_original_count(current_user), "original_count" => pack |> Ammo.get_original_count(current_user),
"cpr" => pack |> Ammo.get_cpr(current_user), "cpr" => pack |> Ammo.get_cpr(current_user),
"percentage_remaining" => pack |> Ammo.get_percentage_remaining(current_user) "percentage_remaining" => pack |> Ammo.get_percentage_remaining(current_user)
@ -90,11 +90,12 @@ defmodule CanneryWeb.ExportControllerTest do
"load_grains" => type.load_grains, "load_grains" => type.load_grains,
"shot_charge_weight" => type.shot_charge_weight, "shot_charge_weight" => type.shot_charge_weight,
"dram_equivalent" => type.dram_equivalent, "dram_equivalent" => type.dram_equivalent,
"average_cost" => type |> Ammo.get_average_cost_for_type(current_user), "average_cost" => Ammo.get_average_cost(type, current_user),
"round_count" => type |> Ammo.get_round_count_for_type(current_user), "round_count" => Ammo.get_round_count(current_user, type_id: type.id),
"used_count" => type |> ActivityLog.get_used_count_for_type(current_user), "used_count" => ActivityLog.get_used_count(current_user, type_id: type.id),
"pack_count" => type |> Ammo.get_packs_count_for_type(current_user), "pack_count" => Ammo.get_packs_count(current_user, type_id: type.id),
"total_pack_count" => type |> Ammo.get_packs_count_for_type(current_user, true) "total_pack_count" =>
Ammo.get_packs_count(current_user, type_id: type.id, show_used: true)
} }
ideal_container = %{ ideal_container = %{
@ -111,8 +112,8 @@ defmodule CanneryWeb.ExportControllerTest do
} }
], ],
"type" => container.type, "type" => container.type,
"pack_count" => container |> Ammo.get_packs_count_for_container!(current_user), "pack_count" => Ammo.get_packs_count(current_user, container_id: container.id),
"round_count" => container |> Ammo.get_round_count_for_container!(current_user) "round_count" => Ammo.get_round_count(current_user, container_id: container.id)
} }
ideal_shot_record = %{ ideal_shot_record = %{

View File

@ -177,7 +177,7 @@ defmodule CanneryWeb.PackLiveTest do
|> follow_redirect(conn, ~p"/ammo") |> follow_redirect(conn, ~p"/ammo")
assert html =~ "Ammo added successfully" assert html =~ "Ammo added successfully"
assert Ammo.list_packs(nil, :all, current_user) |> Enum.count() == multiplier + 1 assert Ammo.list_packs(current_user) |> Enum.count() == multiplier + 1
end end
test "does not save invalid number of new packs", %{conn: conn} do test "does not save invalid number of new packs", %{conn: conn} do