v4: the header has two playlists links, each to its own page — it had three: the text button and the avatar menu's "Playlists" both led to the user's own playlists, and the menu's "All playlists" to /playlists. The text button now leads to /playlists, every public playlist, and shows to guests too, the page being open to them. The menu keeps one entry, "My playlists", to the user's own. Below 1150px, where the text button is hidden, the header no longer links to /playlists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-10 08:29:08 +00:00
parent 28f910b00e
commit 7dd00068df
8 changed files with 131 additions and 142 deletions

File diff suppressed because one or more lines are too long

View File

@@ -24,7 +24,7 @@ msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# comment} other {# comments}}"
#. placeholder {0}: playlist.dumpCount
#: src/components/playlist/PlaylistCard.tsx:120
#: src/components/playlist/PlaylistCard.tsx:125
msgid "{0, plural, one {# dump} other {# dumps}}"
msgstr "{0, plural, one {# dump} other {# dumps}}"
@@ -60,7 +60,7 @@ msgstr "{0}–{1} characters: letters, numbers, or underscores"
msgid "email.digest.totals"
msgstr "{dumps, plural, one {# dump} other {# dumps}}, {upvotes, plural, one {# upvote} other {# upvotes}} and {comments, plural, one {# comment} other {# comments}}."
#: src/pages/Search.tsx:178
#: src/pages/Search.tsx:215
msgid "{label} ({count})"
msgstr "{label} ({count})"
@@ -211,9 +211,9 @@ msgstr "# Welcome to {site}!\n"
msgid "← Back"
msgstr "← Back"
#: src/pages/Dump.tsx:353
#: src/pages/Dump.tsx:378
#: src/pages/Dump.tsx:605
#: src/pages/Dump.tsx:354
#: src/pages/Dump.tsx:379
#: src/pages/Dump.tsx:606
#: src/pages/DumpEdit.tsx:234
msgid "← Back to all dumps"
msgstr "← Back to all dumps"
@@ -226,7 +226,7 @@ msgstr "+ Invite someone"
msgid "+ New playlist"
msgstr "+ New playlist"
#: src/pages/Dump.tsx:452
#: src/pages/Dump.tsx:453
msgid "+ Playlist"
msgstr "+ Playlist"
@@ -345,10 +345,6 @@ msgstr "Admin"
msgid "All"
msgstr "All"
#: src/components/layout/UserMenu.tsx:108
msgid "All playlists"
msgstr "All playlists"
#. placeholder {0}: first.ownerUsername
#. placeholder {1}: relativeTime(first.createdAt)
#: src/components/dump/create/DuplicateNotice.tsx:39
@@ -419,7 +415,7 @@ msgstr "by @{username}"
msgid "email.digest.playlistMeta"
msgstr "by @{username} · {n, plural, one {# dump} other {# dumps}}"
#: src/contexts/ws/WSProvider.tsx:376
#: src/contexts/ws/WSProvider.tsx:377
#: src/contexts/ws/WSProvider.tsx:765
msgid "Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects."
msgstr "Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects."
@@ -440,7 +436,7 @@ msgstr "Can't sign in there"
#: src/components/profile/EmailEditor.tsx:83
#: src/components/shared/ConfirmModal.tsx:63
#: src/pages/Authorize.tsx:158
#: src/pages/Dump.tsx:494
#: src/pages/Dump.tsx:495
#: src/pages/DumpEdit.tsx:561
msgid "Cancel"
msgstr "Cancel"
@@ -454,7 +450,7 @@ msgstr "Cancel removal"
msgid "Cancel reply"
msgstr "Cancel reply"
#: src/components/layout/AppHeader.tsx:182
#: src/components/layout/AppHeader.tsx:177
msgid "Cancel search"
msgstr "Cancel search"
@@ -679,7 +675,7 @@ msgstr "Delete dump"
msgid "Delete failed ({0})"
msgstr "Delete failed ({0})"
#: src/components/playlist/PlaylistCard.tsx:149
#: src/components/playlist/PlaylistCard.tsx:154
#: src/components/playlist/PlaylistEditForm.tsx:213
#: src/components/profile/ProfilePlaylistsTab.tsx:201
#: src/pages/PlaylistDetail.tsx:172
@@ -753,7 +749,7 @@ msgstr "Drop a file here, or paste one"
msgid "Drop a replacement here"
msgstr "Drop a replacement here"
#: src/components/layout/AppHeader.tsx:201
#: src/components/layout/AppHeader.tsx:196
msgid "Dump"
msgstr "Dump"
@@ -770,7 +766,7 @@ msgid "Dumped!"
msgstr "Dumped!"
#: src/components/profile/ProfileDumpsTab.tsx:46
#: src/pages/Search.tsx:174
#: src/pages/Search.tsx:211
#: src/pages/UserPublicProfile.tsx:160
msgid "Dumps"
msgstr "Dumps"
@@ -789,7 +785,7 @@ msgstr "Earlier"
#: src/components/chat/PendingItem.tsx:93
#: src/components/comment/CommentNode.tsx:256
#: src/components/playlist/PlaylistHeader.tsx:60
#: src/pages/Dump.tsx:601
#: src/pages/Dump.tsx:602
msgid "Edit"
msgstr "Edit"
@@ -807,7 +803,7 @@ msgid "Edit email"
msgstr "Edit email"
#: src/components/dump/create/TitleField.tsx:69
#: src/pages/Dump.tsx:511
#: src/pages/Dump.tsx:512
msgid "Edit title"
msgstr "Edit title"
@@ -821,7 +817,7 @@ msgstr "edited"
#: src/components/chat/ChatMessageItem.tsx:132
#: src/components/comment/CommentNode.tsx:205
#: src/components/playlist/PlaylistHeader.tsx:95
#: src/pages/Dump.tsx:554
#: src/pages/Dump.tsx:555
msgid "edited {0}"
msgstr "edited {0}"
@@ -831,7 +827,7 @@ msgstr "edited {0}"
#: src/components/chat/ChatMessageItem.tsx:128
#: src/components/comment/CommentNode.tsx:203
#: src/components/playlist/PlaylistHeader.tsx:93
#: src/pages/Dump.tsx:552
#: src/pages/Dump.tsx:553
msgid "Edited {0}"
msgstr "Edited {0}"
@@ -852,7 +848,7 @@ msgstr "Email"
msgid "Email address"
msgstr "Email address"
#: src/pages/Search.tsx:230
#: src/pages/Search.tsx:267
msgid "Enter a query to search."
msgstr "Enter a query to search."
@@ -1025,7 +1021,7 @@ msgstr "If you didn't ask for this, ignore this email. Your password stays the s
msgid "image"
msgstr "image"
#: src/pages/Dump.tsx:621
#: src/pages/Dump.tsx:622
msgid "In collections"
msgstr "In collections"
@@ -1114,7 +1110,7 @@ msgstr "Link or file"
msgid "Live updates are temporarily disconnected. Trying to reconnect…"
msgstr "Live updates are temporarily disconnected. Trying to reconnect…"
#: src/components/layout/AppHeader.tsx:234
#: src/components/layout/AppHeader.tsx:229
msgid "Live updates unavailable."
msgstr "Live updates unavailable."
@@ -1126,7 +1122,7 @@ msgstr "Load more"
msgid "Load older messages"
msgstr "Load older messages"
#: src/pages/Dump.tsx:337
#: src/pages/Dump.tsx:338
#: src/pages/DumpEdit.tsx:210
msgid "Loading dump…"
msgstr "Loading dump…"
@@ -1159,7 +1155,7 @@ msgstr "Loading profile…"
msgid "Loading…"
msgstr "Loading…"
#: src/components/layout/AppHeader.tsx:208
#: src/components/layout/AppHeader.tsx:203
#: src/pages/FederationCallback.tsx:32
#: src/pages/UserLogin.tsx:41
#: src/pages/UserLogin.tsx:66
@@ -1180,7 +1176,7 @@ msgstr "Log in to vote"
msgid "Log in with {0}"
msgstr "Log in with {0}"
#: src/components/layout/UserMenu.tsx:139
#: src/components/layout/UserMenu.tsx:128
#: src/pages/UserPublicProfile.tsx:133
msgid "Log out"
msgstr "Log out"
@@ -1198,7 +1194,7 @@ msgstr "Login failed"
msgid "Lowercase letters, numbers and single hyphens only"
msgstr "Lowercase letters, numbers and single hyphens only"
#: src/components/layout/UserMenu.tsx:126
#: src/components/layout/UserMenu.tsx:115
#: src/pages/Manage.tsx:32
#: src/pages/Manage.tsx:40
#: src/pages/UserPublicProfile.tsx:166
@@ -1222,6 +1218,10 @@ msgstr "Monthly recap"
msgid "Mute"
msgstr "Mute"
#: src/components/layout/UserMenu.tsx:89
msgid "My playlists"
msgstr "My playlists"
#: src/components/category/CategoryManager.tsx:208
#: src/components/category/CategoryManager.tsx:209
msgid "Name"
@@ -1272,7 +1272,7 @@ msgstr "Next track"
msgid "No dumps in this playlist yet."
msgstr "No dumps in this playlist yet."
#: src/pages/Search.tsx:246
#: src/pages/Search.tsx:283
msgid "No dumps match \"{q}\"."
msgstr "No dumps match \"{q}\"."
@@ -1301,7 +1301,7 @@ msgstr "No messages yet. Say hello!"
msgid "No one yet."
msgstr "No one yet."
#: src/pages/Search.tsx:287
#: src/pages/Search.tsx:330
msgid "No playlists match \"{q}\"."
msgstr "No playlists match \"{q}\"."
@@ -1315,7 +1315,7 @@ msgstr "No playlists yet."
msgid "No reply from the server — this message may not have been sent"
msgstr "No reply from the server — this message may not have been sent"
#: src/pages/Search.tsx:261
#: src/pages/Search.tsx:298
msgid "No users match \"{q}\"."
msgstr "No users match \"{q}\"."
@@ -1468,13 +1468,12 @@ msgid "Playlist categories"
msgstr "Playlist categories"
#: src/components/dump/create/StepIndicator.tsx:21
#: src/components/layout/AppHeader.tsx:172
#: src/components/layout/UserMenu.tsx:92
#: src/components/layout/AppHeader.tsx:169
#: src/components/profile/ProfileFollowTab.tsx:148
#: src/components/profile/ProfilePlaylistsTab.tsx:149
#: src/pages/Playlists.tsx:53
#: src/pages/Playlists.tsx:114
#: src/pages/Search.tsx:177
#: src/pages/Search.tsx:214
#: src/pages/UserPublicProfile.tsx:162
msgid "Playlists"
msgstr "Playlists"
@@ -1499,10 +1498,10 @@ msgstr "Previous track"
#: src/components/dump/DumpCard.tsx:144
#: src/components/dump/JournalCard.tsx:145
#: src/components/playlist/PlaylistCard.tsx:106
#: src/components/playlist/PlaylistCard.tsx:111
#: src/components/playlist/PlaylistHeader.tsx:77
#: src/components/playlist/PlaylistMembershipPanel.tsx:81
#: src/pages/Dump.tsx:560
#: src/pages/Dump.tsx:561
msgid "private"
msgstr "private"
@@ -1510,7 +1509,7 @@ msgstr "private"
msgid "Private"
msgstr "Private"
#: src/components/playlist/PlaylistCard.tsx:105
#: src/components/playlist/PlaylistCard.tsx:110
#: src/components/playlist/PlaylistHeader.tsx:77
msgid "public"
msgstr "public"
@@ -1545,7 +1544,7 @@ msgstr "Registering…"
msgid "Registration failed"
msgstr "Registration failed"
#: src/pages/Dump.tsx:612
#: src/pages/Dump.tsx:613
msgid "Related"
msgstr "Related"
@@ -1632,7 +1631,7 @@ msgid "email.reset.title"
msgstr "Reset your password"
#: src/components/chat/PendingItem.tsx:86
#: src/pages/Dump.tsx:371
#: src/pages/Dump.tsx:372
#: src/pages/DumpEdit.tsx:227
msgid "Retry"
msgstr "Retry"
@@ -1647,7 +1646,7 @@ msgstr "Role"
#: src/components/playlist/PlaylistEditForm.tsx:229
#: src/components/profile/DescriptionEditor.tsx:89
#: src/components/profile/EmailEditor.tsx:75
#: src/pages/Dump.tsx:486
#: src/pages/Dump.tsx:487
#: src/pages/DumpEdit.tsx:564
msgid "Save"
msgstr "Save"
@@ -1657,14 +1656,14 @@ msgstr "Save"
#: src/components/profile/ChangePasswordModal.tsx:119
#: src/components/profile/DescriptionEditor.tsx:86
#: src/components/profile/EmailEditor.tsx:72
#: src/pages/Dump.tsx:485
#: src/pages/Dump.tsx:486
#: src/pages/ResetPassword.tsx:191
msgid "Saving…"
msgstr "Saving…"
#: src/components/layout/AppHeader.tsx:182
#: src/components/layout/AppHeader.tsx:177
#: src/components/layout/SearchBar.tsx:83
#: src/pages/Search.tsx:90
#: src/pages/Search.tsx:106
msgid "Search"
msgstr "Search"
@@ -1680,11 +1679,11 @@ msgstr "Search emoji"
msgid "Search emoji…"
msgstr "Search emoji…"
#: src/pages/Search.tsx:241
#: src/pages/Search.tsx:278
msgid "Search failed"
msgstr "Search failed"
#: src/pages/Search.tsx:236
#: src/pages/Search.tsx:273
msgid "Searching…"
msgstr "Searching…"
@@ -1710,7 +1709,7 @@ msgstr "Send reset link"
msgid "Sending…"
msgstr "Sending…"
#: src/components/layout/AppHeader.tsx:198
#: src/components/layout/AppHeader.tsx:193
msgid "Server unreachable"
msgstr "Server unreachable"
@@ -1724,7 +1723,7 @@ msgstr "Set new password"
msgid "email.settings"
msgstr "Settings"
#: src/components/layout/UserMenu.tsx:116
#: src/components/layout/UserMenu.tsx:105
#: src/pages/Settings.tsx:75
#: src/pages/Settings.tsx:88
msgid "Settings"
@@ -1831,7 +1830,7 @@ msgstr "The new order couldn't be saved. Try again."
msgid "This comment couldn't be deleted. Try again."
msgstr "This comment couldn't be deleted. Try again."
#: src/pages/Dump.tsx:346
#: src/pages/Dump.tsx:347
msgid "This dump was deleted, or made private."
msgstr "This dump was deleted, or made private."
@@ -2028,7 +2027,7 @@ msgstr "User"
msgid "User management"
msgstr "User management"
#: src/components/layout/UserMenu.tsx:67
#: src/components/layout/UserMenu.tsx:64
msgid "User menu"
msgstr "User menu"
@@ -2041,7 +2040,7 @@ msgid "Username"
msgstr "Username"
#: src/components/profile/ProfileFollowTab.tsx:147
#: src/pages/Search.tsx:176
#: src/pages/Search.tsx:213
msgid "Users"
msgstr "Users"

