From 3ca44f9c8c677373d28a8b994deeba837a6b8a6f Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Wed, 7 May 2025 16:39:24 +0800 Subject: [PATCH] Respect server's media desc limit --- src/components/compose.jsx | 6 +- src/locales/en.po | 180 ++++++++++++++++++------------------- 2 files changed, 94 insertions(+), 92 deletions(-) diff --git a/src/components/compose.jsx b/src/components/compose.jsx index d773bad0..3c8bdc21 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -253,6 +253,7 @@ function Compose({ videoSizeLimit, videoMatrixLimit, videoFrameRateLimit, + descriptionLimit, } = {}, polls: { maxOptions, @@ -1337,6 +1338,7 @@ function Compose({ attachment={attachment} disabled={uiState === 'loading'} lang={language} + descriptionLimit={descriptionLimit} onDescriptionChange={(value) => { setMediaAttachments((attachments) => { const newAttachments = [...attachments]; @@ -2424,6 +2426,7 @@ function MediaAttachment({ attachment, disabled, lang, + descriptionLimit = 1500, onDescriptionChange = () => {}, onRemove = () => {}, }) { @@ -2565,8 +2568,7 @@ function MediaAttachment({ dir="auto" disabled={disabled || uiState === 'loading'} class={uiState === 'loading' ? 'loading' : ''} - maxlength="1500" // Not unicode-aware :( - // TODO: Un-hard-code this maxlength, ref: https://github.com/mastodon/mastodon/blob/b59fb28e90bc21d6fd1a6bafd13cfbd81ab5be54/app/models/media_attachment.rb#L39 + maxlength={descriptionLimit} // Not unicode-aware :( onInput={(e) => { const { value } = e.target; setDescription(value); diff --git a/src/locales/en.po b/src/locales/en.po index 0503a2a4..c16cd01d 100644 --- a/src/locales/en.po +++ b/src/locales/en.po @@ -108,7 +108,7 @@ msgstr "" #: src/components/account-info.jsx:444 #: 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-modal.jsx:359 #: src/components/status.jsx:1826 @@ -420,11 +420,11 @@ msgstr "" #: src/components/account-info.jsx:2064 #: src/components/account-info.jsx:2184 #: src/components/account-sheet.jsx:38 -#: src/components/compose.jsx:883 -#: src/components/compose.jsx:2730 -#: src/components/compose.jsx:3207 -#: src/components/compose.jsx:3416 -#: src/components/compose.jsx:3646 +#: src/components/compose.jsx:884 +#: src/components/compose.jsx:2732 +#: src/components/compose.jsx:3209 +#: src/components/compose.jsx:3418 +#: src/components/compose.jsx:3648 #: src/components/drafts.jsx:59 #: src/components/embed-modal.jsx:13 #: src/components/generic-accounts.jsx:143 @@ -606,152 +606,152 @@ msgstr "" msgid "Schedule post" msgstr "Schedule post" -#: src/components/compose.jsx:415 +#: src/components/compose.jsx:416 msgid "You have unsaved changes. Discard this post?" msgstr "You have unsaved changes. Discard this post?" #. placeholder {0}: unsupportedFiles.length #. placeholder {1}: unsupportedFiles[0].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.}}" msgstr "{0, plural, one {File {1} is not supported.} other {Files {2} are not supported.}}" -#: src/components/compose.jsx:656 -#: src/components/compose.jsx:674 -#: src/components/compose.jsx:1779 -#: src/components/compose.jsx:1904 +#: src/components/compose.jsx:657 +#: src/components/compose.jsx:675 +#: src/components/compose.jsx:1781 +#: 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.}}" msgstr "" -#: src/components/compose.jsx:864 +#: src/components/compose.jsx:865 msgid "Pop out" msgstr "Pop out" -#: src/components/compose.jsx:871 +#: src/components/compose.jsx:872 msgid "Minimize" msgstr "Minimize" -#: src/components/compose.jsx:907 +#: src/components/compose.jsx:908 msgid "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." 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?" 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" msgstr "Pop in" #. placeholder {0}: replyToStatus.account.acct || replyToStatus.account.username #. placeholder {1}: rtf.format(-replyToStatusMonthsAgo, 'month') -#: src/components/compose.jsx:972 +#: src/components/compose.jsx:973 msgid "Replying to @{0}’s post (<0>{1})" msgstr "" #. placeholder {0}: replyToStatus.account.acct || replyToStatus.account.username -#: src/components/compose.jsx:982 +#: src/components/compose.jsx:983 msgid "Replying to @{0}’s post" msgstr "" -#: src/components/compose.jsx:995 +#: src/components/compose.jsx:996 msgid "Editing source post" msgstr "" -#: src/components/compose.jsx:1048 +#: src/components/compose.jsx:1049 msgid "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" msgstr "Some poll choices are empty" -#: src/components/compose.jsx:1065 +#: src/components/compose.jsx:1066 msgid "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" msgstr "Attachment #{i} failed" -#: src/components/compose.jsx:1213 +#: src/components/compose.jsx:1214 #: src/components/status.jsx:2156 #: src/components/timeline.jsx:1019 msgid "Content warning" msgstr "" -#: src/components/compose.jsx:1229 +#: src/components/compose.jsx:1230 msgid "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/pages/settings.jsx:315 msgid "Public" msgstr "" -#: src/components/compose.jsx:1270 +#: src/components/compose.jsx:1271 #: src/components/nav-menu.jsx:344 #: src/components/shortcuts-settings.jsx:165 #: src/components/status.jsx:97 msgid "Local" msgstr "" -#: src/components/compose.jsx:1274 +#: src/components/compose.jsx:1275 #: src/components/status.jsx:98 #: src/pages/settings.jsx:318 msgid "Unlisted" msgstr "" -#: src/components/compose.jsx:1277 +#: src/components/compose.jsx:1278 #: src/components/status.jsx:99 #: src/pages/settings.jsx:321 msgid "Followers only" msgstr "" -#: src/components/compose.jsx:1280 +#: src/components/compose.jsx:1281 #: src/components/status.jsx:100 #: src/components/status.jsx:2032 msgid "Private mention" msgstr "" -#: src/components/compose.jsx:1289 +#: src/components/compose.jsx:1290 msgid "Post your reply" msgstr "Post your reply" -#: src/components/compose.jsx:1291 +#: src/components/compose.jsx:1292 msgid "Edit your post" msgstr "Edit your post" -#: src/components/compose.jsx:1292 +#: src/components/compose.jsx:1293 msgid "What are you doing?" msgstr "What are you doing?" -#: src/components/compose.jsx:1370 +#: src/components/compose.jsx:1372 msgid "Mark media as sensitive" msgstr "" -#: src/components/compose.jsx:1407 +#: src/components/compose.jsx:1409 msgid "Posting on <0/>" msgstr "Posting on <0/>" -#: src/components/compose.jsx:1438 -#: src/components/compose.jsx:3265 +#: src/components/compose.jsx:1440 +#: src/components/compose.jsx:3267 #: src/components/shortcuts-settings.jsx:715 #: src/pages/list.jsx:362 msgid "Add" msgstr "" -#: src/components/compose.jsx:1664 +#: src/components/compose.jsx:1666 msgid "Schedule" msgstr "Schedule" -#: src/components/compose.jsx:1666 +#: src/components/compose.jsx:1668 #: src/components/keyboard-shortcuts-help.jsx:155 #: src/components/status.jsx:1025 #: src/components/status.jsx:1806 @@ -760,42 +760,42 @@ msgstr "Schedule" msgid "Reply" msgstr "" -#: src/components/compose.jsx:1668 +#: src/components/compose.jsx:1670 msgid "Update" msgstr "Update" -#: src/components/compose.jsx:1669 +#: src/components/compose.jsx:1671 msgctxt "Submit button in composer" msgid "Post" msgstr "Post" -#: src/components/compose.jsx:1791 +#: src/components/compose.jsx:1793 msgid "Downloading GIF…" msgstr "Downloading GIF…" -#: src/components/compose.jsx:1819 +#: src/components/compose.jsx:1821 msgid "Failed to download GIF" msgstr "Failed to download GIF" -#: src/components/compose.jsx:2034 -#: src/components/compose.jsx:2111 +#: src/components/compose.jsx:2036 +#: src/components/compose.jsx:2113 #: src/components/nav-menu.jsx:239 msgid "More…" msgstr "" -#: src/components/compose.jsx:2543 +#: src/components/compose.jsx:2546 msgid "Uploaded" msgstr "" -#: src/components/compose.jsx:2556 +#: src/components/compose.jsx:2559 msgid "Image description" msgstr "Image description" -#: src/components/compose.jsx:2557 +#: src/components/compose.jsx:2560 msgid "Video description" msgstr "Video description" -#: src/components/compose.jsx:2558 +#: src/components/compose.jsx:2561 msgid "Audio description" msgstr "Audio description" @@ -803,8 +803,8 @@ msgstr "Audio description" #. placeholder {0}: prettyBytes( videoSize, ) #. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(videoSizeLimit) -#: src/components/compose.jsx:2594 -#: src/components/compose.jsx:2614 +#: src/components/compose.jsx:2596 +#: 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." 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 {2}: i18n.number(newWidth) #. placeholder {3}: i18n.number( newHeight, ) -#: src/components/compose.jsx:2606 -#: src/components/compose.jsx:2626 +#: src/components/compose.jsx:2608 +#: src/components/compose.jsx:2628 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." -#: src/components/compose.jsx:2634 +#: src/components/compose.jsx:2636 msgid "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:2944 +#: src/components/compose.jsx:2696 +#: src/components/compose.jsx:2946 #: src/components/shortcuts-settings.jsx:726 #: src/pages/catchup.jsx:1081 #: src/pages/filters.jsx:413 msgid "Remove" msgstr "" -#: src/components/compose.jsx:2711 +#: src/components/compose.jsx:2713 #: src/compose.jsx:84 msgid "Error" msgstr "" -#: src/components/compose.jsx:2736 +#: src/components/compose.jsx:2738 msgid "Edit image description" msgstr "Edit image description" -#: src/components/compose.jsx:2737 +#: src/components/compose.jsx:2739 msgid "Edit video description" msgstr "Edit video description" -#: src/components/compose.jsx:2738 +#: src/components/compose.jsx:2740 msgid "Edit audio description" msgstr "Edit audio description" -#: src/components/compose.jsx:2783 -#: src/components/compose.jsx:2832 +#: src/components/compose.jsx:2785 +#: src/components/compose.jsx:2834 msgid "Generating description. Please wait…" msgstr "Generating description. Please wait…" #. placeholder {0}: e.message -#: src/components/compose.jsx:2803 +#: src/components/compose.jsx:2805 msgid "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" msgstr "Failed to generate description" -#: src/components/compose.jsx:2816 -#: src/components/compose.jsx:2822 -#: src/components/compose.jsx:2868 +#: src/components/compose.jsx:2818 +#: src/components/compose.jsx:2824 +#: src/components/compose.jsx:2870 msgid "Generate description…" msgstr "" #. placeholder {0}: e?.message ? `: ${e.message}` : '' -#: src/components/compose.jsx:2855 +#: src/components/compose.jsx:2857 msgid "Failed to generate description{0}" msgstr "Failed to generate description{0}" #. placeholder {0}: localeCode2Text(lang) -#: src/components/compose.jsx:2870 +#: src/components/compose.jsx:2872 msgid "({0}) <0>— experimental" msgstr "" -#: src/components/compose.jsx:2889 +#: src/components/compose.jsx:2891 msgid "Done" msgstr "" #. placeholder {0}: i + 1 -#: src/components/compose.jsx:2925 +#: src/components/compose.jsx:2927 msgid "Choice {0}" msgstr "Choice {0}" -#: src/components/compose.jsx:2972 +#: src/components/compose.jsx:2974 msgid "Multiple choices" msgstr "" -#: src/components/compose.jsx:2975 +#: src/components/compose.jsx:2977 msgid "Duration" msgstr "" -#: src/components/compose.jsx:3006 +#: src/components/compose.jsx:3008 msgid "Remove poll" msgstr "" -#: src/components/compose.jsx:3224 +#: src/components/compose.jsx:3226 msgid "Search accounts" msgstr "Search accounts" -#: src/components/compose.jsx:3278 +#: src/components/compose.jsx:3280 #: src/components/generic-accounts.jsx:228 msgid "Error loading accounts" msgstr "" -#: src/components/compose.jsx:3422 +#: src/components/compose.jsx:3424 msgid "Custom emojis" msgstr "" -#: src/components/compose.jsx:3442 +#: src/components/compose.jsx:3444 msgid "Search emoji" msgstr "Search emoji" -#: src/components/compose.jsx:3473 +#: src/components/compose.jsx:3475 msgid "Error loading custom emojis" msgstr "" -#: src/components/compose.jsx:3484 +#: src/components/compose.jsx:3486 msgid "Recently used" msgstr "Recently used" -#: src/components/compose.jsx:3485 +#: src/components/compose.jsx:3487 msgid "Others" msgstr "Others" #. placeholder {0}: i18n.number(emojis.length - max) -#: src/components/compose.jsx:3523 +#: src/components/compose.jsx:3525 msgid "{0} more…" msgstr "" -#: src/components/compose.jsx:3661 +#: src/components/compose.jsx:3663 msgid "Search GIFs" msgstr "Search GIFs" -#: src/components/compose.jsx:3676 +#: src/components/compose.jsx:3678 msgid "Powered by GIPHY" msgstr "Powered by GIPHY" -#: src/components/compose.jsx:3684 +#: src/components/compose.jsx:3686 msgid "Type to search GIFs" msgstr "" -#: src/components/compose.jsx:3782 +#: src/components/compose.jsx:3784 #: src/components/media-modal.jsx:465 #: src/components/timeline.jsx:923 msgid "Previous" msgstr "" -#: src/components/compose.jsx:3800 +#: src/components/compose.jsx:3802 #: src/components/media-modal.jsx:484 #: src/components/timeline.jsx:940 msgid "Next" msgstr "" -#: src/components/compose.jsx:3817 +#: src/components/compose.jsx:3819 msgid "Error loading GIFs" msgstr ""