Respect server's media desc limit

pull/1137/head
Lim Chee Aun 2025-05-07 16:39:24 +08:00
rodzic 7bbbf9c4f0
commit 3ca44f9c8c
2 zmienionych plików z 94 dodań i 92 usunięć

Wyświetl plik

@ -253,6 +253,7 @@ function Compose({
videoSizeLimit, videoSizeLimit,
videoMatrixLimit, videoMatrixLimit,
videoFrameRateLimit, videoFrameRateLimit,
descriptionLimit,
} = {}, } = {},
polls: { polls: {
maxOptions, maxOptions,
@ -1337,6 +1338,7 @@ function Compose({
attachment={attachment} attachment={attachment}
disabled={uiState === 'loading'} disabled={uiState === 'loading'}
lang={language} lang={language}
descriptionLimit={descriptionLimit}
onDescriptionChange={(value) => { onDescriptionChange={(value) => {
setMediaAttachments((attachments) => { setMediaAttachments((attachments) => {
const newAttachments = [...attachments]; const newAttachments = [...attachments];
@ -2424,6 +2426,7 @@ function MediaAttachment({
attachment, attachment,
disabled, disabled,
lang, lang,
descriptionLimit = 1500,
onDescriptionChange = () => {}, onDescriptionChange = () => {},
onRemove = () => {}, onRemove = () => {},
}) { }) {
@ -2565,8 +2568,7 @@ function MediaAttachment({
dir="auto" dir="auto"
disabled={disabled || uiState === 'loading'} disabled={disabled || uiState === 'loading'}
class={uiState === 'loading' ? 'loading' : ''} class={uiState === 'loading' ? 'loading' : ''}
maxlength="1500" // Not unicode-aware :( maxlength={descriptionLimit} // Not unicode-aware :(
// TODO: Un-hard-code this maxlength, ref: https://github.com/mastodon/mastodon/blob/b59fb28e90bc21d6fd1a6bafd13cfbd81ab5be54/app/models/media_attachment.rb#L39
onInput={(e) => { onInput={(e) => {
const { value } = e.target; const { value } = e.target;
setDescription(value); setDescription(value);

180
src/locales/en.po wygenerowano
Wyświetl plik

@ -108,7 +108,7 @@ msgstr ""
#: src/components/account-info.jsx:444 #: src/components/account-info.jsx:444
#: src/components/account-info.jsx:1202 #: src/components/account-info.jsx:1202
#: src/components/compose.jsx:2774 #: src/components/compose.jsx:2776
#: src/components/media-alt-modal.jsx:46 #: src/components/media-alt-modal.jsx:46
#: src/components/media-modal.jsx:359 #: src/components/media-modal.jsx:359
#: src/components/status.jsx:1826 #: src/components/status.jsx:1826
@ -420,11 +420,11 @@ msgstr ""
#: src/components/account-info.jsx:2064 #: src/components/account-info.jsx:2064
#: src/components/account-info.jsx:2184 #: src/components/account-info.jsx:2184
#: src/components/account-sheet.jsx:38 #: src/components/account-sheet.jsx:38
#: src/components/compose.jsx:883 #: src/components/compose.jsx:884
#: src/components/compose.jsx:2730 #: src/components/compose.jsx:2732
#: src/components/compose.jsx:3207 #: src/components/compose.jsx:3209
#: src/components/compose.jsx:3416 #: src/components/compose.jsx:3418
#: src/components/compose.jsx:3646 #: src/components/compose.jsx:3648
#: src/components/drafts.jsx:59 #: src/components/drafts.jsx:59
#: src/components/embed-modal.jsx:13 #: src/components/embed-modal.jsx:13
#: src/components/generic-accounts.jsx:143 #: src/components/generic-accounts.jsx:143
@ -606,152 +606,152 @@ msgstr ""
msgid "Schedule post" msgid "Schedule post"
msgstr "Schedule post" msgstr "Schedule post"
#: src/components/compose.jsx:415 #: src/components/compose.jsx:416
msgid "You have unsaved changes. Discard this post?" msgid "You have unsaved changes. Discard this post?"
msgstr "You have unsaved changes. Discard this post?" msgstr "You have unsaved changes. Discard this post?"
#. placeholder {0}: unsupportedFiles.length #. placeholder {0}: unsupportedFiles.length
#. placeholder {1}: unsupportedFiles[0].name #. placeholder {1}: unsupportedFiles[0].name
#. placeholder {2}: lf.format( unsupportedFiles.map((f) => f.name), ) #. placeholder {2}: lf.format( unsupportedFiles.map((f) => f.name), )
#: src/components/compose.jsx:646 #: src/components/compose.jsx:647
msgid "{0, plural, one {File {1} is not supported.} other {Files {2} are not supported.}}" msgid "{0, plural, one {File {1} is not supported.} other {Files {2} are not supported.}}"
msgstr "{0, plural, one {File {1} is not supported.} other {Files {2} are not supported.}}" msgstr "{0, plural, one {File {1} is not supported.} other {Files {2} are not supported.}}"
#: src/components/compose.jsx:656 #: src/components/compose.jsx:657
#: src/components/compose.jsx:674 #: src/components/compose.jsx:675
#: src/components/compose.jsx:1779 #: src/components/compose.jsx:1781
#: src/components/compose.jsx:1904 #: src/components/compose.jsx:1906
msgid "{maxMediaAttachments, plural, one {You can only attach up to 1 file.} other {You can only attach up to # files.}}" msgid "{maxMediaAttachments, plural, one {You can only attach up to 1 file.} other {You can only attach up to # files.}}"
msgstr "" msgstr ""
#: src/components/compose.jsx:864 #: src/components/compose.jsx:865
msgid "Pop out" msgid "Pop out"
msgstr "Pop out" msgstr "Pop out"
#: src/components/compose.jsx:871 #: src/components/compose.jsx:872
msgid "Minimize" msgid "Minimize"
msgstr "Minimize" msgstr "Minimize"
#: src/components/compose.jsx:907 #: src/components/compose.jsx:908
msgid "Looks like you closed the parent window." msgid "Looks like you closed the parent window."
msgstr "Looks like you closed the parent window." msgstr "Looks like you closed the parent window."
#: src/components/compose.jsx:914 #: src/components/compose.jsx:915
msgid "Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later." msgid "Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later."
msgstr "Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later." msgstr "Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later."
#: src/components/compose.jsx:919 #: src/components/compose.jsx:920
msgid "Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?" msgid "Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?"
msgstr "Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?" msgstr "Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?"
#: src/components/compose.jsx:962 #: src/components/compose.jsx:963
msgid "Pop in" msgid "Pop in"
msgstr "Pop in" msgstr "Pop in"
#. placeholder {0}: replyToStatus.account.acct || replyToStatus.account.username #. placeholder {0}: replyToStatus.account.acct || replyToStatus.account.username
#. placeholder {1}: rtf.format(-replyToStatusMonthsAgo, 'month') #. placeholder {1}: rtf.format(-replyToStatusMonthsAgo, 'month')
#: src/components/compose.jsx:972 #: src/components/compose.jsx:973
msgid "Replying to @{0}s post (<0>{1}</0>)" msgid "Replying to @{0}s post (<0>{1}</0>)"
msgstr "" msgstr ""
#. placeholder {0}: replyToStatus.account.acct || replyToStatus.account.username #. placeholder {0}: replyToStatus.account.acct || replyToStatus.account.username
#: src/components/compose.jsx:982 #: src/components/compose.jsx:983
msgid "Replying to @{0}s post" msgid "Replying to @{0}s post"
msgstr "" msgstr ""
#: src/components/compose.jsx:995 #: src/components/compose.jsx:996
msgid "Editing source post" msgid "Editing source post"
msgstr "" msgstr ""
#: src/components/compose.jsx:1048 #: src/components/compose.jsx:1049
msgid "Poll must have at least 2 options" msgid "Poll must have at least 2 options"
msgstr "Poll must have at least 2 options" msgstr "Poll must have at least 2 options"
#: src/components/compose.jsx:1052 #: src/components/compose.jsx:1053
msgid "Some poll choices are empty" msgid "Some poll choices are empty"
msgstr "Some poll choices are empty" msgstr "Some poll choices are empty"
#: src/components/compose.jsx:1065 #: src/components/compose.jsx:1066
msgid "Some media have no descriptions. Continue?" msgid "Some media have no descriptions. Continue?"
msgstr "Some media have no descriptions. Continue?" msgstr "Some media have no descriptions. Continue?"
#: src/components/compose.jsx:1117 #: src/components/compose.jsx:1118
msgid "Attachment #{i} failed" msgid "Attachment #{i} failed"
msgstr "Attachment #{i} failed" msgstr "Attachment #{i} failed"
#: src/components/compose.jsx:1213 #: src/components/compose.jsx:1214
#: src/components/status.jsx:2156 #: src/components/status.jsx:2156
#: src/components/timeline.jsx:1019 #: src/components/timeline.jsx:1019
msgid "Content warning" msgid "Content warning"
msgstr "" msgstr ""
#: src/components/compose.jsx:1229 #: src/components/compose.jsx:1230
msgid "Content warning or sensitive media" msgid "Content warning or sensitive media"
msgstr "Content warning or sensitive media" msgstr "Content warning or sensitive media"
#: src/components/compose.jsx:1265 #: src/components/compose.jsx:1266
#: src/components/status.jsx:96 #: src/components/status.jsx:96
#: src/pages/settings.jsx:315 #: src/pages/settings.jsx:315
msgid "Public" msgid "Public"
msgstr "" msgstr ""
#: src/components/compose.jsx:1270 #: src/components/compose.jsx:1271
#: src/components/nav-menu.jsx:344 #: src/components/nav-menu.jsx:344
#: src/components/shortcuts-settings.jsx:165 #: src/components/shortcuts-settings.jsx:165
#: src/components/status.jsx:97 #: src/components/status.jsx:97
msgid "Local" msgid "Local"
msgstr "" msgstr ""
#: src/components/compose.jsx:1274 #: src/components/compose.jsx:1275
#: src/components/status.jsx:98 #: src/components/status.jsx:98
#: src/pages/settings.jsx:318 #: src/pages/settings.jsx:318
msgid "Unlisted" msgid "Unlisted"
msgstr "" msgstr ""
#: src/components/compose.jsx:1277 #: src/components/compose.jsx:1278
#: src/components/status.jsx:99 #: src/components/status.jsx:99
#: src/pages/settings.jsx:321 #: src/pages/settings.jsx:321
msgid "Followers only" msgid "Followers only"
msgstr "" msgstr ""
#: src/components/compose.jsx:1280 #: src/components/compose.jsx:1281
#: src/components/status.jsx:100 #: src/components/status.jsx:100
#: src/components/status.jsx:2032 #: src/components/status.jsx:2032
msgid "Private mention" msgid "Private mention"
msgstr "" msgstr ""
#: src/components/compose.jsx:1289 #: src/components/compose.jsx:1290
msgid "Post your reply" msgid "Post your reply"
msgstr "Post your reply" msgstr "Post your reply"
#: src/components/compose.jsx:1291 #: src/components/compose.jsx:1292
msgid "Edit your post" msgid "Edit your post"
msgstr "Edit your post" msgstr "Edit your post"
#: src/components/compose.jsx:1292 #: src/components/compose.jsx:1293
msgid "What are you doing?" msgid "What are you doing?"
msgstr "What are you doing?" msgstr "What are you doing?"
#: src/components/compose.jsx:1370 #: src/components/compose.jsx:1372
msgid "Mark media as sensitive" msgid "Mark media as sensitive"
msgstr "" msgstr ""
#: src/components/compose.jsx:1407 #: src/components/compose.jsx:1409
msgid "Posting on <0/>" msgid "Posting on <0/>"
msgstr "Posting on <0/>" msgstr "Posting on <0/>"
#: src/components/compose.jsx:1438 #: src/components/compose.jsx:1440
#: src/components/compose.jsx:3265 #: src/components/compose.jsx:3267
#: src/components/shortcuts-settings.jsx:715 #: src/components/shortcuts-settings.jsx:715
#: src/pages/list.jsx:362 #: src/pages/list.jsx:362
msgid "Add" msgid "Add"
msgstr "" msgstr ""
#: src/components/compose.jsx:1664 #: src/components/compose.jsx:1666
msgid "Schedule" msgid "Schedule"
msgstr "Schedule" msgstr "Schedule"
#: src/components/compose.jsx:1666 #: src/components/compose.jsx:1668
#: src/components/keyboard-shortcuts-help.jsx:155 #: src/components/keyboard-shortcuts-help.jsx:155
#: src/components/status.jsx:1025 #: src/components/status.jsx:1025
#: src/components/status.jsx:1806 #: src/components/status.jsx:1806
@ -760,42 +760,42 @@ msgstr "Schedule"
msgid "Reply" msgid "Reply"
msgstr "" msgstr ""
#: src/components/compose.jsx:1668 #: src/components/compose.jsx:1670
msgid "Update" msgid "Update"
msgstr "Update" msgstr "Update"
#: src/components/compose.jsx:1669 #: src/components/compose.jsx:1671
msgctxt "Submit button in composer" msgctxt "Submit button in composer"
msgid "Post" msgid "Post"
msgstr "Post" msgstr "Post"
#: src/components/compose.jsx:1791 #: src/components/compose.jsx:1793
msgid "Downloading GIF…" msgid "Downloading GIF…"
msgstr "Downloading GIF…" msgstr "Downloading GIF…"
#: src/components/compose.jsx:1819 #: src/components/compose.jsx:1821
msgid "Failed to download GIF" msgid "Failed to download GIF"
msgstr "Failed to download GIF" msgstr "Failed to download GIF"
#: src/components/compose.jsx:2034 #: src/components/compose.jsx:2036
#: src/components/compose.jsx:2111 #: src/components/compose.jsx:2113
#: src/components/nav-menu.jsx:239 #: src/components/nav-menu.jsx:239
msgid "More…" msgid "More…"
msgstr "" msgstr ""
#: src/components/compose.jsx:2543 #: src/components/compose.jsx:2546
msgid "Uploaded" msgid "Uploaded"
msgstr "" msgstr ""
#: src/components/compose.jsx:2556 #: src/components/compose.jsx:2559
msgid "Image description" msgid "Image description"
msgstr "Image description" msgstr "Image description"
#: src/components/compose.jsx:2557 #: src/components/compose.jsx:2560
msgid "Video description" msgid "Video description"
msgstr "Video description" msgstr "Video description"
#: src/components/compose.jsx:2558 #: src/components/compose.jsx:2561
msgid "Audio description" msgid "Audio description"
msgstr "Audio description" msgstr "Audio description"
@ -803,8 +803,8 @@ msgstr "Audio description"
#. placeholder {0}: prettyBytes( videoSize, ) #. placeholder {0}: prettyBytes( videoSize, )
#. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(imageSizeLimit)
#. placeholder {1}: prettyBytes(videoSizeLimit) #. placeholder {1}: prettyBytes(videoSizeLimit)
#: src/components/compose.jsx:2594 #: src/components/compose.jsx:2596
#: src/components/compose.jsx:2614 #: src/components/compose.jsx:2616
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
@ -812,150 +812,150 @@ msgstr "File size too large. Uploading might encounter issues. Try reduce the fi
#. placeholder {1}: i18n.number(height) #. placeholder {1}: i18n.number(height)
#. placeholder {2}: i18n.number(newWidth) #. placeholder {2}: i18n.number(newWidth)
#. placeholder {3}: i18n.number( newHeight, ) #. placeholder {3}: i18n.number( newHeight, )
#: src/components/compose.jsx:2606 #: src/components/compose.jsx:2608
#: src/components/compose.jsx:2626 #: src/components/compose.jsx:2628
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px."
msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px." msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px."
#: src/components/compose.jsx:2634 #: src/components/compose.jsx:2636
msgid "Frame rate too high. Uploading might encounter issues." msgid "Frame rate too high. Uploading might encounter issues."
msgstr "Frame rate too high. Uploading might encounter issues." msgstr "Frame rate too high. Uploading might encounter issues."
#: src/components/compose.jsx:2694 #: src/components/compose.jsx:2696
#: src/components/compose.jsx:2944 #: src/components/compose.jsx:2946
#: src/components/shortcuts-settings.jsx:726 #: src/components/shortcuts-settings.jsx:726
#: src/pages/catchup.jsx:1081 #: src/pages/catchup.jsx:1081
#: src/pages/filters.jsx:413 #: src/pages/filters.jsx:413
msgid "Remove" msgid "Remove"
msgstr "" msgstr ""
#: src/components/compose.jsx:2711 #: src/components/compose.jsx:2713
#: src/compose.jsx:84 #: src/compose.jsx:84
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: src/components/compose.jsx:2736 #: src/components/compose.jsx:2738
msgid "Edit image description" msgid "Edit image description"
msgstr "Edit image description" msgstr "Edit image description"
#: src/components/compose.jsx:2737 #: src/components/compose.jsx:2739
msgid "Edit video description" msgid "Edit video description"
msgstr "Edit video description" msgstr "Edit video description"
#: src/components/compose.jsx:2738 #: src/components/compose.jsx:2740
msgid "Edit audio description" msgid "Edit audio description"
msgstr "Edit audio description" msgstr "Edit audio description"
#: src/components/compose.jsx:2783 #: src/components/compose.jsx:2785
#: src/components/compose.jsx:2832 #: src/components/compose.jsx:2834
msgid "Generating description. Please wait…" msgid "Generating description. Please wait…"
msgstr "Generating description. Please wait…" msgstr "Generating description. Please wait…"
#. placeholder {0}: e.message #. placeholder {0}: e.message
#: src/components/compose.jsx:2803 #: src/components/compose.jsx:2805
msgid "Failed to generate description: {0}" msgid "Failed to generate description: {0}"
msgstr "Failed to generate description: {0}" msgstr "Failed to generate description: {0}"
#: src/components/compose.jsx:2804 #: src/components/compose.jsx:2806
msgid "Failed to generate description" msgid "Failed to generate description"
msgstr "Failed to generate description" msgstr "Failed to generate description"
#: src/components/compose.jsx:2816 #: src/components/compose.jsx:2818
#: src/components/compose.jsx:2822 #: src/components/compose.jsx:2824
#: src/components/compose.jsx:2868 #: src/components/compose.jsx:2870
msgid "Generate description…" msgid "Generate description…"
msgstr "" msgstr ""
#. placeholder {0}: e?.message ? `: ${e.message}` : '' #. placeholder {0}: e?.message ? `: ${e.message}` : ''
#: src/components/compose.jsx:2855 #: src/components/compose.jsx:2857
msgid "Failed to generate description{0}" msgid "Failed to generate description{0}"
msgstr "Failed to generate description{0}" msgstr "Failed to generate description{0}"
#. placeholder {0}: localeCode2Text(lang) #. placeholder {0}: localeCode2Text(lang)
#: src/components/compose.jsx:2870 #: src/components/compose.jsx:2872
msgid "({0}) <0>— experimental</0>" msgid "({0}) <0>— experimental</0>"
msgstr "" msgstr ""
#: src/components/compose.jsx:2889 #: src/components/compose.jsx:2891
msgid "Done" msgid "Done"
msgstr "" msgstr ""
#. placeholder {0}: i + 1 #. placeholder {0}: i + 1
#: src/components/compose.jsx:2925 #: src/components/compose.jsx:2927
msgid "Choice {0}" msgid "Choice {0}"
msgstr "Choice {0}" msgstr "Choice {0}"
#: src/components/compose.jsx:2972 #: src/components/compose.jsx:2974
msgid "Multiple choices" msgid "Multiple choices"
msgstr "" msgstr ""
#: src/components/compose.jsx:2975 #: src/components/compose.jsx:2977
msgid "Duration" msgid "Duration"
msgstr "" msgstr ""
#: src/components/compose.jsx:3006 #: src/components/compose.jsx:3008
msgid "Remove poll" msgid "Remove poll"
msgstr "" msgstr ""
#: src/components/compose.jsx:3224 #: src/components/compose.jsx:3226
msgid "Search accounts" msgid "Search accounts"
msgstr "Search accounts" msgstr "Search accounts"
#: src/components/compose.jsx:3278 #: src/components/compose.jsx:3280
#: src/components/generic-accounts.jsx:228 #: src/components/generic-accounts.jsx:228
msgid "Error loading accounts" msgid "Error loading accounts"
msgstr "" msgstr ""
#: src/components/compose.jsx:3422 #: src/components/compose.jsx:3424
msgid "Custom emojis" msgid "Custom emojis"
msgstr "" msgstr ""
#: src/components/compose.jsx:3442 #: src/components/compose.jsx:3444
msgid "Search emoji" msgid "Search emoji"
msgstr "Search emoji" msgstr "Search emoji"
#: src/components/compose.jsx:3473 #: src/components/compose.jsx:3475
msgid "Error loading custom emojis" msgid "Error loading custom emojis"
msgstr "" msgstr ""
#: src/components/compose.jsx:3484 #: src/components/compose.jsx:3486
msgid "Recently used" msgid "Recently used"
msgstr "Recently used" msgstr "Recently used"
#: src/components/compose.jsx:3485 #: src/components/compose.jsx:3487
msgid "Others" msgid "Others"
msgstr "Others" msgstr "Others"
#. placeholder {0}: i18n.number(emojis.length - max) #. placeholder {0}: i18n.number(emojis.length - max)
#: src/components/compose.jsx:3523 #: src/components/compose.jsx:3525
msgid "{0} more…" msgid "{0} more…"
msgstr "" msgstr ""
#: src/components/compose.jsx:3661 #: src/components/compose.jsx:3663
msgid "Search GIFs" msgid "Search GIFs"
msgstr "Search GIFs" msgstr "Search GIFs"
#: src/components/compose.jsx:3676 #: src/components/compose.jsx:3678
msgid "Powered by GIPHY" msgid "Powered by GIPHY"
msgstr "Powered by GIPHY" msgstr "Powered by GIPHY"
#: src/components/compose.jsx:3684 #: src/components/compose.jsx:3686
msgid "Type to search GIFs" msgid "Type to search GIFs"
msgstr "" msgstr ""
#: src/components/compose.jsx:3782 #: src/components/compose.jsx:3784
#: src/components/media-modal.jsx:465 #: src/components/media-modal.jsx:465
#: src/components/timeline.jsx:923 #: src/components/timeline.jsx:923
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: src/components/compose.jsx:3800 #: src/components/compose.jsx:3802
#: src/components/media-modal.jsx:484 #: src/components/media-modal.jsx:484
#: src/components/timeline.jsx:940 #: src/components/timeline.jsx:940
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: src/components/compose.jsx:3817 #: src/components/compose.jsx:3819
msgid "Error loading GIFs" msgid "Error loading GIFs"
msgstr "" msgstr ""