File diff suppressed because one or more lines are too long

View File

@@ -24,7 +24,7 @@ msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# commentaire} other {# commentaires}}"
#. placeholder {0}: playlist.dumpCount
#: src/components/playlist/PlaylistCard.tsx:120
#: src/components/playlist/PlaylistCard.tsx:125
msgid "{0, plural, one {# dump} other {# dumps}}"
msgstr "{0, plural, one {# reco} other {# recos}}"
@@ -60,7 +60,7 @@ msgstr "{0}–{1} caractères : lettres, chiffres ou tirets bas"
msgid "email.digest.totals"
msgstr "{dumps, plural, one {# reco} other {# recos}}, {upvotes, plural, one {# vote} other {# votes}} et {comments, plural, one {# commentaire} other {# commentaires}}."
#: src/pages/Search.tsx:178
#: src/pages/Search.tsx:215
msgid "{label} ({count})"
msgstr "{label} ({count})"
@@ -211,9 +211,9 @@ msgstr "# Bienvenue sur {site} !\n"
msgid "← Back"
msgstr "← Retour"
#: src/pages/Dump.tsx:353
#: src/pages/Dump.tsx:378
#: src/pages/Dump.tsx:605
#: src/pages/Dump.tsx:354
#: src/pages/Dump.tsx:379
#: src/pages/Dump.tsx:606
#: src/pages/DumpEdit.tsx:234
msgid "← Back to all dumps"
msgstr "← Retour à toutes les recos"
@@ -226,7 +226,7 @@ msgstr "+ Inviter quelqu'un"
msgid "+ New playlist"
msgstr "+ Nouvelle collection"
#: src/pages/Dump.tsx:452
#: src/pages/Dump.tsx:453
msgid "+ Playlist"
msgstr "+ Collection"
@@ -345,10 +345,6 @@ msgstr "Administrateur"
msgid "All"
msgstr "Tout"
#: src/components/layout/UserMenu.tsx:108
msgid "All playlists"
msgstr "Toutes les collections"
#. placeholder {0}: first.ownerUsername
#. placeholder {1}: relativeTime(first.createdAt)
#: src/components/dump/create/DuplicateNotice.tsx:39
@@ -419,7 +415,7 @@ msgstr "par @{username}"
msgid "email.digest.playlistMeta"
msgstr "par @{username} · {n, plural, one {# reco} other {# recos}}"
#: src/contexts/ws/WSProvider.tsx:376
#: src/contexts/ws/WSProvider.tsx:377
#: src/contexts/ws/WSProvider.tsx:765
msgid "Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects."
msgstr "Impossible de se connecter au serveur de mises à jour en direct. Les votes et les notifications pourraient ne pas se synchroniser avant la reconnexion."
@@ -440,7 +436,7 @@ msgstr "Connexion impossible"
#: src/components/profile/EmailEditor.tsx:83
#: src/components/shared/ConfirmModal.tsx:63
#: src/pages/Authorize.tsx:158
#: src/pages/Dump.tsx:494
#: src/pages/Dump.tsx:495
#: src/pages/DumpEdit.tsx:561
msgid "Cancel"
msgstr "Annuler"
@@ -454,7 +450,7 @@ msgstr "Annuler la suppression"
msgid "Cancel reply"
msgstr "Annuler la réponse"
#: src/components/layout/AppHeader.tsx:182
#: src/components/layout/AppHeader.tsx:177
msgid "Cancel search"
msgstr "Annuler la recherche"
@@ -679,7 +675,7 @@ msgstr "Supprimer la reco"
msgid "Delete failed ({0})"
msgstr "Échec de la suppression ({0})"
#: src/components/playlist/PlaylistCard.tsx:149
#: src/components/playlist/PlaylistCard.tsx:154
#: src/components/playlist/PlaylistEditForm.tsx:213
#: src/components/profile/ProfilePlaylistsTab.tsx:201
#: src/pages/PlaylistDetail.tsx:172
@@ -753,7 +749,7 @@ msgstr "Déposez un fichier ici, ou collez-en un"
msgid "Drop a replacement here"
msgstr "Déposez un fichier de remplacement ici"
#: src/components/layout/AppHeader.tsx:201
#: src/components/layout/AppHeader.tsx:196
msgid "Dump"
msgstr "Reco"
@@ -770,7 +766,7 @@ msgid "Dumped!"
msgstr "Recommandé !"
#: src/components/profile/ProfileDumpsTab.tsx:46
#: src/pages/Search.tsx:174
#: src/pages/Search.tsx:211
#: src/pages/UserPublicProfile.tsx:160
msgid "Dumps"
msgstr "Recos"
@@ -789,7 +785,7 @@ msgstr "Plus tôt"
#: src/components/chat/PendingItem.tsx:93
#: src/components/comment/CommentNode.tsx:256
#: src/components/playlist/PlaylistHeader.tsx:60
#: src/pages/Dump.tsx:601
#: src/pages/Dump.tsx:602
msgid "Edit"
msgstr "Modifier"
@@ -807,7 +803,7 @@ msgid "Edit email"
msgstr "Modifier l'e-mail"
#: src/components/dump/create/TitleField.tsx:69
#: src/pages/Dump.tsx:511
#: src/pages/Dump.tsx:512
msgid "Edit title"
msgstr "Modifier le titre"
@@ -821,7 +817,7 @@ msgstr "modifié"
#: src/components/chat/ChatMessageItem.tsx:132
#: src/components/comment/CommentNode.tsx:205
#: src/components/playlist/PlaylistHeader.tsx:95
#: src/pages/Dump.tsx:554
#: src/pages/Dump.tsx:555
msgid "edited {0}"
msgstr "modifié {0}"
@@ -831,7 +827,7 @@ msgstr "modifié {0}"
#: src/components/chat/ChatMessageItem.tsx:128
#: src/components/comment/CommentNode.tsx:203
#: src/components/playlist/PlaylistHeader.tsx:93
#: src/pages/Dump.tsx:552
#: src/pages/Dump.tsx:553
msgid "Edited {0}"
msgstr "Modifié le {0}"
@@ -852,7 +848,7 @@ msgstr "E-mail"
msgid "Email address"
msgstr "Adresse e-mail"
#: src/pages/Search.tsx:230
#: src/pages/Search.tsx:267
msgid "Enter a query to search."
msgstr "Saisissez une recherche."
@@ -1025,7 +1021,7 @@ msgstr "Si vous n'êtes pas à l'origine de cette demande, ignorez cet e-mail. V
msgid "image"
msgstr "image"
#: src/pages/Dump.tsx:621
#: src/pages/Dump.tsx:622
msgid "In collections"
msgstr "Dans les collections"
@@ -1114,7 +1110,7 @@ msgstr "Lien ou fichier"
msgid "Live updates are temporarily disconnected. Trying to reconnect…"
msgstr "Les mises à jour en direct sont temporairement interrompues. Tentative de reconnexion…"
#: src/components/layout/AppHeader.tsx:234
#: src/components/layout/AppHeader.tsx:229
msgid "Live updates unavailable."
msgstr "Mises à jour en direct indisponibles."
@@ -1126,7 +1122,7 @@ msgstr "Charger plus"
msgid "Load older messages"
msgstr "Charger les messages plus anciens"
#: src/pages/Dump.tsx:337
#: src/pages/Dump.tsx:338
#: src/pages/DumpEdit.tsx:210
msgid "Loading dump…"
msgstr "Chargement de la reco…"
@@ -1159,7 +1155,7 @@ msgstr "Chargement du profil…"
msgid "Loading…"
msgstr "Chargement…"
#: src/components/layout/AppHeader.tsx:208
#: src/components/layout/AppHeader.tsx:203
#: src/pages/FederationCallback.tsx:32
#: src/pages/UserLogin.tsx:41
#: src/pages/UserLogin.tsx:66
@@ -1180,7 +1176,7 @@ msgstr "Se connecter pour valider"
msgid "Log in with {0}"
msgstr "Se connecter avec {0}"
#: src/components/layout/UserMenu.tsx:139
#: src/components/layout/UserMenu.tsx:128
#: src/pages/UserPublicProfile.tsx:133
msgid "Log out"
msgstr "Se déconnecter"
@@ -1198,7 +1194,7 @@ msgstr "Connexion échouée"
msgid "Lowercase letters, numbers and single hyphens only"
msgstr "Minuscules, chiffres et tirets simples seulement"
#: src/components/layout/UserMenu.tsx:126
#: src/components/layout/UserMenu.tsx:115
#: src/pages/Manage.tsx:32
#: src/pages/Manage.tsx:40
#: src/pages/UserPublicProfile.tsx:166
@@ -1222,6 +1218,10 @@ msgstr "Récap mensuel"
msgid "Mute"
msgstr "Couper le son"
#: src/components/layout/UserMenu.tsx:89
msgid "My playlists"
msgstr "Mes collections"
#: src/components/category/CategoryManager.tsx:208
#: src/components/category/CategoryManager.tsx:209
msgid "Name"
@@ -1272,7 +1272,7 @@ msgstr "Piste suivante"
msgid "No dumps in this playlist yet."
msgstr "Aucune reco dans cette collection pour l'instant."
#: src/pages/Search.tsx:246
#: src/pages/Search.tsx:283
msgid "No dumps match \"{q}\"."
msgstr "Aucune reco ne correspond à « {q} »."
@@ -1301,7 +1301,7 @@ msgstr "Aucun message pour l'instant. Dites bonjour !"
msgid "No one yet."
msgstr "Personne pour le moment."
#: src/pages/Search.tsx:287
#: src/pages/Search.tsx:330
msgid "No playlists match \"{q}\"."
msgstr "Aucune collection ne correspond à « {q} »."
@@ -1315,7 +1315,7 @@ msgstr "Pas encore de collections."
msgid "No reply from the server — this message may not have been sent"
msgstr "Pas de réponse du serveur — ce message n'a peut-être pas été envoyé"
#: src/pages/Search.tsx:261
#: src/pages/Search.tsx:298
msgid "No users match \"{q}\"."
msgstr "Aucun utilisateur ne correspond à « {q} »."
@@ -1468,13 +1468,12 @@ msgid "Playlist categories"
msgstr "Catégories de collections"
#: src/components/dump/create/StepIndicator.tsx:21
#: src/components/layout/AppHeader.tsx:172
#: src/components/layout/UserMenu.tsx:92
#: src/components/layout/AppHeader.tsx:169
#: src/components/profile/ProfileFollowTab.tsx:148
#: src/components/profile/ProfilePlaylistsTab.tsx:149
#: src/pages/Playlists.tsx:53
#: src/pages/Playlists.tsx:114
#: src/pages/Search.tsx:177
#: src/pages/Search.tsx:214
#: src/pages/UserPublicProfile.tsx:162
msgid "Playlists"
msgstr "Collections"
@@ -1499,10 +1498,10 @@ msgstr "Piste précédente"
#: src/components/dump/DumpCard.tsx:144
#: src/components/dump/JournalCard.tsx:145
#: src/components/playlist/PlaylistCard.tsx:106
#: src/components/playlist/PlaylistCard.tsx:111
#: src/components/playlist/PlaylistHeader.tsx:77
#: src/components/playlist/PlaylistMembershipPanel.tsx:81
#: src/pages/Dump.tsx:560
#: src/pages/Dump.tsx:561
msgid "private"
msgstr "privé"
@@ -1510,7 +1509,7 @@ msgstr "privé"
msgid "Private"
msgstr "Privé"
#: src/components/playlist/PlaylistCard.tsx:105
#: src/components/playlist/PlaylistCard.tsx:110
#: src/components/playlist/PlaylistHeader.tsx:77
msgid "public"
msgstr "public"
@@ -1545,7 +1544,7 @@ msgstr "Inscription…"
msgid "Registration failed"
msgstr "Inscription échouée"
#: src/pages/Dump.tsx:612
#: src/pages/Dump.tsx:613
msgid "Related"
msgstr "Connexe"
@@ -1632,7 +1631,7 @@ msgid "email.reset.title"
msgstr "Réinitialiser votre mot de passe"
#: src/components/chat/PendingItem.tsx:86
#: src/pages/Dump.tsx:371
#: src/pages/Dump.tsx:372
#: src/pages/DumpEdit.tsx:227
msgid "Retry"
msgstr "Réessayer"
@@ -1647,7 +1646,7 @@ msgstr "Rôle"
#: src/components/playlist/PlaylistEditForm.tsx:229
#: src/components/profile/DescriptionEditor.tsx:89
#: src/components/profile/EmailEditor.tsx:75
#: src/pages/Dump.tsx:486
#: src/pages/Dump.tsx:487
#: src/pages/DumpEdit.tsx:564
msgid "Save"
msgstr "Enregistrer"
@@ -1657,14 +1656,14 @@ msgstr "Enregistrer"
#: src/components/profile/ChangePasswordModal.tsx:119
#: src/components/profile/DescriptionEditor.tsx:86
#: src/components/profile/EmailEditor.tsx:72
#: src/pages/Dump.tsx:485
#: src/pages/Dump.tsx:486
#: src/pages/ResetPassword.tsx:191
msgid "Saving…"
msgstr "Enregistrement…"
#: src/components/layout/AppHeader.tsx:182
#: src/components/layout/AppHeader.tsx:177
#: src/components/layout/SearchBar.tsx:83
#: src/pages/Search.tsx:90
#: src/pages/Search.tsx:106
msgid "Search"
msgstr "Rechercher"
@@ -1680,11 +1679,11 @@ msgstr "Rechercher un emoji"
msgid "Search emoji…"
msgstr "Rechercher un emoji…"
#: src/pages/Search.tsx:241
#: src/pages/Search.tsx:278
msgid "Search failed"
msgstr "Recherche échouée"
#: src/pages/Search.tsx:236
#: src/pages/Search.tsx:273
msgid "Searching…"
msgstr "Recherche…"
@@ -1710,7 +1709,7 @@ msgstr "Envoyer le lien de réinitialisation"
msgid "Sending…"
msgstr "Envoi…"
#: src/components/layout/AppHeader.tsx:198
#: src/components/layout/AppHeader.tsx:193
msgid "Server unreachable"
msgstr "Serveur inaccessible"
@@ -1724,7 +1723,7 @@ msgstr "Définir un nouveau mot de passe"
msgid "email.settings"
msgstr "Paramètres"
#: src/components/layout/UserMenu.tsx:116
#: src/components/layout/UserMenu.tsx:105
#: src/pages/Settings.tsx:75
#: src/pages/Settings.tsx:88
msgid "Settings"
@@ -1831,7 +1830,7 @@ msgstr "Le nouvel ordre n'a pas pu être enregistré. Réessayez."
msgid "This comment couldn't be deleted. Try again."
msgstr "Ce commentaire n'a pas pu être supprimé. Réessayez."
#: src/pages/Dump.tsx:346
#: src/pages/Dump.tsx:347
msgid "This dump was deleted, or made private."
msgstr "Cette reco a été supprimée, ou rendue privée."
@@ -2028,7 +2027,7 @@ msgstr "Utilisateur"
msgid "User management"
msgstr "Gestion utilisateur"
#: src/components/layout/UserMenu.tsx:67
#: src/components/layout/UserMenu.tsx:64
msgid "User menu"
msgstr "Menu utilisateur"
@@ -2041,7 +2040,7 @@ msgid "Username"
msgstr "Nom d'utilisateur"
#: src/components/profile/ProfileFollowTab.tsx:147
#: src/pages/Search.tsx:176
#: src/pages/Search.tsx:213
msgid "Users"
msgstr "Utilisateurs"

