v4: playlists have categories of their own — a set apart from the dumps', which admins manage on /manage under "Playlist categories", next to "Dump categories". Each category now has a kind, dump or playlist, its slug and name unique within its kind only; migration 0025 rebuilds categories with the column, every existing one becoming a dump category with its dumps, and adds playlist_categories. A playlist's owner files it under any of them in the create and edit forms, and it shows them as chips on its card and its page, each leading to /playlists/<slug>.

/playlists is the new page of every public playlist, newest first (GET /api/playlists), and /playlists/<slug> a playlist category's, with a menu of the categories, linked from the user menu as "All playlists"; `playlists` is reserved as a dump category's slug, and one that had it is renamed. A profile's Playlists tab narrows to a playlist category with the same menu as its Dumps tab (?category=), and so do the Dumps and Playlists tabs of /search, each with its own kind (category and playlistCategory for GET /api/search), another tab dropping it.

The category service takes the kind throughout, so a dump can't be filed under a playlist category nor the other way round, and categoryJoin is the one filter join the dump, follow and playlist services share. useCategories(kind) gives one kind's set from the one fetch, CategoryChips replaces the chips the dump card and page each drew, useCategoryFilter keeps a list to its category as the socket brings more, and useCategorySelection holds a form's picked categories.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-09 21:53:16 +00:00
parent 681170a517
commit 53515ce46f
71 changed files with 2166 additions and 705 deletions

View File

