- <.link
- navigate={Routes.type_show_path(Endpoint, :show, @pack.type)}
- class="mx-4 my-2 btn btn-primary"
- >
+ <.link navigate={~p"/type/#{@pack.type}"} class="mx-4 my-2 btn btn-primary">
<%= dgettext("actions", "View in Catalog") %>
<.link
- patch={Routes.pack_show_path(Endpoint, :edit, @pack)}
+ patch={~p"/ammo/show/edit/#{@pack}"}
class="mx-4 my-2 text-primary-600 link"
aria-label={
dgettext("actions", "Edit pack of %{pack_count} bullets", pack_count: @pack.count)
@@ -85,14 +82,11 @@
else: dgettext("actions", "Stage for range") %>
- <.link patch={Routes.pack_show_path(Endpoint, :move, @pack)} class="btn btn-primary">
+ <.link patch={~p"/ammo/show/move/#{@pack}"} class="btn btn-primary">
<%= dgettext("actions", "Move ammo") %>
- <.link
- patch={Routes.pack_show_path(Endpoint, :add_shot_record, @pack)}
- class="mx-4 my-2 btn btn-primary"
- >
+ <.link patch={~p"/ammo/show/add_shot_record/#{@pack}"} class="mx-4 my-2 btn btn-primary">
<%= dgettext("actions", "Record shots") %>
@@ -130,50 +124,50 @@
<%= case @live_action do %>
<% :edit -> %>
- <.modal return_to={Routes.pack_show_path(Endpoint, :show, @pack)}>
+ <.modal return_to={~p"/ammo/show/#{@pack}"}>
<.live_component
module={CanneryWeb.PackLive.FormComponent}
id={@pack.id}
title={@page_title}
action={@live_action}
pack={@pack}
- return_to={Routes.pack_show_path(Endpoint, :show, @pack)}
+ return_to={~p"/ammo/show/#{@pack}"}
current_user={@current_user}
/>
<% :edit_shot_record -> %>
- <.modal return_to={Routes.pack_show_path(Endpoint, :show, @pack)}>
+ <.modal return_to={~p"/ammo/show/#{@pack}"}>
<.live_component
module={CanneryWeb.RangeLive.FormComponent}
id={@shot_record.id}
title={@page_title}
action={@live_action}
shot_record={@shot_record}
- return_to={Routes.pack_show_path(Endpoint, :show, @pack)}
+ return_to={~p"/ammo/show/#{@pack}"}
current_user={@current_user}
/>
<% :add_shot_record -> %>
- <.modal return_to={Routes.pack_show_path(Endpoint, :show, @pack)}>
+ <.modal return_to={~p"/ammo/show/#{@pack}"}>
<.live_component
module={CanneryWeb.Components.AddShotRecordComponent}
id={:new}
title={@page_title}
action={@live_action}
pack={@pack}
- return_to={Routes.pack_show_path(Endpoint, :show, @pack)}
+ return_to={~p"/ammo/show/#{@pack}"}
current_user={@current_user}
/>
<% :move -> %>
- <.modal return_to={Routes.pack_show_path(Endpoint, :show, @pack)}>
+ <.modal return_to={~p"/ammo/show/#{@pack}"}>
<.live_component
module={CanneryWeb.Components.MovePackComponent}
id={@pack.id}
title={@page_title}
action={@live_action}
pack={@pack}
- return_to={Routes.pack_show_path(Endpoint, :show, @pack)}
+ return_to={~p"/ammo/show/#{@pack}"}
current_user={@current_user}
/>
diff --git a/lib/cannery_web/live/range_live/index.ex b/lib/cannery_web/live/range_live/index.ex
index 3ea192ee..5f5e93f1 100644
--- a/lib/cannery_web/live/range_live/index.ex
+++ b/lib/cannery_web/live/range_live/index.ex
@@ -5,7 +5,6 @@ defmodule CanneryWeb.RangeLive.Index do
use CanneryWeb, :live_view
alias Cannery.{ActivityLog, ActivityLog.ShotRecord, Ammo}
- alias CanneryWeb.Endpoint
alias Phoenix.LiveView.Socket
@impl true
@@ -94,11 +93,11 @@ defmodule CanneryWeb.RangeLive.Index do
end
def handle_event("search", %{"search" => %{"search_term" => ""}}, socket) do
- {:noreply, socket |> push_patch(to: Routes.range_index_path(Endpoint, :index))}
+ {:noreply, socket |> push_patch(to: ~p"/range")}
end
def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do
- {:noreply, socket |> push_patch(to: Routes.range_index_path(Endpoint, :search, search_term))}
+ {:noreply, socket |> push_patch(to: ~p"/range/search/#{search_term}")}
end
def handle_event("change_class", %{"type" => %{"class" => "rifle"}}, socket) do
diff --git a/lib/cannery_web/live/range_live/index.html.heex b/lib/cannery_web/live/range_live/index.html.heex
index a50a7c58..1905750c 100644
--- a/lib/cannery_web/live/range_live/index.html.heex
+++ b/lib/cannery_web/live/range_live/index.html.heex
@@ -9,11 +9,11 @@
<%= display_emoji("😔") %>
- <.link navigate={Routes.pack_index_path(Endpoint, :index)} class="btn btn-primary">
+ <.link navigate={~p"/ammo"} class="btn btn-primary">
<%= dgettext("actions", "Why not get some ready to shoot?") %>
<% else %>
- <.link navigate={Routes.pack_index_path(Endpoint, :index)} class="btn btn-primary">
+ <.link navigate={~p"/ammo"} class="btn btn-primary">
<%= dgettext("actions", "Stage ammo") %>
@@ -38,10 +38,7 @@
else: dgettext("actions", "Stage for range") %>
- <.link
- patch={Routes.range_index_path(Endpoint, :add_shot_record, pack)}
- class="btn btn-primary"
- >
+ <.link patch={~p"/range/add_shot_record/#{pack}"} class="btn btn-primary">
<%= dgettext("actions", "Record shots") %>
@@ -132,7 +129,7 @@
<:actions :let={shot_record}>
<.link
- patch={Routes.range_index_path(Endpoint, :edit, shot_record)}
+ patch={~p"/range/edit/#{shot_record}"}
class="text-primary-600 link"
aria-label={
dgettext("actions", "Edit shot record of %{shot_record_count} shots",
@@ -168,26 +165,26 @@
<%= case @live_action do %>
<% :edit -> %>
- <.modal return_to={Routes.range_index_path(Endpoint, :index)}>
+ <.modal return_to={~p"/range"}>
<.live_component
module={CanneryWeb.RangeLive.FormComponent}
id={@shot_record.id}
title={@page_title}
action={@live_action}
shot_record={@shot_record}
- return_to={Routes.range_index_path(Endpoint, :index)}
+ return_to={~p"/range"}
current_user={@current_user}
/>
<% :add_shot_record -> %>
- <.modal return_to={Routes.range_index_path(Endpoint, :index)}>
+ <.modal return_to={~p"/range"}>
<.live_component
module={CanneryWeb.Components.AddShotRecordComponent}
id={:new}
title={@page_title}
action={@live_action}
pack={@pack}
- return_to={Routes.range_index_path(Endpoint, :index)}
+ return_to={~p"/range"}
current_user={@current_user}
/>
diff --git a/lib/cannery_web/live/tag_live/index.ex b/lib/cannery_web/live/tag_live/index.ex
index 8de4f998..84ef3fa4 100644
--- a/lib/cannery_web/live/tag_live/index.ex
+++ b/lib/cannery_web/live/tag_live/index.ex
@@ -5,7 +5,7 @@ defmodule CanneryWeb.TagLive.Index do
use CanneryWeb, :live_view
alias Cannery.{Containers, Containers.Tag}
- alias CanneryWeb.ViewHelpers
+ alias CanneryWeb.HTMLHelpers
@impl true
def mount(%{"search" => search}, _session, socket) do
@@ -33,7 +33,7 @@ defmodule CanneryWeb.TagLive.Index do
socket
|> assign(
page_title: gettext("New Tag"),
- tag: %Tag{bg_color: ViewHelpers.random_color(), text_color: "#ffffff"}
+ tag: %Tag{bg_color: HTMLHelpers.random_color(), text_color: "#ffffff"}
)
end
@@ -67,11 +67,11 @@ defmodule CanneryWeb.TagLive.Index do
end
def handle_event("search", %{"search" => %{"search_term" => ""}}, socket) do
- {:noreply, socket |> push_patch(to: Routes.tag_index_path(Endpoint, :index))}
+ {:noreply, socket |> push_patch(to: ~p"/tags")}
end
def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do
- {:noreply, socket |> push_patch(to: Routes.tag_index_path(Endpoint, :search, search_term))}
+ {:noreply, socket |> push_patch(to: ~p"/tags/search/#{search_term}")}
end
defp display_tags(%{assigns: %{search: search, current_user: current_user}} = socket) do
diff --git a/lib/cannery_web/live/tag_live/index.html.heex b/lib/cannery_web/live/tag_live/index.html.heex
index 7c7c8dc7..a8d9ef3c 100644
--- a/lib/cannery_web/live/tag_live/index.html.heex
+++ b/lib/cannery_web/live/tag_live/index.html.heex
@@ -11,11 +11,11 @@
<%= display_emoji("😔") %>
- <.link patch={Routes.tag_index_path(Endpoint, :new)} class="btn btn-primary">
+ <.link patch={~p"/tags/new"} class="btn btn-primary">
<%= dgettext("actions", "Make your first tag!") %>
<% else %>
- <.link patch={Routes.tag_index_path(Endpoint, :new)} class="btn btn-primary">
+ <.link patch={~p"/tags/new"} class="btn btn-primary">
<%= dgettext("actions", "New Tag") %>
@@ -47,7 +47,7 @@
<.tag_card :for={tag <- @tags} tag={tag}>
<.link
- patch={Routes.tag_index_path(Endpoint, :edit, tag)}
+ patch={~p"/tags/edit/#{tag}"}
class="text-primary-600 link"
aria-label={dgettext("actions", "Edit %{tag_name}", tag_name: tag.name)}
>
@@ -72,14 +72,14 @@
<% end %>
-<.modal :if={@live_action in [:new, :edit]} return_to={Routes.tag_index_path(Endpoint, :index)}>
+<.modal :if={@live_action in [:new, :edit]} return_to={~p"/tags"}>
<.live_component
module={CanneryWeb.TagLive.FormComponent}
id={@tag.id || :new}
title={@page_title}
action={@live_action}
tag={@tag}
- return_to={Routes.tag_index_path(Endpoint, :index)}
+ return_to={~p"/tags"}
current_user={@current_user}
/>
diff --git a/lib/cannery_web/live/type_live/index.ex b/lib/cannery_web/live/type_live/index.ex
index accaed31..60835e3d 100644
--- a/lib/cannery_web/live/type_live/index.ex
+++ b/lib/cannery_web/live/type_live/index.ex
@@ -78,12 +78,11 @@ defmodule CanneryWeb.TypeLive.Index do
end
def handle_event("search", %{"search" => %{"search_term" => ""}}, socket) do
- {:noreply, socket |> push_patch(to: Routes.type_index_path(Endpoint, :index))}
+ {:noreply, socket |> push_patch(to: ~p"/catalog")}
end
def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do
- search_path = Routes.type_index_path(Endpoint, :search, search_term)
- {:noreply, socket |> push_patch(to: search_path)}
+ {:noreply, socket |> push_patch(to: ~p"/catalog/search/#{search_term}")}
end
def handle_event("change_class", %{"type" => %{"class" => "rifle"}}, socket) do
diff --git a/lib/cannery_web/live/type_live/index.html.heex b/lib/cannery_web/live/type_live/index.html.heex
index 33ee2303..d739d67d 100644
--- a/lib/cannery_web/live/type_live/index.html.heex
+++ b/lib/cannery_web/live/type_live/index.html.heex
@@ -9,11 +9,11 @@
<%= display_emoji("😔") %>
- <.link patch={Routes.type_index_path(Endpoint, :new)} class="btn btn-primary">
+ <.link patch={~p"/catalog/new"} class="btn btn-primary">
<%= dgettext("actions", "Add your first type!") %>
<% else %>
- <.link patch={Routes.type_index_path(Endpoint, :new)} class="btn btn-primary">
+ <.link patch={~p"/catalog/new"} class="btn btn-primary">
<%= dgettext("actions", "New Type") %>
@@ -84,7 +84,7 @@
<:actions :let={type}>
<.link
- navigate={Routes.type_show_path(Endpoint, :show, type)}
+ navigate={~p"/type/#{type}"}
class="text-primary-600 link"
aria-label={dgettext("actions", "View %{type_name}", type_name: type.name)}
>
@@ -92,7 +92,7 @@
<.link
- patch={Routes.type_index_path(Endpoint, :edit, type)}
+ patch={~p"/catalog/edit/#{type}"}
class="text-primary-600 link"
aria-label={dgettext("actions", "Edit %{type_name}", type_name: type.name)}
>
@@ -100,7 +100,7 @@
<.link
- patch={Routes.type_index_path(Endpoint, :clone, type)}
+ patch={~p"/catalog/clone/#{type}"}
class="text-primary-600 link"
aria-label={dgettext("actions", "Clone %{type_name}", type_name: type.name)}
>
@@ -130,17 +130,14 @@
<% end %>
-<.modal
- :if={@live_action in [:new, :edit, :clone]}
- return_to={Routes.type_index_path(Endpoint, :index)}
->
+<.modal :if={@live_action in [:new, :edit, :clone]} return_to={~p"/catalog"}>
<.live_component
module={CanneryWeb.TypeLive.FormComponent}
id={@type.id || :new}
title={@page_title}
action={@live_action}
type={@type}
- return_to={Routes.type_index_path(Endpoint, :index)}
+ return_to={~p"/catalog"}
current_user={@current_user}
}
/>
diff --git a/lib/cannery_web/live/type_live/show.ex b/lib/cannery_web/live/type_live/show.ex
index 22edf897..29e98171 100644
--- a/lib/cannery_web/live/type_live/show.ex
+++ b/lib/cannery_web/live/type_live/show.ex
@@ -5,7 +5,6 @@ defmodule CanneryWeb.TypeLive.Show do
use CanneryWeb, :live_view
alias Cannery.{ActivityLog, Ammo, Ammo.Type, Containers}
- alias CanneryWeb.Endpoint
@impl true
def mount(_params, _session, socket),
@@ -25,7 +24,7 @@ defmodule CanneryWeb.TypeLive.Show do
%{name: type_name} = type |> Ammo.delete_type!(current_user)
prompt = dgettext("prompts", "%{name} deleted succesfully", name: type_name)
- redirect_to = Routes.type_index_path(socket, :index)
+ redirect_to = ~p"/catalog"
{:noreply, socket |> put_flash(:info, prompt) |> push_navigate(to: redirect_to)}
end
diff --git a/lib/cannery_web/live/type_live/show.html.heex b/lib/cannery_web/live/type_live/show.html.heex
index 87b9ce5e..ea5639c5 100644
--- a/lib/cannery_web/live/type_live/show.html.heex
+++ b/lib/cannery_web/live/type_live/show.html.heex
@@ -14,7 +14,7 @@
<.link
- patch={Routes.type_show_path(Endpoint, :edit, @type)}
+ patch={~p"/type/#{@type}/edit"}
class="text-primary-600 link"
aria-label={dgettext("actions", "Edit %{type_name}", type_name: @type.name)}
>
@@ -188,17 +188,14 @@
show_used={@show_used}
>
<:container :let={{_pack, %{name: container_name} = container}}>
- <.link
- navigate={Routes.container_show_path(Endpoint, :show, container)}
- class="mx-2 my-1 link"
- >
+ <.link navigate={~p"/container/#{container}"} class="mx-2 my-1 link">
<%= container_name %>
<:actions :let={%{count: pack_count} = pack}>
<.link
- navigate={Routes.pack_show_path(Endpoint, :show, pack)}
+ navigate={~p"/ammo/show/#{pack}"}
class="text-primary-600 link"
aria-label={
dgettext("actions", "View pack of %{pack_count} bullets", pack_count: pack_count)
@@ -226,14 +223,14 @@
-<.modal :if={@live_action == :edit} return_to={Routes.type_show_path(Endpoint, :show, @type)}>
+<.modal :if={@live_action == :edit} return_to={~p"/type/#{@type}"}>
<.live_component
module={CanneryWeb.TypeLive.FormComponent}
id={@type.id}
title={@page_title}
action={@live_action}
type={@type}
- return_to={Routes.type_show_path(Endpoint, :show, @type)}
+ return_to={~p"/type/#{@type}"}
current_user={@current_user}
/>
diff --git a/lib/cannery_web/router.ex b/lib/cannery_web/router.ex
index d4c5eea3..e90c7695 100644
--- a/lib/cannery_web/router.ex
+++ b/lib/cannery_web/router.ex
@@ -7,25 +7,13 @@ defmodule CanneryWeb.Router do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_live_flash
- plug :put_root_layout, {CanneryWeb.LayoutView, :root}
+ plug :put_root_layout, {CanneryWeb.Layouts, :root}
plug :protect_from_forgery
plug :put_secure_browser_headers
plug :fetch_current_user
plug :put_user_locale
end
- defp put_user_locale(%{assigns: %{current_user: %{locale: locale}}} = conn, _opts) do
- default = Application.fetch_env!(:gettext, :default_locale)
- Gettext.put_locale(locale || default)
- conn |> put_session(:locale, locale || default)
- end
-
- defp put_user_locale(conn, _opts) do
- default = Application.fetch_env!(:gettext, :default_locale)
- Gettext.put_locale(default)
- conn |> put_session(:locale, default)
- end
-
pipeline :require_admin do
plug :require_role, role: :admin
end
@@ -34,14 +22,6 @@ defmodule CanneryWeb.Router do
plug :accepts, ["json"]
end
- scope "/", CanneryWeb do
- pipe_through :browser
-
- live "/", HomeLive
- end
-
- ## Authentication routes
-
scope "/", CanneryWeb do
pipe_through [:browser, :redirect_if_user_is_authenticated]
@@ -64,59 +44,51 @@ defmodule CanneryWeb.Router do
get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email
get "/export/:mode", ExportController, :export
- live "/tags", TagLive.Index, :index
- live "/tags/new", TagLive.Index, :new
- live "/tags/edit/:id", TagLive.Index, :edit
- live "/tags/search/:search", TagLive.Index, :search
+ live_session :default, on_mount: [{CanneryWeb.UserAuth, :ensure_authenticated}] do
+ live "/tags", TagLive.Index, :index
+ live "/tags/new", TagLive.Index, :new
+ live "/tags/edit/:id", TagLive.Index, :edit
+ live "/tags/search/:search", TagLive.Index, :search
- live "/catalog", TypeLive.Index, :index
- live "/catalog/new", TypeLive.Index, :new
- live "/catalog/clone/:id", TypeLive.Index, :clone
- live "/catalog/edit/:id", TypeLive.Index, :edit
- live "/catalog/search/:search", TypeLive.Index, :search
+ live "/catalog", TypeLive.Index, :index
+ live "/catalog/new", TypeLive.Index, :new
+ live "/catalog/clone/:id", TypeLive.Index, :clone
+ live "/catalog/edit/:id", TypeLive.Index, :edit
+ live "/catalog/search/:search", TypeLive.Index, :search
- live "/type/:id", TypeLive.Show, :show
- live "/type/:id/edit", TypeLive.Show, :edit
+ live "/type/:id", TypeLive.Show, :show
+ live "/type/:id/edit", TypeLive.Show, :edit
- live "/containers", ContainerLive.Index, :index
- live "/containers/new", ContainerLive.Index, :new
- live "/containers/edit/:id", ContainerLive.Index, :edit
- live "/containers/clone/:id", ContainerLive.Index, :clone
- live "/containers/edit_tags/:id", ContainerLive.Index, :edit_tags
- live "/containers/search/:search", ContainerLive.Index, :search
+ live "/containers", ContainerLive.Index, :index
+ live "/containers/new", ContainerLive.Index, :new
+ live "/containers/edit/:id", ContainerLive.Index, :edit
+ live "/containers/clone/:id", ContainerLive.Index, :clone
+ live "/containers/edit_tags/:id", ContainerLive.Index, :edit_tags
+ live "/containers/search/:search", ContainerLive.Index, :search
- live "/container/:id", ContainerLive.Show, :show
- live "/container/edit/:id", ContainerLive.Show, :edit
- live "/container/edit_tags/:id", ContainerLive.Show, :edit_tags
+ live "/container/:id", ContainerLive.Show, :show
+ live "/container/edit/:id", ContainerLive.Show, :edit
+ live "/container/edit_tags/:id", ContainerLive.Show, :edit_tags
- live "/ammo", PackLive.Index, :index
- live "/ammo/new", PackLive.Index, :new
- live "/ammo/edit/:id", PackLive.Index, :edit
- live "/ammo/clone/:id", PackLive.Index, :clone
- live "/ammo/add_shot_record/:id", PackLive.Index, :add_shot_record
- live "/ammo/move/:id", PackLive.Index, :move
- live "/ammo/search/:search", PackLive.Index, :search
+ live "/ammo", PackLive.Index, :index
+ live "/ammo/new", PackLive.Index, :new
+ live "/ammo/edit/:id", PackLive.Index, :edit
+ live "/ammo/clone/:id", PackLive.Index, :clone
+ live "/ammo/add_shot_record/:id", PackLive.Index, :add_shot_record
+ live "/ammo/move/:id", PackLive.Index, :move
+ live "/ammo/search/:search", PackLive.Index, :search
- live "/ammo/show/:id", PackLive.Show, :show
- live "/ammo/show/edit/:id", PackLive.Show, :edit
- live "/ammo/show/add_shot_record/:id", PackLive.Show, :add_shot_record
- live "/ammo/show/move/:id", PackLive.Show, :move
- live "/ammo/show/:id/edit/:shot_record_id", PackLive.Show, :edit_shot_record
+ live "/ammo/show/:id", PackLive.Show, :show
+ live "/ammo/show/edit/:id", PackLive.Show, :edit
+ live "/ammo/show/add_shot_record/:id", PackLive.Show, :add_shot_record
+ live "/ammo/show/move/:id", PackLive.Show, :move
+ live "/ammo/show/:id/edit/:shot_record_id", PackLive.Show, :edit_shot_record
- live "/range", RangeLive.Index, :index
- live "/range/edit/:id", RangeLive.Index, :edit
- live "/range/add_shot_record/:id", RangeLive.Index, :add_shot_record
- live "/range/search/:search", RangeLive.Index, :search
- end
-
- scope "/", CanneryWeb do
- pipe_through [:browser, :require_authenticated_user, :require_admin]
-
- live_dashboard "/dashboard", metrics: CanneryWeb.Telemetry, ecto_repos: [Cannery.Repo]
-
- live "/invites", InviteLive.Index, :index
- live "/invites/new", InviteLive.Index, :new
- live "/invites/:id/edit", InviteLive.Index, :edit
+ live "/range", RangeLive.Index, :index
+ live "/range/edit/:id", RangeLive.Index, :edit
+ live "/range/add_shot_record/:id", RangeLive.Index, :add_shot_record
+ live "/range/search/:search", RangeLive.Index, :search
+ end
end
scope "/", CanneryWeb do
@@ -126,6 +98,22 @@ defmodule CanneryWeb.Router do
get "/users/confirm", UserConfirmationController, :new
post "/users/confirm", UserConfirmationController, :create
get "/users/confirm/:token", UserConfirmationController, :confirm
+
+ live_session :public, on_mount: [{CanneryWeb.UserAuth, :mount_current_user}] do
+ live "/", HomeLive
+ end
+ end
+
+ scope "/", CanneryWeb do
+ pipe_through [:browser, :require_authenticated_user, :require_admin]
+
+ live_dashboard "/dashboard", metrics: CanneryWeb.Telemetry, ecto_repos: [Cannery.Repo]
+
+ live_session :admin, on_mount: [{CanneryWeb.UserAuth, :ensure_admin}] do
+ live "/invites", InviteLive.Index, :index
+ live "/invites/new", InviteLive.Index, :new
+ live "/invites/:id/edit", InviteLive.Index, :edit
+ end
end
# Enables the Swoosh mailbox preview in development.
@@ -137,9 +125,6 @@ defmodule CanneryWeb.Router do
pipe_through :browser
forward "/mailbox", Plug.Swoosh.MailboxPreview
- end
-
- scope "/dev" do
get "/preview/:id", CanneryWeb.EmailController, :preview
end
end
diff --git a/lib/cannery_web/templates/layout/empty.html.heex b/lib/cannery_web/templates/layout/empty.html.heex
deleted file mode 100644
index 05433985..00000000
--- a/lib/cannery_web/templates/layout/empty.html.heex
+++ /dev/null
@@ -1 +0,0 @@
-<%= @inner_content %>
diff --git a/lib/cannery_web/views/email_view.ex b/lib/cannery_web/views/email_view.ex
deleted file mode 100644
index 600c5ad9..00000000
--- a/lib/cannery_web/views/email_view.ex
+++ /dev/null
@@ -1,7 +0,0 @@
-defmodule CanneryWeb.EmailView do
- @moduledoc """
- A view for email-related helper functions
- """
- use CanneryWeb, :view
- alias CanneryWeb.HomeLive
-end
diff --git a/lib/cannery_web/views/error_view.ex b/lib/cannery_web/views/error_view.ex
deleted file mode 100644
index 413b46d9..00000000
--- a/lib/cannery_web/views/error_view.ex
+++ /dev/null
@@ -1,15 +0,0 @@
-defmodule CanneryWeb.ErrorView do
- use CanneryWeb, :view
- alias CanneryWeb.HomeLive
-
- def template_not_found(error_path, _assigns) do
- error_string =
- case error_path do
- "404.html" -> dgettext("errors", "Not found")
- "401.html" -> dgettext("errors", "Unauthorized")
- _other_path -> dgettext("errors", "Internal Server Error")
- end
-
- render("error.html", %{error_string: error_string})
- end
-end
diff --git a/lib/cannery_web/views/home_view.ex b/lib/cannery_web/views/home_view.ex
deleted file mode 100644
index ba7a00c4..00000000
--- a/lib/cannery_web/views/home_view.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule CanneryWeb.HomeView do
- use CanneryWeb, :view
-end
diff --git a/lib/cannery_web/views/layout_view.ex b/lib/cannery_web/views/layout_view.ex
deleted file mode 100644
index ccf9dad6..00000000
--- a/lib/cannery_web/views/layout_view.ex
+++ /dev/null
@@ -1,16 +0,0 @@
-defmodule CanneryWeb.LayoutView do
- use CanneryWeb, :view
- alias CanneryWeb.HomeLive
-
- # Phoenix LiveDashboard is available only in development by default,
- # so we instruct Elixir to not warn if the dashboard route is missing.
- @compile {:no_warn_undefined, {Routes, :live_dashboard_path, 2}}
-
- def get_title(%{assigns: %{title: title}}) when title not in [nil, ""] do
- gettext("Cannery | %{title}", title: title)
- end
-
- def get_title(_conn) do
- gettext("Cannery")
- end
-end
diff --git a/lib/cannery_web/views/user_confirmation_view.ex b/lib/cannery_web/views/user_confirmation_view.ex
deleted file mode 100644
index 08bc492e..00000000
--- a/lib/cannery_web/views/user_confirmation_view.ex
+++ /dev/null
@@ -1,4 +0,0 @@
-defmodule CanneryWeb.UserConfirmationView do
- use CanneryWeb, :view
- alias Cannery.Accounts
-end
diff --git a/lib/cannery_web/views/user_registration_view.ex b/lib/cannery_web/views/user_registration_view.ex
deleted file mode 100644
index ff0375c2..00000000
--- a/lib/cannery_web/views/user_registration_view.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule CanneryWeb.UserRegistrationView do
- use CanneryWeb, :view
-end
diff --git a/lib/cannery_web/views/user_reset_password_view.ex b/lib/cannery_web/views/user_reset_password_view.ex
deleted file mode 100644
index aa16a365..00000000
--- a/lib/cannery_web/views/user_reset_password_view.ex
+++ /dev/null
@@ -1,4 +0,0 @@
-defmodule CanneryWeb.UserResetPasswordView do
- use CanneryWeb, :view
- alias Cannery.Accounts
-end
diff --git a/lib/cannery_web/views/user_session_view.ex b/lib/cannery_web/views/user_session_view.ex
deleted file mode 100644
index ef414f77..00000000
--- a/lib/cannery_web/views/user_session_view.ex
+++ /dev/null
@@ -1,4 +0,0 @@
-defmodule CanneryWeb.UserSessionView do
- use CanneryWeb, :view
- alias Cannery.Accounts
-end
diff --git a/lib/cannery_web/views/user_settings_view.ex b/lib/cannery_web/views/user_settings_view.ex
deleted file mode 100644
index d9a8aa10..00000000
--- a/lib/cannery_web/views/user_settings_view.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule CanneryWeb.UserSettingsView do
- use CanneryWeb, :view
-end
diff --git a/mix.exs b/mix.exs
index af69731c..4d0082f2 100644
--- a/mix.exs
+++ b/mix.exs
@@ -7,7 +7,6 @@ defmodule Cannery.MixProject do
version: "0.9.3",
elixir: "1.14.4",
elixirc_paths: elixirc_paths(Mix.env()),
- compilers: Mix.compilers(),
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
@@ -48,12 +47,11 @@ defmodule Cannery.MixProject do
defp deps do
[
{:bcrypt_elixir, "~> 3.0"},
- {:phoenix, "~> 1.6.0"},
+ {:phoenix, "~> 1.7.0"},
{:phoenix_ecto, "~> 4.4"},
{:phoenix_html, "~> 3.0"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.18.0"},
- {:phoenix_view, "~> 2.0"},
{:phoenix_live_dashboard, "~> 0.6"},
{:ecto_sql, "~> 3.6"},
{:postgrex, ">= 0.0.0"},
@@ -62,7 +60,6 @@ defmodule Cannery.MixProject do
{:ex_doc, "~> 0.27", only: :dev, runtime: false},
{:swoosh, "~> 1.6"},
{:gen_smtp, "~> 1.0"},
- {:phoenix_swoosh, "~> 1.0"},
{:oban, "~> 2.10"},
{:telemetry_metrics, "~> 0.6"},
{:telemetry_poller, "~> 1.0"},
diff --git a/mix.lock b/mix.lock
index 0dc658fc..40ea2723 100644
--- a/mix.lock
+++ b/mix.lock
@@ -31,16 +31,14 @@
"mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"},
"nimble_parsec": {:hex, :nimble_parsec, "1.3.0", "9e18a119d9efc3370a3ef2a937bf0b24c088d9c4bf0ba9d7c3751d49d347d035", [:mix], [], "hexpm", "7977f183127a7cbe9346981e2f480dc04c55ffddaef746bd58debd566070eef8"},
"oban": {:hex, :oban, "2.15.0", "27b9c2845cdff30c98c8060b11a64318e79bbc1bd32b8dc95fa59a1580a8d90c", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "22e181c540335d1dd5c995be00435927075519207d62b3de32477d95dbf9dfd3"},
- "phoenix": {:hex, :phoenix, "1.6.16", "e5bdd18c7a06da5852a25c7befb72246de4ddc289182285f8685a40b7b5f5451", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e15989ff34f670a96b95ef6d1d25bad0d9c50df5df40b671d8f4a669e050ac39"},
+ "phoenix": {:hex, :phoenix, "1.7.2", "c375ffb482beb4e3d20894f84dd7920442884f5f5b70b9f4528cbe0cedefec63", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.4", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1ebca94b32b4d0e097ab2444a9742ed8ff3361acad17365e4e6b2e79b4792159"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"},
"phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.7.2", "97cc4ff2dba1ebe504db72cb45098cb8e91f11160528b980bd282cc45c73b29c", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.18.3", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "0e5fdf063c7a3b620c566a30fcf68b7ee02e5e46fe48ee46a6ec3ba382dc05b7"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"},
"phoenix_live_view": {:hex, :phoenix_live_view, "0.18.18", "1f38fbd7c363723f19aad1a04b5490ff3a178e37daaf6999594d5f34796c47fc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a5810d0472f3189ede6d2a95bda7f31c6113156b91784a3426cb0ab6a6d85214"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"},
- "phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.0", "a544d83fde4a767efb78f45404a74c9e37b2a9c5ea3339692e65a6966731f935", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "e88d117251e89a16b92222415a6d87b99a96747ddf674fc5c7631de734811dba"},
"phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"},
- "phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"},
"plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"},
"plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"},
"plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"},
@@ -51,4 +49,6 @@
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
"telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
+ "websock": {:hex, :websock, "0.5.0", "f6bbce90226121d62a0715bca7c986c5e43de0ccc9475d79c55381d1796368cc", [:mix], [], "hexpm", "b51ac706df8a7a48a2c622ee02d09d68be8c40418698ffa909d73ae207eb5fb8"},
+ "websock_adapter": {:hex, :websock_adapter, "0.5.0", "cea35d8bbf1a6964e32d4b02ceb561dfb769c04f16d60d743885587e7d2ca55b", [:mix], [{:bandit, "~> 0.6", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "16318b124effab8209b1eb7906c636374f623dc9511a8278ad09c083cea5bb83"},
}
diff --git a/priv/gettext/actions.pot b/priv/gettext/actions.pot
index 6de2acf6..c49954b1 100644
--- a/priv/gettext/actions.pot
+++ b/priv/gettext/actions.pot
@@ -32,14 +32,14 @@ msgstr ""
msgid "Add your first type!"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:15
-#: lib/cannery_web/templates/user_settings/edit.html.heex:43
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:15
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:57
-#: lib/cannery_web/templates/user_settings/edit.html.heex:97
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:57
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr ""
@@ -49,14 +49,14 @@ msgstr ""
msgid "Create Invite"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:159
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:155
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:47
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:42
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr ""
@@ -66,13 +66,13 @@ msgstr ""
msgid "Invite someone new!"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:124
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:32
-#: lib/cannery_web/templates/user_registration/new.html.heex:44
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:32
-#: lib/cannery_web/templates/user_session/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:28
+#: lib/cannery_web/components/core_components/topbar.html.heex:94
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr ""
@@ -92,25 +92,25 @@ msgstr ""
msgid "New Tag"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:116
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:29
-#: lib/cannery_web/templates/user_registration/new.html.heex:3
-#: lib/cannery_web/templates/user_registration/new.html.heex:37
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:29
-#: lib/cannery_web/templates/user_session/new.html.heex:39
+#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:3
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
@@ -126,12 +126,12 @@ msgstr ""
msgid "Save"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Send instructions to reset password"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:68
+#: lib/cannery_web/live/container_live/show.html.heex:65
#, elixir-autogen, elixir-format
msgid "Why not add one?"
msgstr ""
@@ -152,18 +152,18 @@ msgid "Why not get some ready to shoot?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:127
-#: lib/cannery_web/live/pack_live/show.html.heex:96
-#: lib/cannery_web/live/range_live/index.html.heex:45
+#: lib/cannery_web/live/pack_live/show.html.heex:90
+#: lib/cannery_web/live/range_live/index.html.heex:42
#, elixir-autogen, elixir-format
msgid "Record shots"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:88
+#: lib/cannery_web/components/move_pack_component.ex:87
#, elixir-autogen, elixir-format
msgid "Add another container!"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:124
+#: lib/cannery_web/components/move_pack_component.ex:123
#, elixir-autogen, elixir-format
msgid "Select"
msgstr ""
@@ -183,24 +183,24 @@ msgstr ""
msgid "Create"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:110
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:110
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:136
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:55
+#: lib/cannery_web/live/pack_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "View in Catalog"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:78
-#: lib/cannery_web/live/pack_live/index.html.heex:144
-#: lib/cannery_web/live/pack_live/show.html.heex:89
+#: lib/cannery_web/components/move_pack_component.ex:77
+#: lib/cannery_web/live/pack_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.html.heex:86
#, elixir-autogen, elixir-format
msgid "Move ammo"
msgstr ""
@@ -210,19 +210,19 @@ msgstr ""
msgid "Set Unlimited"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:85
+#: lib/cannery_web/live/pack_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Stage for range"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:84
+#: lib/cannery_web/live/pack_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format
msgid "Unstage from range"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:150
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:146
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""
@@ -288,37 +288,37 @@ msgstr ""
msgid "Unstage"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:174
+#: lib/cannery_web/live/pack_live/index.html.heex:168
#, elixir-autogen, elixir-format
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:189
-#: lib/cannery_web/live/pack_live/show.html.heex:74
+#: lib/cannery_web/live/pack_live/index.html.heex:183
+#: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format
msgid "Delete pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:164
-#: lib/cannery_web/live/pack_live/show.html.heex:62
+#: lib/cannery_web/live/pack_live/index.html.heex:158
+#: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format
msgid "Edit pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:154
-#: lib/cannery_web/live/type_live/show.html.heex:204
+#: lib/cannery_web/live/pack_live/index.html.heex:148
+#: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format
msgid "View pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:160
-#: lib/cannery_web/live/range_live/index.html.heex:155
+#: lib/cannery_web/live/pack_live/show.ex:159
+#: lib/cannery_web/live/range_live/index.html.heex:152
#, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:145
-#: lib/cannery_web/live/range_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.ex:144
+#: lib/cannery_web/live/range_live/index.html.heex:135
#, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
diff --git a/priv/gettext/de/LC_MESSAGES/actions.po b/priv/gettext/de/LC_MESSAGES/actions.po
index 6ffba69a..1081a35e 100644
--- a/priv/gettext/de/LC_MESSAGES/actions.po
+++ b/priv/gettext/de/LC_MESSAGES/actions.po
@@ -45,14 +45,14 @@ msgstr "Fügen Sie ihren ersten Behälter hinzu!"
msgid "Add your first type!"
msgstr "Fügen Sie ihre erste Munitionsart hinzu!"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:15
-#: lib/cannery_web/templates/user_settings/edit.html.heex:43
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:15
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr "Mailadresse ändern"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:57
-#: lib/cannery_web/templates/user_settings/edit.html.heex:97
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:57
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr "Passwort ändern"
@@ -62,14 +62,14 @@ msgstr "Passwort ändern"
msgid "Create Invite"
msgstr "Einladung erstellen"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:159
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:155
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr "Benutzer löschen"
-#: lib/cannery_web/templates/user_registration/new.html.heex:47
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:42
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr "Passwort vergessen?"
@@ -79,13 +79,13 @@ msgstr "Passwort vergessen?"
msgid "Invite someone new!"
msgstr "Laden Sie jemanden ein!"
-#: lib/cannery_web/components/core_components/topbar.html.heex:124
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:32
-#: lib/cannery_web/templates/user_registration/new.html.heex:44
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:32
-#: lib/cannery_web/templates/user_session/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:28
+#: lib/cannery_web/components/core_components/topbar.html.heex:94
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr "Einloggen"
@@ -105,25 +105,25 @@ msgstr "Neuer Behälter"
msgid "New Tag"
msgstr "Neuer Tag"
-#: lib/cannery_web/components/core_components/topbar.html.heex:116
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:29
-#: lib/cannery_web/templates/user_registration/new.html.heex:3
-#: lib/cannery_web/templates/user_registration/new.html.heex:37
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:29
-#: lib/cannery_web/templates/user_session/new.html.heex:39
+#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "Registrieren"
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr "Bestätigungsmail erneut senden"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:3
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr "Passwort zurücksetzen"
@@ -139,12 +139,12 @@ msgstr "Passwort zurücksetzen"
msgid "Save"
msgstr "Speichern"
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Send instructions to reset password"
msgstr "Anleitung zum Passwort zurücksetzen zusenden"
-#: lib/cannery_web/live/container_live/show.html.heex:68
+#: lib/cannery_web/live/container_live/show.html.heex:65
#, elixir-autogen, elixir-format
msgid "Why not add one?"
msgstr "Warum fügen Sie keine hinzu?"
@@ -165,18 +165,18 @@ msgid "Why not get some ready to shoot?"
msgstr "Warum nicht einige für den Schießstand auswählen?"
#: lib/cannery_web/live/pack_live/index.html.heex:127
-#: lib/cannery_web/live/pack_live/show.html.heex:96
-#: lib/cannery_web/live/range_live/index.html.heex:45
+#: lib/cannery_web/live/pack_live/show.html.heex:90
+#: lib/cannery_web/live/range_live/index.html.heex:42
#, elixir-autogen, elixir-format
msgid "Record shots"
msgstr "Schüsse dokumentieren"
-#: lib/cannery_web/components/move_pack_component.ex:88
+#: lib/cannery_web/components/move_pack_component.ex:87
#, elixir-autogen, elixir-format
msgid "Add another container!"
msgstr "Einen weiteren Behälter hinzufügen!"
-#: lib/cannery_web/components/move_pack_component.ex:124
+#: lib/cannery_web/components/move_pack_component.ex:123
#, elixir-autogen, elixir-format
msgid "Select"
msgstr "Markieren"
@@ -196,24 +196,24 @@ msgstr "Zuerst einen Behälter hinzufügen"
msgid "Create"
msgstr "Erstellen"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:110
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:110
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr "Sprache wechseln"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:136
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr "Sprache wechseln"
-#: lib/cannery_web/live/pack_live/show.html.heex:55
+#: lib/cannery_web/live/pack_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "View in Catalog"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:78
-#: lib/cannery_web/live/pack_live/index.html.heex:144
-#: lib/cannery_web/live/pack_live/show.html.heex:89
+#: lib/cannery_web/components/move_pack_component.ex:77
+#: lib/cannery_web/live/pack_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.html.heex:86
#, elixir-autogen, elixir-format
msgid "Move ammo"
msgstr ""
@@ -223,19 +223,19 @@ msgstr ""
msgid "Set Unlimited"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:85
+#: lib/cannery_web/live/pack_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Stage for range"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:84
+#: lib/cannery_web/live/pack_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format
msgid "Unstage from range"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:150
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:146
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""
@@ -301,37 +301,37 @@ msgstr ""
msgid "Unstage"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:174
+#: lib/cannery_web/live/pack_live/index.html.heex:168
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:189
-#: lib/cannery_web/live/pack_live/show.html.heex:74
+#: lib/cannery_web/live/pack_live/index.html.heex:183
+#: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:164
-#: lib/cannery_web/live/pack_live/show.html.heex:62
+#: lib/cannery_web/live/pack_live/index.html.heex:158
+#: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:154
-#: lib/cannery_web/live/type_live/show.html.heex:204
+#: lib/cannery_web/live/pack_live/index.html.heex:148
+#: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:160
-#: lib/cannery_web/live/range_live/index.html.heex:155
+#: lib/cannery_web/live/pack_live/show.ex:159
+#: lib/cannery_web/live/range_live/index.html.heex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:145
-#: lib/cannery_web/live/range_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.ex:144
+#: lib/cannery_web/live/range_live/index.html.heex:135
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po
index 433c35f9..65ccb545 100644
--- a/priv/gettext/de/LC_MESSAGES/default.po
+++ b/priv/gettext/de/LC_MESSAGES/default.po
@@ -29,7 +29,7 @@ msgstr "Admins"
msgid "Admins:"
msgstr "Admins:"
-#: lib/cannery_web/components/core_components/topbar.html.heex:58
+#: lib/cannery_web/components/core_components/topbar.html.heex:43
#: lib/cannery_web/components/shot_record_table_component.ex:44
#: lib/cannery_web/live/pack_live/index.ex:75
#: lib/cannery_web/live/pack_live/index.ex:84
@@ -84,14 +84,14 @@ msgstr "Patrone"
msgid "Case material"
msgstr "Gehäusematerial"
-#: lib/cannery_web/components/move_pack_component.ex:65
+#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:66
#, elixir-autogen, elixir-format
msgid "Container"
msgstr "Behälter"
-#: lib/cannery_web/components/core_components/topbar.html.heex:42
+#: lib/cannery_web/components/core_components/topbar.html.heex:33
#: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3
@@ -177,20 +177,20 @@ msgstr "Einladung deaktiviert"
msgid "Invite Only"
msgstr "Nur mit Einladung"
-#: lib/cannery_web/components/core_components/topbar.html.heex:74
+#: lib/cannery_web/components/core_components/topbar.html.heex:53
#: lib/cannery_web/live/invite_live/index.ex:31
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr "Einladungen"
-#: lib/cannery_web/templates/user_session/new.html.heex:23
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr "Für 60 Tage eingeloggt bleiben"
#: lib/cannery_web/components/container_table_component.ex:47
-#: lib/cannery_web/components/move_pack_component.ex:67
+#: lib/cannery_web/components/move_pack_component.ex:66
#: lib/cannery_web/live/container_live/form_component.html.heex:47
#, elixir-autogen, elixir-format
msgid "Location"
@@ -281,7 +281,7 @@ msgstr "Keine Tags"
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
-#: lib/cannery_web/live/pack_live/show.ex:91
+#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
msgid "Notes"
@@ -339,7 +339,7 @@ msgstr ""
"vertrauen."
#: lib/cannery_web/controllers/user_settings_controller.ex:10
-#: lib/cannery_web/templates/user_settings/edit.html.heex:3
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr "Einstellungen"
@@ -354,13 +354,13 @@ msgstr "Einfach:"
msgid "Steel"
msgstr "Stahl"
-#: lib/cannery_web/live/pack_live/show.html.heex:106
+#: lib/cannery_web/live/pack_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Stored in"
msgstr "Gelagert in"
#: lib/cannery_web/components/container_table_component.ex:66
-#: lib/cannery_web/components/core_components/topbar.html.heex:34
+#: lib/cannery_web/components/core_components/topbar.html.heex:28
#: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3
@@ -390,7 +390,7 @@ msgid "Tracer"
msgstr "Leuchtspur"
#: lib/cannery_web/components/container_table_component.ex:48
-#: lib/cannery_web/components/move_pack_component.ex:66
+#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:39
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
@@ -424,7 +424,7 @@ msgstr "Ihre Daten bleiben bei Ihnen, Punkt"
msgid "No tags for this container"
msgstr "Keine Tags für diesen Behälter"
-#: lib/cannery_web/components/core_components/topbar.html.heex:66
+#: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80
#, elixir-autogen, elixir-format
msgid "Range"
@@ -437,7 +437,7 @@ msgstr "Range Day"
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
#: lib/cannery_web/components/shot_record_table_component.ex:47
-#: lib/cannery_web/live/pack_live/show.ex:92
+#: lib/cannery_web/live/pack_live/show.ex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:41
#, elixir-autogen, elixir-format
msgid "Date"
@@ -459,26 +459,26 @@ msgstr "Keine Munition selektiert"
msgid "Record shots"
msgstr "Schüsse dokumentieren"
-#: lib/cannery_web/live/range_live/index.ex:48
+#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr "Neue Schießkladde"
-#: lib/cannery_web/live/range_live/index.html.heex:55
-#: lib/cannery_web/live/range_live/index.html.heex:122
+#: lib/cannery_web/live/range_live/index.html.heex:52
+#: lib/cannery_web/live/range_live/index.html.heex:119
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr "Keine Schüsse dokumentiert"
#: lib/cannery_web/components/shot_record_table_component.ex:45
-#: lib/cannery_web/live/pack_live/show.ex:90
-#: lib/cannery_web/live/range_live/index.html.heex:69
+#: lib/cannery_web/live/pack_live/show.ex:89
+#: lib/cannery_web/live/range_live/index.html.heex:66
#, elixir-autogen, elixir-format
msgid "Rounds shot"
msgstr "Patronen abgefeuert"
-#: lib/cannery_web/live/range_live/index.ex:56
-#: lib/cannery_web/live/range_live/index.ex:66
+#: lib/cannery_web/live/range_live/index.ex:55
+#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr "Schießkladde"
@@ -488,12 +488,12 @@ msgstr "Schießkladde"
msgid "Move ammo"
msgstr "Munition verschieben"
-#: lib/cannery_web/components/move_pack_component.ex:83
+#: lib/cannery_web/components/move_pack_component.ex:82
#, elixir-autogen, elixir-format
msgid "No other containers"
msgstr "Kein weiterer Behälter"
-#: lib/cannery_web/live/range_live/index.html.heex:60
+#: lib/cannery_web/live/range_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "Shot log"
msgstr "Schießkladde"
@@ -544,20 +544,20 @@ msgstr "Pulverart"
msgid "UPC"
msgstr "UPC"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
-#: lib/cannery_web/templates/user_settings/edit.html.heex:76
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:20
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr "Passwort bestätigen"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:31
-#: lib/cannery_web/templates/user_settings/edit.html.heex:85
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:31
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr "Derzeitiges Passwort"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
-#: lib/cannery_web/templates/user_settings/edit.html.heex:69
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:16
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "New password"
msgstr "Neues Passwort"
@@ -568,19 +568,19 @@ msgstr "Neues Passwort"
msgid "Firing type"
msgstr "Patronenhülsenform"
-#: lib/cannery_web/templates/layout/live.html.heex:43
+#: lib/cannery_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr "Neu verbinden..."
#: lib/cannery_web/live/container_live/index.ex:28
-#: lib/cannery_web/live/container_live/show.ex:120
+#: lib/cannery_web/live/container_live/show.ex:116
#, 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:121
+#: lib/cannery_web/live/container_live/show.ex:117
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
msgstr "Editiere %{name} Tags"
@@ -625,7 +625,7 @@ msgstr "Ursprüngliche Anzahl:"
msgid "Percentage left:"
msgstr "Prozent verbleibend:"
-#: lib/cannery_web/live/pack_live/show.html.heex:119
+#: lib/cannery_web/live/pack_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "Rounds used"
msgstr "Patronen verbraucht"
@@ -645,18 +645,18 @@ msgstr "Passwort vergessen?"
msgid "Log in"
msgstr "Einloggen"
-#: lib/cannery_web/controllers/user_registration_controller.ex:33
+#: lib/cannery_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "Registrieren"
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:35
#, elixir-autogen, elixir-format
msgid "Reset your password"
msgstr "Passwort zurücksetzen"
-#: lib/cannery_web/live/pack_live/show.ex:41
-#: lib/cannery_web/live/range_live/index.ex:32
+#: lib/cannery_web/live/pack_live/show.ex:40
+#: lib/cannery_web/live/range_live/index.ex:31
#, elixir-autogen, elixir-format
msgid "Record Shots"
msgstr "Schüsse dokumentieren"
@@ -671,23 +671,23 @@ msgstr "Kopien"
msgid "Added on:"
msgstr "Hinzugefügt am:"
-#: lib/cannery_web/templates/user_registration/new.html.heex:32
-#: lib/cannery_web/templates/user_settings/edit.html.heex:127
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
#, elixir-autogen, elixir-format
msgid "English"
msgstr "Englisch"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:129
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
#, elixir-autogen, elixir-format
msgid "French"
msgstr "Französisch"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:128
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "German"
msgstr "Deutsch"
-#: lib/cannery_web/templates/user_registration/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Language"
msgstr "Sprache"
@@ -712,7 +712,7 @@ msgstr "Sende Bugs oder Erweiterungsvorschläge"
msgid "View the source code"
msgstr "Quellcode ansehen"
-#: lib/cannery_web/components/core_components/topbar.html.heex:50
+#: lib/cannery_web/components/core_components/topbar.html.heex:38
#: lib/cannery_web/live/type_live/index.ex:52
#: lib/cannery_web/live/type_live/index.ex:62
#: lib/cannery_web/live/type_live/index.html.heex:3
@@ -720,27 +720,27 @@ msgstr "Quellcode ansehen"
msgid "Catalog"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:45
+#: lib/cannery_web/live/pack_live/show.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Ammo"
msgstr "Munitionstyp bearbeiten"
-#: lib/cannery_web/live/pack_live/show.ex:43
+#: lib/cannery_web/live/pack_live/show.ex:42
#, elixir-autogen, elixir-format, fuzzy
msgid "Move Ammo"
msgstr "Munition verschieben"
-#: lib/cannery_web/live/container_live/show.html.heex:123
+#: lib/cannery_web/live/container_live/show.html.heex:117
#, elixir-autogen, elixir-format, fuzzy
msgid "No ammo in this container"
msgstr "Keine Munitionsgruppe in diesem Behälter"
-#: lib/cannery_web/live/pack_live/show.ex:44
+#: lib/cannery_web/live/pack_live/show.ex:43
#, elixir-autogen, elixir-format, fuzzy
msgid "Show Ammo"
msgstr "Zeige Munitionsarten"
-#: lib/cannery_web/live/pack_live/show.html.heex:111
+#: lib/cannery_web/live/pack_live/show.html.heex:105
#, elixir-autogen, elixir-format, fuzzy
msgid "This ammo is not in a container"
msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
@@ -752,7 +752,7 @@ msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
msgid "Packs:"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:10
+#: lib/cannery_web/components/core_components/topbar.html.heex:7
#: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format
msgid "Cannery logo"
@@ -786,7 +786,7 @@ msgstr ""
msgid "%{percentage}%"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:154
+#: lib/cannery_web/live/range_live/index.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}"
msgstr "Patronen abgefeuert"
@@ -804,7 +804,7 @@ msgid "Rounds"
msgstr "Patronen:"
#: lib/cannery_web/live/container_live/index.html.heex:40
-#: lib/cannery_web/live/container_live/show.html.heex:115
+#: lib/cannery_web/live/container_live/show.html.heex:109
#: lib/cannery_web/live/type_live/show.html.heex:170
#, elixir-autogen, elixir-format
msgid "View as table"
@@ -850,102 +850,102 @@ msgstr ""
msgid "Used rounds:"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:71
+#: lib/cannery_web/live/range_live/index.html.heex:68
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart"
msgstr "Patronen abgefeuert"
-#: lib/cannery_web/live/type_live/show.ex:154
+#: lib/cannery_web/live/type_live/show.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Blank:"
msgstr "Knallpatrone"
-#: lib/cannery_web/live/type_live/show.ex:132
+#: lib/cannery_web/live/type_live/show.ex:131
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:"
msgstr "Projektilkern"
-#: lib/cannery_web/live/type_live/show.ex:131
+#: lib/cannery_web/live/type_live/show.ex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:"
msgstr "Patronenart"
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:"
msgstr "Kaliber"
-#: lib/cannery_web/live/type_live/show.ex:121
+#: lib/cannery_web/live/type_live/show.ex:120
#, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:"
msgstr "Patrone"
-#: lib/cannery_web/live/type_live/show.ex:134
+#: lib/cannery_web/live/type_live/show.ex:133
#, elixir-autogen, elixir-format, fuzzy
msgid "Case material:"
msgstr "Gehäusematerial"
-#: lib/cannery_web/live/type_live/show.ex:155
+#: lib/cannery_web/live/type_live/show.ex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:"
msgstr "Korrosiv"
-#: lib/cannery_web/live/type_live/show.ex:151
+#: lib/cannery_web/live/type_live/show.ex:150
#, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:"
msgstr "Patronenhülsenform"
-#: lib/cannery_web/live/type_live/show.ex:130
+#: lib/cannery_web/live/type_live/show.ex:129
#, elixir-autogen, elixir-format, fuzzy
msgid "Grains:"
msgstr "Körner"
-#: lib/cannery_web/live/type_live/show.ex:153
+#: lib/cannery_web/live/type_live/show.ex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:"
msgstr "Brandmunition"
-#: lib/cannery_web/live/type_live/show.ex:133
+#: lib/cannery_web/live/type_live/show.ex:132
#, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:"
msgstr "Patronenhülse"
-#: lib/cannery_web/live/type_live/show.ex:156
+#: lib/cannery_web/live/type_live/show.ex:155
#, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:"
msgstr "Hersteller"
-#: lib/cannery_web/live/type_live/show.ex:149
+#: lib/cannery_web/live/type_live/show.ex:148
#, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:"
msgstr "Mündungsgeschwindigkeit"
-#: lib/cannery_web/live/type_live/show.ex:143
+#: lib/cannery_web/live/type_live/show.ex:142
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:"
msgstr "Pulverkörner pro Ladung"
-#: lib/cannery_web/live/type_live/show.ex:141
+#: lib/cannery_web/live/type_live/show.ex:140
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:"
msgstr "Pulverart"
-#: lib/cannery_web/live/type_live/show.ex:147
+#: lib/cannery_web/live/type_live/show.ex:146
#, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:"
msgstr "Druck"
-#: lib/cannery_web/live/type_live/show.ex:150
+#: lib/cannery_web/live/type_live/show.ex:149
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:"
msgstr "Zündertyp"
-#: lib/cannery_web/live/type_live/show.ex:152
+#: lib/cannery_web/live/type_live/show.ex:151
#, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:"
msgstr "Leuchtspur"
-#: lib/cannery_web/live/type_live/show.ex:157
+#: lib/cannery_web/live/type_live/show.ex:156
#, elixir-autogen, elixir-format, fuzzy
msgid "UPC:"
msgstr "UPC"
@@ -982,7 +982,7 @@ msgstr "Ursprüngliche Anzahl:"
msgid "Original Count:"
msgstr "Ursprüngliche Anzahl:"
-#: lib/cannery_web/live/home_live.ex:15
+#: lib/cannery_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "Home"
msgstr ""
@@ -1039,20 +1039,20 @@ msgstr ""
msgid "Search tags"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:115
+#: lib/cannery_web/live/range_live/index.html.heex:112
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:130
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
-#: lib/cannery_web/templates/layout/root.html.heex:13
-#: lib/cannery_web/templates/layout/root.html.heex:14
-#: lib/cannery_web/views/layout_view.ex:14
+#: lib/cannery_web/components/layouts.ex:15
+#: lib/cannery_web/components/layouts/root.html.heex:9
+#: lib/cannery_web/components/layouts/root.html.heex:10
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
msgstr ""
@@ -1093,7 +1093,7 @@ msgstr ""
"Mit %{name} können Sie ihren Munitionsbestand vor und nach dem Schießen "
"leicht im Auge behalten"
-#: lib/cannery_web/views/layout_view.ex:10
+#: lib/cannery_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "Cannery | %{title}"
msgstr ""
@@ -1133,17 +1133,17 @@ msgstr "Verbleibende Nutzung:"
msgid "Uses: %{uses_count}"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:13
-#: lib/cannery_web/templates/user_registration/new.html.heex:20
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:13
-#: lib/cannery_web/templates/user_session/new.html.heex:17
-#: lib/cannery_web/templates/user_settings/edit.html.heex:27
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:20
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:17
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:24
-#: lib/cannery_web/templates/user_session/new.html.heex:20
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""
@@ -1180,21 +1180,21 @@ msgid "Really great weather"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:67
-#: lib/cannery_web/components/move_pack_component.ex:68
+#: lib/cannery_web/components/move_pack_component.ex:67
#: lib/cannery_web/components/pack_table_component.ex:62
#: lib/cannery_web/components/shot_record_table_component.ex:48
#: lib/cannery_web/components/type_table_component.ex:99
-#: lib/cannery_web/live/pack_live/show.ex:93
+#: lib/cannery_web/live/pack_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:105
+#: lib/cannery_web/components/core_components/topbar.html.heex:81
#, elixir-autogen, elixir-format
msgid "Live Dashboard"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:90
+#: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format
msgid "Log out"
msgstr ""
@@ -1210,9 +1210,9 @@ msgstr ""
msgid "Close modal"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:103
+#: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58
-#: lib/cannery_web/live/range_live/index.html.heex:92
+#: lib/cannery_web/live/range_live/index.html.heex:89
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
@@ -1229,7 +1229,7 @@ msgstr ""
msgid "Brass height"
msgstr "Messing"
-#: lib/cannery_web/live/type_live/show.ex:128
+#: lib/cannery_web/live/type_live/show.ex:127
#, elixir-autogen, elixir-format
msgid "Brass height:"
msgstr ""
@@ -1240,7 +1240,7 @@ msgstr ""
msgid "Chamber size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:129
+#: lib/cannery_web/live/type_live/show.ex:128
#, elixir-autogen, elixir-format
msgid "Chamber size:"
msgstr ""
@@ -1256,7 +1256,7 @@ msgstr ""
msgid "Dram equivalent"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:148
+#: lib/cannery_web/live/type_live/show.ex:147
#, elixir-autogen, elixir-format
msgid "Dram equivalent:"
msgstr ""
@@ -1267,7 +1267,7 @@ msgstr ""
msgid "Gauge"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Gauge:"
msgstr ""
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Load grains"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:139
+#: lib/cannery_web/live/type_live/show.ex:138
#, elixir-autogen, elixir-format
msgid "Load grains:"
msgstr ""
@@ -1293,9 +1293,9 @@ msgstr "Keine Munition"
msgid "None specified"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:106
+#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61
-#: lib/cannery_web/live/range_live/index.html.heex:95
+#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:56
@@ -1318,9 +1318,9 @@ msgstr "Zündertyp"
msgid "Projectile"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:104
+#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59
-#: lib/cannery_web/live/range_live/index.html.heex:93
+#: lib/cannery_web/live/range_live/index.html.heex:90
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:54
@@ -1334,7 +1334,7 @@ msgstr ""
msgid "Shot charge weight"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:140
+#: lib/cannery_web/live/type_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Shot charge weight:"
msgstr ""
@@ -1345,7 +1345,7 @@ msgstr ""
msgid "Shot material"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:137
+#: lib/cannery_web/live/type_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Shot material:"
msgstr ""
@@ -1356,7 +1356,7 @@ msgstr ""
msgid "Shot size"
msgstr "Schüsse abgegeben"
-#: lib/cannery_web/live/type_live/show.ex:138
+#: lib/cannery_web/live/type_live/show.ex:137
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size:"
msgstr "Schüsse abgegeben"
@@ -1367,14 +1367,14 @@ msgstr "Schüsse abgegeben"
msgid "Shot type"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:136
+#: lib/cannery_web/live/type_live/show.ex:135
#, elixir-autogen, elixir-format
msgid "Shot type:"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:105
+#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60
-#: lib/cannery_web/live/range_live/index.html.heex:94
+#: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:52
@@ -1393,7 +1393,7 @@ msgstr ""
msgid "Target, bird, buck, etc"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:127
+#: lib/cannery_web/live/type_live/show.ex:126
#, elixir-autogen, elixir-format
msgid "Unfired length:"
msgstr ""
@@ -1410,15 +1410,15 @@ msgstr ""
msgid "Wadding"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:135
+#: lib/cannery_web/live/type_live/show.ex:134
#, elixir-autogen, elixir-format
msgid "Wadding:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
-#: lib/cannery_web/live/container_live/show.html.heex:97
+#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/index.html.heex:50
-#: lib/cannery_web/live/range_live/index.html.heex:86
+#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
#: lib/cannery_web/live/type_live/index.html.heex:29
#: lib/cannery_web/live/type_live/show.html.heex:46
@@ -1437,14 +1437,14 @@ msgstr "Patronen:"
msgid "Used up!"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:42
-#: lib/cannery_web/live/range_live/index.ex:40
+#: lib/cannery_web/live/pack_live/show.ex:41
+#: lib/cannery_web/live/range_live/index.ex:39
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Shot Record"
msgstr "Schießkladde editieren"
#: lib/cannery_web/live/type_live/index.ex:28
-#: lib/cannery_web/live/type_live/show.ex:82
+#: lib/cannery_web/live/type_live/show.ex:81
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr "%{name} bearbeiten"
diff --git a/priv/gettext/de/LC_MESSAGES/emails.po b/priv/gettext/de/LC_MESSAGES/emails.po
index 05452364..4b76370c 100644
--- a/priv/gettext/de/LC_MESSAGES/emails.po
+++ b/priv/gettext/de/LC_MESSAGES/emails.po
@@ -14,45 +14,45 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.11.2\n"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:3
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
-#: lib/cannery_web/templates/email/reset_password.html.heex:3
-#: lib/cannery_web/templates/email/reset_password.txt.eex:2
-#: lib/cannery_web/templates/email/update_email.html.heex:3
-#: lib/cannery_web/templates/email/update_email.txt.eex:2
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:3
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:2
+#: lib/cannery_web/components/email_html/reset_password.html.heex:3
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:2
+#: lib/cannery_web/components/email_html/update_email.html.heex:3
+#: lib/cannery_web/components/email_html/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr "Hallo %{email},"
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
"Falls Sie dieses Nutzerkonto bei %{url} nicht erstellt haben, ignorieren Sie "
"diese Nachricht bitte."
-#: lib/cannery_web/templates/email/reset_password.txt.eex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
"Falls Sie diese Änderung von %{url} nicht angefordert haben, ignorieren Sie "
"bitte diese Nachricht."
-#: lib/cannery_web/templates/email/update_email.html.heex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:4
+#: lib/cannery_web/components/email_html/update_email.html.heex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr "Sie können Ihre Mailadresse unter folgender URL ändern:"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:14
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:14
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr "Sie können Ihr Nutzerkonto unter folgender URL bestätigen:"
-#: lib/cannery_web/templates/email/reset_password.html.heex:8
-#: lib/cannery_web/templates/email/reset_password.txt.eex:4
+#: lib/cannery_web/components/email_html/reset_password.html.heex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr "Sie können ihr Passwort unter folgender URL zurücksetzen:"
@@ -66,52 +66,52 @@ msgstr "Sie können ihr Passwort unter folgender URL zurücksetzen:"
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
-#: lib/cannery/accounts/email.ex:30
+#: lib/cannery/accounts/email.ex:31
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
msgstr "Bestätigen Sie ihr %{name} Nutzerkonto"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:22
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr ""
"Falls SIe dieses Nutzerkonto unter %{name}, nicht erstellt haben, ignorieren "
"Sie diese Nachricht bitte."
-#: lib/cannery_web/templates/email/reset_password.html.heex:16
-#: lib/cannery_web/templates/email/update_email.html.heex:16
+#: lib/cannery_web/components/email_html/reset_password.html.heex:16
+#: lib/cannery_web/components/email_html/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
"Falls Sie die Änderung von %{name} nicht angefragt haben, ignorieren Sie "
"diese Nachricht bitte."
-#: lib/cannery/accounts/email.ex:37
+#: lib/cannery/accounts/email.ex:38
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
msgstr "Passwort für %{name} zurücksetzen"
-#: lib/cannery_web/templates/layout/email.txt.eex:9
+#: lib/cannery_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgstr ""
"Diese Nachricht wurde von %{name} unter %{url} gesandt, einem selbst-"
"gehosteten Schusswaffenmanager."
-#: lib/cannery_web/templates/layout/email.html.heex:13
+#: lib/cannery_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
"Diese Nachricht wurde von %{name} gesandt, einem selbst-gehosteten "
"Schusswaffenmanager."
-#: lib/cannery/accounts/email.ex:44
+#: lib/cannery/accounts/email.ex:45
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr "Aktualisieren Sie %{name} Mailadresse"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:9
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:9
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
msgstr "Willkommen %{name}!"
diff --git a/priv/gettext/de/LC_MESSAGES/errors.po b/priv/gettext/de/LC_MESSAGES/errors.po
index 0ff40014..84db6bf3 100644
--- a/priv/gettext/de/LC_MESSAGES/errors.po
+++ b/priv/gettext/de/LC_MESSAGES/errors.po
@@ -29,7 +29,7 @@ msgid "Container must be empty before deleting"
msgstr "Behälter muss vor dem Löschen leer sein"
#: lib/cannery_web/live/container_live/index.ex:86
-#: lib/cannery_web/live/container_live/show.ex:71
+#: lib/cannery_web/live/container_live/show.ex:67
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "Konnte %{name} nicht löschen: %{error}"
@@ -44,55 +44,51 @@ msgstr "Konnte Behälter nicht finden"
msgid "Email change link is invalid or it has expired."
msgstr "Mailadressenänderungs-Link ist ungültig oder abgelaufen."
-#: lib/cannery_web/templates/error/error.html.heex:8
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr "Fehler"
-#: lib/cannery_web/templates/error/error.html.heex:31
+#: lib/cannery_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "Go back home"
msgstr "Zur Hauptseite zurückkehren"
-#: lib/cannery_web/views/error_view.ex:10
-#, elixir-autogen, elixir-format
-msgid "Internal Server Error"
-msgstr "Interner Serverfehler"
-
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr "Ungültige Mailadresse oder Passwort"
-#: lib/cannery_web/views/error_view.ex:8
+#: lib/cannery_web/controllers/error_html.ex:9
+#: lib/cannery_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "Not found"
msgstr "Nicht gefunden"
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:13
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:22
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:64
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:118
#: lib/cannery_web/live/type_live/form_component.html.heex:18
-#: 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
-#: lib/cannery_web/templates/user_settings/edit.html.heex:64
-#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr "Oops, etwas ist schiefgegangen. Bitte beachten Sie den Fehler unten."
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:62
#, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired."
msgstr "Link zum Passwort zurücksetzen ist ungültig oder abgelaufen."
-#: lib/cannery_web/controllers/user_registration_controller.ex:23
-#: lib/cannery_web/controllers/user_registration_controller.ex:52
+#: lib/cannery_web/controllers/user_registration_controller.ex:22
+#: lib/cannery_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr "Entschuldigung, aber öffentliche Registrierung ist deaktiviert"
-#: lib/cannery_web/controllers/user_registration_controller.ex:13
-#: lib/cannery_web/controllers/user_registration_controller.ex:42
-#: lib/cannery_web/controllers/user_registration_controller.ex:71
+#: lib/cannery_web/controllers/user_registration_controller.ex:12
+#: lib/cannery_web/controllers/user_registration_controller.ex:41
+#: lib/cannery_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
@@ -103,17 +99,18 @@ msgstr ""
msgid "Unable to delete user"
msgstr "Dieser Nutzer konnte nicht gelöscht werden"
-#: lib/cannery_web/views/error_view.ex:9
+#: lib/cannery_web/controllers/error_html.ex:10
+#: lib/cannery_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "Unauthorized"
msgstr "Unbefugt"
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen."
-#: lib/cannery_web/controllers/user_auth.ex:177
+#: lib/cannery_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen."
@@ -138,7 +135,7 @@ msgstr "ist nicht gültig"
msgid "must have the @ sign and no spaces"
msgstr "Muss ein @ Zeichen und keine Leerzeichen haben"
-#: lib/cannery_web/live/container_live/show.ex:46
+#: lib/cannery_web/live/container_live/show.ex:45
#, elixir-autogen, elixir-format
msgid "Tag not found"
msgstr "Tag nicht gefunden"
@@ -148,8 +145,8 @@ msgstr "Tag nicht gefunden"
msgid "Tag could not be added"
msgstr "Tag konnte nicht hinzugefügt werden"
-#: lib/cannery_web/controllers/user_auth.ex:39
-#: lib/cannery_web/controllers/user_auth.ex:161
+#: lib/cannery_web/controllers/user_auth.ex:38
+#: lib/cannery_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@@ -178,7 +175,7 @@ msgstr ""
msgid "Invalid multiplier"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:74
+#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
msgstr ""
@@ -212,3 +209,19 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr ""
+
+#: lib/cannery_web/controllers/error_html.ex:11
+#: lib/cannery_web/controllers/error_json.ex:9
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Internal server error"
+msgstr "Interner Serverfehler"
+
+#: lib/cannery_web/controllers/user_auth.ex:195
+#, elixir-autogen, elixir-format
+msgid "You must log in as an administrator to access this page."
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:178
+#, elixir-autogen, elixir-format
+msgid "You must log in to access this page."
+msgstr ""
diff --git a/priv/gettext/de/LC_MESSAGES/prompts.po b/priv/gettext/de/LC_MESSAGES/prompts.po
index 7a823546..c4407017 100644
--- a/priv/gettext/de/LC_MESSAGES/prompts.po
+++ b/priv/gettext/de/LC_MESSAGES/prompts.po
@@ -33,13 +33,13 @@ msgstr "%{name} erfolgreich erstellt"
#: lib/cannery_web/live/tag_live/index.ex:65
#: lib/cannery_web/live/type_live/index.ex:72
-#: lib/cannery_web/live/type_live/show.ex:27
+#: lib/cannery_web/live/type_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully"
msgstr "%{name} erfolgreich gelöscht"
#: lib/cannery_web/live/container_live/index.ex:79
-#: lib/cannery_web/live/container_live/show.ex:61
+#: lib/cannery_web/live/container_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
msgstr "%{name} wurde gelöscht"
@@ -73,18 +73,18 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
-#: lib/cannery_web/live/pack_live/index.html.heex:187
-#: lib/cannery_web/live/pack_live/show.html.heex:72
+#: lib/cannery_web/live/pack_live/index.html.heex:181
+#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
msgstr "Sind Sie sicher, dass sie diese Munition löschen möchten?"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:157
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:153
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?"
-#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/components/core_components/topbar.html.heex:65
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr "Wirklich ausloggen?"
@@ -113,7 +113,7 @@ msgstr ""
msgid "Logged out successfully."
msgstr "Erfolgreich ausgeloggt."
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:45
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr "Passwort erfolgreich zurückgesetzt."
@@ -123,7 +123,7 @@ msgstr "Passwort erfolgreich zurückgesetzt."
msgid "Password updated successfully."
msgstr "Passwort erfolgreich geändert."
-#: lib/cannery_web/controllers/user_registration_controller.ex:66
+#: lib/cannery_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Please check your email to verify your account"
msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
@@ -156,7 +156,7 @@ msgstr ""
msgid "%{name} added successfully"
msgstr "%{name} erfolgreich hinzugefügt"
-#: lib/cannery_web/live/container_live/show.ex:38
+#: lib/cannery_web/live/container_live/show.ex:37
#, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}"
msgstr "%{tag_name} wurde von %{container_name} entfernt"
@@ -176,14 +176,14 @@ msgstr "Schüsse erfolgreich dokumentiert"
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/pack_live/show.ex:158
-#: lib/cannery_web/live/range_live/index.html.heex:152
+#: lib/cannery_web/live/pack_live/show.ex:157
+#: lib/cannery_web/live/range_live/index.html.heex:149
#, 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?"
-#: lib/cannery_web/live/pack_live/show.ex:80
-#: lib/cannery_web/live/range_live/index.ex:79
+#: lib/cannery_web/live/pack_live/show.ex:79
+#: lib/cannery_web/live/range_live/index.ex:78
#, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully"
msgstr "Schießkladde erfolgreich gelöscht"
@@ -193,12 +193,12 @@ msgstr "Schießkladde erfolgreich gelöscht"
msgid "Shot records updated successfully"
msgstr "Schießkladde erfolgreich aktualisiert"
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr "%{email} erfolgreich bestätigt."
-#: lib/cannery_web/components/move_pack_component.ex:52
+#: lib/cannery_web/components/move_pack_component.ex:51
#, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully"
msgstr "Munition erfolgreich zu %{name} verschoben"
@@ -224,7 +224,7 @@ msgstr "Sie müssen"
msgid "Creating..."
msgstr "Erstellen..."
-#: lib/cannery_web/templates/user_settings/edit.html.heex:138
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr "Möchten Sie die Sprache wechseln?"
@@ -235,12 +235,12 @@ msgid "Language updated successfully."
msgstr "Spracheinstellung gespeichert."
#: lib/cannery_web/live/pack_live/index.ex:94
-#: lib/cannery_web/live/pack_live/show.ex:55
+#: lib/cannery_web/live/pack_live/show.ex:54
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo deleted succesfully"
msgstr "Munitionsgruppe erfolgreich gelöscht"
-#: lib/cannery_web/live/range_live/index.ex:92
+#: lib/cannery_web/live/range_live/index.ex:91
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully"
msgstr "Munition erfolgreich demarkiert"
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index a0fc4378..50685ee2 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -25,7 +25,7 @@ msgstr ""
msgid "Admins:"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:58
+#: lib/cannery_web/components/core_components/topbar.html.heex:43
#: lib/cannery_web/components/shot_record_table_component.ex:44
#: lib/cannery_web/live/pack_live/index.ex:75
#: lib/cannery_web/live/pack_live/index.ex:84
@@ -80,14 +80,14 @@ msgstr ""
msgid "Case material"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:65
+#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:66
#, elixir-autogen, elixir-format
msgid "Container"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:42
+#: lib/cannery_web/components/core_components/topbar.html.heex:33
#: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3
@@ -173,20 +173,20 @@ msgstr ""
msgid "Invite Only"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:74
+#: lib/cannery_web/components/core_components/topbar.html.heex:53
#: lib/cannery_web/live/invite_live/index.ex:31
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr ""
-#: lib/cannery_web/templates/user_session/new.html.heex:23
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47
-#: lib/cannery_web/components/move_pack_component.ex:67
+#: lib/cannery_web/components/move_pack_component.ex:66
#: lib/cannery_web/live/container_live/form_component.html.heex:47
#, elixir-autogen, elixir-format
msgid "Location"
@@ -277,7 +277,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
-#: lib/cannery_web/live/pack_live/show.ex:91
+#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
msgid "Notes"
@@ -333,7 +333,7 @@ msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:10
-#: lib/cannery_web/templates/user_settings/edit.html.heex:3
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr ""
@@ -348,13 +348,13 @@ msgstr ""
msgid "Steel"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:106
+#: lib/cannery_web/live/pack_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Stored in"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:66
-#: lib/cannery_web/components/core_components/topbar.html.heex:34
+#: lib/cannery_web/components/core_components/topbar.html.heex:28
#: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3
@@ -384,7 +384,7 @@ msgid "Tracer"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48
-#: lib/cannery_web/components/move_pack_component.ex:66
+#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:39
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
@@ -418,7 +418,7 @@ msgstr ""
msgid "No tags for this container"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:66
+#: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80
#, elixir-autogen, elixir-format
msgid "Range"
@@ -431,7 +431,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
#: lib/cannery_web/components/shot_record_table_component.ex:47
-#: lib/cannery_web/live/pack_live/show.ex:92
+#: lib/cannery_web/live/pack_live/show.ex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:41
#, elixir-autogen, elixir-format
msgid "Date"
@@ -453,26 +453,26 @@ msgstr ""
msgid "Record shots"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:48
+#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:55
-#: lib/cannery_web/live/range_live/index.html.heex:122
+#: lib/cannery_web/live/range_live/index.html.heex:52
+#: lib/cannery_web/live/range_live/index.html.heex:119
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr ""
#: lib/cannery_web/components/shot_record_table_component.ex:45
-#: lib/cannery_web/live/pack_live/show.ex:90
-#: lib/cannery_web/live/range_live/index.html.heex:69
+#: lib/cannery_web/live/pack_live/show.ex:89
+#: lib/cannery_web/live/range_live/index.html.heex:66
#, elixir-autogen, elixir-format
msgid "Rounds shot"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:56
-#: lib/cannery_web/live/range_live/index.ex:66
+#: lib/cannery_web/live/range_live/index.ex:55
+#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr ""
@@ -482,12 +482,12 @@ msgstr ""
msgid "Move ammo"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:83
+#: lib/cannery_web/components/move_pack_component.ex:82
#, elixir-autogen, elixir-format
msgid "No other containers"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:60
+#: lib/cannery_web/live/range_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "Shot log"
msgstr ""
@@ -538,20 +538,20 @@ msgstr ""
msgid "UPC"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
-#: lib/cannery_web/templates/user_settings/edit.html.heex:76
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:20
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:31
-#: lib/cannery_web/templates/user_settings/edit.html.heex:85
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:31
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
-#: lib/cannery_web/templates/user_settings/edit.html.heex:69
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:16
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "New password"
msgstr ""
@@ -562,19 +562,19 @@ msgstr ""
msgid "Firing type"
msgstr ""
-#: lib/cannery_web/templates/layout/live.html.heex:43
+#: lib/cannery_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:28
-#: lib/cannery_web/live/container_live/show.ex:120
+#: lib/cannery_web/live/container_live/show.ex:116
#, 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:121
+#: lib/cannery_web/live/container_live/show.ex:117
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
msgstr ""
@@ -619,7 +619,7 @@ msgstr ""
msgid "Percentage left:"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:119
+#: lib/cannery_web/live/pack_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "Rounds used"
msgstr ""
@@ -639,18 +639,18 @@ msgstr ""
msgid "Log in"
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:33
+#: lib/cannery_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:35
#, elixir-autogen, elixir-format
msgid "Reset your password"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:41
-#: lib/cannery_web/live/range_live/index.ex:32
+#: lib/cannery_web/live/pack_live/show.ex:40
+#: lib/cannery_web/live/range_live/index.ex:31
#, elixir-autogen, elixir-format
msgid "Record Shots"
msgstr ""
@@ -665,23 +665,23 @@ msgstr ""
msgid "Added on:"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:32
-#: lib/cannery_web/templates/user_settings/edit.html.heex:127
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
#, elixir-autogen, elixir-format
msgid "English"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:129
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
#, elixir-autogen, elixir-format
msgid "French"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:128
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "German"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Language"
msgstr ""
@@ -706,7 +706,7 @@ msgstr ""
msgid "View the source code"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:50
+#: lib/cannery_web/components/core_components/topbar.html.heex:38
#: lib/cannery_web/live/type_live/index.ex:52
#: lib/cannery_web/live/type_live/index.ex:62
#: lib/cannery_web/live/type_live/index.html.heex:3
@@ -714,27 +714,27 @@ msgstr ""
msgid "Catalog"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:45
+#: lib/cannery_web/live/pack_live/show.ex:44
#, elixir-autogen, elixir-format
msgid "Edit Ammo"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:43
+#: lib/cannery_web/live/pack_live/show.ex:42
#, elixir-autogen, elixir-format
msgid "Move Ammo"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:123
+#: lib/cannery_web/live/container_live/show.html.heex:117
#, elixir-autogen, elixir-format
msgid "No ammo in this container"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:44
+#: lib/cannery_web/live/pack_live/show.ex:43
#, elixir-autogen, elixir-format
msgid "Show Ammo"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:111
+#: lib/cannery_web/live/pack_live/show.html.heex:105
#, elixir-autogen, elixir-format
msgid "This ammo is not in a container"
msgstr ""
@@ -746,7 +746,7 @@ msgstr ""
msgid "Packs:"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:10
+#: lib/cannery_web/components/core_components/topbar.html.heex:7
#: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format
msgid "Cannery logo"
@@ -780,7 +780,7 @@ msgstr ""
msgid "%{percentage}%"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:154
+#: lib/cannery_web/live/range_live/index.ex:153
#, elixir-autogen, elixir-format
msgid "Rounds shot: %{count}"
msgstr ""
@@ -798,7 +798,7 @@ msgid "Rounds"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:40
-#: lib/cannery_web/live/container_live/show.html.heex:115
+#: lib/cannery_web/live/container_live/show.html.heex:109
#: lib/cannery_web/live/type_live/show.html.heex:170
#, elixir-autogen, elixir-format
msgid "View as table"
@@ -844,102 +844,102 @@ msgstr ""
msgid "Used rounds:"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:71
+#: lib/cannery_web/live/range_live/index.html.heex:68
#, elixir-autogen, elixir-format
msgid "Rounds shot chart"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:154
+#: lib/cannery_web/live/type_live/show.ex:153
#, elixir-autogen, elixir-format
msgid "Blank:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:132
+#: lib/cannery_web/live/type_live/show.ex:131
#, elixir-autogen, elixir-format
msgid "Bullet core:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:131
+#: lib/cannery_web/live/type_live/show.ex:130
#, elixir-autogen, elixir-format
msgid "Bullet type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Caliber:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:121
+#: lib/cannery_web/live/type_live/show.ex:120
#, elixir-autogen, elixir-format
msgid "Cartridge:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:134
+#: lib/cannery_web/live/type_live/show.ex:133
#, elixir-autogen, elixir-format
msgid "Case material:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:155
+#: lib/cannery_web/live/type_live/show.ex:154
#, elixir-autogen, elixir-format
msgid "Corrosive:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:151
+#: lib/cannery_web/live/type_live/show.ex:150
#, elixir-autogen, elixir-format
msgid "Firing type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:130
+#: lib/cannery_web/live/type_live/show.ex:129
#, elixir-autogen, elixir-format
msgid "Grains:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:153
+#: lib/cannery_web/live/type_live/show.ex:152
#, elixir-autogen, elixir-format
msgid "Incendiary:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:133
+#: lib/cannery_web/live/type_live/show.ex:132
#, elixir-autogen, elixir-format
msgid "Jacket type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:156
+#: lib/cannery_web/live/type_live/show.ex:155
#, elixir-autogen, elixir-format
msgid "Manufacturer:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:149
+#: lib/cannery_web/live/type_live/show.ex:148
#, elixir-autogen, elixir-format
msgid "Muzzle velocity:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:143
+#: lib/cannery_web/live/type_live/show.ex:142
#, elixir-autogen, elixir-format
msgid "Powder grains per charge:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:141
+#: lib/cannery_web/live/type_live/show.ex:140
#, elixir-autogen, elixir-format
msgid "Powder type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:147
+#: lib/cannery_web/live/type_live/show.ex:146
#, elixir-autogen, elixir-format
msgid "Pressure:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:150
+#: lib/cannery_web/live/type_live/show.ex:149
#, elixir-autogen, elixir-format
msgid "Primer type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:152
+#: lib/cannery_web/live/type_live/show.ex:151
#, elixir-autogen, elixir-format
msgid "Tracer:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:157
+#: lib/cannery_web/live/type_live/show.ex:156
#, elixir-autogen, elixir-format
msgid "UPC:"
msgstr ""
@@ -976,7 +976,7 @@ msgstr ""
msgid "Original Count:"
msgstr ""
-#: lib/cannery_web/live/home_live.ex:15
+#: lib/cannery_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "Home"
msgstr ""
@@ -1033,20 +1033,20 @@ msgstr ""
msgid "Search tags"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:115
+#: lib/cannery_web/live/range_live/index.html.heex:112
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:130
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
-#: lib/cannery_web/templates/layout/root.html.heex:13
-#: lib/cannery_web/templates/layout/root.html.heex:14
-#: lib/cannery_web/views/layout_view.ex:14
+#: lib/cannery_web/components/layouts.ex:15
+#: lib/cannery_web/components/layouts/root.html.heex:9
+#: lib/cannery_web/components/layouts/root.html.heex:10
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Cannery"
msgstr ""
@@ -1076,7 +1076,7 @@ msgstr ""
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr ""
-#: lib/cannery_web/views/layout_view.ex:10
+#: lib/cannery_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "Cannery | %{title}"
msgstr ""
@@ -1116,17 +1116,17 @@ msgstr ""
msgid "Uses: %{uses_count}"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:13
-#: lib/cannery_web/templates/user_registration/new.html.heex:20
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:13
-#: lib/cannery_web/templates/user_session/new.html.heex:17
-#: lib/cannery_web/templates/user_settings/edit.html.heex:27
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:20
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:17
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:24
-#: lib/cannery_web/templates/user_session/new.html.heex:20
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""
@@ -1163,21 +1163,21 @@ msgid "Really great weather"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:67
-#: lib/cannery_web/components/move_pack_component.ex:68
+#: lib/cannery_web/components/move_pack_component.ex:67
#: lib/cannery_web/components/pack_table_component.ex:62
#: lib/cannery_web/components/shot_record_table_component.ex:48
#: lib/cannery_web/components/type_table_component.ex:99
-#: lib/cannery_web/live/pack_live/show.ex:93
+#: lib/cannery_web/live/pack_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:105
+#: lib/cannery_web/components/core_components/topbar.html.heex:81
#, elixir-autogen, elixir-format
msgid "Live Dashboard"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:90
+#: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format
msgid "Log out"
msgstr ""
@@ -1193,9 +1193,9 @@ msgstr ""
msgid "Close modal"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:103
+#: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58
-#: lib/cannery_web/live/range_live/index.html.heex:92
+#: lib/cannery_web/live/range_live/index.html.heex:89
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
@@ -1212,7 +1212,7 @@ msgstr ""
msgid "Brass height"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:128
+#: lib/cannery_web/live/type_live/show.ex:127
#, elixir-autogen, elixir-format
msgid "Brass height:"
msgstr ""
@@ -1223,7 +1223,7 @@ msgstr ""
msgid "Chamber size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:129
+#: lib/cannery_web/live/type_live/show.ex:128
#, elixir-autogen, elixir-format
msgid "Chamber size:"
msgstr ""
@@ -1239,7 +1239,7 @@ msgstr ""
msgid "Dram equivalent"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:148
+#: lib/cannery_web/live/type_live/show.ex:147
#, elixir-autogen, elixir-format
msgid "Dram equivalent:"
msgstr ""
@@ -1250,7 +1250,7 @@ msgstr ""
msgid "Gauge"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Gauge:"
msgstr ""
@@ -1261,7 +1261,7 @@ msgstr ""
msgid "Load grains"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:139
+#: lib/cannery_web/live/type_live/show.ex:138
#, elixir-autogen, elixir-format
msgid "Load grains:"
msgstr ""
@@ -1276,9 +1276,9 @@ msgstr ""
msgid "None specified"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:106
+#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61
-#: lib/cannery_web/live/range_live/index.html.heex:95
+#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:56
@@ -1301,9 +1301,9 @@ msgstr ""
msgid "Projectile"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:104
+#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59
-#: lib/cannery_web/live/range_live/index.html.heex:93
+#: lib/cannery_web/live/range_live/index.html.heex:90
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:54
@@ -1317,7 +1317,7 @@ msgstr ""
msgid "Shot charge weight"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:140
+#: lib/cannery_web/live/type_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Shot charge weight:"
msgstr ""
@@ -1328,7 +1328,7 @@ msgstr ""
msgid "Shot material"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:137
+#: lib/cannery_web/live/type_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Shot material:"
msgstr ""
@@ -1339,7 +1339,7 @@ msgstr ""
msgid "Shot size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:138
+#: lib/cannery_web/live/type_live/show.ex:137
#, elixir-autogen, elixir-format
msgid "Shot size:"
msgstr ""
@@ -1350,14 +1350,14 @@ msgstr ""
msgid "Shot type"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:136
+#: lib/cannery_web/live/type_live/show.ex:135
#, elixir-autogen, elixir-format
msgid "Shot type:"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:105
+#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60
-#: lib/cannery_web/live/range_live/index.html.heex:94
+#: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:52
@@ -1376,7 +1376,7 @@ msgstr ""
msgid "Target, bird, buck, etc"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:127
+#: lib/cannery_web/live/type_live/show.ex:126
#, elixir-autogen, elixir-format
msgid "Unfired length:"
msgstr ""
@@ -1393,15 +1393,15 @@ msgstr ""
msgid "Wadding"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:135
+#: lib/cannery_web/live/type_live/show.ex:134
#, elixir-autogen, elixir-format
msgid "Wadding:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
-#: lib/cannery_web/live/container_live/show.html.heex:97
+#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/index.html.heex:50
-#: lib/cannery_web/live/range_live/index.html.heex:86
+#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
#: lib/cannery_web/live/type_live/index.html.heex:29
#: lib/cannery_web/live/type_live/show.html.heex:46
@@ -1420,14 +1420,14 @@ msgstr ""
msgid "Used up!"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:42
-#: lib/cannery_web/live/range_live/index.ex:40
+#: lib/cannery_web/live/pack_live/show.ex:41
+#: lib/cannery_web/live/range_live/index.ex:39
#, elixir-autogen, elixir-format
msgid "Edit Shot Record"
msgstr ""
#: lib/cannery_web/live/type_live/index.ex:28
-#: lib/cannery_web/live/type_live/show.ex:82
+#: lib/cannery_web/live/type_live/show.ex:81
#, elixir-autogen, elixir-format
msgid "Edit %{type_name}"
msgstr ""
diff --git a/priv/gettext/emails.pot b/priv/gettext/emails.pot
index b2aa6a7d..9a453f11 100644
--- a/priv/gettext/emails.pot
+++ b/priv/gettext/emails.pot
@@ -10,83 +10,83 @@
msgid ""
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.html.heex:3
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
-#: lib/cannery_web/templates/email/reset_password.html.heex:3
-#: lib/cannery_web/templates/email/reset_password.txt.eex:2
-#: lib/cannery_web/templates/email/update_email.html.heex:3
-#: lib/cannery_web/templates/email/update_email.txt.eex:2
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:3
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:2
+#: lib/cannery_web/components/email_html/reset_password.html.heex:3
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:2
+#: lib/cannery_web/components/email_html/update_email.html.heex:3
+#: lib/cannery_web/components/email_html/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
-#: lib/cannery_web/templates/email/reset_password.txt.eex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
-#: lib/cannery_web/templates/email/update_email.html.heex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:4
+#: lib/cannery_web/components/email_html/update_email.html.heex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.html.heex:14
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:14
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
-#: lib/cannery_web/templates/email/reset_password.html.heex:8
-#: lib/cannery_web/templates/email/reset_password.txt.eex:4
+#: lib/cannery_web/components/email_html/reset_password.html.heex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
-#: lib/cannery/accounts/email.ex:30
+#: lib/cannery/accounts/email.ex:31
#, elixir-autogen, elixir-format
msgid "Confirm your Cannery account"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.html.heex:22
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr ""
-#: lib/cannery_web/templates/email/reset_password.html.heex:16
-#: lib/cannery_web/templates/email/update_email.html.heex:16
+#: lib/cannery_web/components/email_html/reset_password.html.heex:16
+#: lib/cannery_web/components/email_html/update_email.html.heex:16
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
-#: lib/cannery/accounts/email.ex:37
+#: lib/cannery/accounts/email.ex:38
#, elixir-autogen, elixir-format
msgid "Reset your Cannery password"
msgstr ""
-#: lib/cannery_web/templates/layout/email.txt.eex:9
+#: lib/cannery_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgstr ""
-#: lib/cannery_web/templates/layout/email.html.heex:13
+#: lib/cannery_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
-#: lib/cannery/accounts/email.ex:44
+#: lib/cannery/accounts/email.ex:45
#, elixir-autogen, elixir-format
msgid "Update your Cannery email"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.html.heex:9
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:9
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to Cannery"
msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/actions.po b/priv/gettext/en/LC_MESSAGES/actions.po
index c58bd28f..70bfc44a 100644
--- a/priv/gettext/en/LC_MESSAGES/actions.po
+++ b/priv/gettext/en/LC_MESSAGES/actions.po
@@ -32,14 +32,14 @@ msgstr ""
msgid "Add your first type!"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:15
-#: lib/cannery_web/templates/user_settings/edit.html.heex:43
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:15
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:57
-#: lib/cannery_web/templates/user_settings/edit.html.heex:97
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:57
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr ""
@@ -49,14 +49,14 @@ msgstr ""
msgid "Create Invite"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:159
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:155
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:47
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:42
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr ""
@@ -66,13 +66,13 @@ msgstr ""
msgid "Invite someone new!"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:124
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:32
-#: lib/cannery_web/templates/user_registration/new.html.heex:44
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:32
-#: lib/cannery_web/templates/user_session/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:28
+#: lib/cannery_web/components/core_components/topbar.html.heex:94
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr ""
@@ -92,25 +92,25 @@ msgstr ""
msgid "New Tag"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:116
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:29
-#: lib/cannery_web/templates/user_registration/new.html.heex:3
-#: lib/cannery_web/templates/user_registration/new.html.heex:37
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:29
-#: lib/cannery_web/templates/user_session/new.html.heex:39
+#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:3
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
@@ -126,12 +126,12 @@ msgstr ""
msgid "Save"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Send instructions to reset password"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:68
+#: lib/cannery_web/live/container_live/show.html.heex:65
#, elixir-autogen, elixir-format
msgid "Why not add one?"
msgstr ""
@@ -152,18 +152,18 @@ msgid "Why not get some ready to shoot?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:127
-#: lib/cannery_web/live/pack_live/show.html.heex:96
-#: lib/cannery_web/live/range_live/index.html.heex:45
+#: lib/cannery_web/live/pack_live/show.html.heex:90
+#: lib/cannery_web/live/range_live/index.html.heex:42
#, elixir-autogen, elixir-format
msgid "Record shots"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:88
+#: lib/cannery_web/components/move_pack_component.ex:87
#, elixir-autogen, elixir-format
msgid "Add another container!"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:124
+#: lib/cannery_web/components/move_pack_component.ex:123
#, elixir-autogen, elixir-format
msgid "Select"
msgstr ""
@@ -183,24 +183,24 @@ msgstr ""
msgid "Create"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:110
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:110
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:136
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:55
+#: lib/cannery_web/live/pack_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "View in Catalog"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:78
-#: lib/cannery_web/live/pack_live/index.html.heex:144
-#: lib/cannery_web/live/pack_live/show.html.heex:89
+#: lib/cannery_web/components/move_pack_component.ex:77
+#: lib/cannery_web/live/pack_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.html.heex:86
#, elixir-autogen, elixir-format
msgid "Move ammo"
msgstr ""
@@ -210,19 +210,19 @@ msgstr ""
msgid "Set Unlimited"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:85
+#: lib/cannery_web/live/pack_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Stage for range"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:84
+#: lib/cannery_web/live/pack_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format
msgid "Unstage from range"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:150
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:146
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""
@@ -288,37 +288,37 @@ msgstr ""
msgid "Unstage"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:174
+#: lib/cannery_web/live/pack_live/index.html.heex:168
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:189
-#: lib/cannery_web/live/pack_live/show.html.heex:74
+#: lib/cannery_web/live/pack_live/index.html.heex:183
+#: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:164
-#: lib/cannery_web/live/pack_live/show.html.heex:62
+#: lib/cannery_web/live/pack_live/index.html.heex:158
+#: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:154
-#: lib/cannery_web/live/type_live/show.html.heex:204
+#: lib/cannery_web/live/pack_live/index.html.heex:148
+#: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:160
-#: lib/cannery_web/live/range_live/index.html.heex:155
+#: lib/cannery_web/live/pack_live/show.ex:159
+#: lib/cannery_web/live/range_live/index.html.heex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:145
-#: lib/cannery_web/live/range_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.ex:144
+#: lib/cannery_web/live/range_live/index.html.heex:135
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index efac611f..c663e1e4 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -25,7 +25,7 @@ msgstr ""
msgid "Admins:"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:58
+#: lib/cannery_web/components/core_components/topbar.html.heex:43
#: lib/cannery_web/components/shot_record_table_component.ex:44
#: lib/cannery_web/live/pack_live/index.ex:75
#: lib/cannery_web/live/pack_live/index.ex:84
@@ -80,14 +80,14 @@ msgstr ""
msgid "Case material"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:65
+#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:66
#, elixir-autogen, elixir-format
msgid "Container"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:42
+#: lib/cannery_web/components/core_components/topbar.html.heex:33
#: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3
@@ -173,20 +173,20 @@ msgstr ""
msgid "Invite Only"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:74
+#: lib/cannery_web/components/core_components/topbar.html.heex:53
#: lib/cannery_web/live/invite_live/index.ex:31
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr ""
-#: lib/cannery_web/templates/user_session/new.html.heex:23
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47
-#: lib/cannery_web/components/move_pack_component.ex:67
+#: lib/cannery_web/components/move_pack_component.ex:66
#: lib/cannery_web/live/container_live/form_component.html.heex:47
#, elixir-autogen, elixir-format
msgid "Location"
@@ -277,7 +277,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
-#: lib/cannery_web/live/pack_live/show.ex:91
+#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
msgid "Notes"
@@ -333,7 +333,7 @@ msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:10
-#: lib/cannery_web/templates/user_settings/edit.html.heex:3
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr ""
@@ -348,13 +348,13 @@ msgstr ""
msgid "Steel"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:106
+#: lib/cannery_web/live/pack_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Stored in"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:66
-#: lib/cannery_web/components/core_components/topbar.html.heex:34
+#: lib/cannery_web/components/core_components/topbar.html.heex:28
#: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3
@@ -384,7 +384,7 @@ msgid "Tracer"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48
-#: lib/cannery_web/components/move_pack_component.ex:66
+#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:39
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
@@ -418,7 +418,7 @@ msgstr ""
msgid "No tags for this container"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:66
+#: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80
#, elixir-autogen, elixir-format
msgid "Range"
@@ -431,7 +431,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
#: lib/cannery_web/components/shot_record_table_component.ex:47
-#: lib/cannery_web/live/pack_live/show.ex:92
+#: lib/cannery_web/live/pack_live/show.ex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:41
#, elixir-autogen, elixir-format
msgid "Date"
@@ -453,26 +453,26 @@ msgstr ""
msgid "Record shots"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:48
+#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:55
-#: lib/cannery_web/live/range_live/index.html.heex:122
+#: lib/cannery_web/live/range_live/index.html.heex:52
+#: lib/cannery_web/live/range_live/index.html.heex:119
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr ""
#: lib/cannery_web/components/shot_record_table_component.ex:45
-#: lib/cannery_web/live/pack_live/show.ex:90
-#: lib/cannery_web/live/range_live/index.html.heex:69
+#: lib/cannery_web/live/pack_live/show.ex:89
+#: lib/cannery_web/live/range_live/index.html.heex:66
#, elixir-autogen, elixir-format
msgid "Rounds shot"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:56
-#: lib/cannery_web/live/range_live/index.ex:66
+#: lib/cannery_web/live/range_live/index.ex:55
+#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr ""
@@ -482,12 +482,12 @@ msgstr ""
msgid "Move ammo"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:83
+#: lib/cannery_web/components/move_pack_component.ex:82
#, elixir-autogen, elixir-format
msgid "No other containers"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:60
+#: lib/cannery_web/live/range_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "Shot log"
msgstr ""
@@ -538,20 +538,20 @@ msgstr ""
msgid "UPC"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
-#: lib/cannery_web/templates/user_settings/edit.html.heex:76
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:20
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:31
-#: lib/cannery_web/templates/user_settings/edit.html.heex:85
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:31
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
-#: lib/cannery_web/templates/user_settings/edit.html.heex:69
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:16
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "New password"
msgstr ""
@@ -562,19 +562,19 @@ msgstr ""
msgid "Firing type"
msgstr ""
-#: lib/cannery_web/templates/layout/live.html.heex:43
+#: lib/cannery_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:28
-#: lib/cannery_web/live/container_live/show.ex:120
+#: lib/cannery_web/live/container_live/show.ex:116
#, 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:121
+#: lib/cannery_web/live/container_live/show.ex:117
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
msgstr ""
@@ -619,7 +619,7 @@ msgstr ""
msgid "Percentage left:"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:119
+#: lib/cannery_web/live/pack_live/show.html.heex:113
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds used"
msgstr ""
@@ -639,18 +639,18 @@ msgstr ""
msgid "Log in"
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:33
+#: lib/cannery_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:35
#, elixir-autogen, elixir-format
msgid "Reset your password"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:41
-#: lib/cannery_web/live/range_live/index.ex:32
+#: lib/cannery_web/live/pack_live/show.ex:40
+#: lib/cannery_web/live/range_live/index.ex:31
#, elixir-autogen, elixir-format, fuzzy
msgid "Record Shots"
msgstr ""
@@ -665,23 +665,23 @@ msgstr ""
msgid "Added on:"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:32
-#: lib/cannery_web/templates/user_settings/edit.html.heex:127
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
#, elixir-autogen, elixir-format
msgid "English"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:129
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
#, elixir-autogen, elixir-format
msgid "French"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:128
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "German"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Language"
msgstr ""
@@ -706,7 +706,7 @@ msgstr ""
msgid "View the source code"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:50
+#: lib/cannery_web/components/core_components/topbar.html.heex:38
#: lib/cannery_web/live/type_live/index.ex:52
#: lib/cannery_web/live/type_live/index.ex:62
#: lib/cannery_web/live/type_live/index.html.heex:3
@@ -714,27 +714,27 @@ msgstr ""
msgid "Catalog"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:45
+#: lib/cannery_web/live/pack_live/show.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Ammo"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:43
+#: lib/cannery_web/live/pack_live/show.ex:42
#, elixir-autogen, elixir-format, fuzzy
msgid "Move Ammo"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:123
+#: lib/cannery_web/live/container_live/show.html.heex:117
#, elixir-autogen, elixir-format, fuzzy
msgid "No ammo in this container"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:44
+#: lib/cannery_web/live/pack_live/show.ex:43
#, elixir-autogen, elixir-format, fuzzy
msgid "Show Ammo"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:111
+#: lib/cannery_web/live/pack_live/show.html.heex:105
#, elixir-autogen, elixir-format, fuzzy
msgid "This ammo is not in a container"
msgstr ""
@@ -746,7 +746,7 @@ msgstr ""
msgid "Packs:"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:10
+#: lib/cannery_web/components/core_components/topbar.html.heex:7
#: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format
msgid "Cannery logo"
@@ -780,7 +780,7 @@ msgstr ""
msgid "%{percentage}%"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:154
+#: lib/cannery_web/live/range_live/index.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}"
msgstr ""
@@ -798,7 +798,7 @@ msgid "Rounds"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:40
-#: lib/cannery_web/live/container_live/show.html.heex:115
+#: lib/cannery_web/live/container_live/show.html.heex:109
#: lib/cannery_web/live/type_live/show.html.heex:170
#, elixir-autogen, elixir-format
msgid "View as table"
@@ -844,102 +844,102 @@ msgstr ""
msgid "Used rounds:"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:71
+#: lib/cannery_web/live/range_live/index.html.heex:68
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:154
+#: lib/cannery_web/live/type_live/show.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Blank:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:132
+#: lib/cannery_web/live/type_live/show.ex:131
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:131
+#: lib/cannery_web/live/type_live/show.ex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:121
+#: lib/cannery_web/live/type_live/show.ex:120
#, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:134
+#: lib/cannery_web/live/type_live/show.ex:133
#, elixir-autogen, elixir-format, fuzzy
msgid "Case material:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:155
+#: lib/cannery_web/live/type_live/show.ex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:151
+#: lib/cannery_web/live/type_live/show.ex:150
#, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:130
+#: lib/cannery_web/live/type_live/show.ex:129
#, elixir-autogen, elixir-format, fuzzy
msgid "Grains:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:153
+#: lib/cannery_web/live/type_live/show.ex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:133
+#: lib/cannery_web/live/type_live/show.ex:132
#, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:156
+#: lib/cannery_web/live/type_live/show.ex:155
#, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:149
+#: lib/cannery_web/live/type_live/show.ex:148
#, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:143
+#: lib/cannery_web/live/type_live/show.ex:142
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:141
+#: lib/cannery_web/live/type_live/show.ex:140
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:147
+#: lib/cannery_web/live/type_live/show.ex:146
#, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:150
+#: lib/cannery_web/live/type_live/show.ex:149
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:152
+#: lib/cannery_web/live/type_live/show.ex:151
#, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:157
+#: lib/cannery_web/live/type_live/show.ex:156
#, elixir-autogen, elixir-format, fuzzy
msgid "UPC:"
msgstr ""
@@ -976,7 +976,7 @@ msgstr ""
msgid "Original Count:"
msgstr ""
-#: lib/cannery_web/live/home_live.ex:15
+#: lib/cannery_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "Home"
msgstr ""
@@ -1033,20 +1033,20 @@ msgstr ""
msgid "Search tags"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:115
+#: lib/cannery_web/live/range_live/index.html.heex:112
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:130
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
-#: lib/cannery_web/templates/layout/root.html.heex:13
-#: lib/cannery_web/templates/layout/root.html.heex:14
-#: lib/cannery_web/views/layout_view.ex:14
+#: lib/cannery_web/components/layouts.ex:15
+#: lib/cannery_web/components/layouts/root.html.heex:9
+#: lib/cannery_web/components/layouts/root.html.heex:10
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
msgstr ""
@@ -1076,7 +1076,7 @@ msgstr ""
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr ""
-#: lib/cannery_web/views/layout_view.ex:10
+#: lib/cannery_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "Cannery | %{title}"
msgstr ""
@@ -1116,17 +1116,17 @@ msgstr ""
msgid "Uses: %{uses_count}"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:13
-#: lib/cannery_web/templates/user_registration/new.html.heex:20
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:13
-#: lib/cannery_web/templates/user_session/new.html.heex:17
-#: lib/cannery_web/templates/user_settings/edit.html.heex:27
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:20
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:17
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:24
-#: lib/cannery_web/templates/user_session/new.html.heex:20
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""
@@ -1163,21 +1163,21 @@ msgid "Really great weather"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:67
-#: lib/cannery_web/components/move_pack_component.ex:68
+#: lib/cannery_web/components/move_pack_component.ex:67
#: lib/cannery_web/components/pack_table_component.ex:62
#: lib/cannery_web/components/shot_record_table_component.ex:48
#: lib/cannery_web/components/type_table_component.ex:99
-#: lib/cannery_web/live/pack_live/show.ex:93
+#: lib/cannery_web/live/pack_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:105
+#: lib/cannery_web/components/core_components/topbar.html.heex:81
#, elixir-autogen, elixir-format
msgid "Live Dashboard"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:90
+#: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format
msgid "Log out"
msgstr ""
@@ -1193,9 +1193,9 @@ msgstr ""
msgid "Close modal"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:103
+#: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58
-#: lib/cannery_web/live/range_live/index.html.heex:92
+#: lib/cannery_web/live/range_live/index.html.heex:89
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
@@ -1212,7 +1212,7 @@ msgstr ""
msgid "Brass height"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:128
+#: lib/cannery_web/live/type_live/show.ex:127
#, elixir-autogen, elixir-format
msgid "Brass height:"
msgstr ""
@@ -1223,7 +1223,7 @@ msgstr ""
msgid "Chamber size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:129
+#: lib/cannery_web/live/type_live/show.ex:128
#, elixir-autogen, elixir-format
msgid "Chamber size:"
msgstr ""
@@ -1239,7 +1239,7 @@ msgstr ""
msgid "Dram equivalent"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:148
+#: lib/cannery_web/live/type_live/show.ex:147
#, elixir-autogen, elixir-format
msgid "Dram equivalent:"
msgstr ""
@@ -1250,7 +1250,7 @@ msgstr ""
msgid "Gauge"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Gauge:"
msgstr ""
@@ -1261,7 +1261,7 @@ msgstr ""
msgid "Load grains"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:139
+#: lib/cannery_web/live/type_live/show.ex:138
#, elixir-autogen, elixir-format
msgid "Load grains:"
msgstr ""
@@ -1276,9 +1276,9 @@ msgstr ""
msgid "None specified"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:106
+#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61
-#: lib/cannery_web/live/range_live/index.html.heex:95
+#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:56
@@ -1301,9 +1301,9 @@ msgstr ""
msgid "Projectile"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:104
+#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59
-#: lib/cannery_web/live/range_live/index.html.heex:93
+#: lib/cannery_web/live/range_live/index.html.heex:90
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:54
@@ -1317,7 +1317,7 @@ msgstr ""
msgid "Shot charge weight"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:140
+#: lib/cannery_web/live/type_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Shot charge weight:"
msgstr ""
@@ -1328,7 +1328,7 @@ msgstr ""
msgid "Shot material"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:137
+#: lib/cannery_web/live/type_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Shot material:"
msgstr ""
@@ -1339,7 +1339,7 @@ msgstr ""
msgid "Shot size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:138
+#: lib/cannery_web/live/type_live/show.ex:137
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size:"
msgstr ""
@@ -1350,14 +1350,14 @@ msgstr ""
msgid "Shot type"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:136
+#: lib/cannery_web/live/type_live/show.ex:135
#, elixir-autogen, elixir-format
msgid "Shot type:"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:105
+#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60
-#: lib/cannery_web/live/range_live/index.html.heex:94
+#: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:52
@@ -1376,7 +1376,7 @@ msgstr ""
msgid "Target, bird, buck, etc"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:127
+#: lib/cannery_web/live/type_live/show.ex:126
#, elixir-autogen, elixir-format
msgid "Unfired length:"
msgstr ""
@@ -1393,15 +1393,15 @@ msgstr ""
msgid "Wadding"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:135
+#: lib/cannery_web/live/type_live/show.ex:134
#, elixir-autogen, elixir-format
msgid "Wadding:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
-#: lib/cannery_web/live/container_live/show.html.heex:97
+#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/index.html.heex:50
-#: lib/cannery_web/live/range_live/index.html.heex:86
+#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
#: lib/cannery_web/live/type_live/index.html.heex:29
#: lib/cannery_web/live/type_live/show.html.heex:46
@@ -1420,14 +1420,14 @@ msgstr ""
msgid "Used up!"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:42
-#: lib/cannery_web/live/range_live/index.ex:40
+#: lib/cannery_web/live/pack_live/show.ex:41
+#: lib/cannery_web/live/range_live/index.ex:39
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Shot Record"
msgstr ""
#: lib/cannery_web/live/type_live/index.ex:28
-#: lib/cannery_web/live/type_live/show.ex:82
+#: lib/cannery_web/live/type_live/show.ex:81
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/emails.po b/priv/gettext/en/LC_MESSAGES/emails.po
index cb860a4a..d152a002 100644
--- a/priv/gettext/en/LC_MESSAGES/emails.po
+++ b/priv/gettext/en/LC_MESSAGES/emails.po
@@ -10,83 +10,83 @@ msgid ""
msgstr ""
"Language: en\n"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:3
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
-#: lib/cannery_web/templates/email/reset_password.html.heex:3
-#: lib/cannery_web/templates/email/reset_password.txt.eex:2
-#: lib/cannery_web/templates/email/update_email.html.heex:3
-#: lib/cannery_web/templates/email/update_email.txt.eex:2
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:3
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:2
+#: lib/cannery_web/components/email_html/reset_password.html.heex:3
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:2
+#: lib/cannery_web/components/email_html/update_email.html.heex:3
+#: lib/cannery_web/components/email_html/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
-#: lib/cannery_web/templates/email/reset_password.txt.eex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
-#: lib/cannery_web/templates/email/update_email.html.heex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:4
+#: lib/cannery_web/components/email_html/update_email.html.heex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.html.heex:14
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:14
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
-#: lib/cannery_web/templates/email/reset_password.html.heex:8
-#: lib/cannery_web/templates/email/reset_password.txt.eex:4
+#: lib/cannery_web/components/email_html/reset_password.html.heex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
-#: lib/cannery/accounts/email.ex:30
+#: lib/cannery/accounts/email.ex:31
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.html.heex:22
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr ""
-#: lib/cannery_web/templates/email/reset_password.html.heex:16
-#: lib/cannery_web/templates/email/update_email.html.heex:16
+#: lib/cannery_web/components/email_html/reset_password.html.heex:16
+#: lib/cannery_web/components/email_html/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
-#: lib/cannery/accounts/email.ex:37
+#: lib/cannery/accounts/email.ex:38
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
msgstr ""
-#: lib/cannery_web/templates/layout/email.txt.eex:9
+#: lib/cannery_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgstr ""
-#: lib/cannery_web/templates/layout/email.html.heex:13
+#: lib/cannery_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
-#: lib/cannery/accounts/email.ex:44
+#: lib/cannery/accounts/email.ex:45
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr ""
-#: lib/cannery_web/templates/email/confirm_email.html.heex:9
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:9
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/errors.po b/priv/gettext/en/LC_MESSAGES/errors.po
index 093c37fb..9787db56 100644
--- a/priv/gettext/en/LC_MESSAGES/errors.po
+++ b/priv/gettext/en/LC_MESSAGES/errors.po
@@ -16,7 +16,7 @@ msgid "Container must be empty before deleting"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:86
-#: lib/cannery_web/live/container_live/show.ex:71
+#: lib/cannery_web/live/container_live/show.ex:67
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr ""
@@ -31,55 +31,51 @@ msgstr ""
msgid "Email change link is invalid or it has expired."
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:31
+#: lib/cannery_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "Go back home"
msgstr ""
-#: lib/cannery_web/views/error_view.ex:10
-#, elixir-autogen, elixir-format
-msgid "Internal Server Error"
-msgstr ""
-
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr ""
-#: lib/cannery_web/views/error_view.ex:8
+#: lib/cannery_web/controllers/error_html.ex:9
+#: lib/cannery_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "Not found"
msgstr ""
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:13
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:22
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:64
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:118
#: lib/cannery_web/live/type_live/form_component.html.heex:18
-#: 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
-#: lib/cannery_web/templates/user_settings/edit.html.heex:64
-#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:62
#, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired."
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:23
-#: lib/cannery_web/controllers/user_registration_controller.ex:52
+#: lib/cannery_web/controllers/user_registration_controller.ex:22
+#: lib/cannery_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:13
-#: lib/cannery_web/controllers/user_registration_controller.ex:42
-#: lib/cannery_web/controllers/user_registration_controller.ex:71
+#: lib/cannery_web/controllers/user_registration_controller.ex:12
+#: lib/cannery_web/controllers/user_registration_controller.ex:41
+#: lib/cannery_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
@@ -89,17 +85,18 @@ msgstr ""
msgid "Unable to delete user"
msgstr ""
-#: lib/cannery_web/views/error_view.ex:9
+#: lib/cannery_web/controllers/error_html.ex:10
+#: lib/cannery_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "Unauthorized"
msgstr ""
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr ""
-#: lib/cannery_web/controllers/user_auth.ex:177
+#: lib/cannery_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr ""
@@ -125,7 +122,7 @@ msgstr ""
msgid "must have the @ sign and no spaces"
msgstr ""
-#: lib/cannery_web/live/container_live/show.ex:46
+#: lib/cannery_web/live/container_live/show.ex:45
#, elixir-autogen, elixir-format
msgid "Tag not found"
msgstr ""
@@ -135,8 +132,8 @@ msgstr ""
msgid "Tag could not be added"
msgstr ""
-#: lib/cannery_web/controllers/user_auth.ex:39
-#: lib/cannery_web/controllers/user_auth.ex:161
+#: lib/cannery_web/controllers/user_auth.ex:38
+#: lib/cannery_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@@ -161,7 +158,7 @@ msgstr ""
msgid "Invalid multiplier"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:74
+#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
msgstr ""
@@ -195,3 +192,19 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr ""
+
+#: lib/cannery_web/controllers/error_html.ex:11
+#: lib/cannery_web/controllers/error_json.ex:9
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Internal server error"
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:195
+#, elixir-autogen, elixir-format
+msgid "You must log in as an administrator to access this page."
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:178
+#, elixir-autogen, elixir-format
+msgid "You must log in to access this page."
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/prompts.po b/priv/gettext/en/LC_MESSAGES/prompts.po
index 2eee4014..f21f06ef 100644
--- a/priv/gettext/en/LC_MESSAGES/prompts.po
+++ b/priv/gettext/en/LC_MESSAGES/prompts.po
@@ -20,13 +20,13 @@ msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:65
#: lib/cannery_web/live/type_live/index.ex:72
-#: lib/cannery_web/live/type_live/show.ex:27
+#: lib/cannery_web/live/type_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:79
-#: lib/cannery_web/live/container_live/show.ex:61
+#: lib/cannery_web/live/container_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
msgstr ""
@@ -58,18 +58,18 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:187
-#: lib/cannery_web/live/pack_live/show.html.heex:72
+#: lib/cannery_web/live/pack_live/index.html.heex:181
+#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:157
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:153
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/components/core_components/topbar.html.heex:65
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr ""
@@ -94,7 +94,7 @@ msgstr ""
msgid "Logged out successfully."
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:45
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr ""
@@ -104,7 +104,7 @@ msgstr ""
msgid "Password updated successfully."
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:66
+#: lib/cannery_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Please check your email to verify your account"
msgstr ""
@@ -135,7 +135,7 @@ msgstr ""
msgid "%{name} added successfully"
msgstr ""
-#: lib/cannery_web/live/container_live/show.ex:38
+#: lib/cannery_web/live/container_live/show.ex:37
#, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}"
msgstr ""
@@ -155,14 +155,14 @@ msgstr ""
msgid "Are you sure you want to unstage this ammo?"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:158
-#: lib/cannery_web/live/range_live/index.html.heex:152
+#: lib/cannery_web/live/pack_live/show.ex:157
+#: lib/cannery_web/live/range_live/index.html.heex:149
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:80
-#: lib/cannery_web/live/range_live/index.ex:79
+#: lib/cannery_web/live/pack_live/show.ex:79
+#: lib/cannery_web/live/range_live/index.ex:78
#, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully"
msgstr ""
@@ -172,12 +172,12 @@ msgstr ""
msgid "Shot records updated successfully"
msgstr ""
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:52
+#: lib/cannery_web/components/move_pack_component.ex:51
#, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully"
msgstr ""
@@ -203,7 +203,7 @@ msgstr ""
msgid "Creating..."
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:138
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr ""
@@ -214,12 +214,12 @@ msgid "Language updated successfully."
msgstr ""
#: lib/cannery_web/live/pack_live/index.ex:94
-#: lib/cannery_web/live/pack_live/show.ex:55
+#: lib/cannery_web/live/pack_live/show.ex:54
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo deleted succesfully"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:92
+#: lib/cannery_web/live/range_live/index.ex:91
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully"
msgstr ""
diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot
index db1c509b..e078265e 100644
--- a/priv/gettext/errors.pot
+++ b/priv/gettext/errors.pot
@@ -16,7 +16,7 @@ msgid "Container must be empty before deleting"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:86
-#: lib/cannery_web/live/container_live/show.ex:71
+#: lib/cannery_web/live/container_live/show.ex:67
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr ""
@@ -31,55 +31,51 @@ msgstr ""
msgid "Email change link is invalid or it has expired."
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:31
+#: lib/cannery_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "Go back home"
msgstr ""
-#: lib/cannery_web/views/error_view.ex:10
-#, elixir-autogen, elixir-format
-msgid "Internal Server Error"
-msgstr ""
-
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr ""
-#: lib/cannery_web/views/error_view.ex:8
+#: lib/cannery_web/controllers/error_html.ex:9
+#: lib/cannery_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "Not found"
msgstr ""
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:13
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:22
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:64
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:118
#: lib/cannery_web/live/type_live/form_component.html.heex:18
-#: 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
-#: lib/cannery_web/templates/user_settings/edit.html.heex:64
-#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:62
#, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired."
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:23
-#: lib/cannery_web/controllers/user_registration_controller.ex:52
+#: lib/cannery_web/controllers/user_registration_controller.ex:22
+#: lib/cannery_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:13
-#: lib/cannery_web/controllers/user_registration_controller.ex:42
-#: lib/cannery_web/controllers/user_registration_controller.ex:71
+#: lib/cannery_web/controllers/user_registration_controller.ex:12
+#: lib/cannery_web/controllers/user_registration_controller.ex:41
+#: lib/cannery_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
@@ -89,17 +85,18 @@ msgstr ""
msgid "Unable to delete user"
msgstr ""
-#: lib/cannery_web/views/error_view.ex:9
+#: lib/cannery_web/controllers/error_html.ex:10
+#: lib/cannery_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "Unauthorized"
msgstr ""
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr ""
-#: lib/cannery_web/controllers/user_auth.ex:177
+#: lib/cannery_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr ""
@@ -124,7 +121,7 @@ msgstr ""
msgid "must have the @ sign and no spaces"
msgstr ""
-#: lib/cannery_web/live/container_live/show.ex:46
+#: lib/cannery_web/live/container_live/show.ex:45
#, elixir-autogen, elixir-format
msgid "Tag not found"
msgstr ""
@@ -134,8 +131,8 @@ msgstr ""
msgid "Tag could not be added"
msgstr ""
-#: lib/cannery_web/controllers/user_auth.ex:39
-#: lib/cannery_web/controllers/user_auth.ex:161
+#: lib/cannery_web/controllers/user_auth.ex:38
+#: lib/cannery_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@@ -160,7 +157,7 @@ msgstr ""
msgid "Invalid multiplier"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:74
+#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
msgstr ""
@@ -194,3 +191,19 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Please select a type and container"
msgstr ""
+
+#: lib/cannery_web/controllers/error_html.ex:11
+#: lib/cannery_web/controllers/error_json.ex:9
+#, elixir-autogen, elixir-format
+msgid "Internal server error"
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:195
+#, elixir-autogen, elixir-format
+msgid "You must log in as an administrator to access this page."
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:178
+#, elixir-autogen, elixir-format
+msgid "You must log in to access this page."
+msgstr ""
diff --git a/priv/gettext/es/LC_MESSAGES/actions.po b/priv/gettext/es/LC_MESSAGES/actions.po
index e62ba2f4..68d2db74 100644
--- a/priv/gettext/es/LC_MESSAGES/actions.po
+++ b/priv/gettext/es/LC_MESSAGES/actions.po
@@ -45,14 +45,14 @@ msgstr "¡Añade tu primer contenedor!"
msgid "Add your first type!"
msgstr "¡Añade tu primer tipo!"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:15
-#: lib/cannery_web/templates/user_settings/edit.html.heex:43
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:15
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr "Cambiar correo electrónico"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:57
-#: lib/cannery_web/templates/user_settings/edit.html.heex:97
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:57
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr "Cambiar contraseña"
@@ -62,14 +62,14 @@ msgstr "Cambiar contraseña"
msgid "Create Invite"
msgstr "Crear Invitación"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:159
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:155
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr "Eliminar cuenta de Usuario"
-#: lib/cannery_web/templates/user_registration/new.html.heex:47
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:42
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr "¿Has olvidado tu contraseña?"
@@ -79,13 +79,13 @@ msgstr "¿Has olvidado tu contraseña?"
msgid "Invite someone new!"
msgstr "¡Invita a alguien nuevo!"
-#: lib/cannery_web/components/core_components/topbar.html.heex:124
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:32
-#: lib/cannery_web/templates/user_registration/new.html.heex:44
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:32
-#: lib/cannery_web/templates/user_session/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:28
+#: lib/cannery_web/components/core_components/topbar.html.heex:94
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr "Entrar"
@@ -105,25 +105,25 @@ msgstr "Nuevo Contenedor"
msgid "New Tag"
msgstr "Nueva Etiqueta"
-#: lib/cannery_web/components/core_components/topbar.html.heex:116
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:29
-#: lib/cannery_web/templates/user_registration/new.html.heex:3
-#: lib/cannery_web/templates/user_registration/new.html.heex:37
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:29
-#: lib/cannery_web/templates/user_session/new.html.heex:39
+#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "Registrarse"
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr "Reenviar instrucciones de confirmación"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:3
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr "Resetear contraseña"
@@ -139,12 +139,12 @@ msgstr "Resetear contraseña"
msgid "Save"
msgstr "Guardar"
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Send instructions to reset password"
msgstr "Enviar instrucciones para reestablecer contraseña"
-#: lib/cannery_web/live/container_live/show.html.heex:68
+#: lib/cannery_web/live/container_live/show.html.heex:65
#, elixir-autogen, elixir-format
msgid "Why not add one?"
msgstr "¿Por qué no añadir una?"
@@ -165,18 +165,18 @@ msgid "Why not get some ready to shoot?"
msgstr "¿Por qué no preparar parte para disparar?"
#: lib/cannery_web/live/pack_live/index.html.heex:127
-#: lib/cannery_web/live/pack_live/show.html.heex:96
-#: lib/cannery_web/live/range_live/index.html.heex:45
+#: lib/cannery_web/live/pack_live/show.html.heex:90
+#: lib/cannery_web/live/range_live/index.html.heex:42
#, elixir-autogen, elixir-format
msgid "Record shots"
msgstr "Tiros récord"
-#: lib/cannery_web/components/move_pack_component.ex:88
+#: lib/cannery_web/components/move_pack_component.ex:87
#, elixir-autogen, elixir-format
msgid "Add another container!"
msgstr "¡Añade otro contenedor!"
-#: lib/cannery_web/components/move_pack_component.ex:124
+#: lib/cannery_web/components/move_pack_component.ex:123
#, elixir-autogen, elixir-format
msgid "Select"
msgstr "Seleccionar"
@@ -196,24 +196,24 @@ msgstr "añade primero un contenedor"
msgid "Create"
msgstr "Crear"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:110
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:110
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr "Cambiar Lenguaje"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:136
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr "Cambiar lenguaje"
-#: lib/cannery_web/live/pack_live/show.html.heex:55
+#: lib/cannery_web/live/pack_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "View in Catalog"
msgstr "Ver en Catalogo"
-#: lib/cannery_web/components/move_pack_component.ex:78
-#: lib/cannery_web/live/pack_live/index.html.heex:144
-#: lib/cannery_web/live/pack_live/show.html.heex:89
+#: lib/cannery_web/components/move_pack_component.ex:77
+#: lib/cannery_web/live/pack_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.html.heex:86
#, elixir-autogen, elixir-format
msgid "Move ammo"
msgstr "Mover munición"
@@ -223,19 +223,19 @@ msgstr "Mover munición"
msgid "Set Unlimited"
msgstr "Activar ilimitados"
-#: lib/cannery_web/live/pack_live/show.html.heex:85
+#: lib/cannery_web/live/pack_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Stage for range"
msgstr "Preparar para el campo de tiro"
-#: lib/cannery_web/live/pack_live/show.html.heex:84
+#: lib/cannery_web/live/pack_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format
msgid "Unstage from range"
msgstr "Desmontar del campo de tiro"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:150
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:146
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr "Exportar datos como JSON"
@@ -301,37 +301,37 @@ msgstr ""
msgid "Unstage"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:174
+#: lib/cannery_web/live/pack_live/index.html.heex:168
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:189
-#: lib/cannery_web/live/pack_live/show.html.heex:74
+#: lib/cannery_web/live/pack_live/index.html.heex:183
+#: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:164
-#: lib/cannery_web/live/pack_live/show.html.heex:62
+#: lib/cannery_web/live/pack_live/index.html.heex:158
+#: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:154
-#: lib/cannery_web/live/type_live/show.html.heex:204
+#: lib/cannery_web/live/pack_live/index.html.heex:148
+#: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:160
-#: lib/cannery_web/live/range_live/index.html.heex:155
+#: lib/cannery_web/live/pack_live/show.ex:159
+#: lib/cannery_web/live/range_live/index.html.heex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:145
-#: lib/cannery_web/live/range_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.ex:144
+#: lib/cannery_web/live/range_live/index.html.heex:135
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po
index 454ec427..0e1a311f 100644
--- a/priv/gettext/es/LC_MESSAGES/default.po
+++ b/priv/gettext/es/LC_MESSAGES/default.po
@@ -29,7 +29,7 @@ msgstr "Administradores"
msgid "Admins:"
msgstr "Aministradores:"
-#: lib/cannery_web/components/core_components/topbar.html.heex:58
+#: lib/cannery_web/components/core_components/topbar.html.heex:43
#: lib/cannery_web/components/shot_record_table_component.ex:44
#: lib/cannery_web/live/pack_live/index.ex:75
#: lib/cannery_web/live/pack_live/index.ex:84
@@ -84,14 +84,14 @@ msgstr "Cartucho"
msgid "Case material"
msgstr "Material del casquillo"
-#: lib/cannery_web/components/move_pack_component.ex:65
+#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:66
#, elixir-autogen, elixir-format
msgid "Container"
msgstr "Contenedor"
-#: lib/cannery_web/components/core_components/topbar.html.heex:42
+#: lib/cannery_web/components/core_components/topbar.html.heex:33
#: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3
@@ -177,20 +177,20 @@ msgstr "Invitación Desactivada"
msgid "Invite Only"
msgstr "Solo Invitación"
-#: lib/cannery_web/components/core_components/topbar.html.heex:74
+#: lib/cannery_web/components/core_components/topbar.html.heex:53
#: lib/cannery_web/live/invite_live/index.ex:31
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr "Invitaciones"
-#: lib/cannery_web/templates/user_session/new.html.heex:23
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr "Mantener registrado durante 60 dÃas"
#: lib/cannery_web/components/container_table_component.ex:47
-#: lib/cannery_web/components/move_pack_component.ex:67
+#: lib/cannery_web/components/move_pack_component.ex:66
#: lib/cannery_web/live/container_live/form_component.html.heex:47
#, elixir-autogen, elixir-format
msgid "Location"
@@ -281,7 +281,7 @@ msgstr "Sin etiquetas"
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
-#: lib/cannery_web/live/pack_live/show.ex:91
+#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
msgid "Notes"
@@ -339,7 +339,7 @@ msgstr ""
"fÃes."
#: lib/cannery_web/controllers/user_settings_controller.ex:10
-#: lib/cannery_web/templates/user_settings/edit.html.heex:3
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr "Ajustes"
@@ -354,13 +354,13 @@ msgstr "Simple:"
msgid "Steel"
msgstr "Acero"
-#: lib/cannery_web/live/pack_live/show.html.heex:106
+#: lib/cannery_web/live/pack_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Stored in"
msgstr "Guardado en"
#: lib/cannery_web/components/container_table_component.ex:66
-#: lib/cannery_web/components/core_components/topbar.html.heex:34
+#: lib/cannery_web/components/core_components/topbar.html.heex:28
#: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3
@@ -391,7 +391,7 @@ msgid "Tracer"
msgstr "Trazadora"
#: lib/cannery_web/components/container_table_component.ex:48
-#: lib/cannery_web/components/move_pack_component.ex:66
+#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:39
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
@@ -425,7 +425,7 @@ msgstr "Tus datos se quedan contigo, sin excepciones"
msgid "No tags for this container"
msgstr "Contenedor sin etiquetas"
-#: lib/cannery_web/components/core_components/topbar.html.heex:66
+#: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80
#, elixir-autogen, elixir-format
msgid "Range"
@@ -438,7 +438,7 @@ msgstr "DÃa de disparar"
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
#: lib/cannery_web/components/shot_record_table_component.ex:47
-#: lib/cannery_web/live/pack_live/show.ex:92
+#: lib/cannery_web/live/pack_live/show.ex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:41
#, elixir-autogen, elixir-format
msgid "Date"
@@ -460,26 +460,26 @@ msgstr "No hay munición preparada"
msgid "Record shots"
msgstr "Tiros récord"
-#: lib/cannery_web/live/range_live/index.ex:48
+#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr "Nuevos Tiros Récord"
-#: lib/cannery_web/live/range_live/index.html.heex:55
-#: lib/cannery_web/live/range_live/index.html.heex:122
+#: lib/cannery_web/live/range_live/index.html.heex:52
+#: lib/cannery_web/live/range_live/index.html.heex:119
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr "No se han grabado tiros"
#: lib/cannery_web/components/shot_record_table_component.ex:45
-#: lib/cannery_web/live/pack_live/show.ex:90
-#: lib/cannery_web/live/range_live/index.html.heex:69
+#: lib/cannery_web/live/pack_live/show.ex:89
+#: lib/cannery_web/live/range_live/index.html.heex:66
#, elixir-autogen, elixir-format
msgid "Rounds shot"
msgstr "Balas disparadas"
-#: lib/cannery_web/live/range_live/index.ex:56
-#: lib/cannery_web/live/range_live/index.ex:66
+#: lib/cannery_web/live/range_live/index.ex:55
+#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr "Récords de Tiro"
@@ -489,12 +489,12 @@ msgstr "Récords de Tiro"
msgid "Move ammo"
msgstr "Mover munición"
-#: lib/cannery_web/components/move_pack_component.ex:83
+#: lib/cannery_web/components/move_pack_component.ex:82
#, elixir-autogen, elixir-format
msgid "No other containers"
msgstr "No hay otros contenedores"
-#: lib/cannery_web/live/range_live/index.html.heex:60
+#: lib/cannery_web/live/range_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "Shot log"
msgstr "Registro de tiros"
@@ -545,20 +545,20 @@ msgstr "Tipo de polvora"
msgid "UPC"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
-#: lib/cannery_web/templates/user_settings/edit.html.heex:76
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:20
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr "Confirme contraseña nueva"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:31
-#: lib/cannery_web/templates/user_settings/edit.html.heex:85
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:31
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr "Contraseña actual"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
-#: lib/cannery_web/templates/user_settings/edit.html.heex:69
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:16
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "New password"
msgstr "Nueva contraseña"
@@ -569,19 +569,19 @@ msgstr "Nueva contraseña"
msgid "Firing type"
msgstr "Tipo de fuego"
-#: lib/cannery_web/templates/layout/live.html.heex:43
+#: lib/cannery_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr "Reconectando..."
#: lib/cannery_web/live/container_live/index.ex:28
-#: lib/cannery_web/live/container_live/show.ex:120
+#: lib/cannery_web/live/container_live/show.ex:116
#, 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:121
+#: lib/cannery_web/live/container_live/show.ex:117
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
msgstr "Editar etiquetas de %{name}"
@@ -626,7 +626,7 @@ msgstr "Cantidad original:"
msgid "Percentage left:"
msgstr "Pocentaje restante:"
-#: lib/cannery_web/live/pack_live/show.html.heex:119
+#: lib/cannery_web/live/pack_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "Rounds used"
msgstr "Balas usadas"
@@ -646,18 +646,18 @@ msgstr "¿Olvidó su contraseña?"
msgid "Log in"
msgstr "Entrar"
-#: lib/cannery_web/controllers/user_registration_controller.ex:33
+#: lib/cannery_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "Registrarse"
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:35
#, elixir-autogen, elixir-format
msgid "Reset your password"
msgstr "Reestablecer contraseña"
-#: lib/cannery_web/live/pack_live/show.ex:41
-#: lib/cannery_web/live/range_live/index.ex:32
+#: lib/cannery_web/live/pack_live/show.ex:40
+#: lib/cannery_web/live/range_live/index.ex:31
#, elixir-autogen, elixir-format
msgid "Record Shots"
msgstr "Tiros Récord"
@@ -672,23 +672,23 @@ msgstr "Copias"
msgid "Added on:"
msgstr "Añadido en:"
-#: lib/cannery_web/templates/user_registration/new.html.heex:32
-#: lib/cannery_web/templates/user_settings/edit.html.heex:127
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
#, elixir-autogen, elixir-format
msgid "English"
msgstr "Inglés"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:129
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
#, elixir-autogen, elixir-format
msgid "French"
msgstr "Francés"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:128
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "German"
msgstr "Alemán"
-#: lib/cannery_web/templates/user_registration/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Language"
msgstr "Idioma"
@@ -713,7 +713,7 @@ msgstr "Informar de errores o solicitar funciones"
msgid "View the source code"
msgstr "Ver código fuente"
-#: lib/cannery_web/components/core_components/topbar.html.heex:50
+#: lib/cannery_web/components/core_components/topbar.html.heex:38
#: lib/cannery_web/live/type_live/index.ex:52
#: lib/cannery_web/live/type_live/index.ex:62
#: lib/cannery_web/live/type_live/index.html.heex:3
@@ -721,27 +721,27 @@ msgstr "Ver código fuente"
msgid "Catalog"
msgstr "Catálogo"
-#: lib/cannery_web/live/pack_live/show.ex:45
+#: lib/cannery_web/live/pack_live/show.ex:44
#, elixir-autogen, elixir-format
msgid "Edit Ammo"
msgstr "Editar Munición"
-#: lib/cannery_web/live/pack_live/show.ex:43
+#: lib/cannery_web/live/pack_live/show.ex:42
#, elixir-autogen, elixir-format
msgid "Move Ammo"
msgstr "Mover Munición"
-#: lib/cannery_web/live/container_live/show.html.heex:123
+#: lib/cannery_web/live/container_live/show.html.heex:117
#, elixir-autogen, elixir-format
msgid "No ammo in this container"
msgstr "No hay munición en este contenedor"
-#: lib/cannery_web/live/pack_live/show.ex:44
+#: lib/cannery_web/live/pack_live/show.ex:43
#, elixir-autogen, elixir-format
msgid "Show Ammo"
msgstr "Mostrar Munición"
-#: lib/cannery_web/live/pack_live/show.html.heex:111
+#: lib/cannery_web/live/pack_live/show.html.heex:105
#, elixir-autogen, elixir-format
msgid "This ammo is not in a container"
msgstr "Esta munición no está en un contenedor"
@@ -753,7 +753,7 @@ msgstr "Esta munición no está en un contenedor"
msgid "Packs:"
msgstr "Paquetes:"
-#: lib/cannery_web/components/core_components/topbar.html.heex:10
+#: lib/cannery_web/components/core_components/topbar.html.heex:7
#: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format
msgid "Cannery logo"
@@ -788,7 +788,7 @@ msgstr "Mostrar usadas"
msgid "%{percentage}%"
msgstr "%{percentage}%"
-#: lib/cannery_web/live/range_live/index.ex:154
+#: lib/cannery_web/live/range_live/index.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}"
msgstr "Balas disparadas: %{count}"
@@ -806,7 +806,7 @@ msgid "Rounds"
msgstr "Balas"
#: lib/cannery_web/live/container_live/index.html.heex:40
-#: lib/cannery_web/live/container_live/show.html.heex:115
+#: lib/cannery_web/live/container_live/show.html.heex:109
#: lib/cannery_web/live/type_live/show.html.heex:170
#, elixir-autogen, elixir-format
msgid "View as table"
@@ -852,102 +852,102 @@ msgstr "Balas usadas"
msgid "Used rounds:"
msgstr "Balas usadas:"
-#: lib/cannery_web/live/range_live/index.html.heex:71
+#: lib/cannery_web/live/range_live/index.html.heex:68
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart"
msgstr "Tabla de disparos"
-#: lib/cannery_web/live/type_live/show.ex:154
+#: lib/cannery_web/live/type_live/show.ex:153
#, elixir-autogen, elixir-format
msgid "Blank:"
msgstr "En blanco:"
-#: lib/cannery_web/live/type_live/show.ex:132
+#: lib/cannery_web/live/type_live/show.ex:131
#, elixir-autogen, elixir-format
msgid "Bullet core:"
msgstr "Núcleo de bala:"
-#: lib/cannery_web/live/type_live/show.ex:131
+#: lib/cannery_web/live/type_live/show.ex:130
#, elixir-autogen, elixir-format
msgid "Bullet type:"
msgstr "Tipo de bala:"
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Caliber:"
msgstr "Calibre:"
-#: lib/cannery_web/live/type_live/show.ex:121
+#: lib/cannery_web/live/type_live/show.ex:120
#, elixir-autogen, elixir-format
msgid "Cartridge:"
msgstr "Cartucho:"
-#: lib/cannery_web/live/type_live/show.ex:134
+#: lib/cannery_web/live/type_live/show.ex:133
#, elixir-autogen, elixir-format
msgid "Case material:"
msgstr "Material de la camisa:"
-#: lib/cannery_web/live/type_live/show.ex:155
+#: lib/cannery_web/live/type_live/show.ex:154
#, elixir-autogen, elixir-format
msgid "Corrosive:"
msgstr "Corrosiva:"
-#: lib/cannery_web/live/type_live/show.ex:151
+#: lib/cannery_web/live/type_live/show.ex:150
#, elixir-autogen, elixir-format
msgid "Firing type:"
msgstr "Tipo de fuego:"
-#: lib/cannery_web/live/type_live/show.ex:130
+#: lib/cannery_web/live/type_live/show.ex:129
#, elixir-autogen, elixir-format
msgid "Grains:"
msgstr "Granos:"
-#: lib/cannery_web/live/type_live/show.ex:153
+#: lib/cannery_web/live/type_live/show.ex:152
#, elixir-autogen, elixir-format
msgid "Incendiary:"
msgstr "Incendiarias:"
-#: lib/cannery_web/live/type_live/show.ex:133
+#: lib/cannery_web/live/type_live/show.ex:132
#, elixir-autogen, elixir-format
msgid "Jacket type:"
msgstr "Tipo de camisa:"
-#: lib/cannery_web/live/type_live/show.ex:156
+#: lib/cannery_web/live/type_live/show.ex:155
#, elixir-autogen, elixir-format
msgid "Manufacturer:"
msgstr "Fabricante:"
-#: lib/cannery_web/live/type_live/show.ex:149
+#: lib/cannery_web/live/type_live/show.ex:148
#, elixir-autogen, elixir-format
msgid "Muzzle velocity:"
msgstr "Velocidad de boca:"
-#: lib/cannery_web/live/type_live/show.ex:143
+#: lib/cannery_web/live/type_live/show.ex:142
#, elixir-autogen, elixir-format
msgid "Powder grains per charge:"
msgstr "Granos de polvora por carga:"
-#: lib/cannery_web/live/type_live/show.ex:141
+#: lib/cannery_web/live/type_live/show.ex:140
#, elixir-autogen, elixir-format
msgid "Powder type:"
msgstr "Tipo de polvora:"
-#: lib/cannery_web/live/type_live/show.ex:147
+#: lib/cannery_web/live/type_live/show.ex:146
#, elixir-autogen, elixir-format
msgid "Pressure:"
msgstr "Presión:"
-#: lib/cannery_web/live/type_live/show.ex:150
+#: lib/cannery_web/live/type_live/show.ex:149
#, elixir-autogen, elixir-format
msgid "Primer type:"
msgstr "Tipo de espoleta:"
-#: lib/cannery_web/live/type_live/show.ex:152
+#: lib/cannery_web/live/type_live/show.ex:151
#, elixir-autogen, elixir-format
msgid "Tracer:"
msgstr "Trazadora:"
-#: lib/cannery_web/live/type_live/show.ex:157
+#: lib/cannery_web/live/type_live/show.ex:156
#, elixir-autogen, elixir-format
msgid "UPC:"
msgstr ""
@@ -984,7 +984,7 @@ msgstr "Cantidad Original"
msgid "Original Count:"
msgstr "Cantidad Original:"
-#: lib/cannery_web/live/home_live.ex:15
+#: lib/cannery_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "Home"
msgstr "Menu principal"
@@ -1041,20 +1041,20 @@ msgstr ""
msgid "Search tags"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:115
+#: lib/cannery_web/live/range_live/index.html.heex:112
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:130
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
-#: lib/cannery_web/templates/layout/root.html.heex:13
-#: lib/cannery_web/templates/layout/root.html.heex:14
-#: lib/cannery_web/views/layout_view.ex:14
+#: lib/cannery_web/components/layouts.ex:15
+#: lib/cannery_web/components/layouts/root.html.heex:9
+#: lib/cannery_web/components/layouts/root.html.heex:10
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
msgstr "Logo de cannery"
@@ -1095,7 +1095,7 @@ msgstr ""
"%{name} te permite mantener un ojo en tus niveles de munición antes y "
"después de un dÃa en el campo de tiro"
-#: lib/cannery_web/views/layout_view.ex:10
+#: lib/cannery_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "Cannery | %{title}"
msgstr ""
@@ -1135,17 +1135,17 @@ msgstr "Usos Restantes:"
msgid "Uses: %{uses_count}"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:13
-#: lib/cannery_web/templates/user_registration/new.html.heex:20
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:13
-#: lib/cannery_web/templates/user_session/new.html.heex:17
-#: lib/cannery_web/templates/user_settings/edit.html.heex:27
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:20
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:17
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:24
-#: lib/cannery_web/templates/user_session/new.html.heex:20
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""
@@ -1182,21 +1182,21 @@ msgid "Really great weather"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:67
-#: lib/cannery_web/components/move_pack_component.ex:68
+#: lib/cannery_web/components/move_pack_component.ex:67
#: lib/cannery_web/components/pack_table_component.ex:62
#: lib/cannery_web/components/shot_record_table_component.ex:48
#: lib/cannery_web/components/type_table_component.ex:99
-#: lib/cannery_web/live/pack_live/show.ex:93
+#: lib/cannery_web/live/pack_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:105
+#: lib/cannery_web/components/core_components/topbar.html.heex:81
#, elixir-autogen, elixir-format
msgid "Live Dashboard"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:90
+#: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format
msgid "Log out"
msgstr ""
@@ -1212,9 +1212,9 @@ msgstr ""
msgid "Close modal"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:103
+#: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58
-#: lib/cannery_web/live/range_live/index.html.heex:92
+#: lib/cannery_web/live/range_live/index.html.heex:89
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
@@ -1231,7 +1231,7 @@ msgstr ""
msgid "Brass height"
msgstr "Latón"
-#: lib/cannery_web/live/type_live/show.ex:128
+#: lib/cannery_web/live/type_live/show.ex:127
#, elixir-autogen, elixir-format
msgid "Brass height:"
msgstr ""
@@ -1242,7 +1242,7 @@ msgstr ""
msgid "Chamber size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:129
+#: lib/cannery_web/live/type_live/show.ex:128
#, elixir-autogen, elixir-format
msgid "Chamber size:"
msgstr ""
@@ -1258,7 +1258,7 @@ msgstr ""
msgid "Dram equivalent"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:148
+#: lib/cannery_web/live/type_live/show.ex:147
#, elixir-autogen, elixir-format
msgid "Dram equivalent:"
msgstr ""
@@ -1269,7 +1269,7 @@ msgstr ""
msgid "Gauge"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Gauge:"
msgstr ""
@@ -1280,7 +1280,7 @@ msgstr ""
msgid "Load grains"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:139
+#: lib/cannery_web/live/type_live/show.ex:138
#, elixir-autogen, elixir-format
msgid "Load grains:"
msgstr ""
@@ -1295,9 +1295,9 @@ msgstr "Sin Munición"
msgid "None specified"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:106
+#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61
-#: lib/cannery_web/live/range_live/index.html.heex:95
+#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:56
@@ -1320,9 +1320,9 @@ msgstr "Tipo de espoleta"
msgid "Projectile"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:104
+#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59
-#: lib/cannery_web/live/range_live/index.html.heex:93
+#: lib/cannery_web/live/range_live/index.html.heex:90
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:54
@@ -1336,7 +1336,7 @@ msgstr ""
msgid "Shot charge weight"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:140
+#: lib/cannery_web/live/type_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Shot charge weight:"
msgstr ""
@@ -1347,7 +1347,7 @@ msgstr ""
msgid "Shot material"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:137
+#: lib/cannery_web/live/type_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Shot material:"
msgstr ""
@@ -1358,7 +1358,7 @@ msgstr ""
msgid "Shot size"
msgstr "Tiros disparados"
-#: lib/cannery_web/live/type_live/show.ex:138
+#: lib/cannery_web/live/type_live/show.ex:137
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size:"
msgstr "Tiros disparados"
@@ -1369,14 +1369,14 @@ msgstr "Tiros disparados"
msgid "Shot type"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:136
+#: lib/cannery_web/live/type_live/show.ex:135
#, elixir-autogen, elixir-format
msgid "Shot type:"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:105
+#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60
-#: lib/cannery_web/live/range_live/index.html.heex:94
+#: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:52
@@ -1395,7 +1395,7 @@ msgstr ""
msgid "Target, bird, buck, etc"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:127
+#: lib/cannery_web/live/type_live/show.ex:126
#, elixir-autogen, elixir-format
msgid "Unfired length:"
msgstr ""
@@ -1412,15 +1412,15 @@ msgstr ""
msgid "Wadding"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:135
+#: lib/cannery_web/live/type_live/show.ex:134
#, elixir-autogen, elixir-format
msgid "Wadding:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
-#: lib/cannery_web/live/container_live/show.html.heex:97
+#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/index.html.heex:50
-#: lib/cannery_web/live/range_live/index.html.heex:86
+#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
#: lib/cannery_web/live/type_live/index.html.heex:29
#: lib/cannery_web/live/type_live/show.html.heex:46
@@ -1439,14 +1439,14 @@ msgstr "Balas"
msgid "Used up!"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:42
-#: lib/cannery_web/live/range_live/index.ex:40
+#: lib/cannery_web/live/pack_live/show.ex:41
+#: lib/cannery_web/live/range_live/index.ex:39
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Shot Record"
msgstr "Editar Tiros Récord"
#: lib/cannery_web/live/type_live/index.ex:28
-#: lib/cannery_web/live/type_live/show.ex:82
+#: lib/cannery_web/live/type_live/show.ex:81
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr "Editar %{ammo_type_name}"
diff --git a/priv/gettext/es/LC_MESSAGES/emails.po b/priv/gettext/es/LC_MESSAGES/emails.po
index 99d9bb26..9a8d0b3f 100644
--- a/priv/gettext/es/LC_MESSAGES/emails.po
+++ b/priv/gettext/es/LC_MESSAGES/emails.po
@@ -14,44 +14,44 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.2\n"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:3
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
-#: lib/cannery_web/templates/email/reset_password.html.heex:3
-#: lib/cannery_web/templates/email/reset_password.txt.eex:2
-#: lib/cannery_web/templates/email/update_email.html.heex:3
-#: lib/cannery_web/templates/email/update_email.txt.eex:2
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:3
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:2
+#: lib/cannery_web/components/email_html/reset_password.html.heex:3
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:2
+#: lib/cannery_web/components/email_html/update_email.html.heex:3
+#: lib/cannery_web/components/email_html/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr "Hola %{email},"
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr "Si no creó un usuario en %{url}, por favor, ignore este mensaje."
-#: lib/cannery_web/templates/email/reset_password.txt.eex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr "Si no pidió este cambio desde %{url}, por favor, ignore este mensaje."
-#: lib/cannery_web/templates/email/update_email.html.heex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:4
+#: lib/cannery_web/components/email_html/update_email.html.heex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
"Puede cambiar su correo electrónico visitando el enlace que se muestra a "
"continuación:"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:14
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:14
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
"Puede confirmar su cuenta visitando el enlace que se muestra a continuación:"
-#: lib/cannery_web/templates/email/reset_password.html.heex:8
-#: lib/cannery_web/templates/email/reset_password.txt.eex:4
+#: lib/cannery_web/components/email_html/reset_password.html.heex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
@@ -67,50 +67,50 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
-#: lib/cannery/accounts/email.ex:30
+#: lib/cannery/accounts/email.ex:31
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
msgstr "Confirma el %{name} de la cuenta"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:22
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr "Si no ha creado una cuenta en %{name}, por favor, ignore este mensaje."
-#: lib/cannery_web/templates/email/reset_password.html.heex:16
-#: lib/cannery_web/templates/email/update_email.html.heex:16
+#: lib/cannery_web/components/email_html/reset_password.html.heex:16
+#: lib/cannery_web/components/email_html/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
"Si no ha solicitado este cambio desde %{name}, por favor, ignore este "
"mensaje."
-#: lib/cannery/accounts/email.ex:37
+#: lib/cannery/accounts/email.ex:38
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
msgstr "Reseteé su contraseña en %{name}"
-#: lib/cannery_web/templates/layout/email.txt.eex:9
+#: lib/cannery_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgstr ""
"Este correo se mandó por %{name} desde %{url}, la página de seguimiento de "
"armas autogestionada."
-#: lib/cannery_web/templates/layout/email.html.heex:13
+#: lib/cannery_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
"Este correo se mandó por %{name}, la página de seguimiento de armas "
"autogestionada."
-#: lib/cannery/accounts/email.ex:44
+#: lib/cannery/accounts/email.ex:45
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr "Actualice su correo en &{url}"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:9
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:9
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
msgstr "¡Bienvenide a %{name}!"
diff --git a/priv/gettext/es/LC_MESSAGES/errors.po b/priv/gettext/es/LC_MESSAGES/errors.po
index f34cc9b7..5d300ba7 100644
--- a/priv/gettext/es/LC_MESSAGES/errors.po
+++ b/priv/gettext/es/LC_MESSAGES/errors.po
@@ -29,7 +29,7 @@ msgid "Container must be empty before deleting"
msgstr "El contenedor debe estar vacÃo antes de ser borrado"
#: lib/cannery_web/live/container_live/index.ex:86
-#: lib/cannery_web/live/container_live/show.ex:71
+#: lib/cannery_web/live/container_live/show.ex:67
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "No se pudo eliminar %{name}: %{error}"
@@ -44,58 +44,54 @@ msgstr "No se pudo encontrar el contenedor"
msgid "Email change link is invalid or it has expired."
msgstr "El enlace de cambio de correo es inválido o ha expirado."
-#: lib/cannery_web/templates/error/error.html.heex:8
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr "Error"
-#: lib/cannery_web/templates/error/error.html.heex:31
+#: lib/cannery_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "Go back home"
msgstr "Volver hacia atrás"
-#: lib/cannery_web/views/error_view.ex:10
-#, elixir-autogen, elixir-format
-msgid "Internal Server Error"
-msgstr "Error interno del servidor"
-
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr "Correo o contraseña incorrecta"
-#: lib/cannery_web/views/error_view.ex:8
+#: lib/cannery_web/controllers/error_html.ex:9
+#: lib/cannery_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "Not found"
msgstr "No se encontró"
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:13
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:22
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:64
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:118
#: lib/cannery_web/live/type_live/form_component.html.heex:18
-#: 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
-#: lib/cannery_web/templates/user_settings/edit.html.heex:64
-#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
"¡Ups, algo ha ido mal! Por favor, compruebe los errores que se muestran a "
"continuación."
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:62
#, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired."
msgstr ""
"El enlace de reestablecimiento de la contraseña es inválido o ha caducado."
-#: lib/cannery_web/controllers/user_registration_controller.ex:23
-#: lib/cannery_web/controllers/user_registration_controller.ex:52
+#: lib/cannery_web/controllers/user_registration_controller.ex:22
+#: lib/cannery_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr "Lo sentimos, el registro público no está habilitado"
-#: lib/cannery_web/controllers/user_registration_controller.ex:13
-#: lib/cannery_web/controllers/user_registration_controller.ex:42
-#: lib/cannery_web/controllers/user_registration_controller.ex:71
+#: lib/cannery_web/controllers/user_registration_controller.ex:12
+#: lib/cannery_web/controllers/user_registration_controller.ex:41
+#: lib/cannery_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr "Lo sentimos, esta invitación no es válida o ha caducado"
@@ -105,17 +101,18 @@ msgstr "Lo sentimos, esta invitación no es válida o ha caducado"
msgid "Unable to delete user"
msgstr "No se ha podido eliminar el usuario"
-#: lib/cannery_web/views/error_view.ex:9
+#: lib/cannery_web/controllers/error_html.ex:10
+#: lib/cannery_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "Unauthorized"
msgstr "No autorizado"
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr "El enlace de confirmación de usuario no es válido o ha caducado."
-#: lib/cannery_web/controllers/user_auth.ex:177
+#: lib/cannery_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr "No está autorizado a ver esta página."
@@ -140,7 +137,7 @@ msgstr "no es válido"
msgid "must have the @ sign and no spaces"
msgstr "debe tener el signo @ y no contener espacios"
-#: lib/cannery_web/live/container_live/show.ex:46
+#: lib/cannery_web/live/container_live/show.ex:45
#, elixir-autogen, elixir-format
msgid "Tag not found"
msgstr "Etiqueta no encontrada"
@@ -150,8 +147,8 @@ msgstr "Etiqueta no encontrada"
msgid "Tag could not be added"
msgstr "No se ha podido añadir la etiqueta"
-#: lib/cannery_web/controllers/user_auth.ex:39
-#: lib/cannery_web/controllers/user_auth.ex:161
+#: lib/cannery_web/controllers/user_auth.ex:38
+#: lib/cannery_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr "Debe confirmar su cuenta e iniciar sesión para acceder a esta página."
@@ -176,7 +173,7 @@ msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier
msgid "Invalid multiplier"
msgstr "Multiplicador inválido"
-#: lib/cannery_web/live/range_live/index.html.heex:74
+#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
msgstr "Su navegador no es compatible con el elemento lienzo."
@@ -210,3 +207,19 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr "Por favor escoja un tipo de munición y un contenedor"
+
+#: lib/cannery_web/controllers/error_html.ex:11
+#: lib/cannery_web/controllers/error_json.ex:9
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Internal server error"
+msgstr "Error interno del servidor"
+
+#: lib/cannery_web/controllers/user_auth.ex:195
+#, elixir-autogen, elixir-format
+msgid "You must log in as an administrator to access this page."
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:178
+#, elixir-autogen, elixir-format
+msgid "You must log in to access this page."
+msgstr ""
diff --git a/priv/gettext/es/LC_MESSAGES/prompts.po b/priv/gettext/es/LC_MESSAGES/prompts.po
index 23ce457c..34bbb9e4 100644
--- a/priv/gettext/es/LC_MESSAGES/prompts.po
+++ b/priv/gettext/es/LC_MESSAGES/prompts.po
@@ -33,13 +33,13 @@ msgstr "%{name} creado exitosamente"
#: lib/cannery_web/live/tag_live/index.ex:65
#: lib/cannery_web/live/type_live/index.ex:72
-#: lib/cannery_web/live/type_live/show.ex:27
+#: lib/cannery_web/live/type_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully"
msgstr "%{name} borrado exitosamente"
#: lib/cannery_web/live/container_live/index.ex:79
-#: lib/cannery_web/live/container_live/show.ex:61
+#: lib/cannery_web/live/container_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
msgstr "%{name} ha sido borrado"
@@ -73,18 +73,18 @@ msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
msgid "Are you sure you want to delete %{name}?"
msgstr "Está seguro que desea eliminar %{name}?"
-#: lib/cannery_web/live/pack_live/index.html.heex:187
-#: lib/cannery_web/live/pack_live/show.html.heex:72
+#: lib/cannery_web/live/pack_live/index.html.heex:181
+#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
msgstr "Está seguro que desea eliminar esta munición?"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:157
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:153
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr "Está seguro que desea eliminar su cuenta?"
-#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/components/core_components/topbar.html.heex:65
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr "Está seguro que desea cerrar sesión?"
@@ -113,7 +113,7 @@ msgstr ""
msgid "Logged out successfully."
msgstr "Sesión cerrada exitosamente."
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:45
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr "Contraseña reiniciada exitosamente."
@@ -123,7 +123,7 @@ msgstr "Contraseña reiniciada exitosamente."
msgid "Password updated successfully."
msgstr "Contraseña cambiada exitosamente."
-#: lib/cannery_web/controllers/user_registration_controller.ex:66
+#: lib/cannery_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Please check your email to verify your account"
msgstr "Por favor chequea el correo para verificar tu cuenta"
@@ -155,7 +155,7 @@ msgstr ""
msgid "%{name} added successfully"
msgstr "%{name} añadido exitosamente"
-#: lib/cannery_web/live/container_live/show.ex:38
+#: lib/cannery_web/live/container_live/show.ex:37
#, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}"
msgstr "se ha removido %{tag_name} de %{container_name}"
@@ -175,14 +175,14 @@ msgstr "Tiros registrados exitosamente"
msgid "Are you sure you want to unstage this ammo?"
msgstr "Está seguro que desea desmontar esta munición?"
-#: lib/cannery_web/live/pack_live/show.ex:158
-#: lib/cannery_web/live/range_live/index.html.heex:152
+#: lib/cannery_web/live/pack_live/show.ex:157
+#: lib/cannery_web/live/range_live/index.html.heex:149
#, 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?"
-#: lib/cannery_web/live/pack_live/show.ex:80
-#: lib/cannery_web/live/range_live/index.ex:79
+#: lib/cannery_web/live/pack_live/show.ex:79
+#: lib/cannery_web/live/range_live/index.ex:78
#, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully"
msgstr "Récord de disparos borrado exitosamente"
@@ -192,12 +192,12 @@ msgstr "Récord de disparos borrado exitosamente"
msgid "Shot records updated successfully"
msgstr "Récord de disparos actualizado exitosamente"
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr "%{email} confirmado exitosamente."
-#: lib/cannery_web/components/move_pack_component.ex:52
+#: lib/cannery_web/components/move_pack_component.ex:51
#, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully"
msgstr "Munición movida a %{name} exitosamente"
@@ -223,7 +223,7 @@ msgstr "Necesitará hacerlo"
msgid "Creating..."
msgstr "Creando..."
-#: lib/cannery_web/templates/user_settings/edit.html.heex:138
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr "¿Está segure de que quiere cambiar el idioma?"
@@ -234,12 +234,12 @@ msgid "Language updated successfully."
msgstr "Idioma cambiado exitosamente."
#: lib/cannery_web/live/pack_live/index.ex:94
-#: lib/cannery_web/live/pack_live/show.ex:55
+#: lib/cannery_web/live/pack_live/show.ex:54
#, elixir-autogen, elixir-format
msgid "Ammo deleted succesfully"
msgstr "Munición borrada exitosamente"
-#: lib/cannery_web/live/range_live/index.ex:92
+#: lib/cannery_web/live/range_live/index.ex:91
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully"
msgstr "Munición descargada exitosamente"
diff --git a/priv/gettext/fr/LC_MESSAGES/actions.po b/priv/gettext/fr/LC_MESSAGES/actions.po
index 6f6111cf..604a1ce3 100644
--- a/priv/gettext/fr/LC_MESSAGES/actions.po
+++ b/priv/gettext/fr/LC_MESSAGES/actions.po
@@ -45,14 +45,14 @@ msgstr "Ajoutez votre premier conteneur !"
msgid "Add your first type!"
msgstr "Ajoutez votre premier type !"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:15
-#: lib/cannery_web/templates/user_settings/edit.html.heex:43
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:15
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr "Changer le mél"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:57
-#: lib/cannery_web/templates/user_settings/edit.html.heex:97
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:57
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr "Changer le mot de passe"
@@ -62,14 +62,14 @@ msgstr "Changer le mot de passe"
msgid "Create Invite"
msgstr "Créer une invitation"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:159
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:155
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr "Supprimer utilisateur"
-#: lib/cannery_web/templates/user_registration/new.html.heex:47
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:42
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr "Mot de passe oublié ?"
@@ -79,13 +79,13 @@ msgstr "Mot de passe oublié ?"
msgid "Invite someone new!"
msgstr "Invitez une nouvelle personne !"
-#: lib/cannery_web/components/core_components/topbar.html.heex:124
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:32
-#: lib/cannery_web/templates/user_registration/new.html.heex:44
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:32
-#: lib/cannery_web/templates/user_session/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:28
+#: lib/cannery_web/components/core_components/topbar.html.heex:94
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr "Se connecter"
@@ -105,25 +105,25 @@ msgstr "Nouveau conteneur"
msgid "New Tag"
msgstr "Nouveau tag"
-#: lib/cannery_web/components/core_components/topbar.html.heex:116
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:29
-#: lib/cannery_web/templates/user_registration/new.html.heex:3
-#: lib/cannery_web/templates/user_registration/new.html.heex:37
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:29
-#: lib/cannery_web/templates/user_session/new.html.heex:39
+#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "S’enregistrer"
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr "Renvoyer les instructions de confirmation"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:3
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr "Réinitialisé le mot de passe"
@@ -139,12 +139,12 @@ msgstr "Réinitialisé le mot de passe"
msgid "Save"
msgstr "Sauvegarder"
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
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:68
+#: lib/cannery_web/live/container_live/show.html.heex:65
#, elixir-autogen, elixir-format
msgid "Why not add one?"
msgstr "Pourquoi pas en ajouter un ?"
@@ -165,18 +165,18 @@ msgid "Why not get some ready to shoot?"
msgstr "Pourquoi pas en préparer pour tirer ?"
#: lib/cannery_web/live/pack_live/index.html.heex:127
-#: lib/cannery_web/live/pack_live/show.html.heex:96
-#: lib/cannery_web/live/range_live/index.html.heex:45
+#: lib/cannery_web/live/pack_live/show.html.heex:90
+#: lib/cannery_web/live/range_live/index.html.heex:42
#, elixir-autogen, elixir-format
msgid "Record shots"
msgstr "Enregistrer des tirs"
-#: lib/cannery_web/components/move_pack_component.ex:88
+#: lib/cannery_web/components/move_pack_component.ex:87
#, elixir-autogen, elixir-format
msgid "Add another container!"
msgstr "Ajoutez un autre conteneur !"
-#: lib/cannery_web/components/move_pack_component.ex:124
+#: lib/cannery_web/components/move_pack_component.ex:123
#, elixir-autogen, elixir-format
msgid "Select"
msgstr "Sélectionner"
@@ -196,24 +196,24 @@ msgstr "ajouter un conteneur en premier"
msgid "Create"
msgstr "Créer"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:110
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:110
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr "Changer la langue"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:136
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr "Changer la langue"
-#: lib/cannery_web/live/pack_live/show.html.heex:55
+#: lib/cannery_web/live/pack_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "View in Catalog"
msgstr "Voir en catalogue"
-#: lib/cannery_web/components/move_pack_component.ex:78
-#: lib/cannery_web/live/pack_live/index.html.heex:144
-#: lib/cannery_web/live/pack_live/show.html.heex:89
+#: lib/cannery_web/components/move_pack_component.ex:77
+#: lib/cannery_web/live/pack_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.html.heex:86
#, elixir-autogen, elixir-format
msgid "Move ammo"
msgstr ""
@@ -223,19 +223,19 @@ msgstr ""
msgid "Set Unlimited"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:85
+#: lib/cannery_web/live/pack_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Stage for range"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:84
+#: lib/cannery_web/live/pack_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format
msgid "Unstage from range"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:150
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:146
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""
@@ -301,37 +301,37 @@ msgstr ""
msgid "Unstage"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:174
+#: lib/cannery_web/live/pack_live/index.html.heex:168
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:189
-#: lib/cannery_web/live/pack_live/show.html.heex:74
+#: lib/cannery_web/live/pack_live/index.html.heex:183
+#: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:164
-#: lib/cannery_web/live/pack_live/show.html.heex:62
+#: lib/cannery_web/live/pack_live/index.html.heex:158
+#: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:154
-#: lib/cannery_web/live/type_live/show.html.heex:204
+#: lib/cannery_web/live/pack_live/index.html.heex:148
+#: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:160
-#: lib/cannery_web/live/range_live/index.html.heex:155
+#: lib/cannery_web/live/pack_live/show.ex:159
+#: lib/cannery_web/live/range_live/index.html.heex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:145
-#: lib/cannery_web/live/range_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.ex:144
+#: lib/cannery_web/live/range_live/index.html.heex:135
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po
index 8cf04ee2..6c889081 100644
--- a/priv/gettext/fr/LC_MESSAGES/default.po
+++ b/priv/gettext/fr/LC_MESSAGES/default.po
@@ -29,7 +29,7 @@ msgstr "Administrateur·ices"
msgid "Admins:"
msgstr "Administrateur·ices :"
-#: lib/cannery_web/components/core_components/topbar.html.heex:58
+#: lib/cannery_web/components/core_components/topbar.html.heex:43
#: lib/cannery_web/components/shot_record_table_component.ex:44
#: lib/cannery_web/live/pack_live/index.ex:75
#: lib/cannery_web/live/pack_live/index.ex:84
@@ -84,14 +84,14 @@ msgstr "Cartouche"
msgid "Case material"
msgstr "Matériau de la caisse"
-#: lib/cannery_web/components/move_pack_component.ex:65
+#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:66
#, elixir-autogen, elixir-format
msgid "Container"
msgstr "Conteneur"
-#: lib/cannery_web/components/core_components/topbar.html.heex:42
+#: lib/cannery_web/components/core_components/topbar.html.heex:33
#: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3
@@ -177,20 +177,20 @@ msgstr "Invitation désactivée"
msgid "Invite Only"
msgstr "Uniquement sur invitation"
-#: lib/cannery_web/components/core_components/topbar.html.heex:74
+#: lib/cannery_web/components/core_components/topbar.html.heex:53
#: lib/cannery_web/live/invite_live/index.ex:31
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr "Invitations"
-#: lib/cannery_web/templates/user_session/new.html.heex:23
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr "Me garder authentifié durant 60 jours"
#: lib/cannery_web/components/container_table_component.ex:47
-#: lib/cannery_web/components/move_pack_component.ex:67
+#: lib/cannery_web/components/move_pack_component.ex:66
#: lib/cannery_web/live/container_live/form_component.html.heex:47
#, elixir-autogen, elixir-format
msgid "Location"
@@ -281,7 +281,7 @@ msgstr "Aucun tag"
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
-#: lib/cannery_web/live/pack_live/show.ex:91
+#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
msgid "Notes"
@@ -339,7 +339,7 @@ msgstr ""
"laquelle vous faîtes confiance."
#: lib/cannery_web/controllers/user_settings_controller.ex:10
-#: lib/cannery_web/templates/user_settings/edit.html.heex:3
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr "Paramètres"
@@ -354,13 +354,13 @@ msgstr "Simple :"
msgid "Steel"
msgstr "Acier"
-#: lib/cannery_web/live/pack_live/show.html.heex:106
+#: lib/cannery_web/live/pack_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Stored in"
msgstr "Est stocké dans"
#: lib/cannery_web/components/container_table_component.ex:66
-#: lib/cannery_web/components/core_components/topbar.html.heex:34
+#: lib/cannery_web/components/core_components/topbar.html.heex:28
#: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3
@@ -392,7 +392,7 @@ msgid "Tracer"
msgstr "Traceuse"
#: lib/cannery_web/components/container_table_component.ex:48
-#: lib/cannery_web/components/move_pack_component.ex:66
+#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:39
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
@@ -426,7 +426,7 @@ msgstr "Vos données restent avec vous, point final"
msgid "No tags for this container"
msgstr "Aucun tag pour ce conteneur"
-#: lib/cannery_web/components/core_components/topbar.html.heex:66
+#: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80
#, elixir-autogen, elixir-format
msgid "Range"
@@ -439,7 +439,7 @@ msgstr "Journée de stand"
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
#: lib/cannery_web/components/shot_record_table_component.ex:47
-#: lib/cannery_web/live/pack_live/show.ex:92
+#: lib/cannery_web/live/pack_live/show.ex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:41
#, elixir-autogen, elixir-format
msgid "Date"
@@ -461,26 +461,26 @@ msgstr "Aucune munition sélectionnée"
msgid "Record shots"
msgstr "Tirs enregistrés"
-#: lib/cannery_web/live/range_live/index.ex:48
+#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr "Nouveaux enregistrements de tir"
-#: lib/cannery_web/live/range_live/index.html.heex:55
-#: lib/cannery_web/live/range_live/index.html.heex:122
+#: lib/cannery_web/live/range_live/index.html.heex:52
+#: lib/cannery_web/live/range_live/index.html.heex:119
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr "Aucun tir enregistré"
#: lib/cannery_web/components/shot_record_table_component.ex:45
-#: lib/cannery_web/live/pack_live/show.ex:90
-#: lib/cannery_web/live/range_live/index.html.heex:69
+#: lib/cannery_web/live/pack_live/show.ex:89
+#: lib/cannery_web/live/range_live/index.html.heex:66
#, elixir-autogen, elixir-format
msgid "Rounds shot"
msgstr "Cartouches tirées"
-#: lib/cannery_web/live/range_live/index.ex:56
-#: lib/cannery_web/live/range_live/index.ex:66
+#: lib/cannery_web/live/range_live/index.ex:55
+#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr "Enregistrements de tir"
@@ -490,12 +490,12 @@ msgstr "Enregistrements de tir"
msgid "Move ammo"
msgstr "Déplacer munition"
-#: lib/cannery_web/components/move_pack_component.ex:83
+#: lib/cannery_web/components/move_pack_component.ex:82
#, elixir-autogen, elixir-format
msgid "No other containers"
msgstr "Aucun autre conteneur"
-#: lib/cannery_web/live/range_live/index.html.heex:60
+#: lib/cannery_web/live/range_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "Shot log"
msgstr "Évènements de tir"
@@ -546,20 +546,20 @@ msgstr "Type de poudre"
msgid "UPC"
msgstr "UPC"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
-#: lib/cannery_web/templates/user_settings/edit.html.heex:76
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:20
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr "Confirmez le nouveau mot de passe"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:31
-#: lib/cannery_web/templates/user_settings/edit.html.heex:85
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:31
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr "Mot de passe actuel"
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
-#: lib/cannery_web/templates/user_settings/edit.html.heex:69
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:16
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "New password"
msgstr "Nouveau mot de passe"
@@ -570,19 +570,19 @@ msgstr "Nouveau mot de passe"
msgid "Firing type"
msgstr "Type d’allumage"
-#: lib/cannery_web/templates/layout/live.html.heex:43
+#: lib/cannery_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr "Reconnexion en cours…"
#: lib/cannery_web/live/container_live/index.ex:28
-#: lib/cannery_web/live/container_live/show.ex:120
+#: lib/cannery_web/live/container_live/show.ex:116
#, 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:121
+#: lib/cannery_web/live/container_live/show.ex:117
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
msgstr "Éditer les tags de %{name}"
@@ -627,7 +627,7 @@ msgstr "Nombre original :"
msgid "Percentage left:"
msgstr "Pourcentage restant :"
-#: lib/cannery_web/live/pack_live/show.html.heex:119
+#: lib/cannery_web/live/pack_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "Rounds used"
msgstr "Cartouches utilisées"
@@ -647,18 +647,18 @@ msgstr "Mot de passe oublié ?"
msgid "Log in"
msgstr "Se connecter"
-#: lib/cannery_web/controllers/user_registration_controller.ex:33
+#: lib/cannery_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format
msgid "Register"
msgstr "S’enregistrer"
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:35
#, elixir-autogen, elixir-format
msgid "Reset your password"
msgstr "Réinitialiser votre mot de passe"
-#: lib/cannery_web/live/pack_live/show.ex:41
-#: lib/cannery_web/live/range_live/index.ex:32
+#: lib/cannery_web/live/pack_live/show.ex:40
+#: lib/cannery_web/live/range_live/index.ex:31
#, elixir-autogen, elixir-format
msgid "Record Shots"
msgstr "Enregistrer des tirs"
@@ -673,23 +673,23 @@ msgstr "Exemplaires"
msgid "Added on:"
msgstr "Ajouté le :"
-#: lib/cannery_web/templates/user_registration/new.html.heex:32
-#: lib/cannery_web/templates/user_settings/edit.html.heex:127
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
#, elixir-autogen, elixir-format
msgid "English"
msgstr "Anglais"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:129
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
#, elixir-autogen, elixir-format
msgid "French"
msgstr "Français"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:128
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "German"
msgstr "Allemand"
-#: lib/cannery_web/templates/user_registration/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Language"
msgstr "Langue"
@@ -714,7 +714,7 @@ msgstr "Remonter des bugs ou une demande de fonctionnalité"
msgid "View the source code"
msgstr "Voir le code source"
-#: lib/cannery_web/components/core_components/topbar.html.heex:50
+#: lib/cannery_web/components/core_components/topbar.html.heex:38
#: lib/cannery_web/live/type_live/index.ex:52
#: lib/cannery_web/live/type_live/index.ex:62
#: lib/cannery_web/live/type_live/index.html.heex:3
@@ -722,27 +722,27 @@ msgstr "Voir le code source"
msgid "Catalog"
msgstr "Catalogue"
-#: lib/cannery_web/live/pack_live/show.ex:45
+#: lib/cannery_web/live/pack_live/show.ex:44
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Ammo"
msgstr "Éditer le type de munition"
-#: lib/cannery_web/live/pack_live/show.ex:43
+#: lib/cannery_web/live/pack_live/show.ex:42
#, elixir-autogen, elixir-format, fuzzy
msgid "Move Ammo"
msgstr "Déplacer munition"
-#: lib/cannery_web/live/container_live/show.html.heex:123
+#: lib/cannery_web/live/container_live/show.html.heex:117
#, elixir-autogen, elixir-format, fuzzy
msgid "No ammo in this container"
msgstr "Aucun groupe de munition pour ce conteneur"
-#: lib/cannery_web/live/pack_live/show.ex:44
+#: lib/cannery_web/live/pack_live/show.ex:43
#, elixir-autogen, elixir-format, fuzzy
msgid "Show Ammo"
msgstr "Montrer le type de munition"
-#: lib/cannery_web/live/pack_live/show.html.heex:111
+#: lib/cannery_web/live/pack_live/show.html.heex:105
#, elixir-autogen, elixir-format, fuzzy
msgid "This ammo is not in a container"
msgstr "Ce groupe de munition n’est pas dans un conteneur"
@@ -754,7 +754,7 @@ msgstr "Ce groupe de munition n’est pas dans un conteneur"
msgid "Packs:"
msgstr "Packages :"
-#: lib/cannery_web/components/core_components/topbar.html.heex:10
+#: lib/cannery_web/components/core_components/topbar.html.heex:7
#: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format
msgid "Cannery logo"
@@ -789,7 +789,7 @@ msgstr ""
msgid "%{percentage}%"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:154
+#: lib/cannery_web/live/range_live/index.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}"
msgstr "Cartouches tirées"
@@ -807,7 +807,7 @@ msgid "Rounds"
msgstr "Cartouches :"
#: lib/cannery_web/live/container_live/index.html.heex:40
-#: lib/cannery_web/live/container_live/show.html.heex:115
+#: lib/cannery_web/live/container_live/show.html.heex:109
#: lib/cannery_web/live/type_live/show.html.heex:170
#, elixir-autogen, elixir-format
msgid "View as table"
@@ -853,102 +853,102 @@ msgstr ""
msgid "Used rounds:"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:71
+#: lib/cannery_web/live/range_live/index.html.heex:68
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart"
msgstr "Cartouches tirées"
-#: lib/cannery_web/live/type_live/show.ex:154
+#: lib/cannery_web/live/type_live/show.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Blank:"
msgstr "Vide"
-#: lib/cannery_web/live/type_live/show.ex:132
+#: lib/cannery_web/live/type_live/show.ex:131
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:"
msgstr "Noyau de balle"
-#: lib/cannery_web/live/type_live/show.ex:131
+#: lib/cannery_web/live/type_live/show.ex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:"
msgstr "Type de balle"
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:"
msgstr "Calibre"
-#: lib/cannery_web/live/type_live/show.ex:121
+#: lib/cannery_web/live/type_live/show.ex:120
#, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:"
msgstr "Cartouche"
-#: lib/cannery_web/live/type_live/show.ex:134
+#: lib/cannery_web/live/type_live/show.ex:133
#, elixir-autogen, elixir-format, fuzzy
msgid "Case material:"
msgstr "Matériau de la caisse"
-#: lib/cannery_web/live/type_live/show.ex:155
+#: lib/cannery_web/live/type_live/show.ex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:"
msgstr "Corrosive"
-#: lib/cannery_web/live/type_live/show.ex:151
+#: lib/cannery_web/live/type_live/show.ex:150
#, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:"
msgstr "Type d’allumage"
-#: lib/cannery_web/live/type_live/show.ex:130
+#: lib/cannery_web/live/type_live/show.ex:129
#, elixir-autogen, elixir-format, fuzzy
msgid "Grains:"
msgstr "Graines"
-#: lib/cannery_web/live/type_live/show.ex:153
+#: lib/cannery_web/live/type_live/show.ex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:"
msgstr "Incendiaire"
-#: lib/cannery_web/live/type_live/show.ex:133
+#: lib/cannery_web/live/type_live/show.ex:132
#, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:"
msgstr "Type de douille"
-#: lib/cannery_web/live/type_live/show.ex:156
+#: lib/cannery_web/live/type_live/show.ex:155
#, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:"
msgstr "Fabricant"
-#: lib/cannery_web/live/type_live/show.ex:149
+#: lib/cannery_web/live/type_live/show.ex:148
#, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:"
msgstr "Vélocité du canon"
-#: lib/cannery_web/live/type_live/show.ex:143
+#: lib/cannery_web/live/type_live/show.ex:142
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:"
msgstr "Graines de poudre par charge"
-#: lib/cannery_web/live/type_live/show.ex:141
+#: lib/cannery_web/live/type_live/show.ex:140
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:"
msgstr "Type de poudre"
-#: lib/cannery_web/live/type_live/show.ex:147
+#: lib/cannery_web/live/type_live/show.ex:146
#, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:"
msgstr "Pression"
-#: lib/cannery_web/live/type_live/show.ex:150
+#: lib/cannery_web/live/type_live/show.ex:149
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:"
msgstr "Type d’amorce"
-#: lib/cannery_web/live/type_live/show.ex:152
+#: lib/cannery_web/live/type_live/show.ex:151
#, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:"
msgstr "Traceuse"
-#: lib/cannery_web/live/type_live/show.ex:157
+#: lib/cannery_web/live/type_live/show.ex:156
#, elixir-autogen, elixir-format, fuzzy
msgid "UPC:"
msgstr "UPC"
@@ -985,7 +985,7 @@ msgstr "Nombre original :"
msgid "Original Count:"
msgstr "Nombre original :"
-#: lib/cannery_web/live/home_live.ex:15
+#: lib/cannery_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "Home"
msgstr ""
@@ -1042,20 +1042,20 @@ msgstr ""
msgid "Search tags"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:115
+#: lib/cannery_web/live/range_live/index.html.heex:112
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:130
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
-#: lib/cannery_web/templates/layout/root.html.heex:13
-#: lib/cannery_web/templates/layout/root.html.heex:14
-#: lib/cannery_web/views/layout_view.ex:14
+#: lib/cannery_web/components/layouts.ex:15
+#: lib/cannery_web/components/layouts/root.html.heex:9
+#: lib/cannery_web/components/layouts/root.html.heex:10
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
msgstr "Logo de Cannery"
@@ -1096,7 +1096,7 @@ msgstr ""
"%{name} vous permet de facilement garder un Å“il sur votre niveau de munition "
"avant et après une journée de stand"
-#: lib/cannery_web/views/layout_view.ex:10
+#: lib/cannery_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "Cannery | %{title}"
msgstr ""
@@ -1136,17 +1136,17 @@ msgstr "Utilisations restantes :"
msgid "Uses: %{uses_count}"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:13
-#: lib/cannery_web/templates/user_registration/new.html.heex:20
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:13
-#: lib/cannery_web/templates/user_session/new.html.heex:17
-#: lib/cannery_web/templates/user_settings/edit.html.heex:27
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:20
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:17
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:24
-#: lib/cannery_web/templates/user_session/new.html.heex:20
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""
@@ -1183,21 +1183,21 @@ msgid "Really great weather"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:67
-#: lib/cannery_web/components/move_pack_component.ex:68
+#: lib/cannery_web/components/move_pack_component.ex:67
#: lib/cannery_web/components/pack_table_component.ex:62
#: lib/cannery_web/components/shot_record_table_component.ex:48
#: lib/cannery_web/components/type_table_component.ex:99
-#: lib/cannery_web/live/pack_live/show.ex:93
+#: lib/cannery_web/live/pack_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:105
+#: lib/cannery_web/components/core_components/topbar.html.heex:81
#, elixir-autogen, elixir-format
msgid "Live Dashboard"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:90
+#: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format
msgid "Log out"
msgstr ""
@@ -1213,9 +1213,9 @@ msgstr ""
msgid "Close modal"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:103
+#: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58
-#: lib/cannery_web/live/range_live/index.html.heex:92
+#: lib/cannery_web/live/range_live/index.html.heex:89
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
@@ -1232,7 +1232,7 @@ msgstr ""
msgid "Brass height"
msgstr "Cuivre"
-#: lib/cannery_web/live/type_live/show.ex:128
+#: lib/cannery_web/live/type_live/show.ex:127
#, elixir-autogen, elixir-format
msgid "Brass height:"
msgstr ""
@@ -1243,7 +1243,7 @@ msgstr ""
msgid "Chamber size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:129
+#: lib/cannery_web/live/type_live/show.ex:128
#, elixir-autogen, elixir-format
msgid "Chamber size:"
msgstr ""
@@ -1259,7 +1259,7 @@ msgstr ""
msgid "Dram equivalent"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:148
+#: lib/cannery_web/live/type_live/show.ex:147
#, elixir-autogen, elixir-format
msgid "Dram equivalent:"
msgstr ""
@@ -1270,7 +1270,7 @@ msgstr ""
msgid "Gauge"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Gauge:"
msgstr ""
@@ -1281,7 +1281,7 @@ msgstr ""
msgid "Load grains"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:139
+#: lib/cannery_web/live/type_live/show.ex:138
#, elixir-autogen, elixir-format
msgid "Load grains:"
msgstr ""
@@ -1296,9 +1296,9 @@ msgstr "Aucune munition"
msgid "None specified"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:106
+#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61
-#: lib/cannery_web/live/range_live/index.html.heex:95
+#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:56
@@ -1321,9 +1321,9 @@ msgstr "Type d’amorce"
msgid "Projectile"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:104
+#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59
-#: lib/cannery_web/live/range_live/index.html.heex:93
+#: lib/cannery_web/live/range_live/index.html.heex:90
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:54
@@ -1337,7 +1337,7 @@ msgstr ""
msgid "Shot charge weight"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:140
+#: lib/cannery_web/live/type_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Shot charge weight:"
msgstr ""
@@ -1348,7 +1348,7 @@ msgstr ""
msgid "Shot material"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:137
+#: lib/cannery_web/live/type_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Shot material:"
msgstr ""
@@ -1359,7 +1359,7 @@ msgstr ""
msgid "Shot size"
msgstr "Tirs réalisés"
-#: lib/cannery_web/live/type_live/show.ex:138
+#: lib/cannery_web/live/type_live/show.ex:137
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size:"
msgstr "Tirs réalisés"
@@ -1370,14 +1370,14 @@ msgstr "Tirs réalisés"
msgid "Shot type"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:136
+#: lib/cannery_web/live/type_live/show.ex:135
#, elixir-autogen, elixir-format
msgid "Shot type:"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:105
+#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60
-#: lib/cannery_web/live/range_live/index.html.heex:94
+#: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:52
@@ -1396,7 +1396,7 @@ msgstr ""
msgid "Target, bird, buck, etc"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:127
+#: lib/cannery_web/live/type_live/show.ex:126
#, elixir-autogen, elixir-format
msgid "Unfired length:"
msgstr ""
@@ -1413,15 +1413,15 @@ msgstr ""
msgid "Wadding"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:135
+#: lib/cannery_web/live/type_live/show.ex:134
#, elixir-autogen, elixir-format
msgid "Wadding:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
-#: lib/cannery_web/live/container_live/show.html.heex:97
+#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/index.html.heex:50
-#: lib/cannery_web/live/range_live/index.html.heex:86
+#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
#: lib/cannery_web/live/type_live/index.html.heex:29
#: lib/cannery_web/live/type_live/show.html.heex:46
@@ -1440,14 +1440,14 @@ msgstr "Cartouches :"
msgid "Used up!"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:42
-#: lib/cannery_web/live/range_live/index.ex:40
+#: lib/cannery_web/live/pack_live/show.ex:41
+#: lib/cannery_web/live/range_live/index.ex:39
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Shot Record"
msgstr "Modifier les enregistrements de tir"
#: lib/cannery_web/live/type_live/index.ex:28
-#: lib/cannery_web/live/type_live/show.ex:82
+#: lib/cannery_web/live/type_live/show.ex:81
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr "Éditer %{name}"
diff --git a/priv/gettext/fr/LC_MESSAGES/emails.po b/priv/gettext/fr/LC_MESSAGES/emails.po
index 0afcb2b4..7feaf312 100644
--- a/priv/gettext/fr/LC_MESSAGES/emails.po
+++ b/priv/gettext/fr/LC_MESSAGES/emails.po
@@ -14,43 +14,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.11.2\n"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:3
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
-#: lib/cannery_web/templates/email/reset_password.html.heex:3
-#: lib/cannery_web/templates/email/reset_password.txt.eex:2
-#: lib/cannery_web/templates/email/update_email.html.heex:3
-#: lib/cannery_web/templates/email/update_email.txt.eex:2
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:3
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:2
+#: lib/cannery_web/components/email_html/reset_password.html.heex:3
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:2
+#: lib/cannery_web/components/email_html/update_email.html.heex:3
+#: lib/cannery_web/components/email_html/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr "Salut %{email},"
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr "Si vous n’avez créé un compte à %{url}, veuillez ignorer ceci."
-#: lib/cannery_web/templates/email/reset_password.txt.eex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
"Si vous n’avez pas demandé ce changement depuis %{url}, veuillez ignorer "
"ceci."
-#: lib/cannery_web/templates/email/update_email.html.heex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:4
+#: lib/cannery_web/components/email_html/update_email.html.heex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr "Vous pouvez changer votre mél en consultant l’URL ci-dessous :"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:14
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:14
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr "Vous pouvez confirmer votre compte en consultant l’URL ci-dessous :"
-#: lib/cannery_web/templates/email/reset_password.html.heex:8
-#: lib/cannery_web/templates/email/reset_password.txt.eex:4
+#: lib/cannery_web/components/email_html/reset_password.html.heex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
@@ -65,48 +65,48 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
-#: lib/cannery/accounts/email.ex:30
+#: lib/cannery/accounts/email.ex:31
#, elixir-autogen, elixir-format, fuzzy
msgid "Confirm your Cannery account"
msgstr "Confirmer votre compte %{name}"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:22
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr "Si vous n’avez pas créé de compte à %{name}, veuillez ignorer ceci."
-#: lib/cannery_web/templates/email/reset_password.html.heex:16
-#: lib/cannery_web/templates/email/update_email.html.heex:16
+#: lib/cannery_web/components/email_html/reset_password.html.heex:16
+#: lib/cannery_web/components/email_html/update_email.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr ""
"Si vous n’avez pas demandé ce changement depuis %{name}, veuillez ignorer "
"ceci."
-#: lib/cannery/accounts/email.ex:37
+#: lib/cannery/accounts/email.ex:38
#, elixir-autogen, elixir-format, fuzzy
msgid "Reset your Cannery password"
msgstr "Réinitialiser votre mot de passe %{name}"
-#: lib/cannery_web/templates/layout/email.txt.eex:9
+#: lib/cannery_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgstr ""
"Ce mél a été envoyé depuis %{name} à %{url}, le site web de suivi d’arme à "
"feux."
-#: lib/cannery_web/templates/layout/email.html.heex:13
+#: lib/cannery_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr "Ce mél a été envoyé depuis %{name}, le site web de suivi d’arme à feu."
-#: lib/cannery/accounts/email.ex:44
+#: lib/cannery/accounts/email.ex:45
#, elixir-autogen, elixir-format, fuzzy
msgid "Update your Cannery email"
msgstr "Mettre à jour votre mél %{name}"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:9
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:9
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to Cannery"
msgstr "Bienvenue à %{name} !"
diff --git a/priv/gettext/fr/LC_MESSAGES/errors.po b/priv/gettext/fr/LC_MESSAGES/errors.po
index bbdeb5b9..6a706cfb 100644
--- a/priv/gettext/fr/LC_MESSAGES/errors.po
+++ b/priv/gettext/fr/LC_MESSAGES/errors.po
@@ -29,7 +29,7 @@ msgid "Container must be empty before deleting"
msgstr "Le conteneur doit être vide pour être supprimé"
#: lib/cannery_web/live/container_live/index.ex:86
-#: lib/cannery_web/live/container_live/show.ex:71
+#: lib/cannery_web/live/container_live/show.ex:67
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "Impossible de supprimer %{name}Â : %{error}"
@@ -44,57 +44,53 @@ msgstr "Impossible de trouver ce conteneur"
msgid "Email change link is invalid or it has expired."
msgstr "Le lien de changement de mél est invalide ou a expiré."
-#: lib/cannery_web/templates/error/error.html.heex:8
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr "Erreur"
-#: lib/cannery_web/templates/error/error.html.heex:31
+#: lib/cannery_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "Go back home"
msgstr "Retour au menu principal"
-#: lib/cannery_web/views/error_view.ex:10
-#, elixir-autogen, elixir-format
-msgid "Internal Server Error"
-msgstr "Erreur interne du serveur"
-
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr "Mél ou mot de passe invalide"
-#: lib/cannery_web/views/error_view.ex:8
+#: lib/cannery_web/controllers/error_html.ex:9
+#: lib/cannery_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "Not found"
msgstr "Pas trouvé"
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:13
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:22
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:64
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:118
#: lib/cannery_web/live/type_live/form_component.html.heex:18
-#: 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
-#: lib/cannery_web/templates/user_settings/edit.html.heex:64
-#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
"Oups, quelque chose s’est mal passé ! Veuillez vérifier les erreurs en "
"dessous."
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:62
#, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired."
msgstr "Le lien de réinitialisation de mot de passe est invalide ou expiré."
-#: lib/cannery_web/controllers/user_registration_controller.ex:23
-#: lib/cannery_web/controllers/user_registration_controller.ex:52
+#: lib/cannery_web/controllers/user_registration_controller.ex:22
+#: lib/cannery_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr "Désolé, l’enregistrement public est désactivé"
-#: lib/cannery_web/controllers/user_registration_controller.ex:13
-#: lib/cannery_web/controllers/user_registration_controller.ex:42
-#: lib/cannery_web/controllers/user_registration_controller.ex:71
+#: lib/cannery_web/controllers/user_registration_controller.ex:12
+#: lib/cannery_web/controllers/user_registration_controller.ex:41
+#: lib/cannery_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr "Désolé, cette invitation n’est pas trouvée ou est expirée"
@@ -104,17 +100,18 @@ msgstr "Désolé, cette invitation n’est pas trouvée ou est expirée"
msgid "Unable to delete user"
msgstr "Impossible de supprimer l’utilisateur·ice"
-#: lib/cannery_web/views/error_view.ex:9
+#: lib/cannery_web/controllers/error_html.ex:10
+#: lib/cannery_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "Unauthorized"
msgstr "Non autorisé·e"
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr "Le lien de confirmation d’utilisateur·ice est invalide ou a expiré."
-#: lib/cannery_web/controllers/user_auth.ex:177
+#: lib/cannery_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr "Vous n’êtes pas autorisé·e à voir cette page."
@@ -139,7 +136,7 @@ msgstr "n’est pas valide"
msgid "must have the @ sign and no spaces"
msgstr "doit contenir le symbole @ et aucune espace"
-#: lib/cannery_web/live/container_live/show.ex:46
+#: lib/cannery_web/live/container_live/show.ex:45
#, elixir-autogen, elixir-format
msgid "Tag not found"
msgstr "Tag pas trouvé"
@@ -149,8 +146,8 @@ msgstr "Tag pas trouvé"
msgid "Tag could not be added"
msgstr "Le tag n’a pas pu être ajouté"
-#: lib/cannery_web/controllers/user_auth.ex:39
-#: lib/cannery_web/controllers/user_auth.ex:161
+#: lib/cannery_web/controllers/user_auth.ex:38
+#: lib/cannery_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@@ -177,7 +174,7 @@ msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}"
msgid "Invalid multiplier"
msgstr "Multiplicateur invalide"
-#: lib/cannery_web/live/range_live/index.html.heex:74
+#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
msgstr ""
@@ -211,3 +208,19 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr "Veuillez choisir un type de munitions et un conteneur"
+
+#: lib/cannery_web/controllers/error_html.ex:11
+#: lib/cannery_web/controllers/error_json.ex:9
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Internal server error"
+msgstr "Erreur interne du serveur"
+
+#: lib/cannery_web/controllers/user_auth.ex:195
+#, elixir-autogen, elixir-format
+msgid "You must log in as an administrator to access this page."
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:178
+#, elixir-autogen, elixir-format
+msgid "You must log in to access this page."
+msgstr ""
diff --git a/priv/gettext/fr/LC_MESSAGES/prompts.po b/priv/gettext/fr/LC_MESSAGES/prompts.po
index 8003340c..2da53ce0 100644
--- a/priv/gettext/fr/LC_MESSAGES/prompts.po
+++ b/priv/gettext/fr/LC_MESSAGES/prompts.po
@@ -33,13 +33,13 @@ msgstr "%{name} créé· avec succès"
#: lib/cannery_web/live/tag_live/index.ex:65
#: lib/cannery_web/live/type_live/index.ex:72
-#: lib/cannery_web/live/type_live/show.ex:27
+#: lib/cannery_web/live/type_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully"
msgstr "%{name} supprimé· avec succès"
#: lib/cannery_web/live/container_live/index.ex:79
-#: lib/cannery_web/live/container_live/show.ex:61
+#: lib/cannery_web/live/container_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
msgstr "%{name} a été supprimé·e"
@@ -74,18 +74,18 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?"
msgstr "Êtes-vous certain·e de supprimer %{name} ?"
-#: lib/cannery_web/live/pack_live/index.html.heex:187
-#: lib/cannery_web/live/pack_live/show.html.heex:72
+#: lib/cannery_web/live/pack_live/index.html.heex:181
+#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
msgstr "Êtes-vous certain·e de supprimer cette munition ?"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:157
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:153
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr "Êtes-vous certain·e de supprimer votre compte ?"
-#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/components/core_components/topbar.html.heex:65
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr "Êtes-vous certain·e de vouloir vous déconnecter ?"
@@ -114,7 +114,7 @@ msgstr ""
msgid "Logged out successfully."
msgstr "Déconnecté avec succès."
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:45
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr "Mot de passe réinitialiser avec succès."
@@ -124,7 +124,7 @@ msgstr "Mot de passe réinitialiser avec succès."
msgid "Password updated successfully."
msgstr "Mot de passe mis à jour avec succès."
-#: lib/cannery_web/controllers/user_registration_controller.ex:66
+#: lib/cannery_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Please check your email to verify your account"
msgstr "Veuillez vérifier votre mél pour confirmer votre compte"
@@ -157,7 +157,7 @@ msgstr ""
msgid "%{name} added successfully"
msgstr "%{name} a été ajouté avec succès"
-#: lib/cannery_web/live/container_live/show.ex:38
+#: lib/cannery_web/live/container_live/show.ex:37
#, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}"
msgstr "%{tag_name} a été retiré de %{container_name}"
@@ -177,14 +177,14 @@ msgstr "Tirs enregistré avec succès"
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/pack_live/show.ex:158
-#: lib/cannery_web/live/range_live/index.html.heex:152
+#: lib/cannery_web/live/pack_live/show.ex:157
+#: lib/cannery_web/live/range_live/index.html.heex:149
#, 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 ?"
-#: lib/cannery_web/live/pack_live/show.ex:80
-#: lib/cannery_web/live/range_live/index.ex:79
+#: lib/cannery_web/live/pack_live/show.ex:79
+#: lib/cannery_web/live/range_live/index.ex:78
#, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully"
msgstr "Enregistrements de tir supprimés avec succès"
@@ -194,12 +194,12 @@ msgstr "Enregistrements de tir supprimés avec succès"
msgid "Shot records updated successfully"
msgstr "Enregistrements de tir mis à jour avec succès"
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr "%{email} confirmé avec succès."
-#: lib/cannery_web/components/move_pack_component.ex:52
+#: lib/cannery_web/components/move_pack_component.ex:51
#, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully"
msgstr "Munition déplacée à %{name} avec succès"
@@ -225,7 +225,7 @@ msgstr "Vous aurez besoin de"
msgid "Creating..."
msgstr "Création en cours…"
-#: lib/cannery_web/templates/user_settings/edit.html.heex:138
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr "Êtes-vous certain·e de vouloir changer votre langue ?"
@@ -236,12 +236,12 @@ msgid "Language updated successfully."
msgstr "Langue mise à jour avec succès."
#: lib/cannery_web/live/pack_live/index.ex:94
-#: lib/cannery_web/live/pack_live/show.ex:55
+#: lib/cannery_web/live/pack_live/show.ex:54
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo deleted succesfully"
msgstr "Groupe de munition supprimé avec succès"
-#: lib/cannery_web/live/range_live/index.ex:92
+#: lib/cannery_web/live/range_live/index.ex:91
#, elixir-autogen, elixir-format, fuzzy
msgid "Ammo unstaged succesfully"
msgstr "Groupe de munition désélectionner avec succès"
diff --git a/priv/gettext/ga/LC_MESSAGES/actions.po b/priv/gettext/ga/LC_MESSAGES/actions.po
index 2eb28be2..f1a5c837 100644
--- a/priv/gettext/ga/LC_MESSAGES/actions.po
+++ b/priv/gettext/ga/LC_MESSAGES/actions.po
@@ -43,14 +43,14 @@ msgstr ""
msgid "Add your first type!"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:15
-#: lib/cannery_web/templates/user_settings/edit.html.heex:43
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:15
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "Change email"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:57
-#: lib/cannery_web/templates/user_settings/edit.html.heex:97
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:57
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "Change password"
msgstr ""
@@ -60,14 +60,14 @@ msgstr ""
msgid "Create Invite"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:159
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:155
#, elixir-autogen, elixir-format
msgid "Delete User"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:47
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:42
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "Forgot your password?"
msgstr ""
@@ -77,13 +77,13 @@ msgstr ""
msgid "Invite someone new!"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:124
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:32
-#: lib/cannery_web/templates/user_registration/new.html.heex:44
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:45
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:32
-#: lib/cannery_web/templates/user_session/new.html.heex:3
-#: lib/cannery_web/templates/user_session/new.html.heex:28
+#: lib/cannery_web/components/core_components/topbar.html.heex:94
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Log in"
msgstr ""
@@ -103,25 +103,25 @@ msgstr ""
msgid "New Tag"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:116
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:29
-#: lib/cannery_web/templates/user_registration/new.html.heex:3
-#: lib/cannery_web/templates/user_registration/new.html.heex:37
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:42
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:29
-#: lib/cannery_web/templates/user_session/new.html.heex:39
+#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:3
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:16
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:3
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:3
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:29
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:3
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
@@ -137,12 +137,12 @@ msgstr ""
msgid "Save"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:16
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Send instructions to reset password"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:68
+#: lib/cannery_web/live/container_live/show.html.heex:65
#, elixir-autogen, elixir-format
msgid "Why not add one?"
msgstr ""
@@ -163,18 +163,18 @@ msgid "Why not get some ready to shoot?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:127
-#: lib/cannery_web/live/pack_live/show.html.heex:96
-#: lib/cannery_web/live/range_live/index.html.heex:45
+#: lib/cannery_web/live/pack_live/show.html.heex:90
+#: lib/cannery_web/live/range_live/index.html.heex:42
#, elixir-autogen, elixir-format
msgid "Record shots"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:88
+#: lib/cannery_web/components/move_pack_component.ex:87
#, elixir-autogen, elixir-format
msgid "Add another container!"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:124
+#: lib/cannery_web/components/move_pack_component.ex:123
#, elixir-autogen, elixir-format
msgid "Select"
msgstr ""
@@ -194,24 +194,24 @@ msgstr ""
msgid "Create"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:110
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:110
#, elixir-autogen, elixir-format
msgid "Change Language"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:136
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:136
#, elixir-autogen, elixir-format
msgid "Change language"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:55
+#: lib/cannery_web/live/pack_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "View in Catalog"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:78
-#: lib/cannery_web/live/pack_live/index.html.heex:144
-#: lib/cannery_web/live/pack_live/show.html.heex:89
+#: lib/cannery_web/components/move_pack_component.ex:77
+#: lib/cannery_web/live/pack_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.html.heex:86
#, elixir-autogen, elixir-format
msgid "Move ammo"
msgstr ""
@@ -221,19 +221,19 @@ msgstr ""
msgid "Set Unlimited"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:85
+#: lib/cannery_web/live/pack_live/show.html.heex:82
#: lib/cannery_web/live/range_live/index.html.heex:38
#, elixir-autogen, elixir-format
msgid "Stage for range"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:84
+#: lib/cannery_web/live/pack_live/show.html.heex:81
#: lib/cannery_web/live/range_live/index.html.heex:37
#, elixir-autogen, elixir-format
msgid "Unstage from range"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:150
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:146
#, elixir-autogen, elixir-format
msgid "Export Data as JSON"
msgstr ""
@@ -299,37 +299,37 @@ msgstr ""
msgid "Unstage"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:174
+#: lib/cannery_web/live/pack_live/index.html.heex:168
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:189
-#: lib/cannery_web/live/pack_live/show.html.heex:74
+#: lib/cannery_web/live/pack_live/index.html.heex:183
+#: lib/cannery_web/live/pack_live/show.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:164
-#: lib/cannery_web/live/pack_live/show.html.heex:62
+#: lib/cannery_web/live/pack_live/index.html.heex:158
+#: lib/cannery_web/live/pack_live/show.html.heex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:154
-#: lib/cannery_web/live/type_live/show.html.heex:204
+#: lib/cannery_web/live/pack_live/index.html.heex:148
+#: lib/cannery_web/live/type_live/show.html.heex:201
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:160
-#: lib/cannery_web/live/range_live/index.html.heex:155
+#: lib/cannery_web/live/pack_live/show.ex:159
+#: lib/cannery_web/live/range_live/index.html.heex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:145
-#: lib/cannery_web/live/range_live/index.html.heex:138
+#: lib/cannery_web/live/pack_live/show.ex:144
+#: lib/cannery_web/live/range_live/index.html.heex:135
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
diff --git a/priv/gettext/ga/LC_MESSAGES/default.po b/priv/gettext/ga/LC_MESSAGES/default.po
index 43f9a5e1..0b83c28f 100644
--- a/priv/gettext/ga/LC_MESSAGES/default.po
+++ b/priv/gettext/ga/LC_MESSAGES/default.po
@@ -27,7 +27,7 @@ msgstr ""
msgid "Admins:"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:58
+#: lib/cannery_web/components/core_components/topbar.html.heex:43
#: lib/cannery_web/components/shot_record_table_component.ex:44
#: lib/cannery_web/live/pack_live/index.ex:75
#: lib/cannery_web/live/pack_live/index.ex:84
@@ -82,14 +82,14 @@ msgstr ""
msgid "Case material"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:65
+#: lib/cannery_web/components/move_pack_component.ex:64
#: lib/cannery_web/components/pack_table_component.ex:76
#: lib/cannery_web/live/pack_live/form_component.html.heex:66
#, elixir-autogen, elixir-format
msgid "Container"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:42
+#: lib/cannery_web/components/core_components/topbar.html.heex:33
#: lib/cannery_web/live/container_live/index.ex:45
#: lib/cannery_web/live/container_live/index.ex:54
#: lib/cannery_web/live/container_live/index.html.heex:3
@@ -175,20 +175,20 @@ msgstr ""
msgid "Invite Only"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:74
+#: lib/cannery_web/components/core_components/topbar.html.heex:53
#: lib/cannery_web/live/invite_live/index.ex:31
#: lib/cannery_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Invites"
msgstr ""
-#: lib/cannery_web/templates/user_session/new.html.heex:23
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47
-#: lib/cannery_web/components/move_pack_component.ex:67
+#: lib/cannery_web/components/move_pack_component.ex:66
#: lib/cannery_web/live/container_live/form_component.html.heex:47
#, elixir-autogen, elixir-format
msgid "Location"
@@ -279,7 +279,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
#: lib/cannery_web/components/shot_record_table_component.ex:46
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
-#: lib/cannery_web/live/pack_live/show.ex:91
+#: lib/cannery_web/live/pack_live/show.ex:90
#: lib/cannery_web/live/range_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
msgid "Notes"
@@ -335,7 +335,7 @@ msgid "Self-host your own instance, or use an instance from someone you trust."
msgstr ""
#: lib/cannery_web/controllers/user_settings_controller.ex:10
-#: lib/cannery_web/templates/user_settings/edit.html.heex:3
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr ""
@@ -350,13 +350,13 @@ msgstr ""
msgid "Steel"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:106
+#: lib/cannery_web/live/pack_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Stored in"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:66
-#: lib/cannery_web/components/core_components/topbar.html.heex:34
+#: lib/cannery_web/components/core_components/topbar.html.heex:28
#: lib/cannery_web/live/tag_live/index.ex:43
#: lib/cannery_web/live/tag_live/index.ex:53
#: lib/cannery_web/live/tag_live/index.html.heex:3
@@ -386,7 +386,7 @@ msgid "Tracer"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48
-#: lib/cannery_web/components/move_pack_component.ex:66
+#: lib/cannery_web/components/move_pack_component.ex:65
#: lib/cannery_web/components/pack_table_component.ex:108
#: lib/cannery_web/live/container_live/form_component.html.heex:39
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
@@ -420,7 +420,7 @@ msgstr ""
msgid "No tags for this container"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:66
+#: lib/cannery_web/components/core_components/topbar.html.heex:48
#: lib/cannery_web/components/pack_table_component.ex:80
#, elixir-autogen, elixir-format
msgid "Range"
@@ -433,7 +433,7 @@ msgstr ""
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
#: lib/cannery_web/components/shot_record_table_component.ex:47
-#: lib/cannery_web/live/pack_live/show.ex:92
+#: lib/cannery_web/live/pack_live/show.ex:91
#: lib/cannery_web/live/range_live/form_component.html.heex:41
#, elixir-autogen, elixir-format
msgid "Date"
@@ -455,26 +455,26 @@ msgstr ""
msgid "Record shots"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:48
+#: lib/cannery_web/live/range_live/index.ex:47
#, elixir-autogen, elixir-format
msgid "New Shot Records"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:55
-#: lib/cannery_web/live/range_live/index.html.heex:122
+#: lib/cannery_web/live/range_live/index.html.heex:52
+#: lib/cannery_web/live/range_live/index.html.heex:119
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr ""
#: lib/cannery_web/components/shot_record_table_component.ex:45
-#: lib/cannery_web/live/pack_live/show.ex:90
-#: lib/cannery_web/live/range_live/index.html.heex:69
+#: lib/cannery_web/live/pack_live/show.ex:89
+#: lib/cannery_web/live/range_live/index.html.heex:66
#, elixir-autogen, elixir-format
msgid "Rounds shot"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:56
-#: lib/cannery_web/live/range_live/index.ex:66
+#: lib/cannery_web/live/range_live/index.ex:55
+#: lib/cannery_web/live/range_live/index.ex:65
#, elixir-autogen, elixir-format
msgid "Shot Records"
msgstr ""
@@ -484,12 +484,12 @@ msgstr ""
msgid "Move ammo"
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:83
+#: lib/cannery_web/components/move_pack_component.ex:82
#, elixir-autogen, elixir-format
msgid "No other containers"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:60
+#: lib/cannery_web/live/range_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "Shot log"
msgstr ""
@@ -540,20 +540,20 @@ msgstr ""
msgid "UPC"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:20
-#: lib/cannery_web/templates/user_settings/edit.html.heex:76
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:20
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "Confirm new password"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:31
-#: lib/cannery_web/templates/user_settings/edit.html.heex:85
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:31
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "Current password"
msgstr ""
-#: lib/cannery_web/templates/user_reset_password/edit.html.heex:16
-#: lib/cannery_web/templates/user_settings/edit.html.heex:69
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:16
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "New password"
msgstr ""
@@ -564,19 +564,19 @@ msgstr ""
msgid "Firing type"
msgstr ""
-#: lib/cannery_web/templates/layout/live.html.heex:43
+#: lib/cannery_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:28
-#: lib/cannery_web/live/container_live/show.ex:120
+#: lib/cannery_web/live/container_live/show.ex:116
#, 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:121
+#: lib/cannery_web/live/container_live/show.ex:117
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
msgid "Percentage left:"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:119
+#: lib/cannery_web/live/pack_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "Rounds used"
msgstr ""
@@ -641,18 +641,18 @@ msgstr ""
msgid "Log in"
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:33
+#: lib/cannery_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format
msgid "Register"
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:36
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:35
#, elixir-autogen, elixir-format
msgid "Reset your password"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:41
-#: lib/cannery_web/live/range_live/index.ex:32
+#: lib/cannery_web/live/pack_live/show.ex:40
+#: lib/cannery_web/live/range_live/index.ex:31
#, elixir-autogen, elixir-format
msgid "Record Shots"
msgstr ""
@@ -667,23 +667,23 @@ msgstr ""
msgid "Added on:"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:32
-#: lib/cannery_web/templates/user_settings/edit.html.heex:127
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
#, elixir-autogen, elixir-format
msgid "English"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:129
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
#, elixir-autogen, elixir-format
msgid "French"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:128
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "German"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:28
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "Language"
msgstr ""
@@ -708,7 +708,7 @@ msgstr ""
msgid "View the source code"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:50
+#: lib/cannery_web/components/core_components/topbar.html.heex:38
#: lib/cannery_web/live/type_live/index.ex:52
#: lib/cannery_web/live/type_live/index.ex:62
#: lib/cannery_web/live/type_live/index.html.heex:3
@@ -716,27 +716,27 @@ msgstr ""
msgid "Catalog"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:45
+#: lib/cannery_web/live/pack_live/show.ex:44
#, elixir-autogen, elixir-format
msgid "Edit Ammo"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:43
+#: lib/cannery_web/live/pack_live/show.ex:42
#, elixir-autogen, elixir-format
msgid "Move Ammo"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:123
+#: lib/cannery_web/live/container_live/show.html.heex:117
#, elixir-autogen, elixir-format
msgid "No ammo in this container"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:44
+#: lib/cannery_web/live/pack_live/show.ex:43
#, elixir-autogen, elixir-format
msgid "Show Ammo"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.html.heex:111
+#: lib/cannery_web/live/pack_live/show.html.heex:105
#, elixir-autogen, elixir-format
msgid "This ammo is not in a container"
msgstr ""
@@ -748,7 +748,7 @@ msgstr ""
msgid "Packs:"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:10
+#: lib/cannery_web/components/core_components/topbar.html.heex:7
#: lib/cannery_web/live/home_live.html.heex:4
#, elixir-autogen, elixir-format
msgid "Cannery logo"
@@ -782,7 +782,7 @@ msgstr ""
msgid "%{percentage}%"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:154
+#: lib/cannery_web/live/range_live/index.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot: %{count}"
msgstr ""
@@ -800,7 +800,7 @@ msgid "Rounds"
msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:40
-#: lib/cannery_web/live/container_live/show.html.heex:115
+#: lib/cannery_web/live/container_live/show.html.heex:109
#: lib/cannery_web/live/type_live/show.html.heex:170
#, elixir-autogen, elixir-format
msgid "View as table"
@@ -846,102 +846,102 @@ msgstr ""
msgid "Used rounds:"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:71
+#: lib/cannery_web/live/range_live/index.html.heex:68
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds shot chart"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:154
+#: lib/cannery_web/live/type_live/show.ex:153
#, elixir-autogen, elixir-format, fuzzy
msgid "Blank:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:132
+#: lib/cannery_web/live/type_live/show.ex:131
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet core:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:131
+#: lib/cannery_web/live/type_live/show.ex:130
#, elixir-autogen, elixir-format, fuzzy
msgid "Bullet type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format, fuzzy
msgid "Caliber:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:121
+#: lib/cannery_web/live/type_live/show.ex:120
#, elixir-autogen, elixir-format, fuzzy
msgid "Cartridge:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:134
+#: lib/cannery_web/live/type_live/show.ex:133
#, elixir-autogen, elixir-format, fuzzy
msgid "Case material:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:155
+#: lib/cannery_web/live/type_live/show.ex:154
#, elixir-autogen, elixir-format, fuzzy
msgid "Corrosive:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:151
+#: lib/cannery_web/live/type_live/show.ex:150
#, elixir-autogen, elixir-format, fuzzy
msgid "Firing type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:130
+#: lib/cannery_web/live/type_live/show.ex:129
#, elixir-autogen, elixir-format, fuzzy
msgid "Grains:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:153
+#: lib/cannery_web/live/type_live/show.ex:152
#, elixir-autogen, elixir-format, fuzzy
msgid "Incendiary:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:133
+#: lib/cannery_web/live/type_live/show.ex:132
#, elixir-autogen, elixir-format, fuzzy
msgid "Jacket type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:156
+#: lib/cannery_web/live/type_live/show.ex:155
#, elixir-autogen, elixir-format, fuzzy
msgid "Manufacturer:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:149
+#: lib/cannery_web/live/type_live/show.ex:148
#, elixir-autogen, elixir-format, fuzzy
msgid "Muzzle velocity:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:143
+#: lib/cannery_web/live/type_live/show.ex:142
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder grains per charge:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:141
+#: lib/cannery_web/live/type_live/show.ex:140
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:147
+#: lib/cannery_web/live/type_live/show.ex:146
#, elixir-autogen, elixir-format, fuzzy
msgid "Pressure:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:150
+#: lib/cannery_web/live/type_live/show.ex:149
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer type:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:152
+#: lib/cannery_web/live/type_live/show.ex:151
#, elixir-autogen, elixir-format, fuzzy
msgid "Tracer:"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:157
+#: lib/cannery_web/live/type_live/show.ex:156
#, elixir-autogen, elixir-format, fuzzy
msgid "UPC:"
msgstr ""
@@ -978,7 +978,7 @@ msgstr ""
msgid "Original Count:"
msgstr ""
-#: lib/cannery_web/live/home_live.ex:15
+#: lib/cannery_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "Home"
msgstr ""
@@ -1035,20 +1035,20 @@ msgstr ""
msgid "Search tags"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:115
+#: lib/cannery_web/live/range_live/index.html.heex:112
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:130
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "Spanish"
msgstr ""
-#: lib/cannery_web/templates/error/error.html.heex:8
-#: lib/cannery_web/templates/layout/root.html.heex:13
-#: lib/cannery_web/templates/layout/root.html.heex:14
-#: lib/cannery_web/views/layout_view.ex:14
+#: lib/cannery_web/components/layouts.ex:15
+#: lib/cannery_web/components/layouts/root.html.heex:9
+#: lib/cannery_web/components/layouts/root.html.heex:10
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
msgstr ""
@@ -1087,7 +1087,7 @@ msgstr ""
msgid "Cannery lets you easily keep an eye on your ammo levels before and after range day"
msgstr ""
-#: lib/cannery_web/views/layout_view.ex:10
+#: lib/cannery_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "Cannery | %{title}"
msgstr ""
@@ -1127,17 +1127,17 @@ msgstr ""
msgid "Uses: %{uses_count}"
msgstr ""
-#: lib/cannery_web/templates/user_confirmation/new.html.heex:13
-#: lib/cannery_web/templates/user_registration/new.html.heex:20
-#: lib/cannery_web/templates/user_reset_password/new.html.heex:13
-#: lib/cannery_web/templates/user_session/new.html.heex:17
-#: lib/cannery_web/templates/user_settings/edit.html.heex:27
+#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:20
+#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:17
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
-#: lib/cannery_web/templates/user_registration/new.html.heex:24
-#: lib/cannery_web/templates/user_session/new.html.heex:20
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:24
+#: lib/cannery_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "Password"
msgstr ""
@@ -1174,21 +1174,21 @@ msgid "Really great weather"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:67
-#: lib/cannery_web/components/move_pack_component.ex:68
+#: lib/cannery_web/components/move_pack_component.ex:67
#: lib/cannery_web/components/pack_table_component.ex:62
#: lib/cannery_web/components/shot_record_table_component.ex:48
#: lib/cannery_web/components/type_table_component.ex:99
-#: lib/cannery_web/live/pack_live/show.ex:93
+#: lib/cannery_web/live/pack_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:105
+#: lib/cannery_web/components/core_components/topbar.html.heex:81
#, elixir-autogen, elixir-format
msgid "Live Dashboard"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:90
+#: lib/cannery_web/components/core_components/topbar.html.heex:66
#, elixir-autogen, elixir-format
msgid "Log out"
msgstr ""
@@ -1204,9 +1204,9 @@ msgstr ""
msgid "Close modal"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:103
+#: lib/cannery_web/live/container_live/show.html.heex:97
#: lib/cannery_web/live/pack_live/index.html.heex:58
-#: lib/cannery_web/live/range_live/index.html.heex:92
+#: lib/cannery_web/live/range_live/index.html.heex:89
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
@@ -1223,7 +1223,7 @@ msgstr ""
msgid "Brass height"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:128
+#: lib/cannery_web/live/type_live/show.ex:127
#, elixir-autogen, elixir-format
msgid "Brass height:"
msgstr ""
@@ -1234,7 +1234,7 @@ msgstr ""
msgid "Chamber size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:129
+#: lib/cannery_web/live/type_live/show.ex:128
#, elixir-autogen, elixir-format
msgid "Chamber size:"
msgstr ""
@@ -1250,7 +1250,7 @@ msgstr ""
msgid "Dram equivalent"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:148
+#: lib/cannery_web/live/type_live/show.ex:147
#, elixir-autogen, elixir-format
msgid "Dram equivalent:"
msgstr ""
@@ -1261,7 +1261,7 @@ msgstr ""
msgid "Gauge"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:123
+#: lib/cannery_web/live/type_live/show.ex:122
#, elixir-autogen, elixir-format
msgid "Gauge:"
msgstr ""
@@ -1272,7 +1272,7 @@ msgstr ""
msgid "Load grains"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:139
+#: lib/cannery_web/live/type_live/show.ex:138
#, elixir-autogen, elixir-format
msgid "Load grains:"
msgstr ""
@@ -1287,9 +1287,9 @@ msgstr ""
msgid "None specified"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:106
+#: lib/cannery_web/live/container_live/show.html.heex:100
#: lib/cannery_web/live/pack_live/index.html.heex:61
-#: lib/cannery_web/live/range_live/index.html.heex:95
+#: lib/cannery_web/live/range_live/index.html.heex:92
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:56
@@ -1312,9 +1312,9 @@ msgstr ""
msgid "Projectile"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:104
+#: lib/cannery_web/live/container_live/show.html.heex:98
#: lib/cannery_web/live/pack_live/index.html.heex:59
-#: lib/cannery_web/live/range_live/index.html.heex:93
+#: lib/cannery_web/live/range_live/index.html.heex:90
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:54
@@ -1328,7 +1328,7 @@ msgstr ""
msgid "Shot charge weight"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:140
+#: lib/cannery_web/live/type_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Shot charge weight:"
msgstr ""
@@ -1339,7 +1339,7 @@ msgstr ""
msgid "Shot material"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:137
+#: lib/cannery_web/live/type_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Shot material:"
msgstr ""
@@ -1350,7 +1350,7 @@ msgstr ""
msgid "Shot size"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:138
+#: lib/cannery_web/live/type_live/show.ex:137
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size:"
msgstr ""
@@ -1361,14 +1361,14 @@ msgstr ""
msgid "Shot type"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:136
+#: lib/cannery_web/live/type_live/show.ex:135
#, elixir-autogen, elixir-format
msgid "Shot type:"
msgstr ""
-#: lib/cannery_web/live/container_live/show.html.heex:105
+#: lib/cannery_web/live/container_live/show.html.heex:99
#: lib/cannery_web/live/pack_live/index.html.heex:60
-#: lib/cannery_web/live/range_live/index.html.heex:94
+#: lib/cannery_web/live/range_live/index.html.heex:91
#: lib/cannery_web/live/type_live/form_component.html.heex:25
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:52
@@ -1387,7 +1387,7 @@ msgstr ""
msgid "Target, bird, buck, etc"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:127
+#: lib/cannery_web/live/type_live/show.ex:126
#, elixir-autogen, elixir-format
msgid "Unfired length:"
msgstr ""
@@ -1404,15 +1404,15 @@ msgstr ""
msgid "Wadding"
msgstr ""
-#: lib/cannery_web/live/type_live/show.ex:135
+#: lib/cannery_web/live/type_live/show.ex:134
#, elixir-autogen, elixir-format
msgid "Wadding:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:149
-#: lib/cannery_web/live/container_live/show.html.heex:97
+#: lib/cannery_web/live/container_live/show.html.heex:91
#: lib/cannery_web/live/pack_live/index.html.heex:50
-#: lib/cannery_web/live/range_live/index.html.heex:86
+#: lib/cannery_web/live/range_live/index.html.heex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:21
#: lib/cannery_web/live/type_live/index.html.heex:29
#: lib/cannery_web/live/type_live/show.html.heex:46
@@ -1431,14 +1431,14 @@ msgstr ""
msgid "Used up!"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:42
-#: lib/cannery_web/live/range_live/index.ex:40
+#: lib/cannery_web/live/pack_live/show.ex:41
+#: lib/cannery_web/live/range_live/index.ex:39
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit Shot Record"
msgstr ""
#: lib/cannery_web/live/type_live/index.ex:28
-#: lib/cannery_web/live/type_live/show.ex:82
+#: lib/cannery_web/live/type_live/show.ex:81
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr ""
diff --git a/priv/gettext/ga/LC_MESSAGES/emails.po b/priv/gettext/ga/LC_MESSAGES/emails.po
index 16289be6..646ac62b 100644
--- a/priv/gettext/ga/LC_MESSAGES/emails.po
+++ b/priv/gettext/ga/LC_MESSAGES/emails.po
@@ -15,45 +15,45 @@ msgstr ""
"n>6 && n<11) ? 3 : 4;\n"
"X-Generator: Weblate 4.16.2\n"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:3
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:2
-#: lib/cannery_web/templates/email/reset_password.html.heex:3
-#: lib/cannery_web/templates/email/reset_password.txt.eex:2
-#: lib/cannery_web/templates/email/update_email.html.heex:3
-#: lib/cannery_web/templates/email/update_email.txt.eex:2
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:3
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:2
+#: lib/cannery_web/components/email_html/reset_password.html.heex:3
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:2
+#: lib/cannery_web/components/email_html/update_email.html.heex:3
+#: lib/cannery_web/components/email_html/update_email.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr "Fáilte %{email},"
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:10
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
"Murar chruthaigh sibh cuntas ag %{url}, déan neamhaird de seo le bhur dtoil."
-#: lib/cannery_web/templates/email/reset_password.txt.eex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
"Murar iarr tú an t-athrú seo ó %{url}, déan neamhaird de seo le do thoil."
-#: lib/cannery_web/templates/email/update_email.html.heex:8
-#: lib/cannery_web/templates/email/update_email.txt.eex:4
+#: lib/cannery_web/components/email_html/update_email.html.heex:8
+#: lib/cannery_web/components/email_html/update_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
"Is féidir leat do rÃomhphost a athrú ach cuairt a thabhairt ar an URL thÃos:"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:14
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:6
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:14
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
"Is féidir leat do chuntas a dhearbhú ach cuairt a thabhairt ar an URL thÃos:"
-#: lib/cannery_web/templates/email/reset_password.html.heex:8
-#: lib/cannery_web/templates/email/reset_password.txt.eex:4
+#: lib/cannery_web/components/email_html/reset_password.html.heex:8
+#: lib/cannery_web/components/email_html/reset_password.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
@@ -69,48 +69,48 @@ msgstr ""
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
-#: lib/cannery/accounts/email.ex:30
+#: lib/cannery/accounts/email.ex:31
#, elixir-autogen, elixir-format
msgid "Confirm your Cannery account"
msgstr "Deimhnigh do chuntas Cannery"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:22
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at Cannery, please ignore this."
msgstr "Murar chruthaigh tú cuntas ag Cannery, déan neamhaird de seo."
-#: lib/cannery_web/templates/email/reset_password.html.heex:16
-#: lib/cannery_web/templates/email/update_email.html.heex:16
+#: lib/cannery_web/components/email_html/reset_password.html.heex:16
+#: lib/cannery_web/components/email_html/update_email.html.heex:16
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from Cannery, please ignore this."
msgstr "Murar iarr tú an t-athrú seo ó Cannery, déan neamhaird de."
-#: lib/cannery/accounts/email.ex:37
+#: lib/cannery/accounts/email.ex:38
#, elixir-autogen, elixir-format
msgid "Reset your Cannery password"
msgstr "Athshocraigh do phasfhocal Cannery"
-#: lib/cannery_web/templates/layout/email.txt.eex:9
+#: lib/cannery_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery at %{url}, the self-hosted firearm tracker website."
msgstr ""
"Seoladh an rÃomhphost seo ó Cannery ag %{url}, an suÃomh Gréasáin féin-"
"óstáilte rianaithe airm tine."
-#: lib/cannery_web/templates/layout/email.html.heex:13
+#: lib/cannery_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
msgstr ""
"Tá an rÃomhphost seo ó Cannery, an suÃomh Gréasáin féin-óstáilte rianaithe "
"airm tine."
-#: lib/cannery/accounts/email.ex:44
+#: lib/cannery/accounts/email.ex:45
#, elixir-autogen, elixir-format
msgid "Update your Cannery email"
msgstr "Nuashonraigh do rÃomhphost Cannery"
-#: lib/cannery_web/templates/email/confirm_email.html.heex:9
-#: lib/cannery_web/templates/email/confirm_email.txt.eex:4
+#: lib/cannery_web/components/email_html/confirm_email.html.heex:9
+#: lib/cannery_web/components/email_html/confirm_email.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to Cannery"
msgstr "Fáilte go Cannery"
diff --git a/priv/gettext/ga/LC_MESSAGES/errors.po b/priv/gettext/ga/LC_MESSAGES/errors.po
index 4e44bd3e..7d41f744 100644
--- a/priv/gettext/ga/LC_MESSAGES/errors.po
+++ b/priv/gettext/ga/LC_MESSAGES/errors.po
@@ -30,7 +30,7 @@ msgid "Container must be empty before deleting"
msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh"
#: lib/cannery_web/live/container_live/index.ex:86
-#: lib/cannery_web/live/container_live/show.ex:71
+#: lib/cannery_web/live/container_live/show.ex:67
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "NÃ feidir %{name} a scriosadh: %{error}"
@@ -45,57 +45,53 @@ msgstr "Nà feidir an coimeádán sin a fáil"
msgid "Email change link is invalid or it has expired."
msgstr "Tá an nasc chun an seoladh email a athrú neamhbhailà nó as dáta."
-#: lib/cannery_web/templates/error/error.html.heex:8
+#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr "Fadhb"
-#: lib/cannery_web/templates/error/error.html.heex:31
+#: lib/cannery_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "Go back home"
msgstr "Dul abhaile"
-#: lib/cannery_web/views/error_view.ex:10
-#, elixir-autogen, elixir-format
-msgid "Internal Server Error"
-msgstr "Fadhb freastalaà inmhéanach"
-
#: lib/cannery_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr "Seoladh email nó pasfhocal neamhbhailÃ"
-#: lib/cannery_web/views/error_view.ex:8
+#: lib/cannery_web/controllers/error_html.ex:9
+#: lib/cannery_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "Not found"
msgstr "Nà feidir é a fáil"
+#: lib/cannery_web/controllers/user_registration_html/new.html.heex:13
+#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:13
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:22
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:64
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:118
#: lib/cannery_web/live/type_live/form_component.html.heex:18
-#: 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
-#: lib/cannery_web/templates/user_settings/edit.html.heex:64
-#: lib/cannery_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
"Ta brón orainn, tá fadbh againn! Le bhur dtoil feach ar na botún seo a "
"leanais."
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:63
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:62
#, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired."
msgstr "Tá nasc an pasfhocail a athrú neamhbailà nó as dáta."
-#: lib/cannery_web/controllers/user_registration_controller.ex:23
-#: lib/cannery_web/controllers/user_registration_controller.ex:52
+#: lib/cannery_web/controllers/user_registration_controller.ex:22
+#: lib/cannery_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr "Tá brón orainn, tá clarú póiblà bactha"
-#: lib/cannery_web/controllers/user_registration_controller.ex:13
-#: lib/cannery_web/controllers/user_registration_controller.ex:42
-#: lib/cannery_web/controllers/user_registration_controller.ex:71
+#: lib/cannery_web/controllers/user_registration_controller.ex:12
+#: lib/cannery_web/controllers/user_registration_controller.ex:41
+#: lib/cannery_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr "Tá brón orainn, nà feidir an cuireadh seo a fáil nó tá sé as dáta"
@@ -105,17 +101,18 @@ msgstr "Tá brón orainn, nà feidir an cuireadh seo a fáil nó tá sé as dát
msgid "Unable to delete user"
msgstr "Nà feidir an úsáideoir a scriosadh"
-#: lib/cannery_web/views/error_view.ex:9
+#: lib/cannery_web/controllers/error_html.ex:10
+#: lib/cannery_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "Unauthorized"
msgstr "NÃl cead agaibh"
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:54
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr "Tá nasc an úsáideoir a deimhnigh neamhbailà nó as dáta."
-#: lib/cannery_web/controllers/user_auth.ex:177
+#: lib/cannery_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr "NÃl cead agaibh féachaint ar an leathanach seo."
@@ -140,7 +137,7 @@ msgstr ""
msgid "must have the @ sign and no spaces"
msgstr ""
-#: lib/cannery_web/live/container_live/show.ex:46
+#: lib/cannery_web/live/container_live/show.ex:45
#, elixir-autogen, elixir-format
msgid "Tag not found"
msgstr ""
@@ -150,8 +147,8 @@ msgstr ""
msgid "Tag could not be added"
msgstr ""
-#: lib/cannery_web/controllers/user_auth.ex:39
-#: lib/cannery_web/controllers/user_auth.ex:161
+#: lib/cannery_web/controllers/user_auth.ex:38
+#: lib/cannery_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@@ -176,7 +173,7 @@ msgstr ""
msgid "Invalid multiplier"
msgstr ""
-#: lib/cannery_web/live/range_live/index.html.heex:74
+#: lib/cannery_web/live/range_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Your browser does not support the canvas element."
msgstr ""
@@ -210,3 +207,19 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "Please select a type and container"
msgstr ""
+
+#: lib/cannery_web/controllers/error_html.ex:11
+#: lib/cannery_web/controllers/error_json.ex:9
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Internal server error"
+msgstr "Fadhb freastalaà inmhéanach"
+
+#: lib/cannery_web/controllers/user_auth.ex:195
+#, elixir-autogen, elixir-format
+msgid "You must log in as an administrator to access this page."
+msgstr ""
+
+#: lib/cannery_web/controllers/user_auth.ex:178
+#, elixir-autogen, elixir-format
+msgid "You must log in to access this page."
+msgstr ""
diff --git a/priv/gettext/ga/LC_MESSAGES/prompts.po b/priv/gettext/ga/LC_MESSAGES/prompts.po
index 91f9ed46..04eb6ea5 100644
--- a/priv/gettext/ga/LC_MESSAGES/prompts.po
+++ b/priv/gettext/ga/LC_MESSAGES/prompts.po
@@ -31,13 +31,13 @@ msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:65
#: lib/cannery_web/live/type_live/index.ex:72
-#: lib/cannery_web/live/type_live/show.ex:27
+#: lib/cannery_web/live/type_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:79
-#: lib/cannery_web/live/container_live/show.ex:61
+#: lib/cannery_web/live/container_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
msgstr ""
@@ -69,18 +69,18 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:187
-#: lib/cannery_web/live/pack_live/show.html.heex:72
+#: lib/cannery_web/live/pack_live/index.html.heex:181
+#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:157
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:153
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/components/core_components/topbar.html.heex:65
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr ""
@@ -105,7 +105,7 @@ msgstr ""
msgid "Logged out successfully."
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:45
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr ""
@@ -115,7 +115,7 @@ msgstr ""
msgid "Password updated successfully."
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:66
+#: lib/cannery_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Please check your email to verify your account"
msgstr ""
@@ -146,7 +146,7 @@ msgstr ""
msgid "%{name} added successfully"
msgstr ""
-#: lib/cannery_web/live/container_live/show.ex:38
+#: lib/cannery_web/live/container_live/show.ex:37
#, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}"
msgstr ""
@@ -166,14 +166,14 @@ msgstr ""
msgid "Are you sure you want to unstage this ammo?"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:158
-#: lib/cannery_web/live/range_live/index.html.heex:152
+#: lib/cannery_web/live/pack_live/show.ex:157
+#: lib/cannery_web/live/range_live/index.html.heex:149
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:80
-#: lib/cannery_web/live/range_live/index.ex:79
+#: lib/cannery_web/live/pack_live/show.ex:79
+#: lib/cannery_web/live/range_live/index.ex:78
#, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully"
msgstr ""
@@ -183,12 +183,12 @@ msgstr ""
msgid "Shot records updated successfully"
msgstr ""
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:52
+#: lib/cannery_web/components/move_pack_component.ex:51
#, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully"
msgstr ""
@@ -214,7 +214,7 @@ msgstr ""
msgid "Creating..."
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:138
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr ""
@@ -225,12 +225,12 @@ msgid "Language updated successfully."
msgstr ""
#: lib/cannery_web/live/pack_live/index.ex:94
-#: lib/cannery_web/live/pack_live/show.ex:55
+#: lib/cannery_web/live/pack_live/show.ex:54
#, elixir-autogen, elixir-format
msgid "Ammo deleted succesfully"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:92
+#: lib/cannery_web/live/range_live/index.ex:91
#, elixir-autogen, elixir-format
msgid "Ammo unstaged succesfully"
msgstr ""
diff --git a/priv/gettext/prompts.pot b/priv/gettext/prompts.pot
index 5f8260ff..a7a304ac 100644
--- a/priv/gettext/prompts.pot
+++ b/priv/gettext/prompts.pot
@@ -20,13 +20,13 @@ msgstr ""
#: lib/cannery_web/live/tag_live/index.ex:65
#: lib/cannery_web/live/type_live/index.ex:72
-#: lib/cannery_web/live/type_live/show.ex:27
+#: lib/cannery_web/live/type_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "%{name} deleted succesfully"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:79
-#: lib/cannery_web/live/container_live/show.ex:61
+#: lib/cannery_web/live/container_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
msgstr ""
@@ -58,18 +58,18 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?"
msgstr ""
-#: lib/cannery_web/live/pack_live/index.html.heex:187
-#: lib/cannery_web/live/pack_live/show.html.heex:72
+#: lib/cannery_web/live/pack_live/index.html.heex:181
+#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:157
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:153
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete your account?"
msgstr ""
-#: lib/cannery_web/components/core_components/topbar.html.heex:89
+#: lib/cannery_web/components/core_components/topbar.html.heex:65
#, elixir-autogen, elixir-format
msgid "Are you sure you want to log out?"
msgstr ""
@@ -94,7 +94,7 @@ msgstr ""
msgid "Logged out successfully."
msgstr ""
-#: lib/cannery_web/controllers/user_reset_password_controller.ex:46
+#: lib/cannery_web/controllers/user_reset_password_controller.ex:45
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr ""
@@ -104,7 +104,7 @@ msgstr ""
msgid "Password updated successfully."
msgstr ""
-#: lib/cannery_web/controllers/user_registration_controller.ex:66
+#: lib/cannery_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "Please check your email to verify your account"
msgstr ""
@@ -135,7 +135,7 @@ msgstr ""
msgid "%{name} added successfully"
msgstr ""
-#: lib/cannery_web/live/container_live/show.ex:38
+#: lib/cannery_web/live/container_live/show.ex:37
#, elixir-autogen, elixir-format
msgid "%{tag_name} has been removed from %{container_name}"
msgstr ""
@@ -155,14 +155,14 @@ msgstr ""
msgid "Are you sure you want to unstage this ammo?"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:158
-#: lib/cannery_web/live/range_live/index.html.heex:152
+#: lib/cannery_web/live/pack_live/show.ex:157
+#: lib/cannery_web/live/range_live/index.html.heex:149
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?"
msgstr ""
-#: lib/cannery_web/live/pack_live/show.ex:80
-#: lib/cannery_web/live/range_live/index.ex:79
+#: lib/cannery_web/live/pack_live/show.ex:79
+#: lib/cannery_web/live/range_live/index.ex:78
#, elixir-autogen, elixir-format
msgid "Shot records deleted succesfully"
msgstr ""
@@ -172,12 +172,12 @@ msgstr ""
msgid "Shot records updated successfully"
msgstr ""
-#: lib/cannery_web/controllers/user_confirmation_controller.ex:38
+#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr ""
-#: lib/cannery_web/components/move_pack_component.ex:52
+#: lib/cannery_web/components/move_pack_component.ex:51
#, elixir-autogen, elixir-format
msgid "Ammo moved to %{name} successfully"
msgstr ""
@@ -203,7 +203,7 @@ msgstr ""
msgid "Creating..."
msgstr ""
-#: lib/cannery_web/templates/user_settings/edit.html.heex:138
+#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "Are you sure you want to change your language?"
msgstr ""
@@ -214,12 +214,12 @@ msgid "Language updated successfully."
msgstr ""
#: lib/cannery_web/live/pack_live/index.ex:94
-#: lib/cannery_web/live/pack_live/show.ex:55
+#: lib/cannery_web/live/pack_live/show.ex:54
#, elixir-autogen, elixir-format
msgid "Ammo deleted succesfully"
msgstr ""
-#: lib/cannery_web/live/range_live/index.ex:92
+#: lib/cannery_web/live/range_live/index.ex:91
#, elixir-autogen, elixir-format
msgid "Ammo unstaged succesfully"
msgstr ""
diff --git a/test/cannery/accounts_test.exs b/test/cannery/accounts_test.exs
index 6fc82e62..0f267427 100644
--- a/test/cannery/accounts_test.exs
+++ b/test/cannery/accounts_test.exs
@@ -362,11 +362,11 @@ defmodule Cannery.AccountsTest do
end
end
- describe "delete_session_token/1" do
+ describe "delete_user_session_token/1" do
test "deletes the token" do
user = user_fixture()
token = Accounts.generate_user_session_token(user)
- assert Accounts.delete_session_token(token) == :ok
+ assert Accounts.delete_user_session_token(token) == :ok
refute Accounts.get_user_by_session_token(token)
end
end
diff --git a/test/cannery_web/controllers/error_html_test.exs b/test/cannery_web/controllers/error_html_test.exs
new file mode 100644
index 00000000..7dc5fef2
--- /dev/null
+++ b/test/cannery_web/controllers/error_html_test.exs
@@ -0,0 +1,14 @@
+defmodule CanneryWeb.ErrorHTMLTest do
+ use CanneryWeb.ConnCase, async: true
+ # Bring render_to_string/4 for testing custom views
+ import Phoenix.Template
+ alias CanneryWeb.ErrorHTML
+
+ test "renders 404.html" do
+ assert render_to_string(ErrorHTML, "404", "html", []) =~ "Not found"
+ end
+
+ test "renders 500.html" do
+ assert render_to_string(ErrorHTML, "500", "html", []) =~ "Internal server error"
+ end
+end
diff --git a/test/cannery_web/controllers/error_json_test.exs b/test/cannery_web/controllers/error_json_test.exs
new file mode 100644
index 00000000..1506e2b3
--- /dev/null
+++ b/test/cannery_web/controllers/error_json_test.exs
@@ -0,0 +1,12 @@
+defmodule CanneryWeb.ErrorJSONTest do
+ use CanneryWeb.ConnCase, async: true
+ alias CanneryWeb.ErrorJSON
+
+ test "renders 404" do
+ assert ErrorJSON.render("404.json", %{}) == %{errors: %{detail: "Not found"}}
+ end
+
+ test "renders 500" do
+ assert ErrorJSON.render("500.json", %{}) == %{errors: %{detail: "Internal server error"}}
+ end
+end
diff --git a/test/cannery_web/controllers/export_controller_test.exs b/test/cannery_web/controllers/export_controller_test.exs
index 96b4e3d9..942542f8 100644
--- a/test/cannery_web/controllers/export_controller_test.exs
+++ b/test/cannery_web/controllers/export_controller_test.exs
@@ -40,7 +40,7 @@ defmodule CanneryWeb.ExportControllerTest do
shot_record: shot_record,
tag: tag
} do
- conn = get(conn, Routes.export_path(conn, :export, :json))
+ conn = get(conn, ~p"/export/json")
ideal_pack = %{
"type_id" => pack.type_id,
diff --git a/test/cannery_web/controllers/home_controller_test.exs b/test/cannery_web/controllers/home_controller_test.exs
index 0e1004df..f42b9ed0 100644
--- a/test/cannery_web/controllers/home_controller_test.exs
+++ b/test/cannery_web/controllers/home_controller_test.exs
@@ -8,7 +8,7 @@ defmodule CanneryWeb.HomeControllerTest do
@moduletag :home_controller_test
test "GET /", %{conn: conn} do
- conn = get(conn, "/")
+ conn = get(conn, ~p"/")
assert html_response(conn, 200) =~ "Welcome to Cannery"
end
end
diff --git a/test/cannery_web/controllers/user_auth_test.exs b/test/cannery_web/controllers/user_auth_test.exs
index f7cd5440..6a6e5367 100644
--- a/test/cannery_web/controllers/user_auth_test.exs
+++ b/test/cannery_web/controllers/user_auth_test.exs
@@ -24,7 +24,7 @@ defmodule CanneryWeb.UserAuthTest do
conn = UserAuth.log_in_user(conn, current_user)
assert token = get_session(conn, :user_token)
assert get_session(conn, :live_socket_id) == "users_sessions:#{Base.url_encode64(token)}"
- assert redirected_to(conn) == "/"
+ assert redirected_to(conn) == ~p"/"
assert Accounts.get_user_by_session_token(token)
end
@@ -65,7 +65,7 @@ defmodule CanneryWeb.UserAuthTest do
refute get_session(conn, :user_token)
refute conn.cookies[@remember_me_cookie]
assert %{max_age: 0} = conn.resp_cookies[@remember_me_cookie]
- assert redirected_to(conn) == "/"
+ assert redirected_to(conn) == ~p"/"
refute Accounts.get_user_by_session_token(user_token)
end
@@ -87,7 +87,7 @@ defmodule CanneryWeb.UserAuthTest do
conn = conn |> fetch_cookies() |> UserAuth.log_out_user()
refute get_session(conn, :user_token)
assert %{max_age: 0} = conn.resp_cookies[@remember_me_cookie]
- assert redirected_to(conn) == "/"
+ assert redirected_to(conn) == ~p"/"
end
end
@@ -130,7 +130,7 @@ defmodule CanneryWeb.UserAuthTest do
|> UserAuth.redirect_if_user_is_authenticated([])
assert conn.halted
- assert redirected_to(conn) == "/"
+ assert redirected_to(conn) == ~p"/"
end
test "does not redirect if user is not authenticated", %{conn: conn} do
@@ -144,9 +144,9 @@ defmodule CanneryWeb.UserAuthTest do
test "redirects if user is not authenticated", %{conn: conn} do
conn = conn |> fetch_flash() |> UserAuth.require_authenticated_user([])
assert conn.halted
- assert redirected_to(conn) == Routes.user_session_path(conn, :new)
+ assert redirected_to(conn) == ~p"/users/log_in"
- assert get_flash(conn, :error) ==
+ assert conn.assigns.flash["error"] ==
"You must confirm your account and log in to access this page."
end
diff --git a/test/cannery_web/controllers/user_confirmation_controller_test.exs b/test/cannery_web/controllers/user_confirmation_controller_test.exs
index e104d6e1..f79de0db 100644
--- a/test/cannery_web/controllers/user_confirmation_controller_test.exs
+++ b/test/cannery_web/controllers/user_confirmation_controller_test.exs
@@ -14,7 +14,7 @@ defmodule CanneryWeb.UserConfirmationControllerTest do
describe "GET /users/confirm" do
test "renders the confirmation page", %{conn: conn} do
- conn = get(conn, Routes.user_confirmation_path(conn, :new))
+ conn = get(conn, ~p"/users/confirm")
response = html_response(conn, 200)
assert response =~ "Resend confirmation instructions"
end
@@ -23,12 +23,10 @@ defmodule CanneryWeb.UserConfirmationControllerTest do
describe "POST /users/confirm" do
@tag :capture_log
test "sends a new confirmation token", %{conn: conn, user: user} do
- conn =
- post(conn, Routes.user_confirmation_path(conn, :create), %{user: %{email: user.email}})
+ conn = post(conn, ~p"/users/confirm", %{user: %{email: user.email}})
+ assert redirected_to(conn) == ~p"/"
- assert redirected_to(conn) == "/"
-
- assert get_flash(conn, :info) =~
+ assert conn.assigns.flash["info"] =~
"If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "confirm"
@@ -37,24 +35,18 @@ defmodule CanneryWeb.UserConfirmationControllerTest do
test "does not send confirmation token if User is confirmed", %{conn: conn, user: user} do
Repo.update!(Accounts.User.confirm_changeset(user))
- conn =
- post(conn, Routes.user_confirmation_path(conn, :create), %{user: %{email: user.email}})
+ conn = post(conn, ~p"/users/confirm", %{user: %{email: user.email}})
+ assert redirected_to(conn) == ~p"/"
- assert redirected_to(conn) == "/"
-
- assert get_flash(conn, :info) =~
+ assert conn.assigns.flash["info"] =~
"If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
end
test "does not send confirmation token if email is invalid", %{conn: conn} do
- conn =
- post(conn, Routes.user_confirmation_path(conn, :create), %{
- user: %{email: "unknown@example.com"}
- })
+ conn = post(conn, ~p"/users/confirm", %{user: %{email: "unknown@example.com"}})
+ assert redirected_to(conn) == ~p"/"
- assert redirected_to(conn) == "/"
-
- assert get_flash(conn, :info) =~
+ assert conn.assigns.flash["info"] =~
"If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
assert Repo.all(Accounts.UserToken) == []
@@ -68,33 +60,33 @@ defmodule CanneryWeb.UserConfirmationControllerTest do
Accounts.deliver_user_confirmation_instructions(user, url)
end)
- conn = get(conn, Routes.user_confirmation_path(conn, :confirm, token))
- assert redirected_to(conn) == "/"
- assert get_flash(conn, :info) =~ "#{user.email} confirmed successfully"
+ conn = get(conn, ~p"/users/confirm/#{token}")
+ assert redirected_to(conn) == ~p"/"
+ assert conn.assigns.flash["info"] =~ "#{user.email} confirmed successfully"
assert Accounts.get_user!(user.id).confirmed_at
refute get_session(conn, :user_token)
assert Repo.all(Accounts.UserToken) == []
# When not logged in
- conn = get(conn, Routes.user_confirmation_path(conn, :confirm, token))
- assert redirected_to(conn) == "/"
+ conn = get(conn, ~p"/users/confirm/#{token}")
+ assert redirected_to(conn) == ~p"/"
- assert get_flash(conn, :error) =~ "User confirmation link is invalid or it has expired"
+ assert conn.assigns.flash["error"] =~ "User confirmation link is invalid or it has expired"
# When logged in
conn =
build_conn()
|> log_in_user(user)
- |> get(Routes.user_confirmation_path(conn, :confirm, token))
+ |> get(~p"/users/confirm/#{token}")
- assert redirected_to(conn) == "/"
- refute get_flash(conn, :error)
+ assert redirected_to(conn) == ~p"/"
+ refute conn.assigns.flash["error"]
end
test "does not confirm email with invalid token", %{conn: conn, user: user} do
- conn = get(conn, Routes.user_confirmation_path(conn, :confirm, "oops"))
- assert redirected_to(conn) == "/"
- assert get_flash(conn, :error) =~ "User confirmation link is invalid or it has expired"
+ conn = get(conn, ~p"/users/confirm/oops")
+ assert redirected_to(conn) == ~p"/"
+ assert conn.assigns.flash["error"] =~ "User confirmation link is invalid or it has expired"
refute Accounts.get_user!(user.id).confirmed_at
end
end
diff --git a/test/cannery_web/controllers/user_registration_controller_test.exs b/test/cannery_web/controllers/user_registration_controller_test.exs
index 2f667884..bf16cb4e 100644
--- a/test/cannery_web/controllers/user_registration_controller_test.exs
+++ b/test/cannery_web/controllers/user_registration_controller_test.exs
@@ -9,15 +9,15 @@ defmodule CanneryWeb.UserRegistrationControllerTest do
describe "GET /users/register" do
test "renders registration page", %{conn: conn} do
- conn = get(conn, Routes.user_registration_path(conn, :new))
+ conn = get(conn, ~p"/users/register")
response = html_response(conn, 200)
assert response =~ "Register"
assert response =~ "Log in"
end
test "redirects if already logged in", %{conn: conn} do
- conn = conn |> log_in_user(user_fixture()) |> get(Routes.user_registration_path(conn, :new))
- assert redirected_to(conn) == "/"
+ conn = conn |> log_in_user(user_fixture()) |> get(~p"/users/register")
+ assert redirected_to(conn) == ~p"/"
end
end
@@ -25,20 +25,16 @@ defmodule CanneryWeb.UserRegistrationControllerTest do
@tag :capture_log
test "creates account and logs the user in", %{conn: conn} do
email = unique_user_email()
-
- conn =
- post(conn, Routes.user_registration_path(conn, :create), %{
- user: valid_user_attributes(email: email)
- })
+ conn = post(conn, ~p"/users/register", %{user: valid_user_attributes(email: email)})
assert get_session(conn, :phoenix_flash) == %{
"info" => "Please check your email to verify your account"
}
- assert redirected_to(conn) =~ "/"
+ assert redirected_to(conn) =~ ~p"/"
# Now do a logged in request and assert on the menu
- conn = get(conn, "/")
+ conn = get(conn, ~p"/")
response = html_response(conn, 200)
# user's email is recorded as admin
assert response =~ email
@@ -46,9 +42,7 @@ defmodule CanneryWeb.UserRegistrationControllerTest do
test "render errors for invalid data", %{conn: conn} do
conn =
- post(conn, Routes.user_registration_path(conn, :create), %{
- user: %{email: "with spaces", password: "too short"}
- })
+ post(conn, ~p"/users/register", %{user: %{email: "with spaces", password: "too short"}})
response = html_response(conn, 200)
assert response =~ "Register"
diff --git a/test/cannery_web/controllers/user_reset_password_controller_test.exs b/test/cannery_web/controllers/user_reset_password_controller_test.exs
index 296a116c..752e3c36 100644
--- a/test/cannery_web/controllers/user_reset_password_controller_test.exs
+++ b/test/cannery_web/controllers/user_reset_password_controller_test.exs
@@ -14,7 +14,7 @@ defmodule CanneryWeb.UserResetPasswordControllerTest do
describe "GET /users/reset_password" do
test "renders the reset password page", %{conn: conn} do
- conn = get(conn, Routes.user_reset_password_path(conn, :new))
+ conn = get(conn, ~p"/users/reset_password")
response = html_response(conn, 200)
assert response =~ "Forgot your password?"
end
@@ -23,26 +23,20 @@ defmodule CanneryWeb.UserResetPasswordControllerTest do
describe "POST /users/reset_password" do
@tag :capture_log
test "sends a new reset password token", %{conn: conn, user: user} do
- conn =
- post(conn, Routes.user_reset_password_path(conn, :create), %{user: %{email: user.email}})
+ conn = post(conn, ~p"/users/reset_password", %{user: %{email: user.email}})
+ assert redirected_to(conn) == ~p"/"
- assert redirected_to(conn) == "/"
-
- assert get_flash(conn, :info) =~
+ assert conn.assigns.flash["info"] =~
"If your email is in our system, you will receive instructions to reset your password shortly."
assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "reset_password"
end
test "does not send reset password token if email is invalid", %{conn: conn} do
- conn =
- post(conn, Routes.user_reset_password_path(conn, :create), %{
- user: %{email: "unknown@example.com"}
- })
+ conn = post(conn, ~p"/users/reset_password", %{user: %{email: "unknown@example.com"}})
+ assert redirected_to(conn) == ~p"/"
- assert redirected_to(conn) == "/"
-
- assert get_flash(conn, :info) =~
+ assert conn.assigns.flash["info"] =~
"If your email is in our system, you will receive instructions to reset your password shortly."
assert Repo.all(Accounts.UserToken) == []
@@ -60,14 +54,14 @@ defmodule CanneryWeb.UserResetPasswordControllerTest do
end
test "renders reset password", %{conn: conn, token: token} do
- conn = get(conn, Routes.user_reset_password_path(conn, :edit, token))
+ conn = get(conn, ~p"/users/reset_password/#{token}")
assert html_response(conn, 200) =~ "Reset password"
end
test "does not render reset password with invalid token", %{conn: conn} do
- conn = get(conn, Routes.user_reset_password_path(conn, :edit, "oops"))
- assert redirected_to(conn) == "/"
- assert get_flash(conn, :error) =~ "Reset password link is invalid or it has expired"
+ conn = get(conn, ~p"/users/reset_password/oops")
+ assert redirected_to(conn) == ~p"/"
+ assert conn.assigns.flash["error"] =~ "Reset password link is invalid or it has expired"
end
end
@@ -83,22 +77,22 @@ defmodule CanneryWeb.UserResetPasswordControllerTest do
test "resets password once", %{conn: conn, user: user, token: token} do
conn =
- put(conn, Routes.user_reset_password_path(conn, :update, token), %{
+ put(conn, ~p"/users/reset_password/#{token}", %{
user: %{
password: "new valid password",
password_confirmation: "new valid password"
}
})
- assert redirected_to(conn) == Routes.user_session_path(conn, :new)
+ assert redirected_to(conn) == ~p"/users/log_in"
refute get_session(conn, :user_token)
- assert get_flash(conn, :info) =~ "Password reset successfully"
+ assert conn.assigns.flash["info"] =~ "Password reset successfully"
assert Accounts.get_user_by_email_and_password(user.email, "new valid password")
end
test "does not reset password on invalid data", %{conn: conn, token: token} do
conn =
- put(conn, Routes.user_reset_password_path(conn, :update, token), %{
+ put(conn, ~p"/users/reset_password/#{token}", %{
user: %{
password: "too short",
password_confirmation: "does not match"
@@ -112,9 +106,9 @@ defmodule CanneryWeb.UserResetPasswordControllerTest do
end
test "does not reset password with invalid token", %{conn: conn} do
- conn = put(conn, Routes.user_reset_password_path(conn, :update, "oops"))
- assert redirected_to(conn) == "/"
- assert get_flash(conn, :error) =~ "Reset password link is invalid or it has expired"
+ conn = put(conn, ~p"/users/reset_password/oops")
+ assert redirected_to(conn) == ~p"/"
+ assert conn.assigns.flash["error"] =~ "Reset password link is invalid or it has expired"
end
end
end
diff --git a/test/cannery_web/controllers/user_session_controller_test.exs b/test/cannery_web/controllers/user_session_controller_test.exs
index 5918b6f2..f1842466 100644
--- a/test/cannery_web/controllers/user_session_controller_test.exs
+++ b/test/cannery_web/controllers/user_session_controller_test.exs
@@ -13,29 +13,29 @@ defmodule CanneryWeb.UserSessionControllerTest do
describe "GET /users/log_in" do
test "renders log in page", %{conn: conn} do
- conn = get(conn, Routes.user_session_path(conn, :new))
+ conn = get(conn, ~p"/users/log_in")
response = html_response(conn, 200)
assert response =~ "Log in"
end
test "redirects if already logged in", %{conn: conn, current_user: current_user} do
- conn = conn |> log_in_user(current_user) |> get(Routes.user_session_path(conn, :new))
- assert redirected_to(conn) == "/"
+ conn = conn |> log_in_user(current_user) |> get(~p"/users/log_in")
+ assert redirected_to(conn) == ~p"/"
end
end
describe "POST /users/log_in" do
test "logs the user in", %{conn: conn, current_user: current_user} do
conn =
- post(conn, Routes.user_session_path(conn, :create), %{
+ post(conn, ~p"/users/log_in", %{
user: %{email: current_user.email, password: valid_user_password()}
})
assert get_session(conn, :user_token)
- assert redirected_to(conn) =~ "/"
+ assert redirected_to(conn) =~ ~p"/"
# Now do a logged in request and assert on the menu
- conn = get(conn, "/")
+ conn = get(conn, ~p"/")
response = html_response(conn, 200)
assert response =~ current_user.email
assert response =~ "Are you sure you want to log out?"
@@ -43,7 +43,7 @@ defmodule CanneryWeb.UserSessionControllerTest do
test "logs the user in with remember me", %{conn: conn, current_user: current_user} do
conn =
- post(conn, Routes.user_session_path(conn, :create), %{
+ post(conn, ~p"/users/log_in", %{
user: %{
email: current_user.email,
password: valid_user_password(),
@@ -52,14 +52,14 @@ defmodule CanneryWeb.UserSessionControllerTest do
})
assert conn.resp_cookies["_cannery_web_user_remember_me"]
- assert redirected_to(conn) =~ "/"
+ assert redirected_to(conn) =~ ~p"/"
end
test "logs the user in with return to", %{conn: conn, current_user: current_user} do
conn =
conn
|> init_test_session(user_return_to: "/foo/bar")
- |> post(Routes.user_session_path(conn, :create), %{
+ |> post(~p"/users/log_in", %{
user: %{
email: current_user.email,
password: valid_user_password()
@@ -71,11 +71,7 @@ defmodule CanneryWeb.UserSessionControllerTest do
test "emits error message with invalid credentials",
%{conn: conn, current_user: current_user} do
- conn =
- post(conn, Routes.user_session_path(conn, :create), %{
- user: %{email: current_user.email, password: "bad"}
- })
-
+ conn = post(conn, ~p"/users/log_in", %{user: %{email: current_user.email, password: "bad"}})
response = html_response(conn, 200)
assert response =~ "Log in"
assert response =~ "Invalid email or password"
@@ -84,17 +80,17 @@ defmodule CanneryWeb.UserSessionControllerTest do
describe "DELETE /users/log_out" do
test "logs the user out", %{conn: conn, current_user: current_user} do
- conn = conn |> log_in_user(current_user) |> delete(Routes.user_session_path(conn, :delete))
- assert redirected_to(conn) == "/"
+ conn = conn |> log_in_user(current_user) |> delete(~p"/users/log_out")
+ assert redirected_to(conn) == ~p"/"
refute get_session(conn, :user_token)
- assert get_flash(conn, :info) =~ "Logged out successfully"
+ assert conn.assigns.flash["info"] =~ "Logged out successfully"
end
test "succeeds even if the user is not logged in", %{conn: conn} do
- conn = delete(conn, Routes.user_session_path(conn, :delete))
- assert redirected_to(conn) == "/"
+ conn = delete(conn, ~p"/users/log_out")
+ assert redirected_to(conn) == ~p"/"
refute get_session(conn, :user_token)
- assert get_flash(conn, :info) =~ "Logged out successfully"
+ assert conn.assigns.flash["info"] =~ "Logged out successfully"
end
end
end
diff --git a/test/cannery_web/controllers/user_settings_controller_test.exs b/test/cannery_web/controllers/user_settings_controller_test.exs
index 35ab46c3..da8a1986 100644
--- a/test/cannery_web/controllers/user_settings_controller_test.exs
+++ b/test/cannery_web/controllers/user_settings_controller_test.exs
@@ -12,15 +12,15 @@ defmodule CanneryWeb.UserSettingsControllerTest do
describe "GET /users/settings" do
test "renders settings page", %{conn: conn} do
- conn = get(conn, Routes.user_settings_path(conn, :edit))
+ conn = get(conn, ~p"/users/settings")
response = html_response(conn, 200)
assert response =~ "Settings"
end
test "redirects if user is not logged in" do
conn = build_conn()
- conn = get(conn, Routes.user_settings_path(conn, :edit))
- assert redirected_to(conn) == Routes.user_session_path(conn, :new)
+ conn = get(conn, ~p"/users/settings")
+ assert redirected_to(conn) == ~p"/users/log_in"
end
end
@@ -28,7 +28,7 @@ defmodule CanneryWeb.UserSettingsControllerTest do
test "updates the user password and resets tokens",
%{conn: conn, current_user: current_user} do
new_password_conn =
- put(conn, Routes.user_settings_path(conn, :update), %{
+ put(conn, ~p"/users/settings", %{
action: "update_password",
current_password: valid_user_password(),
user: %{
@@ -37,15 +37,15 @@ defmodule CanneryWeb.UserSettingsControllerTest do
}
})
- assert redirected_to(new_password_conn) == Routes.user_settings_path(conn, :edit)
+ assert redirected_to(new_password_conn) == ~p"/users/settings"
assert get_session(new_password_conn, :user_token) != get_session(conn, :user_token)
- assert get_flash(new_password_conn, :info) =~ "Password updated successfully"
+ assert new_password_conn.assigns.flash["info"] =~ "Password updated successfully"
assert Accounts.get_user_by_email_and_password(current_user.email, "new valid password")
end
test "does not update password on invalid data", %{conn: conn} do
old_password_conn =
- put(conn, Routes.user_settings_path(conn, :update), %{
+ put(conn, ~p"/users/settings", %{
action: "update_password",
current_password: "invalid",
user: %{
@@ -67,15 +67,15 @@ defmodule CanneryWeb.UserSettingsControllerTest do
@tag :capture_log
test "updates the user email", %{conn: conn, current_user: current_user} do
conn =
- put(conn, Routes.user_settings_path(conn, :update), %{
+ put(conn, ~p"/users/settings", %{
action: "update_email",
current_password: valid_user_password(),
user: %{email: unique_user_email()}
})
- assert redirected_to(conn) == Routes.user_settings_path(conn, :edit)
+ assert redirected_to(conn) == ~p"/users/settings"
- assert get_flash(conn, :info) =~
+ assert conn.assigns.flash["info"] =~
"A link to confirm your email change has been sent to the new address."
assert Accounts.get_user_by_email(current_user.email)
@@ -83,7 +83,7 @@ defmodule CanneryWeb.UserSettingsControllerTest do
test "does not update email on invalid data", %{conn: conn} do
conn =
- put(conn, Routes.user_settings_path(conn, :update), %{
+ put(conn, ~p"/users/settings", %{
action: "update_email",
current_password: "invalid",
user: %{email: "with spaces"}
@@ -114,28 +114,28 @@ defmodule CanneryWeb.UserSettingsControllerTest do
test "updates the user email once",
%{conn: conn, current_user: current_user, token: token, email: email} do
- conn = get(conn, Routes.user_settings_path(conn, :confirm_email, token))
- assert redirected_to(conn) == Routes.user_settings_path(conn, :edit)
- assert get_flash(conn, :info) =~ "Email changed successfully"
+ conn = get(conn, ~p"/users/settings/confirm_email/#{token}")
+ assert redirected_to(conn) == ~p"/users/settings"
+ assert conn.assigns.flash["info"] =~ "Email changed successfully"
refute Accounts.get_user_by_email(current_user.email)
assert Accounts.get_user_by_email(email)
- conn = get(conn, Routes.user_settings_path(conn, :confirm_email, token))
- assert redirected_to(conn) == Routes.user_settings_path(conn, :edit)
- assert get_flash(conn, :error) =~ "Email change link is invalid or it has expired"
+ conn = get(conn, ~p"/users/settings/confirm_email/#{token}")
+ assert redirected_to(conn) == ~p"/users/settings"
+ assert conn.assigns.flash["error"] =~ "Email change link is invalid or it has expired"
end
test "does not update email with invalid token", %{conn: conn, current_user: current_user} do
- conn = get(conn, Routes.user_settings_path(conn, :confirm_email, "oops"))
- assert redirected_to(conn) == Routes.user_settings_path(conn, :edit)
- assert get_flash(conn, :error) =~ "Email change link is invalid or it has expired"
+ conn = get(conn, ~p"/users/settings/confirm_email/oops")
+ assert redirected_to(conn) == ~p"/users/settings"
+ assert conn.assigns.flash["error"] =~ "Email change link is invalid or it has expired"
assert Accounts.get_user_by_email(current_user.email)
end
test "redirects if user is not logged in", %{token: token} do
conn = build_conn()
- conn = get(conn, Routes.user_settings_path(conn, :confirm_email, token))
- assert redirected_to(conn) == Routes.user_session_path(conn, :new)
+ conn = get(conn, ~p"/users/settings/confirm_email/#{token}")
+ assert redirected_to(conn) == ~p"/users/log_in"
end
end
end
diff --git a/test/cannery_web/live/container_live_test.exs b/test/cannery_web/live/container_live_test.exs
index 9c0bafae..d25f404a 100644
--- a/test/cannery_web/live/container_live_test.exs
+++ b/test/cannery_web/live/container_live_test.exs
@@ -51,14 +51,13 @@ defmodule CanneryWeb.ContainerLiveTest do
setup [:register_and_log_in_user, :create_container]
test "lists all containers", %{conn: conn, container: container} do
- {:ok, _index_live, html} = live(conn, Routes.container_index_path(conn, :index))
-
+ {:ok, _index_live, html} = live(conn, ~p"/containers")
assert html =~ "Containers"
assert html =~ container.location
end
test "lists all containers in table mode", %{conn: conn, container: container} do
- {:ok, index_live, _html} = live(conn, Routes.container_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/containers")
html =
index_live
@@ -70,7 +69,7 @@ defmodule CanneryWeb.ContainerLiveTest do
end
test "can search for containers", %{conn: conn, container: container} do
- {:ok, index_live, html} = live(conn, Routes.container_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/containers")
assert html =~ container.location
@@ -78,26 +77,26 @@ defmodule CanneryWeb.ContainerLiveTest do
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: container.location}) =~ container.location
- assert_patch(index_live, Routes.container_index_path(conn, :search, container.location))
+ assert_patch(index_live, ~p"/containers/search/#{container.location}")
refute index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: "something_else"}) =~ container.location
- assert_patch(index_live, Routes.container_index_path(conn, :search, "something_else"))
+ assert_patch(index_live, ~p"/containers/search/something_else")
assert index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: ""}) =~ container.location
- assert_patch(index_live, Routes.container_index_path(conn, :index))
+ assert_patch(index_live, ~p"/containers")
end
test "saves new container", %{conn: conn, container: container} do
- {:ok, index_live, _html} = live(conn, Routes.container_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/containers")
assert index_live |> element("a", "New Container") |> render_click() =~ "New Container"
- assert_patch(index_live, Routes.container_index_path(conn, :new))
+ assert_patch(index_live, ~p"/containers/new")
assert index_live
|> form("#container-form")
@@ -107,7 +106,7 @@ defmodule CanneryWeb.ContainerLiveTest do
index_live
|> form("#container-form")
|> render_submit(container: @create_attrs)
- |> follow_redirect(conn, Routes.container_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/containers")
assert html =~ "#{container.name} created successfully"
assert html =~ "some location"
@@ -118,12 +117,12 @@ defmodule CanneryWeb.ContainerLiveTest do
current_user: current_user,
container: container
} do
- {:ok, index_live, _html} = live(conn, Routes.container_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/containers")
assert index_live |> element(~s/a[aria-label="Edit #{container.name}"]/) |> render_click() =~
"Edit #{container.name}"
- assert_patch(index_live, Routes.container_index_path(conn, :edit, container))
+ assert_patch(index_live, ~p"/containers/edit/#{container}")
assert index_live
|> form("#container-form")
@@ -133,7 +132,7 @@ defmodule CanneryWeb.ContainerLiveTest do
index_live
|> form("#container-form")
|> render_submit(container: @update_attrs)
- |> follow_redirect(conn, Routes.container_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/containers")
container = container.id |> Containers.get_container!(current_user)
assert html =~ "#{container.name} updated successfully"
@@ -145,13 +144,13 @@ defmodule CanneryWeb.ContainerLiveTest do
current_user: current_user,
container: container
} do
- {:ok, index_live, _html} = live(conn, Routes.container_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/containers")
html = index_live |> element(~s/a[aria-label="Clone #{container.name}"]/) |> render_click()
assert html =~ "New Container"
assert html =~ "some location"
- assert_patch(index_live, Routes.container_index_path(conn, :clone, container))
+ assert_patch(index_live, ~p"/containers/clone/#{container}")
assert index_live
|> form("#container-form")
@@ -161,7 +160,7 @@ defmodule CanneryWeb.ContainerLiveTest do
index_live
|> form("#container-form")
|> render_submit(container: @create_attrs)
- |> follow_redirect(conn, Routes.container_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/containers")
container = container.id |> Containers.get_container!(current_user)
assert html =~ "#{container.name} created successfully"
@@ -173,12 +172,12 @@ defmodule CanneryWeb.ContainerLiveTest do
current_user: current_user,
container: container
} do
- {:ok, index_live, _html} = live(conn, Routes.container_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/containers")
assert index_live |> element(~s/a[aria-label="Clone #{container.name}"]/) |> render_click() =~
"New Container"
- assert_patch(index_live, Routes.container_index_path(conn, :clone, container))
+ assert_patch(index_live, ~p"/containers/clone/#{container}")
assert index_live
|> form("#container-form")
@@ -190,7 +189,7 @@ defmodule CanneryWeb.ContainerLiveTest do
|> render_submit(
container: Map.merge(@create_attrs, %{location: "some updated location"})
)
- |> follow_redirect(conn, Routes.container_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/containers")
container = container.id |> Containers.get_container!(current_user)
assert html =~ "#{container.name} created successfully"
@@ -198,7 +197,7 @@ defmodule CanneryWeb.ContainerLiveTest do
end
test "deletes container in listing", %{conn: conn, container: container} do
- {:ok, index_live, _html} = live(conn, Routes.container_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/containers")
assert index_live |> element(~s/a[aria-label="Delete #{container.name}"]/) |> render_click()
refute has_element?(index_live, "#container-#{container.id}")
end
@@ -211,7 +210,7 @@ defmodule CanneryWeb.ContainerLiveTest do
conn: conn,
container: %{name: name, location: location} = container
} do
- {:ok, _show_live, html} = live(conn, Routes.container_show_path(conn, :show, container))
+ {:ok, _show_live, html} = live(conn, ~p"/container/#{container}")
assert html =~ name
assert html =~ location
end
@@ -221,12 +220,12 @@ defmodule CanneryWeb.ContainerLiveTest do
current_user: current_user,
container: container
} do
- {:ok, show_live, _html} = live(conn, Routes.container_show_path(conn, :show, container))
+ {:ok, show_live, _html} = live(conn, ~p"/container/#{container}")
assert show_live |> element(~s/a[aria-label="Edit #{container.name}"]/) |> render_click() =~
"Edit #{container.name}"
- assert_patch(show_live, Routes.container_show_path(conn, :edit, container))
+ assert_patch(show_live, ~p"/container/edit/#{container}")
assert show_live
|> form("#container-form")
@@ -236,7 +235,7 @@ defmodule CanneryWeb.ContainerLiveTest do
show_live
|> form("#container-form")
|> render_submit(container: @update_attrs)
- |> follow_redirect(conn, Routes.container_show_path(conn, :show, container))
+ |> follow_redirect(conn, ~p"/container/#{container}")
container = container.id |> Containers.get_container!(current_user)
assert html =~ "#{container.name} updated successfully"
@@ -252,7 +251,7 @@ defmodule CanneryWeb.ContainerLiveTest do
pistol_type = type_fixture(%{class: :pistol}, current_user)
{1, [pistol_pack]} = pack_fixture(pistol_type, container, current_user)
- {:ok, index_live, html} = live(conn, Routes.container_show_path(conn, :show, container))
+ {:ok, index_live, html} = live(conn, ~p"/container/#{container}")
assert html =~ "All"
@@ -303,7 +302,7 @@ defmodule CanneryWeb.ContainerLiveTest do
test "displays pack",
%{conn: conn, type: %{name: type_name}, container: container} do
- {:ok, _show_live, html} = live(conn, Routes.container_show_path(conn, :show, container))
+ {:ok, _show_live, html} = live(conn, ~p"/container/#{container}")
assert html =~ type_name
assert html =~ "\n20\n"
@@ -311,7 +310,7 @@ defmodule CanneryWeb.ContainerLiveTest do
test "displays pack in table",
%{conn: conn, type: %{name: type_name}, container: container} do
- {:ok, show_live, _html} = live(conn, Routes.container_show_path(conn, :show, container))
+ {:ok, show_live, _html} = live(conn, ~p"/container/#{container}")
html =
show_live
diff --git a/test/cannery_web/live/home_live_test.exs b/test/cannery_web/live/home_live_test.exs
index ed9757dd..558ee112 100644
--- a/test/cannery_web/live/home_live_test.exs
+++ b/test/cannery_web/live/home_live_test.exs
@@ -9,13 +9,13 @@ defmodule CanneryWeb.HomeLiveTest do
@moduletag :home_live_test
test "disconnected and connected render", %{conn: conn} do
- {:ok, home_live, disconnected_html} = live(conn, "/")
+ {:ok, home_live, disconnected_html} = live(conn, ~p"/")
assert disconnected_html =~ "Welcome to Cannery"
assert render(home_live) =~ "Welcome to Cannery"
end
test "displays version number", %{conn: conn} do
- {:ok, home_live, disconnected_html} = live(conn, "/")
+ {:ok, home_live, disconnected_html} = live(conn, ~p"/")
assert disconnected_html =~ Mix.Project.config()[:version]
assert render(home_live) =~ Mix.Project.config()[:version]
end
diff --git a/test/cannery_web/live/invite_live_test.exs b/test/cannery_web/live/invite_live_test.exs
index 71e23c4e..d755383d 100644
--- a/test/cannery_web/live/invite_live_test.exs
+++ b/test/cannery_web/live/invite_live_test.exs
@@ -21,17 +21,17 @@ defmodule CanneryWeb.InviteLiveTest do
end
test "lists all invites", %{conn: conn, invite: invite} do
- {:ok, _index_live, html} = live(conn, Routes.invite_index_path(conn, :index))
+ {:ok, _index_live, html} = live(conn, ~p"/invites")
assert html =~ "Invites"
assert html =~ invite.name
end
test "saves new invite", %{conn: conn} do
- {:ok, index_live, _html} = live(conn, Routes.invite_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/invites")
assert index_live |> element("a", "Create Invite") |> render_click() =~ "New Invite"
- assert_patch(index_live, Routes.invite_index_path(conn, :new))
+ assert_patch(index_live, ~p"/invites/new")
assert index_live
|> form("#invite-form")
@@ -41,19 +41,19 @@ defmodule CanneryWeb.InviteLiveTest do
index_live
|> form("#invite-form")
|> render_submit(invite: @create_attrs)
- |> follow_redirect(conn, Routes.invite_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/invites")
assert html =~ "some name created successfully"
end
test "updates invite in listing", %{conn: conn, invite: invite} do
- {:ok, index_live, _html} = live(conn, Routes.invite_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/invites")
assert index_live
|> element(~s/a[aria-label="Edit invite for #{invite.name}"]/)
|> render_click() =~ "Edit Invite"
- assert_patch(index_live, Routes.invite_index_path(conn, :edit, invite))
+ assert_patch(index_live, ~p"/invites/#{invite}/edit")
assert index_live
|> form("#invite-form")
@@ -63,13 +63,13 @@ defmodule CanneryWeb.InviteLiveTest do
index_live
|> form("#invite-form")
|> render_submit(invite: @update_attrs)
- |> follow_redirect(conn, Routes.invite_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/invites")
assert html =~ "some updated name updated successfully"
end
test "deletes invite in listing", %{conn: conn, invite: invite} do
- {:ok, index_live, _html} = live(conn, Routes.invite_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/invites")
assert index_live
|> element(~s/a[aria-label="Delete invite for #{invite.name}"]/)
diff --git a/test/cannery_web/live/pack_live_test.exs b/test/cannery_web/live/pack_live_test.exs
index 04befefc..8db75d42 100644
--- a/test/cannery_web/live/pack_live_test.exs
+++ b/test/cannery_web/live/pack_live_test.exs
@@ -56,7 +56,7 @@ defmodule CanneryWeb.PackLiveTest do
setup [:register_and_log_in_user, :create_pack]
test "lists all packs", %{conn: conn, pack: pack} do
- {:ok, _index_live, html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, _index_live, html} = live(conn, ~p"/ammo")
pack = pack |> Repo.preload(:type)
assert html =~ "Ammo"
assert html =~ pack.type.name
@@ -71,7 +71,7 @@ defmodule CanneryWeb.PackLiveTest do
pistol_type = type_fixture(%{class: :pistol}, current_user)
{1, [pistol_pack]} = pack_fixture(pistol_type, container, current_user)
- {:ok, index_live, html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/ammo")
assert html =~ "All"
@@ -117,7 +117,7 @@ defmodule CanneryWeb.PackLiveTest do
end
test "can search for packs", %{conn: conn, pack: pack} do
- {:ok, index_live, html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/ammo")
pack = pack |> Repo.preload(:type)
@@ -128,30 +128,27 @@ defmodule CanneryWeb.PackLiveTest do
|> render_change(search: %{search_term: pack.type.name}) =~
pack.type.name
- assert_patch(
- index_live,
- Routes.pack_index_path(conn, :search, pack.type.name)
- )
+ assert_patch(index_live, ~p"/ammo/search/#{pack.type.name}")
refute index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: "something_else"}) =~
pack.type.name
- assert_patch(index_live, Routes.pack_index_path(conn, :search, "something_else"))
+ assert_patch(index_live, ~p"/ammo/search/something_else")
assert index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: ""}) =~ pack.type.name
- assert_patch(index_live, Routes.pack_index_path(conn, :index))
+ assert_patch(index_live, ~p"/ammo")
end
test "saves a single new pack", %{conn: conn} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
assert index_live |> element("a", "Add Ammo") |> render_click() =~ "Add Ammo"
- assert_patch(index_live, Routes.pack_index_path(conn, :new))
+ assert_patch(index_live, ~p"/ammo/new")
assert index_live
|> form("#pack-form")
@@ -161,7 +158,7 @@ defmodule CanneryWeb.PackLiveTest do
index_live
|> form("#pack-form")
|> render_submit(pack: @create_attrs)
- |> follow_redirect(conn, Routes.pack_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/ammo")
assert html =~ "Ammo added successfully"
assert html =~ "\n42\n"
@@ -169,10 +166,10 @@ defmodule CanneryWeb.PackLiveTest do
test "saves multiple new packs", %{conn: conn, current_user: current_user} do
multiplier = 25
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
assert index_live |> element("a", "Add Ammo") |> render_click() =~ "Add Ammo"
- assert_patch(index_live, Routes.pack_index_path(conn, :new))
+ assert_patch(index_live, ~p"/ammo/new")
assert index_live
|> form("#pack-form")
@@ -182,17 +179,17 @@ defmodule CanneryWeb.PackLiveTest do
index_live
|> form("#pack-form")
|> render_submit(pack: @create_attrs |> Map.put(:multiplier, multiplier))
- |> follow_redirect(conn, Routes.pack_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/ammo")
assert html =~ "Ammo added successfully"
assert Ammo.list_packs(nil, :all, current_user) |> Enum.count() == multiplier + 1
end
test "does not save invalid number of new packs", %{conn: conn} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
assert index_live |> element("a", "Add Ammo") |> render_click() =~ "Add Ammo"
- assert_patch(index_live, Routes.pack_index_path(conn, :new))
+ assert_patch(index_live, ~p"/ammo/new")
assert index_live
|> form("#pack-form")
@@ -210,13 +207,13 @@ defmodule CanneryWeb.PackLiveTest do
end
test "updates pack in listing", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
assert index_live
|> element(~s/a[aria-label="Edit pack of #{pack.count} bullets"]/)
|> render_click() =~ "Edit ammo"
- assert_patch(index_live, Routes.pack_index_path(conn, :edit, pack))
+ assert_patch(index_live, ~p"/ammo/edit/#{pack}")
assert index_live
|> form("#pack-form")
@@ -226,14 +223,14 @@ defmodule CanneryWeb.PackLiveTest do
index_live
|> form("#pack-form")
|> render_submit(pack: @update_attrs)
- |> follow_redirect(conn, Routes.pack_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/ammo")
assert html =~ "Ammo updated successfully"
assert html =~ "\n43\n"
end
test "clones pack in listing", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
html =
index_live
@@ -243,13 +240,13 @@ defmodule CanneryWeb.PackLiveTest do
assert html =~ "Add Ammo"
assert html =~ "$#{display_currency(120.5)}"
- assert_patch(index_live, Routes.pack_index_path(conn, :clone, pack))
+ assert_patch(index_live, ~p"/ammo/clone/#{pack}")
{:ok, _index_live, html} =
index_live
|> form("#pack-form")
|> render_submit()
- |> follow_redirect(conn, Routes.pack_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/ammo")
assert html =~ "Ammo added successfully"
assert html =~ "\n42\n"
@@ -257,7 +254,7 @@ defmodule CanneryWeb.PackLiveTest do
end
test "checks validity when cloning", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
html =
index_live
@@ -267,7 +264,7 @@ defmodule CanneryWeb.PackLiveTest do
assert html =~ "Add Ammo"
assert html =~ "$#{display_currency(120.5)}"
- assert_patch(index_live, Routes.pack_index_path(conn, :clone, pack))
+ assert_patch(index_live, ~p"/ammo/clone/#{pack}")
assert index_live
|> form("#pack-form")
@@ -275,7 +272,7 @@ defmodule CanneryWeb.PackLiveTest do
end
test "clones pack in listing with updates", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
html =
index_live
@@ -284,7 +281,7 @@ defmodule CanneryWeb.PackLiveTest do
assert html =~ "Add Ammo"
assert html =~ "$#{display_currency(120.5)}"
- assert_patch(index_live, Routes.pack_index_path(conn, :clone, pack))
+ assert_patch(index_live, ~p"/ammo/clone/#{pack}")
assert index_live
|> form("#pack-form")
@@ -294,7 +291,7 @@ defmodule CanneryWeb.PackLiveTest do
index_live
|> form("#pack-form")
|> render_submit(pack: @create_attrs |> Map.put(:count, 43))
- |> follow_redirect(conn, Routes.pack_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/ammo")
assert html =~ "Ammo added successfully"
assert html =~ "\n43\n"
@@ -302,7 +299,7 @@ defmodule CanneryWeb.PackLiveTest do
end
test "deletes pack in listing", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
assert index_live
|> element(~s/a[aria-label="Delete pack of #{pack.count} bullets"]/)
@@ -312,10 +309,10 @@ defmodule CanneryWeb.PackLiveTest do
end
test "saves new shot_record", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo")
assert index_live |> element("a", "Record shots") |> render_click() =~ "Record shots"
- assert_patch(index_live, Routes.pack_index_path(conn, :add_shot_record, pack))
+ assert_patch(index_live, ~p"/ammo/add_shot_record/#{pack}")
assert index_live
|> form("#shot-record-form")
@@ -325,7 +322,7 @@ defmodule CanneryWeb.PackLiveTest do
index_live
|> form("#shot-record-form")
|> render_submit(shot_record: @shot_record_create_attrs)
- |> follow_redirect(conn, Routes.pack_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/ammo")
assert html =~ "Shots recorded successfully"
end
@@ -342,7 +339,7 @@ defmodule CanneryWeb.PackLiveTest do
empty_pack: pack,
current_user: current_user
} do
- {:ok, show_live, html} = live(conn, Routes.pack_index_path(conn, :index))
+ {:ok, show_live, html} = live(conn, ~p"/ammo")
assert html =~ "Show used"
refute html =~ "$#{display_currency(50.00)}"
@@ -365,20 +362,20 @@ defmodule CanneryWeb.PackLiveTest do
setup [:register_and_log_in_user, :create_pack]
test "displays pack", %{conn: conn, pack: pack} do
- {:ok, _show_live, html} = live(conn, Routes.pack_show_path(conn, :show, pack))
+ {:ok, _show_live, html} = live(conn, ~p"/ammo/show/#{pack}")
pack = pack |> Repo.preload(:type)
assert html =~ "Show Ammo"
assert html =~ pack.type.name
end
test "updates pack within modal", %{conn: conn, pack: pack} do
- {:ok, show_live, _html} = live(conn, Routes.pack_show_path(conn, :show, pack))
+ {:ok, show_live, _html} = live(conn, ~p"/ammo/show/#{pack}")
assert show_live
|> element(~s/a[aria-label="Edit pack of #{pack.count} bullets"]/)
|> render_click() =~ "Edit Ammo"
- assert_patch(show_live, Routes.pack_show_path(conn, :edit, pack))
+ assert_patch(show_live, ~p"/ammo/show/edit/#{pack}")
assert show_live
|> form("#pack-form")
@@ -388,17 +385,17 @@ defmodule CanneryWeb.PackLiveTest do
show_live
|> form("#pack-form")
|> render_submit(pack: @update_attrs)
- |> follow_redirect(conn, Routes.pack_show_path(conn, :show, pack))
+ |> follow_redirect(conn, ~p"/ammo/show/#{pack}")
assert html =~ "Ammo updated successfully"
assert html =~ "some updated notes"
end
test "saves new shot_record", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.pack_show_path(conn, :show, pack))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo/show/#{pack}")
assert index_live |> element("a", "Record shots") |> render_click() =~ "Record shots"
- assert_patch(index_live, Routes.pack_show_path(conn, :add_shot_record, pack))
+ assert_patch(index_live, ~p"/ammo/show/add_shot_record/#{pack}")
assert index_live
|> form("#shot-record-form")
@@ -408,7 +405,7 @@ defmodule CanneryWeb.PackLiveTest do
index_live
|> form("#shot-record-form")
|> render_submit(shot_record: @shot_record_create_attrs)
- |> follow_redirect(conn, Routes.pack_show_path(conn, :show, pack))
+ |> follow_redirect(conn, ~p"/ammo/show/#{pack}")
assert html =~ "Shots recorded successfully"
end
@@ -419,16 +416,13 @@ defmodule CanneryWeb.PackLiveTest do
test "updates shot_record in listing",
%{conn: conn, pack: pack, shot_record: shot_record} do
- {:ok, index_live, _html} = live(conn, Routes.pack_show_path(conn, :edit, pack))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo/show/edit/#{pack}")
assert index_live
|> element(~s/a[aria-label="Edit shot record of #{shot_record.count} shots"]/)
|> render_click() =~ "Edit Shot Record"
- assert_patch(
- index_live,
- Routes.pack_show_path(conn, :edit_shot_record, pack, shot_record)
- )
+ assert_patch(index_live, ~p"/ammo/show/#{pack}/edit/#{shot_record}")
assert index_live
|> form("#shot-record-form")
@@ -438,7 +432,7 @@ defmodule CanneryWeb.PackLiveTest do
index_live
|> form("#shot-record-form")
|> render_submit(shot_record: @shot_record_update_attrs)
- |> follow_redirect(conn, Routes.pack_show_path(conn, :show, pack))
+ |> follow_redirect(conn, ~p"/ammo/show/#{pack}")
assert html =~ "Shot records updated successfully"
assert html =~ "some updated notes"
@@ -446,8 +440,7 @@ defmodule CanneryWeb.PackLiveTest do
test "deletes shot_record in listing",
%{conn: conn, pack: pack, shot_record: shot_record} do
- {:ok, index_live, _html} =
- live(conn, Routes.pack_show_path(conn, :edit_shot_record, pack, shot_record))
+ {:ok, index_live, _html} = live(conn, ~p"/ammo/show/#{pack}/edit/#{shot_record}")
assert index_live
|> element(~s/a[aria-label="Delete shot record of #{shot_record.count} shots"]/)
diff --git a/test/cannery_web/live/range_live_test.exs b/test/cannery_web/live/range_live_test.exs
index 69f57c1c..f2259728 100644
--- a/test/cannery_web/live/range_live_test.exs
+++ b/test/cannery_web/live/range_live_test.exs
@@ -34,7 +34,7 @@ defmodule CanneryWeb.RangeLiveTest do
setup [:register_and_log_in_user, :create_shot_record]
test "lists all shot_records", %{conn: conn, shot_record: shot_record} do
- {:ok, _index_live, html} = live(conn, Routes.range_index_path(conn, :index))
+ {:ok, _index_live, html} = live(conn, ~p"/range")
assert html =~ "Range day"
assert html =~ shot_record.notes
@@ -57,7 +57,7 @@ defmodule CanneryWeb.RangeLiveTest do
pistol_shot_record = shot_record_fixture(%{notes: "group_three"}, current_user, pistol_pack)
- {:ok, index_live, html} = live(conn, Routes.range_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/range")
assert html =~ "All"
@@ -103,7 +103,7 @@ defmodule CanneryWeb.RangeLiveTest do
end
test "can search for shot_record", %{conn: conn, shot_record: shot_record} do
- {:ok, index_live, html} = live(conn, Routes.range_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/range")
assert html =~ shot_record.notes
@@ -111,26 +111,26 @@ defmodule CanneryWeb.RangeLiveTest do
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: shot_record.notes}) =~ shot_record.notes
- assert_patch(index_live, Routes.range_index_path(conn, :search, shot_record.notes))
+ assert_patch(index_live, ~p"/range/search/#{shot_record.notes}")
refute index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: "something_else"}) =~ shot_record.notes
- assert_patch(index_live, Routes.range_index_path(conn, :search, "something_else"))
+ assert_patch(index_live, ~p"/range/search/something_else")
assert index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: ""}) =~ shot_record.notes
- assert_patch(index_live, Routes.range_index_path(conn, :index))
+ assert_patch(index_live, ~p"/range")
end
test "saves new shot_record", %{conn: conn, pack: pack} do
- {:ok, index_live, _html} = live(conn, Routes.range_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/range")
assert index_live |> element("a", "Record shots") |> render_click() =~ "Record shots"
- assert_patch(index_live, Routes.range_index_path(conn, :add_shot_record, pack))
+ assert_patch(index_live, ~p"/range/add_shot_record/#{pack}")
assert index_live
|> form("#shot-record-form")
@@ -140,20 +140,20 @@ defmodule CanneryWeb.RangeLiveTest do
index_live
|> form("#shot-record-form")
|> render_submit(shot_record: @create_attrs)
- |> follow_redirect(conn, Routes.range_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/range")
assert html =~ "Shots recorded successfully"
assert html =~ "some notes"
end
test "updates shot_record in listing", %{conn: conn, shot_record: shot_record} do
- {:ok, index_live, _html} = live(conn, Routes.range_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/range")
assert index_live
|> element(~s/a[aria-label="Edit shot record of #{shot_record.count} shots"]/)
|> render_click() =~ "Edit Shot Record"
- assert_patch(index_live, Routes.range_index_path(conn, :edit, shot_record))
+ assert_patch(index_live, ~p"/range/edit/#{shot_record}")
assert index_live
|> form("#shot-record-form")
@@ -163,14 +163,14 @@ defmodule CanneryWeb.RangeLiveTest do
index_live
|> form("#shot-record-form", shot_record: @update_attrs)
|> render_submit()
- |> follow_redirect(conn, Routes.range_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/range")
assert html =~ "Shot records updated successfully"
assert html =~ "some updated notes"
end
test "deletes shot_record in listing", %{conn: conn, shot_record: shot_record} do
- {:ok, index_live, _html} = live(conn, Routes.range_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/range")
assert index_live
|> element(~s/a[aria-label="Delete shot record of #{shot_record.count} shots"]/)
diff --git a/test/cannery_web/live/tag_live_test.exs b/test/cannery_web/live/tag_live_test.exs
index f1ee6cd3..529ae541 100644
--- a/test/cannery_web/live/tag_live_test.exs
+++ b/test/cannery_web/live/tag_live_test.exs
@@ -33,14 +33,14 @@ defmodule CanneryWeb.TagLiveTest do
setup [:register_and_log_in_user, :create_tag]
test "lists all tags", %{conn: conn, tag: tag} do
- {:ok, _index_live, html} = live(conn, Routes.tag_index_path(conn, :index))
+ {:ok, _index_live, html} = live(conn, ~p"/tags")
assert html =~ "Tags"
assert html =~ tag.bg_color
end
test "can search for tag", %{conn: conn, tag: tag} do
- {:ok, index_live, html} = live(conn, Routes.tag_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/tags")
assert html =~ tag.name
@@ -48,26 +48,26 @@ defmodule CanneryWeb.TagLiveTest do
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: tag.name}) =~ tag.name
- assert_patch(index_live, Routes.tag_index_path(conn, :search, tag.name))
+ assert_patch(index_live, ~p"/tags/search/#{tag.name}")
refute index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: "something_else"}) =~ tag.name
- assert_patch(index_live, Routes.tag_index_path(conn, :search, "something_else"))
+ assert_patch(index_live, ~p"/tags/search/something_else")
assert index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: ""}) =~ tag.name
- assert_patch(index_live, Routes.tag_index_path(conn, :index))
+ assert_patch(index_live, ~p"/tags")
end
test "saves new tag", %{conn: conn} do
- {:ok, index_live, _html} = live(conn, Routes.tag_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/tags")
assert index_live |> element("a", "New Tag") |> render_click() =~ "New Tag"
- assert_patch(index_live, Routes.tag_index_path(conn, :new))
+ assert_patch(index_live, ~p"/tags/new")
assert index_live
|> form("#tag-form")
@@ -77,19 +77,19 @@ defmodule CanneryWeb.TagLiveTest do
index_live
|> form("#tag-form")
|> render_submit(tag: @create_attrs)
- |> follow_redirect(conn, Routes.tag_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/tags")
assert html =~ "some name created successfully"
assert html =~ "#100000"
end
test "updates tag in listing", %{conn: conn, tag: tag} do
- {:ok, index_live, _html} = live(conn, Routes.tag_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/tags")
assert index_live |> element(~s/a[aria-label="Edit #{tag.name}"]/) |> render_click() =~
"Edit Tag"
- assert_patch(index_live, Routes.tag_index_path(conn, :edit, tag))
+ assert_patch(index_live, ~p"/tags/edit/#{tag}")
assert index_live
|> form("#tag-form")
@@ -99,14 +99,14 @@ defmodule CanneryWeb.TagLiveTest do
index_live
|> form("#tag-form")
|> render_submit(tag: @update_attrs)
- |> follow_redirect(conn, Routes.tag_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/tags")
assert html =~ "some updated name updated successfully"
assert html =~ "#100001"
end
test "deletes tag in listing", %{conn: conn, tag: tag} do
- {:ok, index_live, _html} = live(conn, Routes.tag_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/tags")
assert index_live |> element(~s/a[aria-label="Delete #{tag.name}"]/) |> render_click()
refute has_element?(index_live, "#tag-#{tag.id}")
diff --git a/test/cannery_web/live/type_live_test.exs b/test/cannery_web/live/type_live_test.exs
index de342be2..83c16e4c 100644
--- a/test/cannery_web/live/type_live_test.exs
+++ b/test/cannery_web/live/type_live_test.exs
@@ -64,7 +64,7 @@ defmodule CanneryWeb.TypeLiveTest do
setup [:register_and_log_in_user, :create_type]
test "lists all types", %{conn: conn, type: type} do
- {:ok, _index_live, html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, _index_live, html} = live(conn, ~p"/catalog")
assert html =~ "Catalog"
assert html =~ type.bullet_type
end
@@ -74,7 +74,7 @@ defmodule CanneryWeb.TypeLiveTest do
shotgun_type = type_fixture(%{class: :shotgun}, current_user)
pistol_type = type_fixture(%{class: :pistol}, current_user)
- {:ok, index_live, html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/catalog")
assert html =~ "All"
@@ -120,7 +120,7 @@ defmodule CanneryWeb.TypeLiveTest do
end
test "can search for type", %{conn: conn, type: type} do
- {:ok, index_live, html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/catalog")
assert html =~ type.bullet_type
@@ -129,26 +129,26 @@ defmodule CanneryWeb.TypeLiveTest do
|> render_change(search: %{search_term: type.bullet_type}) =~
type.bullet_type
- assert_patch(index_live, Routes.type_index_path(conn, :search, type.bullet_type))
+ assert_patch(index_live, ~p"/catalog/search/#{type.bullet_type}")
refute index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: "something_else"}) =~ type.bullet_type
- assert_patch(index_live, Routes.type_index_path(conn, :search, "something_else"))
+ assert_patch(index_live, ~p"/catalog/search/something_else")
assert index_live
|> form(~s/form[phx-change="search"]/)
|> render_change(search: %{search_term: ""}) =~ type.bullet_type
- assert_patch(index_live, Routes.type_index_path(conn, :index))
+ assert_patch(index_live, ~p"/catalog")
end
test "saves new type", %{conn: conn, current_user: current_user, type: type} do
- {:ok, index_live, _html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/catalog")
assert index_live |> element("a", "New Type") |> render_click() =~ "New Type"
- assert_patch(index_live, Routes.type_index_path(conn, :new))
+ assert_patch(index_live, ~p"/catalog/new")
assert index_live
|> form("#type-form")
@@ -158,7 +158,7 @@ defmodule CanneryWeb.TypeLiveTest do
index_live
|> form("#type-form")
|> render_submit(type: @create_attrs)
- |> follow_redirect(conn, Routes.type_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/catalog")
type = type.id |> Ammo.get_type!(current_user)
assert html =~ "#{type.name} created successfully"
@@ -167,12 +167,12 @@ defmodule CanneryWeb.TypeLiveTest do
test "updates type in listing",
%{conn: conn, current_user: current_user, type: type} do
- {:ok, index_live, _html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/catalog")
assert index_live |> element(~s/a[aria-label="Edit #{type.name}"]/) |> render_click() =~
"Edit #{type.name}"
- assert_patch(index_live, Routes.type_index_path(conn, :edit, type))
+ assert_patch(index_live, ~p"/catalog/edit/#{type}")
assert index_live
|> form("#type-form")
@@ -182,7 +182,7 @@ defmodule CanneryWeb.TypeLiveTest do
index_live
|> form("#type-form")
|> render_submit(type: @update_attrs)
- |> follow_redirect(conn, Routes.type_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/catalog")
type = type.id |> Ammo.get_type!(current_user)
assert html =~ "#{type.name} updated successfully"
@@ -191,13 +191,13 @@ defmodule CanneryWeb.TypeLiveTest do
test "clones type in listing",
%{conn: conn, current_user: current_user, type: type} do
- {:ok, index_live, _html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/catalog")
html = index_live |> element(~s/a[aria-label="Clone #{type.name}"]/) |> render_click()
assert html =~ "New Type"
assert html =~ "some bullet_type"
- assert_patch(index_live, Routes.type_index_path(conn, :clone, type))
+ assert_patch(index_live, ~p"/catalog/clone/#{type}")
assert index_live
|> form("#type-form")
@@ -207,7 +207,7 @@ defmodule CanneryWeb.TypeLiveTest do
index_live
|> form("#type-form")
|> render_submit(type: @create_attrs)
- |> follow_redirect(conn, Routes.type_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/catalog")
type = type.id |> Ammo.get_type!(current_user)
assert html =~ "#{type.name} created successfully"
@@ -216,13 +216,13 @@ defmodule CanneryWeb.TypeLiveTest do
test "clones type in listing with updates",
%{conn: conn, current_user: current_user, type: type} do
- {:ok, index_live, _html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/catalog")
html = index_live |> element(~s/a[aria-label="Clone #{type.name}"]/) |> render_click()
assert html =~ "New Type"
assert html =~ "some bullet_type"
- assert_patch(index_live, Routes.type_index_path(conn, :clone, type))
+ assert_patch(index_live, ~p"/catalog/clone/#{type}")
assert index_live
|> form("#type-form")
@@ -234,7 +234,7 @@ defmodule CanneryWeb.TypeLiveTest do
|> render_submit(
type: Map.merge(@create_attrs, %{bullet_type: "some updated bullet_type"})
)
- |> follow_redirect(conn, Routes.type_index_path(conn, :index))
+ |> follow_redirect(conn, ~p"/catalog")
type = type.id |> Ammo.get_type!(current_user)
assert html =~ "#{type.name} created successfully"
@@ -242,7 +242,7 @@ defmodule CanneryWeb.TypeLiveTest do
end
test "deletes type in listing", %{conn: conn, type: type} do
- {:ok, index_live, _html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/catalog")
assert index_live |> element(~s/a[aria-label="Delete #{type.name}"]/) |> render_click()
refute has_element?(index_live, "#type-#{type.id}")
end
@@ -253,7 +253,7 @@ defmodule CanneryWeb.TypeLiveTest do
test "shows used packs on toggle",
%{conn: conn, pack: pack, current_user: current_user} do
- {:ok, index_live, html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, html} = live(conn, ~p"/catalog")
assert html =~ "Show used"
refute html =~ "Used rounds"
@@ -277,7 +277,7 @@ defmodule CanneryWeb.TypeLiveTest do
shot_record_fixture(%{count: 5}, current_user, pack)
- {:ok, index_live, _html} = live(conn, Routes.type_index_path(conn, :index))
+ {:ok, index_live, _html} = live(conn, ~p"/catalog")
html =
index_live
@@ -296,7 +296,7 @@ defmodule CanneryWeb.TypeLiveTest do
conn: conn,
type: %{name: name, bullet_type: bullet_type} = type
} do
- {:ok, _show_live, html} = live(conn, Routes.type_show_path(conn, :show, type))
+ {:ok, _show_live, html} = live(conn, ~p"/type/#{type}")
assert html =~ name
assert html =~ bullet_type
@@ -304,12 +304,12 @@ defmodule CanneryWeb.TypeLiveTest do
test "updates type within modal",
%{conn: conn, current_user: current_user, type: %{name: name} = type} do
- {:ok, show_live, _html} = live(conn, Routes.type_show_path(conn, :show, type))
+ {:ok, show_live, _html} = live(conn, ~p"/type/#{type}")
assert show_live |> element(~s/a[aria-label="Edit #{type.name}"]/) |> render_click() =~
"Edit #{name}"
- assert_patch(show_live, Routes.type_show_path(conn, :edit, type))
+ assert_patch(show_live, ~p"/type/#{type}/edit")
assert show_live
|> form("#type-form")
@@ -319,7 +319,7 @@ defmodule CanneryWeb.TypeLiveTest do
show_live
|> form("#type-form")
|> render_submit(type: @update_attrs)
- |> follow_redirect(conn, Routes.type_show_path(conn, :show, type))
+ |> follow_redirect(conn, ~p"/type/#{type}")
type = type.id |> Ammo.get_type!(current_user)
assert html =~ "#{type.name} updated successfully"
@@ -335,7 +335,7 @@ defmodule CanneryWeb.TypeLiveTest do
type: %{name: type_name} = type,
container: %{name: container_name}
} do
- {:ok, _show_live, html} = live(conn, Routes.type_show_path(conn, :show, type))
+ {:ok, _show_live, html} = live(conn, ~p"/type/#{type}")
assert html =~ type_name
assert html =~ "\n20\n"
@@ -344,7 +344,7 @@ defmodule CanneryWeb.TypeLiveTest do
test "displays pack in table",
%{conn: conn, type: type, container: %{name: container_name}} do
- {:ok, show_live, _html} = live(conn, Routes.type_show_path(conn, :show, type))
+ {:ok, show_live, _html} = live(conn, ~p"/type/#{type}")
html =
show_live
@@ -361,7 +361,7 @@ defmodule CanneryWeb.TypeLiveTest do
test "displays empty packs on toggle",
%{conn: conn, type: type, container: %{name: container_name}} do
- {:ok, show_live, html} = live(conn, Routes.type_show_path(conn, :show, type))
+ {:ok, show_live, html} = live(conn, ~p"/type/#{type}")
assert html =~ "Show used"
refute html =~ "\n20\n"
@@ -377,7 +377,7 @@ defmodule CanneryWeb.TypeLiveTest do
test "displays empty packs in table on toggle",
%{conn: conn, type: type, container: %{name: container_name}} do
- {:ok, show_live, _html} = live(conn, Routes.type_show_path(conn, :show, type))
+ {:ok, show_live, _html} = live(conn, ~p"/type/#{type}")
html =
show_live
diff --git a/test/cannery_web/views/error_view_test.exs b/test/cannery_web/views/error_view_test.exs
deleted file mode 100644
index 32e9bebd..00000000
--- a/test/cannery_web/views/error_view_test.exs
+++ /dev/null
@@ -1,19 +0,0 @@
-defmodule CanneryWeb.ErrorViewTest do
- @moduledoc """
- Tests the error view
- """
-
- use CanneryWeb.ConnCase, async: true
- # Bring render/3 and render_to_string/3 for testing custom views
- import Phoenix.View
-
- @moduletag :error_view_test
-
- test "renders 404.html" do
- assert render_to_string(CanneryWeb.ErrorView, "404.html", []) =~ "Not found"
- end
-
- test "renders 500.html" do
- assert render_to_string(CanneryWeb.ErrorView, "500.html", []) =~ "Internal Server Error"
- end
-end
diff --git a/test/cannery_web/views/home_view_test.exs b/test/cannery_web/views/home_view_test.exs
deleted file mode 100644
index daa7d5a0..00000000
--- a/test/cannery_web/views/home_view_test.exs
+++ /dev/null
@@ -1,8 +0,0 @@
-defmodule CanneryWeb.HomeViewTest do
- use CanneryWeb.ConnCase, async: true
-
- # When testing helpers, you may want to import Phoenix.HTML and
- # use functions such as safe_to_string() to convert the helper
- # result into an HTML string.
- # import Phoenix.HTML
-end
diff --git a/test/cannery_web/views/layout_view_test.exs b/test/cannery_web/views/layout_view_test.exs
deleted file mode 100644
index e83802f3..00000000
--- a/test/cannery_web/views/layout_view_test.exs
+++ /dev/null
@@ -1,8 +0,0 @@
-defmodule CanneryWeb.LayoutViewTest do
- use CanneryWeb.ConnCase, async: true
-
- # When testing helpers, you may want to import Phoenix.HTML and
- # use functions such as safe_to_string() to convert the helper
- # result into an HTML string.
- # import Phoenix.HTML
-end
diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex
index e1f7af4e..4d06a9e8 100644
--- a/test/support/conn_case.ex
+++ b/test/support/conn_case.ex
@@ -29,7 +29,7 @@ defmodule CanneryWeb.ConnCase do
import Cannery.{DataCase, Fixtures}
import CanneryWeb.ConnCase
- alias CanneryWeb.Router.Helpers, as: Routes
+ use CanneryWeb, :verified_routes
# The default endpoint for testing
@endpoint CanneryWeb.Endpoint