View File

@@ -17,7 +17,7 @@ import { UserMenu } from "./UserMenu.tsx";
import { SearchBar } from "./SearchBar.tsx";
import { IconClose, IconSearch } from "./NavIcons.tsx";
import { SITE_EMOJI, SITE_NAME } from "../../hooks/shared/useDocumentTitle.ts";
import { searchPath, userPath } from "../../../shared/paths.ts";
import { playlistsPath, searchPath } from "../../../shared/paths.ts";
/** Loaded on first open, so its editor stays out of every page's bundle. */
const DumpCreateModal = lazy(() =>
@@ -62,9 +62,10 @@ export interface AppHeaderProps {
/**
* Renders the site's header. It holds the search, which stays open on the
* results page and slides open under the header on small screens, the
* signed-in user's links and buttons, and a banner while live updates are down.
* It also hosts the dump creation dialog that its "+ Dump" button opens.
* results page and slides open under the header on small screens, the link to
* every playlist, the signed-in user's menu and buttons or a guest's "Log in",
* and a banner while live updates are down. It also hosts the dump creation
* dialog that its "+ Dump" button opens.
*/
export function AppHeader(
{ centerSlot, disableNew, initialDumpUrl }: AppHeaderProps,
@@ -158,23 +159,17 @@ export function AppHeader(
<nav className="app-header-nav">
{
/* The user's own links lead the row, so the icons after them run
unbroken to the "+": Playlists on wide screens, then the
avatar's menu, which leads to their profile, at every width. */
/* The links lead the row, so the icons after them run unbroken to
the "+": every playlist on wide screens, for guests too, then
the avatar's menu, which leads to the user's profile and their
own playlists, at every width. */
}
{user && (
<>
<div className="nav-links">
<Link
to={userPath(user.username, "playlists")}
className="app-header-user"
>
<Trans>Playlists</Trans>
</Link>
</div>
<UserMenu user={user} />
</>
)}
<div className="nav-links">
<Link to={playlistsPath()} className="app-header-user">
<Trans>Playlists</Trans>
</Link>
</div>
{user && <UserMenu user={user} />}
<button
ref={searchToggleRef}
type="button"

View File

@@ -1,7 +1,8 @@
/**
* Renders the avatar menu that leads the header's icon row at every width: it
* holds the profile link, the playlists one (on small screens, the only one),
* the community page, the settings, the site's tools, and logging out.
* holds the profile link, the user's own playlists (the header's text link
* leads to everyone's), the community page, the settings, the site's tools, and
* logging out.
*
* @module
*/
@@ -15,11 +16,7 @@ import { DIGEST_MESSAGES } from "../../../shared/digest-messages.ts";
import { Avatar } from "../shared/Avatar.tsx";
import type { SelfUser } from "../../../shared/user.ts";
import { can } from "../../utils/auth/permissions.ts";
import {
communityPath,
playlistsPath,
userPath,
} from "../../../shared/paths.ts";
import { communityPath, userPath } from "../../../shared/paths.ts";
import { useAuth } from "../../hooks/auth/useAuth.ts";
/** Passed to {@link UserMenu} by `AppHeader`, for a signed-in user. */
@@ -89,7 +86,7 @@ export function UserMenu({ user }: UserMenuProps): React.JSX.Element {
role="menuitem"
onClick={() => setOpen(false)}
>
<Trans>Playlists</Trans>
<Trans>My playlists</Trans>
</Link>
<Link
to={communityPath()}
@@ -99,14 +96,6 @@ export function UserMenu({ user }: UserMenuProps): React.JSX.Element {
>
{i18n._(DIGEST_MESSAGES.community)}
</Link>
<Link
to={playlistsPath()}
className="user-menu-item"
role="menuitem"
onClick={() => setOpen(false)}
>
<Trans>All playlists</Trans>
</Link>
<Link
to="/settings"
className="user-menu-item"

View File

@@ -13,9 +13,13 @@ import { makeSession } from "../../fixtures.ts";
import { currentPath, renderWithContexts } from "../../render.tsx";
describe("AppHeader", () => {
test("guests get a login button", async () => {
test("guests get the playlists link and a login button", async () => {
const user = userEvent.setup();
renderWithContexts(<AppHeader />);
expect(screen.getByRole("link", { name: "Playlists" })).toHaveAttribute(
"href",
"/playlists",
);
await user.click(screen.getByRole("button", { name: "Log in" }));
expect(currentPath()).toBe("/login");
});
@@ -26,7 +30,7 @@ describe("AppHeader", () => {
});
expect(screen.getByRole("link", { name: "Playlists" })).toHaveAttribute(
"href",
"/@ann/playlists",
"/playlists",
);
expect(screen.getByRole("button", { name: "User menu" }))
.toBeInTheDocument();

View File

@@ -22,10 +22,13 @@ describe("UserMenu", () => {
"href",
"/@ann",
);
expect(screen.getByRole("menuitem", { name: "Playlists" })).toHaveAttribute(
"href",
"/@ann/playlists",
);
// One playlists link, the user's own: the header's leads to everyone's.
expect(screen.getAllByRole("menuitem", { name: /playlists/i }))
.toHaveLength(
1,
);
expect(screen.getByRole("menuitem", { name: "My playlists" }))
.toHaveAttribute("href", "/@ann/playlists");
expect(screen.getByRole("menuitem", { name: "Community" })).toHaveAttribute(
"href",
"/community",