@@ -18,13 +18,13 @@ msgid "[deleted]"
msgstr "[deleted]"
#. placeholder {0}: dump.commentCount
#: src/components/dump/DumpCard.tsx:139
#: src/components/dump/DumpCard.tsx:135
#: src/components/dump/JournalCard.tsx:136
msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# comment} other {# comments}}"
#. placeholder {0}: playlist.dumpCount
#: src/components/playlist/PlaylistCard.tsx:118
#: src/components/playlist/PlaylistCard.tsx:120
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:124
#: src/pages/Search.tsx:152
msgid "{label} ({count})"
msgstr "{label} ({count})"
@@ -205,15 +205,15 @@ msgstr "# Welcome to {site}!\n"
"\n"
"Your account has been created successfully. Welcome aboard!"
#: src/components/dump/create/DumpCreateModal.tsx:742
#: src/components/dump/create/DumpCreateModal.tsx:736
#: src/pages/PlaylistDetail.tsx:80
#: src/pages/UserPublicProfile.tsx:125
msgid "← Back"
msgstr "← Back"
#: src/pages/Dump.tsx:326
#: src/pages/Dump.tsx:568
#: src/pages/DumpEdit.tsx:232
#: src/pages/Dump.tsx:325
#: src/pages/Dump.tsx:552
#: src/pages/DumpEdit.tsx:233
msgid "← Back to all dumps"
msgstr "← Back to all dumps"
@@ -225,7 +225,7 @@ msgstr "+ Invite someone"
msgid "+ New playlist"
msgstr "+ New playlist"
#: src/pages/Dump.tsx:403
#: src/pages/Dump.tsx:399
msgid "+ Playlist"
msgstr "+ Playlist"
@@ -312,8 +312,8 @@ msgstr "Account on <0>{host}</0>"
msgid "Add a comment…"
msgstr "Add a comment…"
#: src/components/category/CategoryManager.tsx:104
#: src/components/category/CategoryManager.tsx:105
#: src/components/category/CategoryManager.tsx:115
#: src/components/category/CategoryManager.tsx:116
msgid "Add category"
msgstr "Add category"
@@ -325,7 +325,7 @@ msgstr "Add email…"
msgid "Add image"
msgstr "Add image"
#: src/components/dump/create/DumpCreateModal.tsx:465
#: src/components/dump/create/DumpCreateModal.tsx:458
#: src/components/playlist/AddToPlaylistModal.tsx:29
msgid "Add to playlist"
msgstr "Add to playlist"
@@ -339,11 +339,15 @@ msgstr "added to {playlist}"
msgid "Admin"
msgstr "Admin"
#: src/components/category/CategorySwitcher.tsx:100
#: src/components/category/CategorySwitcher.tsx:103
#: src/components/category/CategorySwitcher.tsx:104
#: src/components/category/CategorySwitcher.tsx:107
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
@@ -424,19 +428,19 @@ msgstr "Can't connect to the live updates server. Upvotes and notifications may
msgid "Can't sign in there"
msgstr "Can't sign in there"
#: src/components/category/CategoryManager.tsx:225
#: src/components/category/CategoryManager.tsx:226
#: src/components/category/CategoryManager.tsx:241
#: src/components/category/CategoryManager.tsx:242
#: src/components/chat/ChatEditBox.tsx:92
#: src/components/comment/CommentForm.tsx:127
#: src/components/dump/create/DumpCreateModal.tsx:752
#: src/components/dump/create/DumpCreateModal.tsx:746
#: src/components/form/FormActions.tsx:42
#: src/components/playlist/PlaylistEditForm.tsx:200
#: src/components/playlist/PlaylistEditForm.tsx:222
#: src/components/profile/DescriptionEditor.tsx:97
#: src/components/profile/EmailEditor.tsx:83
#: src/components/shared/ConfirmModal.tsx:63
#: src/pages/Authorize.tsx:158
#: src/pages/Dump.tsx:445
#: src/pages/DumpEdit.tsx:565
#: src/pages/Dump.tsx:441
#: src/pages/DumpEdit.tsx:560
msgid "Cancel"
msgstr "Cancel"
@@ -453,12 +457,11 @@ msgstr "Cancel reply"
msgid "Cancel search"
msgstr "Cancel search"
#: src/components/category/CategorySelect.tsx:33
#: src/pages/Manage.tsx:42
#: src/components/category/CategorySelect.tsx:38
msgid "Categories"
msgstr "Categories"
#: src/components/category/CategorySwitcher.tsx:123
#: src/components/category/CategorySwitcher.tsx:127
msgid "Category"
msgstr "Category"
@@ -513,7 +516,7 @@ msgstr "Checking…"
msgid "Close"
msgstr "Close"
#: src/components/dump/create/DumpCreateModal.tsx:496
#: src/components/dump/create/DumpCreateModal.tsx:489
msgid "Close anyway"
msgstr "Close anyway"
@@ -525,7 +528,7 @@ msgstr "Close emoji picker"
msgid "Close player"
msgstr "Close player"
#: src/components/dump/create/DumpCreateModal.tsx:486
#: src/components/dump/create/DumpCreateModal.tsx:479
msgid "Close without posting? The attached file won't be kept — everything you typed will."
msgstr "Close without posting? The attached file won't be kept — everything you typed will."
@@ -579,8 +582,8 @@ msgstr "Could not change password"
msgid "Could not connect to the server. Check your connection and try again."
msgstr "Could not connect to the server. Check your connection and try again."
#: src/components/profile/ProfilePlaylistsTab.tsx:126
#: src/pages/DumpEdit.tsx:559
#: src/components/profile/ProfilePlaylistsTab.tsx:177
#: src/pages/DumpEdit.tsx:554
msgid "Could not delete"
msgstr "Could not delete"
@@ -588,7 +591,7 @@ msgstr "Could not delete"
msgid "Could not rename"
msgstr "Could not rename"
#: src/pages/DumpEdit.tsx:512
#: src/pages/DumpEdit.tsx:506
msgid "Could not save"
msgstr "Could not save"
@@ -596,7 +599,7 @@ msgstr "Could not save"
msgid "Couldn't add that instance"
msgstr "Couldn't add that instance"
#: src/components/dump/create/DumpCreateModal.tsx:607
#: src/components/dump/create/DumpCreateModal.tsx:600
msgid "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later."
msgstr "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later."
@@ -616,19 +619,19 @@ msgstr "Couldn't unsubscribe"
msgid "Couldn't update. Try again."
msgstr "Couldn't update. Try again."
#: src/components/playlist/PlaylistEditForm.tsx:135
#: src/components/playlist/PlaylistEditForm.tsx:150
msgid "Cover"
msgstr "Cover"
#: src/components/playlist/PlaylistCreateForm.tsx:112
#: src/components/playlist/PlaylistCreateForm.tsx:122
msgid "Create"
msgstr "Create"
#: src/components/playlist/PlaylistCreateForm.tsx:112
#: src/components/playlist/PlaylistCreateForm.tsx:122
msgid "Create & Add"
msgstr "Create & Add"
#: src/components/playlist/PlaylistCreateForm.tsx:111
#: src/components/playlist/PlaylistCreateForm.tsx:121
msgid "Creating…"
msgstr "Creating…"
@@ -644,8 +647,8 @@ msgstr "Dark"
msgid "Default tab"
msgstr "Default tab"
#: src/components/category/CategoryManager.tsx:236
#: src/components/category/CategoryManager.tsx:237
#: src/components/category/CategoryManager.tsx:252
#: src/components/category/CategoryManager.tsx:253
#: src/components/chat/ChatMessageItem.tsx:118
#: src/components/chat/ChatMessageItem.tsx:119
#: src/components/chat/ChatMessageItem.tsx:220
@@ -656,28 +659,28 @@ msgstr "Default tab"
msgid "Delete"
msgstr "Delete"
#: src/components/category/CategoryManager.tsx:253
#: src/components/category/CategoryManager.tsx:269
msgid "Delete category"
msgstr "Delete category"
#. placeholder {0}: category.name
#: src/components/category/CategoryManager.tsx:252
#: src/components/category/CategoryManager.tsx:268
msgid "Delete category \"{0}\"? This cannot be undone."
msgstr "Delete category \"{0}\"? This cannot be undone."
#: src/pages/DumpEdit.tsx:314
#: src/pages/DumpEdit.tsx:562
#: src/pages/DumpEdit.tsx:315
#: src/pages/DumpEdit.tsx:557
msgid "Delete dump"
msgstr "Delete dump"
#. placeholder {0}: res.status
#: src/pages/DumpEdit.tsx:193
#: src/pages/DumpEdit.tsx:194
msgid "Delete failed ({0})"
msgstr "Delete failed ({0})"
#: src/components/playlist/PlaylistCard.tsx:142
#: src/components/playlist/PlaylistEditForm.tsx:191
#: src/components/profile/ProfilePlaylistsTab.tsx:156
#: src/components/playlist/PlaylistCard.tsx:149
#: src/components/playlist/PlaylistEditForm.tsx:213
#: src/components/profile/ProfilePlaylistsTab.tsx:207
#: src/pages/PlaylistDetail.tsx:141
msgid "Delete playlist"
msgstr "Delete playlist"
@@ -686,7 +689,7 @@ msgstr "Delete playlist"
msgid "Delete this comment?"
msgstr "Delete this comment?"
#: src/pages/DumpEdit.tsx:313
#: src/pages/DumpEdit.tsx:314
msgid "Delete this dump? This cannot be undone."
msgstr "Delete this dump? This cannot be undone."
@@ -694,7 +697,7 @@ msgstr "Delete this dump? This cannot be undone."
msgid "Delete this message?"
msgstr "Delete this message?"
#: src/components/profile/ProfilePlaylistsTab.tsx:155
#: src/components/profile/ProfilePlaylistsTab.tsx:206
#: src/pages/PlaylistDetail.tsx:140
msgid "Delete this playlist? This cannot be undone."
msgstr "Delete this playlist? This cannot be undone."
@@ -703,11 +706,11 @@ msgstr "Delete this playlist? This cannot be undone."
msgid "deleted message"
msgstr "deleted message"
#: src/components/playlist/PlaylistEditForm.tsx:176
#: src/components/playlist/PlaylistEditForm.tsx:191
msgid "Description"
msgstr "Description"
#: src/components/playlist/PlaylistCreateForm.tsx:104
#: src/components/playlist/PlaylistCreateForm.tsx:108
msgid "Description (optional)"
msgstr "Description (optional)"
@@ -728,7 +731,7 @@ msgstr "Disconnected — reconnecting…"
msgid "Dismiss"
msgstr "Dismiss"
#: src/components/dump/create/DumpCreateModal.tsx:546
#: src/components/dump/create/DumpCreateModal.tsx:539
msgid "Done"
msgstr "Done"
@@ -741,11 +744,11 @@ msgstr "Download {0}"
msgid "Drop a file here"
msgstr "Drop a file here"
#: src/components/dump/create/DumpCreateModal.tsx:653
#: src/components/dump/create/DumpCreateModal.tsx:646
msgid "Drop a file here, or paste one"
msgstr "Drop a file here, or paste one"
#: src/pages/DumpEdit.tsx:503
#: src/pages/DumpEdit.tsx:497
msgid "Drop a replacement here"
msgstr "Drop a replacement here"
@@ -753,16 +756,20 @@ msgstr "Drop a replacement here"
msgid "Dump"
msgstr "Dump"
#: src/components/dump/create/DumpCreateModal.tsx:765
#: src/pages/Manage.tsx:43
msgid "Dump categories"
msgstr "Dump categories"
#: src/components/dump/create/DumpCreateModal.tsx:759
msgid "Dump it"
msgstr "Dump it"
#: src/components/dump/create/DumpCreateModal.tsx:524
#: src/components/dump/create/DumpCreateModal.tsx:517
msgid "Dumped!"
msgstr "Dumped!"
#: src/components/profile/ProfileDumpsTab.tsx:46
#: src/pages/Search.tsx:120
#: src/pages/Search.tsx:148
#: src/pages/UserPublicProfile.tsx:160
msgid "Dumps"
msgstr "Dumps"
@@ -780,13 +787,13 @@ msgstr "Earlier"
#: src/components/chat/ChatMessageItem.tsx:108
#: src/components/chat/PendingItem.tsx:93
#: src/components/comment/CommentNode.tsx:256
#: src/components/playlist/PlaylistHeader.tsx:59
#: src/pages/Dump.tsx:564
#: src/components/playlist/PlaylistHeader.tsx:60
#: src/pages/Dump.tsx:548
msgid "Edit"
msgstr "Edit"
#. placeholder {0}: category.name
#: src/components/category/CategoryManager.tsx:84
#: src/components/category/CategoryManager.tsx:94
msgid "Edit {0}"
msgstr "Edit {0}"
@@ -799,7 +806,7 @@ msgid "Edit email"
msgstr "Edit email"
#: src/components/dump/create/TitleField.tsx:69
#: src/pages/Dump.tsx:462
#: src/pages/Dump.tsx:458
msgid "Edit title"
msgstr "Edit title"
@@ -812,8 +819,8 @@ msgstr "edited"
#. placeholder {0}: relativeTime(message.updatedAt)
#: src/components/chat/ChatMessageItem.tsx:132
#: src/components/comment/CommentNode.tsx:205
#: src/components/playlist/PlaylistHeader.tsx:94
#: src/pages/Dump.tsx:505
#: src/components/playlist/PlaylistHeader.tsx:95
#: src/pages/Dump.tsx:501
msgid "edited {0}"
msgstr "edited {0}"
@@ -822,17 +829,17 @@ msgstr "edited {0}"
#. placeholder {0}: message.updatedAt.toLocaleString()
#: src/components/chat/ChatMessageItem.tsx:128
#: src/components/comment/CommentNode.tsx:203
#: src/components/playlist/PlaylistHeader.tsx:92
#: src/pages/Dump.tsx:503
#: src/components/playlist/PlaylistHeader.tsx:93
#: src/pages/Dump.tsx:499
msgid "Edited {0}"
msgstr "Edited {0}"
#: src/pages/DumpEdit.tsx:257
#: src/pages/DumpEdit.tsx:258
msgid "Editing"
msgstr "Editing"
#. placeholder {0}: state.dump.title
#: src/pages/DumpEdit.tsx:80
#: src/pages/DumpEdit.tsx:81
msgid "Editing {0}"
msgstr "Editing {0}"
@@ -844,7 +851,7 @@ msgstr "Email"
msgid "Email address"
msgstr "Email address"
#: src/pages/Search.tsx:155
#: src/pages/Search.tsx:204
msgid "Enter a query to search."
msgstr "Enter a query to search."
@@ -852,15 +859,15 @@ msgstr "Enter a query to search."
msgid "Expand player"
msgstr "Expand player"
#: src/components/category/CategoryManager.tsx:246
#: src/components/category/CategoryManager.tsx:262
msgid "Failed to create category"
msgstr "Failed to create category"
#: src/components/playlist/PlaylistCreateForm.tsx:109
#: src/components/playlist/PlaylistCreateForm.tsx:119
msgid "Failed to create playlist"
msgstr "Failed to create playlist"
#: src/components/category/CategoryManager.tsx:169
#: src/components/category/CategoryManager.tsx:185
msgid "Failed to delete"
msgstr "Failed to delete"
@@ -874,7 +881,7 @@ msgstr "Failed to generate invite"
msgid "Failed to load"
msgstr "Failed to load"
#: src/components/dump/create/DumpCreateModal.tsx:555
#: src/components/dump/create/DumpCreateModal.tsx:548
msgid "Failed to post"
msgstr "Failed to post"
@@ -888,13 +895,13 @@ msgstr "Failed to post reply"
#: src/components/federation/GrantList.tsx:98
#: src/components/federation/PeerManager.tsx:158
#: src/components/playlist/PlaylistEditForm.tsx:185
#: src/components/playlist/PlaylistEditForm.tsx:207
#: src/components/profile/DescriptionEditor.tsx:99
#: src/components/profile/EmailEditor.tsx:86
msgid "Failed to save"
msgstr "Failed to save"
#: src/components/category/CategoryManager.tsx:247
#: src/components/category/CategoryManager.tsx:263
msgid "Failed to save category"
msgstr "Failed to save category"
@@ -914,11 +921,11 @@ msgstr "Failed to update role"
msgid "Feeds"
msgstr "Feeds"
#: src/components/dump/create/DumpCreateModal.tsx:594
#: src/components/dump/create/DumpCreateModal.tsx:587
msgid "Fetching preview…"
msgstr "Fetching preview…"
#: src/components/dump/create/DumpCreateModal.tsx:417
#: src/components/dump/create/DumpCreateModal.tsx:410
msgid "File too large (max {max})."
msgstr "File too large (max {max})."
@@ -1017,7 +1024,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:584
#: src/pages/Dump.tsx:568
msgid "In collections"
msgstr "In collections"
@@ -1031,7 +1038,7 @@ msgstr "In the chat"
msgid "Insert emoji"
msgstr "Insert emoji"
#: src/pages/Manage.tsx:49
#: src/pages/Manage.tsx:56
msgid "Instances"
msgstr "Instances"
@@ -1073,7 +1080,7 @@ msgstr "Invitees"
msgid "Journal"
msgstr "Journal"
#: src/components/dump/create/DumpCreateModal.tsx:493
#: src/components/dump/create/DumpCreateModal.tsx:486
msgid "Keep editing"
msgstr "Keep editing"
@@ -1094,7 +1101,7 @@ msgstr "Light"
msgid "Like"
msgstr "Like"
#: src/components/dump/create/DumpCreateModal.tsx:569
#: src/components/dump/create/DumpCreateModal.tsx:562
#: src/components/form/SlugField.tsx:69
msgid "Link"
msgstr "Link"
@@ -1119,8 +1126,8 @@ msgstr "Load more"
msgid "Load older messages"
msgstr "Load older messages"
#: src/pages/Dump.tsx:302
#: src/pages/DumpEdit.tsx:208
#: src/pages/Dump.tsx:301
#: src/pages/DumpEdit.tsx:209
msgid "Loading dump…"
msgstr "Loading dump…"
@@ -1140,7 +1147,7 @@ msgstr "Loading playlist…"
msgid "Loading profile…"
msgstr "Loading profile…"
#: src/components/category/CategoryManager.tsx:60
#: src/components/category/CategoryManager.tsx:69
#: src/components/chat/ChatModal.tsx:763
#: src/components/editor/EmojiPickerPopup.tsx:125
#: src/components/federation/PeerManager.tsx:120
@@ -1173,7 +1180,7 @@ msgstr "Log in to vote"
msgid "Log in with {0}"
msgstr "Log in with {0}"
#: src/components/layout/UserMenu.tsx:127
#: src/components/layout/UserMenu.tsx:139
#: src/pages/UserPublicProfile.tsx:133
msgid "Log out"
msgstr "Log out"
@@ -1191,7 +1198,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:114
#: src/components/layout/UserMenu.tsx:126
#: src/pages/Manage.tsx:32
#: src/pages/Manage.tsx:40
#: src/pages/UserPublicProfile.tsx:166
@@ -1215,8 +1222,8 @@ msgstr "Monthly recap"
msgid "Mute"
msgstr "Mute"
#: src/components/category/CategoryManager.tsx:192
#: src/components/category/CategoryManager.tsx:193
#: src/components/category/CategoryManager.tsx:208
#: src/components/category/CategoryManager.tsx:209
msgid "Name"
msgstr "Name"
@@ -1226,7 +1233,7 @@ msgstr "Name"
msgid "New"
msgstr "New"
#: src/components/dump/create/DumpCreateModal.tsx:465
#: src/components/dump/create/DumpCreateModal.tsx:458
#: src/components/dump/NewDumpButton.tsx:27
#: src/components/layout/DumpFab.tsx:66
#: src/components/layout/DumpFab.tsx:67
@@ -1253,7 +1260,7 @@ msgstr "New playlist"
msgid "digest.newPlaylists"
msgstr "New public playlists"
#: src/components/dump/create/DumpCreateModal.tsx:764
#: src/components/dump/create/DumpCreateModal.tsx:758
msgid "Next →"
msgstr "Next →"
@@ -1265,7 +1272,7 @@ msgstr "Next track"
msgid "No dumps in this playlist yet."
msgstr "No dumps in this playlist yet."
#: src/pages/Search.tsx:171
#: src/pages/Search.tsx:220
msgid "No dumps match \"{q}\"."
msgstr "No dumps match \"{q}\"."
@@ -1294,12 +1301,13 @@ msgstr "No messages yet. Say hello!"
msgid "No one yet."
msgstr "No one yet."
#: src/pages/Search.tsx:212
#: src/pages/Search.tsx:261
msgid "No playlists match \"{q}\"."
msgstr "No playlists match \"{q}\"."
#: src/components/playlist/PlaylistMembershipPanel.tsx:51
#: src/components/profile/ProfilePlaylistsTab.tsx:133
#: src/components/profile/ProfilePlaylistsTab.tsx:184
#: src/pages/Playlists.tsx:118
msgid "No playlists yet."
msgstr "No playlists yet."
@@ -1307,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:186
#: src/pages/Search.tsx:235
msgid "No users match \"{q}\"."
msgstr "No users match \"{q}\"."
@@ -1327,7 +1335,7 @@ msgstr "Nothing happened this month."
msgid "Nothing happened this week."
msgstr "Nothing happened this week."
#: src/components/profile/ProfileDumpsTab.tsx:96
#: src/components/profile/ProfileDumpsTab.tsx:97
#: src/components/profile/ProfileOverviewTab.tsx:47
#: src/pages/Notifications.tsx:522
msgid "Nothing here yet."
@@ -1361,7 +1369,7 @@ msgstr "Once a week you'll get a digest of what happened here, and once a month
msgid "Only images can be dropped here."
msgstr "Only images can be dropped here."
#: src/pages/DumpEdit.tsx:118
#: src/pages/DumpEdit.tsx:119
msgid "Only its poster or a moderator can edit this dump."
msgstr "Only its poster or a moderator can edit this dump."
@@ -1432,7 +1440,7 @@ msgstr "Password updated"
msgid "Passwords do not match"
msgstr "Passwords do not match"
#: src/components/dump/create/DumpCreateModal.tsx:587
#: src/components/dump/create/DumpCreateModal.tsx:580
msgid "Paste a link…"
msgstr "Paste a link…"
@@ -1443,7 +1451,7 @@ msgstr "Paste a link…"
msgid "Pause"
msgstr "Pause"
#: src/components/dump/create/DumpCreateModal.tsx:505
#: src/components/dump/create/DumpCreateModal.tsx:498
msgid "Picked up where you left off."
msgstr "Picked up where you left off."
@@ -1455,12 +1463,18 @@ msgstr "Picked up where you left off."
msgid "Play"
msgstr "Play"
#: src/pages/Manage.tsx:48
msgid "Playlist categories"
msgstr "Playlist categories"
#: src/components/dump/create/StepIndicator.tsx:21
#: src/components/layout/AppHeader.tsx:172
#: src/components/layout/UserMenu.tsx:88
#: src/components/layout/UserMenu.tsx:92
#: src/components/profile/ProfileFollowTab.tsx:144
#: src/components/profile/ProfilePlaylistsTab.tsx:118
#: src/pages/Search.tsx:123
#: src/components/profile/ProfilePlaylistsTab.tsx:155
#: src/pages/Playlists.tsx:52
#: src/pages/Playlists.tsx:106
#: src/pages/Search.tsx:151
#: src/pages/UserPublicProfile.tsx:162
msgid "Playlists"
msgstr "Playlists"
@@ -1475,7 +1489,7 @@ msgstr "Post reply"
#: src/components/comment/CommentNode.tsx:290
#: src/components/comment/CommentThread.tsx:100
#: src/components/dump/create/DumpCreateModal.tsx:758
#: src/components/dump/create/DumpCreateModal.tsx:752
msgid "Posting…"
msgstr "Posting…"
@@ -1483,12 +1497,12 @@ msgstr "Posting…"
msgid "Previous track"
msgstr "Previous track"
#: src/components/dump/DumpCard.tsx:148
#: src/components/dump/DumpCard.tsx:144
#: src/components/dump/JournalCard.tsx:145
#: src/components/playlist/PlaylistCard.tsx:104
#: src/components/playlist/PlaylistHeader.tsx:76
#: src/components/playlist/PlaylistCard.tsx:106
#: src/components/playlist/PlaylistHeader.tsx:77
#: src/components/playlist/PlaylistMembershipPanel.tsx:81
#: src/pages/Dump.tsx:511
#: src/pages/Dump.tsx:507
msgid "private"
msgstr "private"
@@ -1496,8 +1510,8 @@ msgstr "private"
msgid "Private"
msgstr "Private"
#: src/components/playlist/PlaylistCard.tsx:103
#: src/components/playlist/PlaylistHeader.tsx:76
#: src/components/playlist/PlaylistCard.tsx:105
#: src/components/playlist/PlaylistHeader.tsx:77
msgid "public"
msgstr "public"
@@ -1505,7 +1519,7 @@ msgstr "public"
msgid "Public"
msgstr "Public"
#: src/pages/DumpEdit.tsx:290
#: src/pages/DumpEdit.tsx:291
msgid "Refresh metadata"
msgstr "Refresh metadata"
@@ -1513,7 +1527,7 @@ msgstr "Refresh metadata"
msgid "Refreshing stream…"
msgstr "Refreshing stream…"
#: src/pages/DumpEdit.tsx:289
#: src/pages/DumpEdit.tsx:290
msgid "Refreshing…"
msgstr "Refreshing…"
@@ -1531,7 +1545,7 @@ msgstr "Registering…"
msgid "Registration failed"
msgstr "Registration failed"
#: src/pages/Dump.tsx:575
#: src/pages/Dump.tsx:559
msgid "Related"
msgstr "Related"
@@ -1565,7 +1579,7 @@ msgstr "Rename"
msgid "Renaming…"
msgstr "Renaming…"
#: src/pages/DumpEdit.tsx:495
#: src/pages/DumpEdit.tsx:489
msgid "Replace file"
msgstr "Replace file"
@@ -1596,8 +1610,8 @@ msgstr "Reset password"
msgid "Reset password"
msgstr "Reset password"
#: src/pages/DumpEdit.tsx:471
#: src/pages/DumpEdit.tsx:526
#: src/pages/DumpEdit.tsx:465
#: src/pages/DumpEdit.tsx:520
msgid "Reset to default"
msgstr "Reset to default"
@@ -1617,8 +1631,8 @@ msgid "email.reset.title"
msgstr "Reset your password"
#: src/components/chat/PendingItem.tsx:86
#: src/pages/Dump.tsx:319
#: src/pages/DumpEdit.tsx:225
#: src/pages/Dump.tsx:318
#: src/pages/DumpEdit.tsx:226
msgid "Retry"
msgstr "Retry"
@@ -1626,30 +1640,30 @@ msgstr "Retry"
msgid "Role"
msgstr "Role"
#: src/components/category/CategoryManager.tsx:216
#: src/components/category/CategoryManager.tsx:232
#: src/components/chat/ChatEditBox.tsx:85
#: src/components/comment/CommentNode.tsx:216
#: src/components/playlist/PlaylistEditForm.tsx:207
#: src/components/playlist/PlaylistEditForm.tsx:229
#: src/components/profile/DescriptionEditor.tsx:89
#: src/components/profile/EmailEditor.tsx:75
#: src/pages/Dump.tsx:437
#: src/pages/DumpEdit.tsx:568
#: src/pages/Dump.tsx:433
#: src/pages/DumpEdit.tsx:563
msgid "Save"
msgstr "Save"
#: src/components/comment/CommentNode.tsx:217
#: src/components/playlist/PlaylistEditForm.tsx:204
#: src/components/playlist/PlaylistEditForm.tsx:226
#: src/components/profile/ChangePasswordModal.tsx:119
#: src/components/profile/DescriptionEditor.tsx:86
#: src/components/profile/EmailEditor.tsx:72
#: src/pages/Dump.tsx:436
#: src/pages/Dump.tsx:432
#: src/pages/ResetPassword.tsx:139
msgid "Saving…"
msgstr "Saving…"
#: src/components/layout/AppHeader.tsx:182
#: src/components/layout/SearchBar.tsx:83
#: src/pages/Search.tsx:69
#: src/pages/Search.tsx:87
msgid "Search"
msgstr "Search"
@@ -1665,11 +1679,11 @@ msgstr "Search emoji"
msgid "Search emoji…"
msgstr "Search emoji…"
#: src/pages/Search.tsx:166
#: src/pages/Search.tsx:215
msgid "Search failed"
msgstr "Search failed"
#: src/pages/Search.tsx:161
#: src/pages/Search.tsx:210
msgid "Searching…"
msgstr "Searching…"
@@ -1709,7 +1723,7 @@ msgstr "Set new password"
msgid "email.settings"
msgstr "Settings"
#: src/components/layout/UserMenu.tsx:104
#: src/components/layout/UserMenu.tsx:116
#: src/pages/Settings.tsx:75
#: src/pages/Settings.tsx:88
msgid "Settings"
@@ -1736,7 +1750,7 @@ msgstr "Signing you in…"
msgid "Single use, valid for 7 days."
msgstr "Single use, valid for 7 days."
#: src/components/category/CategoryManager.tsx:205
#: src/components/category/CategoryManager.tsx:221
msgid "slug"
msgstr "slug"
@@ -1760,7 +1774,7 @@ msgstr "Something went wrong"
msgid "Sounds"
msgstr "Sounds"
#: src/components/dump/create/DumpCreateModal.tsx:512
#: src/components/dump/create/DumpCreateModal.tsx:505
msgid "Start fresh"
msgstr "Start fresh"
@@ -1856,18 +1870,18 @@ msgstr "This unsubscribe link is missing or malformed."
msgid "This week"
msgstr "This week"
#: src/pages/DumpEdit.tsx:455
#: src/pages/DumpEdit.tsx:449
msgid "Thumbnail"
msgstr "Thumbnail"
#: src/components/dump/create/TitleField.tsx:45
#: src/components/playlist/PlaylistCreateForm.tsx:96
#: src/components/playlist/PlaylistEditForm.tsx:160
#: src/pages/DumpEdit.tsx:516
#: src/components/playlist/PlaylistCreateForm.tsx:100
#: src/components/playlist/PlaylistEditForm.tsx:175
#: src/pages/DumpEdit.tsx:510
msgid "Title"
msgstr "Title"
#: src/components/dump/create/DumpCreateModal.tsx:414
#: src/components/dump/create/DumpCreateModal.tsx:407
msgid "Title is required."
msgstr "Title is required."
@@ -1967,7 +1981,7 @@ msgid "Upload failed"
msgstr "Upload failed"
#. placeholder {0}: Math.round((uploadProgress ?? 0) * 100)
#: src/components/dump/create/DumpCreateModal.tsx:449
#: src/components/dump/create/DumpCreateModal.tsx:442
msgid "Uploading {0}%"
msgstr "Uploading {0}%"
@@ -1975,7 +1989,7 @@ msgstr "Uploading {0}%"
msgid "Uploading image…"
msgstr "Uploading image…"
#: src/components/dump/create/DumpCreateModal.tsx:761
#: src/components/dump/create/DumpCreateModal.tsx:755
msgid "Uploading…"
msgstr "Uploading…"
@@ -1993,15 +2007,15 @@ msgstr "Upvoted"
msgid "Upvoted ({0})"
msgstr "Upvoted ({0})"
#: src/pages/DumpEdit.tsx:487
#: src/pages/DumpEdit.tsx:481
msgid "URL"
msgstr "URL"
#: src/components/dump/create/DumpCreateModal.tsx:398
#: src/components/dump/create/DumpCreateModal.tsx:391
msgid "URL is required."
msgstr "URL is required."
#: src/components/category/CategoryManager.tsx:206
#: src/components/category/CategoryManager.tsx:222
msgid "URL slug"
msgstr "URL slug"
@@ -2013,7 +2027,7 @@ msgstr "User"
msgid "User management"
msgstr "User management"
#: src/components/layout/UserMenu.tsx:63
#: src/components/layout/UserMenu.tsx:67
msgid "User menu"
msgstr "User menu"
@@ -2026,7 +2040,7 @@ msgid "Username"
msgstr "Username"
#: src/components/profile/ProfileFollowTab.tsx:143
#: src/pages/Search.tsx:122
#: src/pages/Search.tsx:150
msgid "Users"
msgstr "Users"
@@ -2046,7 +2060,7 @@ msgstr "Users of a trusted instance sign in here with their account there. Those
msgid "View all →"
msgstr "View all →"
#: src/components/dump/create/DumpCreateModal.tsx:526
#: src/components/dump/create/DumpCreateModal.tsx:519
msgid "View dump →"
msgstr "View dump →"
@@ -2064,8 +2078,8 @@ msgstr "Weekly digest"
msgid "email.welcome.subject"
msgstr "Welcome to {site}"
#: src/components/dump/create/DumpCreateModal.tsx:712
#: src/pages/DumpEdit.tsx:544
#: src/components/dump/create/DumpCreateModal.tsx:705
#: src/pages/DumpEdit.tsx:538
msgid "What makes it worth it?"
msgstr "What makes it worth it?"
@@ -2074,7 +2088,7 @@ msgstr "What makes it worth it?"
msgid "Who am I?"
msgstr "Who am I?"
#: src/components/dump/create/DumpCreateModal.tsx:727
#: src/components/dump/create/DumpCreateModal.tsx:721
msgid "Who can see it"
msgstr "Who can see it"
@@ -2082,8 +2096,8 @@ msgstr "Who can see it"
msgid "Why & where"
msgstr "Why & where"
#: src/components/dump/create/DumpCreateModal.tsx:711
#: src/pages/DumpEdit.tsx:543
#: src/components/dump/create/DumpCreateModal.tsx:704
#: src/pages/DumpEdit.tsx:537
msgid "Why?"
msgstr "Why?"