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 def new(conn, _params) do
conn conn
|> delete_session(:logged_in) |> 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 end
def create(conn, %{"password" => request_password}) do def create(conn, %{"password" => request_password}) do
if Plug.Crypto.secure_compare(password(), request_password) do if Plug.Crypto.secure_compare(password(), request_password) do
conn conn
|> put_session(:logged_in, true) |> put_session(:logged_in, true)
|> redirect(to: "/") |> redirect(to: ~p"/")
else else
conn conn
|> put_flash(:error, gettext("Invalid password")) |> put_flash(:error, gettext("Invalid password"))
@@ -4,6 +4,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
alias MusicLibrary.Records alias MusicLibrary.Records
alias MusicLibrary.Collection alias MusicLibrary.Collection
alias MusicLibraryWeb.CollectionLive.Show
@default_records_list_params %{ @default_records_list_params %{
query: "", query: "",
@@ -38,7 +39,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
end end
socket socket
|> assign(:page_title, gettext("Import from MusicBrainz")) |> assign(:page_title, gettext("Import from MusicBrainz · Collection"))
|> assign(:record, nil) |> assign(:record, nil)
end end
@@ -51,9 +52,11 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
socket socket
end end
record = Records.get_record!(id)
socket socket
|> assign(:page_title, gettext("Edit")) |> assign(:page_title, Show.page_title(socket.assigns.live_action, record))
|> assign(:record, Records.get_record!(id)) |> assign(:record, record)
end end
defp apply_action(socket, :index, params) do defp apply_action(socket, :index, params) do
@@ -31,7 +31,7 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
{:noreply, {:noreply,
socket socket
|> assign(:nav_section, :records) |> 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)} |> assign(:record, record)}
end end
@@ -88,8 +88,42 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
{:noreply, assign(socket, :record, record)} {:noreply, assign(socket, :record, record)}
end end
defp page_title(:show), do: gettext("Show") def page_title(:show, record) do
defp page_title(:edit), do: gettext("Edit") 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 defp musicbrainz_url(record) do
"https://musicbrainz.org/release-group/#{record.musicbrainz_id}" "https://musicbrainz.org/release-group/#{record.musicbrainz_id}"
@@ -4,6 +4,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
alias MusicLibrary.Wishlist alias MusicLibrary.Wishlist
alias MusicLibrary.Records alias MusicLibrary.Records
alias MusicLibraryWeb.WishlistLive.Show
@default_records_list_params %{ @default_records_list_params %{
query: "", query: "",
@@ -38,7 +39,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
end end
socket socket
|> assign(:page_title, gettext("Import from MusicBrainz")) |> assign(:page_title, gettext("Import from MusicBrainz · Wishlist"))
|> assign(:record, nil) |> assign(:record, nil)
end end
@@ -51,9 +52,11 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
socket socket
end end
record = Records.get_record!(id)
socket socket
|> assign(:page_title, gettext("Edit")) |> assign(:page_title, Show.page_title(socket.assigns.live_action, record))
|> assign(:record, Records.get_record!(id)) |> assign(:record, record)
end end
defp apply_action(socket, :index, params) do defp apply_action(socket, :index, params) do
@@ -26,11 +26,13 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
@impl true @impl true
def handle_params(%{"id" => id}, _, socket) do def handle_params(%{"id" => id}, _, socket) do
record = Records.get_record!(id)
{:noreply, {:noreply,
socket socket
|> assign(:nav_section, :wishlist) |> assign(:nav_section, :wishlist)
|> assign(:page_title, page_title(socket.assigns.live_action)) |> assign(:page_title, page_title(socket.assigns.live_action, record))
|> assign(:record, Records.get_record!(id))} |> assign(:record, record)}
end end
@impl true @impl true
@@ -86,8 +88,25 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
{:noreply, assign(socket, :record, record)} {:noreply, assign(socket, :record, record)}
end end
defp page_title(:show), do: gettext("Show") def page_title(action, record) do
defp page_title(:edit), do: gettext("Edit") 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 defp musicbrainz_url(record) do
"https://musicbrainz.org/release-group/#{record.musicbrainz_id}" "https://musicbrainz.org/release-group/#{record.musicbrainz_id}"
+38 -27
View File
@@ -51,7 +51,9 @@ msgid "Choose a value"
msgstr "" msgstr ""
#: lib/music_library_web/components/layouts/app.html.heex:13 #: lib/music_library_web/components/layouts/app.html.heex:13
#: lib/music_library_web/live/collection_live/index.ex:74 #: lib/music_library_web/live/collection_live/index.ex:77
#: lib/music_library_web/live/collection_live/show.ex:102
#: lib/music_library_web/live/collection_live/show.ex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Collection" msgid "Collection"
msgstr "" msgstr ""
@@ -69,23 +71,21 @@ msgstr ""
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:55
#: lib/music_library_web/live/collection_live/index.html.heex:176 #: lib/music_library_web/live/collection_live/index.html.heex:176
#: lib/music_library_web/live/collection_live/show.ex:92 #: lib/music_library_web/live/collection_live/show.ex:126
#: lib/music_library_web/live/collection_live/show.html.heex:32 #: lib/music_library_web/live/collection_live/show.html.heex:32
#: lib/music_library_web/live/wishlist_live/index.ex:55
#: lib/music_library_web/live/wishlist_live/index.html.heex:176 #: lib/music_library_web/live/wishlist_live/index.html.heex:176
#: lib/music_library_web/live/wishlist_live/show.ex:90 #: lib/music_library_web/live/wishlist_live/show.ex:109
#: lib/music_library_web/live/wishlist_live/show.html.heex:32 #: lib/music_library_web/live/wishlist_live/show.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:121 #: lib/music_library_web/live/collection_live/index.ex:124
#: lib/music_library_web/live/stats_live/index.ex:67 #: lib/music_library_web/live/stats_live/index.ex:67
#: lib/music_library_web/live/stats_live/index.ex:73 #: lib/music_library_web/live/stats_live/index.ex:73
#: lib/music_library_web/live/wishlist_live/index.ex:117 #: lib/music_library_web/live/wishlist_live/index.ex:120
#: lib/music_library_web/live/wishlist_live/index.ex:124 #: lib/music_library_web/live/wishlist_live/index.ex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error importing record" msgid "Error importing record"
msgstr "" msgstr ""
@@ -122,19 +122,13 @@ msgstr ""
msgid "Import" msgid "Import"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:41
#: lib/music_library_web/live/wishlist_live/index.ex:41
#, elixir-autogen, elixir-format
msgid "Import from MusicBrainz"
msgstr ""
#: lib/music_library_web/live/collection_live/show.html.heex:136 #: lib/music_library_web/live/collection_live/show.html.heex:136
#: lib/music_library_web/live/wishlist_live/show.html.heex:129 #: lib/music_library_web/live/wishlist_live/show.html.heex:129
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Inserted at" msgid "Inserted at"
msgstr "" msgstr ""
#: lib/music_library_web/controllers/session_controller.ex:19 #: lib/music_library_web/controllers/session_controller.ex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Invalid password" msgid "Invalid password"
msgstr "" msgstr ""
@@ -144,6 +138,7 @@ msgstr ""
msgid "Latest purchase" msgid "Latest purchase"
msgstr "" msgstr ""
#: lib/music_library_web/controllers/session_controller.ex:10
#: lib/music_library_web/controllers/session_html/new.html.heex:44 #: lib/music_library_web/controllers/session_html/new.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Login" msgid "Login"
@@ -209,15 +204,15 @@ msgstr ""
msgid "Purchased on" msgid "Purchased on"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:112 #: lib/music_library_web/live/collection_live/index.ex:115
#: lib/music_library_web/live/stats_live/index.ex:59 #: lib/music_library_web/live/stats_live/index.ex:59
#: lib/music_library_web/live/wishlist_live/index.ex:109 #: lib/music_library_web/live/wishlist_live/index.ex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record imported successfully" msgid "Record imported successfully"
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/form_component.ex:123 #: lib/music_library_web/live/record_live/form_component.ex:123
#: lib/music_library_web/live/wishlist_live/index.ex:137 #: lib/music_library_web/live/wishlist_live/index.ex:140
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Record updated successfully" msgid "Record updated successfully"
msgstr "" msgstr ""
@@ -254,9 +249,9 @@ msgid "Search for records"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.html.heex:156 #: lib/music_library_web/live/collection_live/index.html.heex:156
#: lib/music_library_web/live/collection_live/show.ex:91 #: lib/music_library_web/live/collection_live/show.ex:125
#: lib/music_library_web/live/wishlist_live/index.html.heex:156 #: lib/music_library_web/live/wishlist_live/index.html.heex:156
#: lib/music_library_web/live/wishlist_live/show.ex:89 #: lib/music_library_web/live/wishlist_live/show.ex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Show" msgid "Show"
msgstr "" msgstr ""
@@ -283,9 +278,9 @@ msgstr ""
msgid "Success!" msgid "Success!"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:18 #: lib/music_library_web/live/collection_live/index.ex:19
#: lib/music_library_web/live/collection_live/show.ex:19 #: lib/music_library_web/live/collection_live/show.ex:19
#: lib/music_library_web/live/wishlist_live/index.ex:18 #: lib/music_library_web/live/wishlist_live/index.ex:19
#: lib/music_library_web/live/wishlist_live/show.ex:19 #: lib/music_library_web/live/wishlist_live/show.ex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "The application has been updated, please reload." msgid "The application has been updated, please reload."
@@ -334,7 +329,8 @@ msgid "Welcome to your Music Library"
msgstr "" msgstr ""
#: lib/music_library_web/components/layouts/app.html.heex:19 #: lib/music_library_web/components/layouts/app.html.heex:19
#: lib/music_library_web/live/wishlist_live/index.ex:72 #: lib/music_library_web/live/wishlist_live/index.ex:75
#: lib/music_library_web/live/wishlist_live/show.ex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wishlist" msgid "Wishlist"
msgstr "" msgstr ""
@@ -398,13 +394,13 @@ msgid "Includes"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/show.ex:61 #: lib/music_library_web/live/collection_live/show.ex:61
#: lib/music_library_web/live/wishlist_live/show.ex:59 #: lib/music_library_web/live/wishlist_live/show.ex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error refreshing MusicBrainz data" msgid "Error refreshing MusicBrainz data"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/show.ex:53 #: lib/music_library_web/live/collection_live/show.ex:53
#: lib/music_library_web/live/wishlist_live/show.ex:51 #: lib/music_library_web/live/wishlist_live/show.ex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "MusicBrainz data refreshed successfully" msgid "MusicBrainz data refreshed successfully"
msgstr "" msgstr ""
@@ -415,7 +411,7 @@ msgid "Refresh LastFm Feed"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/show.ex:73 #: lib/music_library_web/live/collection_live/show.ex:73
#: lib/music_library_web/live/wishlist_live/show.ex:71 #: lib/music_library_web/live/wishlist_live/show.ex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Cover refreshed successfully" msgid "Cover refreshed successfully"
msgstr "" msgstr ""
@@ -440,7 +436,7 @@ msgstr ""
msgid "Refresh" msgid "Refresh"
msgstr "" msgstr ""
#: lib/music_library_web/live/wishlist_live/show.ex:79 #: lib/music_library_web/live/wishlist_live/show.ex:81
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error refreshing Cover" msgid "Error refreshing Cover"
msgstr "" msgstr ""
@@ -454,3 +450,18 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No MB ID" msgid "No MB ID"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/show.ex:100
#, elixir-autogen, elixir-format
msgid "Details"
msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:42
#, elixir-autogen, elixir-format
msgid "Import from MusicBrainz · Collection"
msgstr ""
#: lib/music_library_web/live/wishlist_live/index.ex:42
#, elixir-autogen, elixir-format
msgid "Import from MusicBrainz · Wishlist"
msgstr ""