v4: text is edited where it stands through one component, InlineEdit, and a dump's note and a playlist's title and description join its title, a profile's description and email — those three were written apart, each with its own state, keys, buttons, error and CSS, and the note and the playlist could only be changed in their full editors. InlineEdit (components/form) shows the text; a click on it, or the ✎ after it, opens a field holding it, with Save and Cancel under it. A one-line field takes the text's own type in every style, from the class it is handed (dump-title, playlist-detail-title), and sits on the faint plate the text showed under the pointer, so that nothing moves but the buttons that come; a Markdown text opens the editor comments use. Enter saves a line, Ctrl+Enter a Markdown text, Escape backs out, a text left as it was closes without a request, a required one can't be emptied, a refused save says why in one line beside the buttons, and the focus goes back to the ✎. A click on a link in the text, or one that ends a selection, follows the link or keeps the selection. The ✎ is now a button with the action's name, where a div pretended to be one, and the text keeps its own role, a heading or Markdown. The plate is drawn under the text by a pseudo-element, tinted from its colour: the surface colour it had was the card's own, and showed nothing on the dump page. On a playlist's page the title edits in place beside Follow and Edit, which go to the row's end, and the description too; an empty note or description says what goes there to whoever may write it. DescriptionEditor and EmailEditor go.

The GeoCities marquee stops only for a link the keyboard focused: a link pressed with the pointer took the focus as well, which put the line back at its start and scrolled it, so the link slipped from under the pointer before the button came up and the click was lost. The next page's marquee also carries on from the very point the last one had reached, with the loop it showed: it worked its place out from when the loop began, which ran on while the crawl was paused under the pointer, and showed the feed as it was by then, of another width.

The chat's message field rests on one line, as tall as the Send button: it rested on two, 54 to 62 pixels against the button's 38, and the button sat low beside it. Both take --chat-composer-height.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-20 18:08:53 +00:00
parent b92c674726
commit 3e03626cc1
22 changed files with 985 additions and 706 deletions

View File

