From 2e40cbd5da5ea24e50c83ec5a468b0cd25610183 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Tue, 26 Nov 2024 21:00:53 +0000 Subject: [PATCH] Improve page titles - When showing a single record, use record details - Split title into logical breadcrumbs --- .../controllers/session_controller.ex | 8 ++- .../live/collection_live/index.ex | 9 ++- .../live/collection_live/show.ex | 40 +++++++++++- .../live/wishlist_live/index.ex | 9 ++- .../live/wishlist_live/show.ex | 27 ++++++-- priv/gettext/default.pot | 65 +++++++++++-------- 6 files changed, 116 insertions(+), 42 deletions(-) diff --git a/lib/music_library_web/controllers/session_controller.ex b/lib/music_library_web/controllers/session_controller.ex index 04bd1652..13edb760 100644 --- a/lib/music_library_web/controllers/session_controller.ex +++ b/lib/music_library_web/controllers/session_controller.ex @@ -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")) diff --git a/lib/music_library_web/live/collection_live/index.ex b/lib/music_library_web/live/collection_live/index.ex index b5c6c755..747be75c 100644 --- a/lib/music_library_web/live/collection_live/index.ex +++ b/lib/music_library_web/live/collection_live/index.ex @@ -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 diff --git a/lib/music_library_web/live/collection_live/show.ex b/lib/music_library_web/live/collection_live/show.ex index fa54436b..97913734 100644 --- a/lib/music_library_web/live/collection_live/show.ex +++ b/lib/music_library_web/live/collection_live/show.ex @@ -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}" diff --git a/lib/music_library_web/live/wishlist_live/index.ex b/lib/music_library_web/live/wishlist_live/index.ex index 54463d60..6e2e82d9 100644 --- a/lib/music_library_web/live/wishlist_live/index.ex +++ b/lib/music_library_web/live/wishlist_live/index.ex @@ -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 diff --git a/lib/music_library_web/live/wishlist_live/show.ex b/lib/music_library_web/live/wishlist_live/show.ex index 0338a1af..4d9359ba 100644 --- a/lib/music_library_web/live/wishlist_live/show.ex +++ b/lib/music_library_web/live/wishlist_live/show.ex @@ -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}" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 35c028bf..77e59e7d 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -51,7 +51,9 @@ msgid "Choose a value" msgstr "" #: 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 msgid "Collection" msgstr "" @@ -69,23 +71,21 @@ msgstr "" msgid "Delete" 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/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/wishlist_live/index.ex:55 #: 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 #, elixir-autogen, elixir-format msgid "Edit" 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:73 -#: lib/music_library_web/live/wishlist_live/index.ex:117 -#: lib/music_library_web/live/wishlist_live/index.ex:124 +#: lib/music_library_web/live/wishlist_live/index.ex:120 +#: lib/music_library_web/live/wishlist_live/index.ex:127 #, elixir-autogen, elixir-format msgid "Error importing record" msgstr "" @@ -122,19 +122,13 @@ msgstr "" msgid "Import" 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/wishlist_live/show.html.heex:129 #, elixir-autogen, elixir-format msgid "Inserted at" msgstr "" -#: lib/music_library_web/controllers/session_controller.ex:19 +#: lib/music_library_web/controllers/session_controller.ex:23 #, elixir-autogen, elixir-format msgid "Invalid password" msgstr "" @@ -144,6 +138,7 @@ msgstr "" msgid "Latest purchase" msgstr "" +#: lib/music_library_web/controllers/session_controller.ex:10 #: lib/music_library_web/controllers/session_html/new.html.heex:44 #, elixir-autogen, elixir-format msgid "Login" @@ -209,15 +204,15 @@ msgstr "" msgid "Purchased on" 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/wishlist_live/index.ex:109 +#: lib/music_library_web/live/wishlist_live/index.ex:112 #, elixir-autogen, elixir-format msgid "Record imported successfully" msgstr "" #: 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 msgid "Record updated successfully" msgstr "" @@ -254,9 +249,9 @@ msgid "Search for records" msgstr "" #: 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/show.ex:89 +#: lib/music_library_web/live/wishlist_live/show.ex:108 #, elixir-autogen, elixir-format msgid "Show" msgstr "" @@ -283,9 +278,9 @@ msgstr "" msgid "Success!" 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/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 #, elixir-autogen, elixir-format msgid "The application has been updated, please reload." @@ -334,7 +329,8 @@ msgid "Welcome to your Music Library" msgstr "" #: 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 msgid "Wishlist" msgstr "" @@ -398,13 +394,13 @@ msgid "Includes" msgstr "" #: 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 msgid "Error refreshing MusicBrainz data" msgstr "" #: 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 msgid "MusicBrainz data refreshed successfully" msgstr "" @@ -415,7 +411,7 @@ msgid "Refresh LastFm Feed" msgstr "" #: 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 msgid "Cover refreshed successfully" msgstr "" @@ -440,7 +436,7 @@ msgstr "" msgid "Refresh" 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 msgid "Error refreshing Cover" msgstr "" @@ -454,3 +450,18 @@ msgstr "" #, elixir-autogen, elixir-format msgid "No MB ID" 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 ""