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