@@ -206,14 +206,14 @@ msgstr "# Welcome to {site}!\n"
"Your account has been created successfully. Welcome aboard!"
#: src/components/dump/create/DumpCreateModal.tsx:736
#: src/pages/PlaylistDetail.tsx:98
#: src/pages/PlaylistDetail.tsx:99
#: src/pages/UserPublicProfile.tsx:129
msgid "← Back"
msgstr "← Back"
#: src/pages/Dump.tsx:375
#: src/pages/Dump.tsx:400
#: src/pages/Dump.tsx:627
#: src/pages/Dump.tsx:374
#: src/pages/Dump.tsx:399
#: src/pages/Dump.tsx:560
#: 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:474
#: src/pages/Dump.tsx:451
msgid "+ Playlist"
msgstr "+ Playlist"
@@ -252,7 +252,7 @@ msgid "<0>{0}</0> followed your playlist <1>{1}</1>"
msgstr "<0>{0}</0> followed your playlist <1>{1}</1>"
#. placeholder {0}: event.username
#: src/components/social/CommunityFeed.tsx:144
#: src/components/social/CommunityFeed.tsx:145
msgid "<0>{0}</0> joined"
msgstr "<0>{0}</0> joined"
@@ -311,16 +311,16 @@ msgstr "<0>{0}</0> was added to <1>{1}</1>"
msgid "<0>{name}</0> ({host}) asks to sign you in with your account here, <1>@{username}</1>. It will receive your username, your email address and your avatar."
msgstr "<0>{name}</0> ({host}) asks to sign you in with your account here, <1>@{username}</1>. It will receive your username, your email address and your avatar."
#: src/components/social/CommunityFeed.tsx:155
#: src/components/social/CommunityFeed.tsx:159
msgid "<0>Online now:</0> {names}"
msgstr "<0>Online now:</0> {names}"
#: src/components/social/CommunityFeed.tsx:162
#: src/components/social/CommunityFeed.tsx:166
msgid "<0>This week:</0> <1>{figures}</1>"
msgstr "<0>This week:</0> <1>{figures}</1>"
#. placeholder {0}: top.title
#: src/components/social/CommunityFeed.tsx:170
#: src/components/social/CommunityFeed.tsx:174
msgid "<0>Top this week:</0> <1>{0}</1>"
msgstr "<0>Top this week:</0> <1>{0}</1>"
@@ -344,7 +344,7 @@ msgstr "a post"
msgid "Account"
msgstr "Account"
#: src/components/profile/ProfileHeader.tsx:144
#: src/components/profile/ProfileHeader.tsx:151
msgid "Account on <0>{host}</0>"
msgstr "Account on <0>{host}</0>"
@@ -352,12 +352,17 @@ msgstr "Account on <0>{host}</0>"
msgid "Add a comment…"
msgstr "Add a comment…"
#: src/components/playlist/PlaylistHeader.tsx:117
#: src/components/playlist/PlaylistHeader.tsx:128
msgid "Add a description…"
msgstr "Add a description…"
#: src/components/category/CategoryManager.tsx:115
#: src/components/category/CategoryManager.tsx:116
msgid "Add category"
msgstr "Add category"
#: src/components/profile/ProfileHeader.tsx:173
#: src/components/profile/ProfileHeader.tsx:168
msgid "Add email…"
msgstr "Add email…"
@@ -470,12 +475,10 @@ msgstr "Can't sign in there"
#: src/components/comment/CommentForm.tsx:127
#: src/components/dump/create/DumpCreateModal.tsx:746
#: src/components/form/FormActions.tsx:42
#: src/components/form/InlineEdit.tsx:277
#: 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:516
#: src/pages/DumpEdit.tsx:561
msgid "Cancel"
msgstr "Cancel"
@@ -501,7 +504,7 @@ msgstr "Categories"
msgid "Category"
msgstr "Category"
#: src/components/profile/ProfileHeader.tsx:102
#: src/components/profile/ProfileHeader.tsx:109
msgid "Change avatar"
msgstr "Change avatar"
@@ -721,7 +724,7 @@ msgstr "Delete failed ({0})"
#: src/components/playlist/PlaylistCard.tsx:172
#: src/components/playlist/PlaylistEditForm.tsx:213
#: src/components/profile/ProfilePlaylistsTab.tsx:224
#: src/pages/PlaylistDetail.tsx:172
#: src/pages/PlaylistDetail.tsx:174
msgid "Delete playlist"
msgstr "Delete playlist"
@@ -738,7 +741,7 @@ msgid "Delete this message?"
msgstr "Delete this message?"
#: src/components/profile/ProfilePlaylistsTab.tsx:223
#: src/pages/PlaylistDetail.tsx:171
#: src/pages/PlaylistDetail.tsx:173
msgid "Delete this playlist? This cannot be undone."
msgstr "Delete this playlist? This cannot be undone."
@@ -827,8 +830,8 @@ 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:64
#: src/pages/Dump.tsx:623
#: src/components/playlist/PlaylistHeader.tsx:104
#: src/pages/Dump.tsx:556
msgid "Edit"
msgstr "Edit"
@@ -837,16 +840,22 @@ msgstr "Edit"
msgid "Edit {0}"
msgstr "Edit {0}"
#: src/components/profile/ProfileDescription.tsx:58
#: src/components/playlist/PlaylistHeader.tsx:113
#: src/components/profile/ProfileDescription.tsx:45
msgid "Edit description"
msgstr "Edit description"
#: src/components/profile/ProfileHeader.tsx:171
#: src/components/profile/ProfileHeader.tsx:161
msgid "Edit email"
msgstr "Edit email"
#: src/pages/Dump.tsx:510
msgid "Edit note"
msgstr "Edit note"
#: src/components/dump/create/TitleField.tsx:69
#: src/pages/Dump.tsx:533
#: src/components/playlist/PlaylistHeader.tsx:84
#: src/pages/Dump.tsx:459
msgid "Edit title"
msgstr "Edit title"
@@ -859,8 +868,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:99
#: src/pages/Dump.tsx:576
#: src/components/playlist/PlaylistHeader.tsx:158
#: src/pages/Dump.tsx:492
msgid "edited {0}"
msgstr "edited {0}"
@@ -869,8 +878,8 @@ 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:97
#: src/pages/Dump.tsx:574
#: src/components/playlist/PlaylistHeader.tsx:156
#: src/pages/Dump.tsx:490
msgid "Edited {0}"
msgstr "Edited {0}"
@@ -936,8 +945,6 @@ msgstr "Failed to post reply"
#: src/components/federation/GrantList.tsx:98
#: src/components/federation/PeerManager.tsx:158
#: 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"
@@ -949,7 +956,7 @@ msgstr "Failed to save category"
msgid "Failed to save edit"
msgstr "Failed to save edit"
#: src/components/profile/ProfileHeader.tsx:182
#: src/components/profile/ProfileHeader.tsx:174
msgid "Failed to update avatar"
msgstr "Failed to update avatar"
@@ -1064,7 +1071,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:643
#: src/pages/Dump.tsx:576
msgid "In collections"
msgstr "In collections"
@@ -1095,7 +1102,7 @@ msgstr "Invalid link"
msgid "Invite link"
msgstr "Invite link"
#: src/components/profile/ProfileHeader.tsx:126
#: src/components/profile/ProfileHeader.tsx:133
msgid "invited by"
msgstr "invited by"
@@ -1165,7 +1172,7 @@ msgstr "Load more"
msgid "Load older messages"
msgstr "Load older messages"
#: src/pages/Dump.tsx:359
#: src/pages/Dump.tsx:358
#: src/pages/DumpEdit.tsx:210
msgid "Loading dump…"
msgstr "Loading dump…"
@@ -1178,7 +1185,7 @@ msgstr "Loading messages…"
msgid "Loading more…"
msgstr "Loading more…"
#: src/pages/PlaylistDetail.tsx:82
#: src/pages/PlaylistDetail.tsx:83
msgid "Loading playlist…"
msgstr "Loading playlist…"
@@ -1548,9 +1555,9 @@ msgstr "Previous track"
#: src/components/dump/DumpCard.tsx:144
#: src/components/dump/JournalCard.tsx:146
#: src/components/playlist/PlaylistCard.tsx:127
#: src/components/playlist/PlaylistHeader.tsx:81
#: src/components/playlist/PlaylistHeader.tsx:140
#: src/components/playlist/PlaylistMembershipPanel.tsx:81
#: src/pages/Dump.tsx:582
#: src/pages/Dump.tsx:498
msgid "private"
msgstr "private"
@@ -1559,7 +1566,7 @@ msgid "Private"
msgstr "Private"
#: src/components/playlist/PlaylistCard.tsx:126
#: src/components/playlist/PlaylistHeader.tsx:81
#: src/components/playlist/PlaylistHeader.tsx:140
msgid "public"
msgstr "public"
@@ -1593,7 +1600,7 @@ msgstr "Registering…"
msgid "Registration failed"
msgstr "Registration failed"
#: src/pages/Dump.tsx:634
#: src/pages/Dump.tsx:567
msgid "Related"
msgstr "Related"
@@ -1680,7 +1687,7 @@ msgid "email.reset.title"
msgstr "Reset your password"
#: src/components/chat/PendingItem.tsx:86
#: src/pages/Dump.tsx:393
#: src/pages/Dump.tsx:392
#: src/pages/DumpEdit.tsx:227
msgid "Retry"
msgstr "Retry"
@@ -1692,20 +1699,16 @@ msgstr "Role"
#: src/components/category/CategoryManager.tsx:232
#: src/components/chat/ChatEditBox.tsx:85
#: src/components/comment/CommentNode.tsx:216
#: src/components/form/InlineEdit.tsx:269
#: src/components/playlist/PlaylistEditForm.tsx:229
#: src/components/profile/DescriptionEditor.tsx:89
#: src/components/profile/EmailEditor.tsx:75
#: src/pages/Dump.tsx:508
#: src/pages/DumpEdit.tsx:564
msgid "Save"
msgstr "Save"
#: src/components/comment/CommentNode.tsx:217
#: src/components/form/InlineEdit.tsx:266
#: 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:507
#: src/pages/ResetPassword.tsx:191
msgid "Saving…"
msgstr "Saving…"
@@ -1815,7 +1818,7 @@ msgstr "Someone asked to reset the password of your {site} account. The button b
#: src/components/form/FormError.tsx:31
#: src/components/layout/PageError.tsx:29
#: src/contexts/ws/WSProvider.tsx:738
#: src/pages/PlaylistDetail.tsx:155
#: src/pages/PlaylistDetail.tsx:157
msgid "Something went wrong"
msgstr "Something went wrong"
@@ -1879,7 +1882,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:368
#: src/pages/Dump.tsx:367
msgid "This dump was deleted, or made private."
msgstr "This dump was deleted, or made private."
@@ -2033,7 +2036,7 @@ msgstr "updated {ago}"
msgid "email.digest.upload"
msgstr "upload"
#: src/components/profile/ProfileHeader.tsx:79
#: src/components/profile/ProfileHeader.tsx:80
msgid "Upload failed"
msgstr "Upload failed"
@@ -2136,12 +2139,14 @@ msgid "email.welcome.subject"
msgstr "Welcome to {site}"
#: src/components/dump/create/DumpCreateModal.tsx:705
#: src/pages/Dump.tsx:514
#: src/pages/Dump.tsx:521
#: src/pages/DumpEdit.tsx:539
msgid "What makes it worth it?"
msgstr "What makes it worth it?"
#: src/components/profile/DescriptionEditor.tsx:78
#: src/components/profile/ProfileDescription.tsx:79
#: src/components/profile/ProfileDescription.tsx:62
#: src/components/profile/ProfileDescription.tsx:72
msgid "Who am I?"
msgstr "Who am I?"