Improve page titles

- When showing a single record, use record details
- Split title into logical breadcrumbs
This commit is contained in:
Claudio Ortolina
2024-11-26 21:00:53 +00:00
parent b8a89a041d
commit 2e40cbd5da
6 changed files with 116 additions and 42 deletions
@@ -6,14 +6,18 @@ defmodule MusicLibraryWeb.SessionController do
def new(conn, _params) do
conn
|> delete_session(:logged_in)
|> render(:new, form: @empty_form, layout: {MusicLibraryWeb.Layouts, "unauthenticated"})
|> render(:new,
page_title: gettext("Login"),
form: @empty_form,
layout: {MusicLibraryWeb.Layouts, "unauthenticated"}
)
end
def create(conn, %{"password" => request_password}) do
if Plug.Crypto.secure_compare(password(), request_password) do
conn
|> put_session(:logged_in, true)
|> redirect(to: "/")
|> redirect(to: ~p"/")
else
conn
|> put_flash(:error, gettext("Invalid password"))
@@ -4,6 +4,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
alias MusicLibrary.Records
alias MusicLibrary.Collection
alias MusicLibraryWeb.CollectionLive.Show
@default_records_list_params %{
query: "",
@@ -38,7 +39,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
end
socket
|> assign(:page_title, gettext("Import from MusicBrainz"))
|> assign(:page_title, gettext("Import from MusicBrainz · Collection"))
|> assign(:record, nil)
end
@@ -51,9 +52,11 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
socket
end
record = Records.get_record!(id)
socket
|> assign(:page_title, gettext("Edit"))
|> assign(:record, Records.get_record!(id))
|> assign(:page_title, Show.page_title(socket.assigns.live_action, record))
|> assign(:record, record)
end
defp apply_action(socket, :index, params) do
@@ -31,7 +31,7 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
{:noreply,
socket
|> assign(:nav_section, :records)
|> assign(:page_title, page_title(socket.assigns.live_action))
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|> assign(:record, record)}
end
@@ -88,8 +88,42 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
{:noreply, assign(socket, :record, record)}
end
defp page_title(:show), do: gettext("Show")
defp page_title(:edit), do: gettext("Edit")
def page_title(:show, record) do
artist_names = Enum.map(record.artists, & &1.name)
Enum.join(
[
Enum.join(artist_names, ", "),
"-",
record.title,
"·",
gettext("Details"),
"·",
gettext("Collection")
],
" "
)
end
def page_title(action, record) do
artist_names = Enum.map(record.artists, & &1.name)
Enum.join(
[
Enum.join(artist_names, ", "),
"-",
record.title,
"·",
title_segment(action),
"·",
gettext("Collection")
],
" "
)
end
defp title_segment(:show), do: gettext("Show")
defp title_segment(:edit), do: gettext("Edit")
defp musicbrainz_url(record) do
"https://musicbrainz.org/release-group/#{record.musicbrainz_id}"
@@ -4,6 +4,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
alias MusicLibrary.Wishlist
alias MusicLibrary.Records
alias MusicLibraryWeb.WishlistLive.Show
@default_records_list_params %{
query: "",
@@ -38,7 +39,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
end
socket
|> assign(:page_title, gettext("Import from MusicBrainz"))
|> assign(:page_title, gettext("Import from MusicBrainz · Wishlist"))
|> assign(:record, nil)
end
@@ -51,9 +52,11 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
socket
end
record = Records.get_record!(id)
socket
|> assign(:page_title, gettext("Edit"))
|> assign(:record, Records.get_record!(id))
|> assign(:page_title, Show.page_title(socket.assigns.live_action, record))
|> assign(:record, record)
end
defp apply_action(socket, :index, params) do
@@ -26,11 +26,13 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
@impl true
def handle_params(%{"id" => id}, _, socket) do
record = Records.get_record!(id)
{:noreply,
socket
|> assign(:nav_section, :wishlist)
|> assign(:page_title, page_title(socket.assigns.live_action))
|> assign(:record, Records.get_record!(id))}
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|> assign(:record, record)}
end
@impl true
@@ -86,8 +88,25 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
{:noreply, assign(socket, :record, record)}
end
defp page_title(:show), do: gettext("Show")
defp page_title(:edit), do: gettext("Edit")
def page_title(action, record) do
artist_names = Enum.map(record.artists, & &1.name)
Enum.join(
[
Enum.join(artist_names, ", "),
"-",
record.title,
"·",
title_segment(action),
"·",
gettext("Wishlist")
],
" "
)
end
defp title_segment(:show), do: gettext("Show")
defp title_segment(:edit), do: gettext("Edit")
defp musicbrainz_url(record) do
"https://musicbrainz.org/release-group/#{record.musicbrainz_id}"