this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Refactor endorsements

Don't show empty endorsements after following

+244 -220
+115 -91
src/components/account-info.jsx
··· 378 378 379 379 const [showEditProfile, setShowEditProfile] = useState(false); 380 380 381 - const endorsementsContainer = useRef(); 382 381 const [renderEndorsements, setRenderEndorsements] = useState(false); 383 - const [endorsementsUIState, setEndorsementsUIState] = useState('default'); 384 - const [endorsements, setEndorsements] = useState([]); 385 - const [relationshipsMap, setRelationshipsMap] = useState({}); 386 - useEffect(() => { 387 - if (!supports('@mastodon/endorsements')) return; 388 - if (!showEndorsements) return; 389 - if (!renderEndorsements) return; 390 - (async () => { 391 - setEndorsementsUIState('loading'); 392 - try { 393 - const accounts = await masto.v1.accounts.$select(id).endorsements.list({ 394 - limit: ENDORSEMENTS_LIMIT, 395 - }); 396 - console.log({ endorsements: accounts }); 397 - if (!accounts.length) { 398 - setEndorsementsUIState('default'); 399 - return; 400 - } 401 - setEndorsements(accounts); 402 - setEndorsementsUIState('default'); 403 - setTimeout(() => { 404 - endorsementsContainer.current.scrollIntoView({ 405 - behavior: 'smooth', 406 - block: 'nearest', 407 - }); 408 - }, 300); 409 - 410 - const relationships = await fetchRelationships( 411 - accounts, 412 - relationshipsMap, 413 - ); 414 - if (relationships) { 415 - setRelationshipsMap(relationships); 416 - } 417 - } catch (e) { 418 - console.error(e); 419 - setEndorsementsUIState('error'); 420 - } 421 - })(); 422 - }, [showEndorsements, renderEndorsements, id]); 423 382 424 383 return ( 425 384 <> ··· 1040 999 onRelationshipChange={onRelationshipChange} 1041 1000 onProfileUpdate={onProfileUpdate} 1042 1001 setShowEditProfile={setShowEditProfile} 1002 + showEndorsements={showEndorsements} 1043 1003 renderEndorsements={renderEndorsements} 1044 1004 setRenderEndorsements={setRenderEndorsements} 1045 1005 /> 1046 1006 </footer> 1047 - {renderEndorsements && ( 1048 - <div class="shazam-container"> 1049 - <div class="shazam-container-inner"> 1050 - <div 1051 - class="endorsements-container" 1052 - ref={endorsementsContainer} 1053 - > 1054 - <h3> 1055 - <Trans>Profiles featured by @{info.username}</Trans> 1056 - </h3> 1057 - {endorsementsUIState === 'loading' ? ( 1058 - <p class="ui-state"> 1059 - <Loader abrupt /> 1060 - </p> 1061 - ) : endorsements.length > 0 ? ( 1062 - <ul 1063 - class={`endorsements ${ 1064 - endorsements.length > 10 ? 'expanded' : '' 1065 - }`} 1066 - > 1067 - {endorsements.map((account) => ( 1068 - <li> 1069 - <AccountBlock 1070 - key={account.id} 1071 - account={account} 1072 - showStats 1073 - avatarSize="xxl" 1074 - relationship={relationshipsMap[account.id]} 1075 - /> 1076 - </li> 1077 - ))} 1078 - </ul> 1079 - ) : ( 1080 - <p class="ui-state insignificant"> 1081 - <Trans>No featured profiles.</Trans> 1082 - </p> 1083 - )} 1084 - </div> 1085 - </div> 1086 - </div> 1087 - )} 1007 + <Endorsements 1008 + accountID={id} 1009 + info={info} 1010 + open={renderEndorsements} 1011 + onlyOpenIfHasEndorsements={ 1012 + renderEndorsements === 'onlyOpenIfHasEndorsements' 1013 + } 1014 + /> 1088 1015 </> 1089 1016 ) 1090 1017 )} ··· 1119 1046 onRelationshipChange = () => {}, 1120 1047 onProfileUpdate = () => {}, 1121 1048 setShowEditProfile = () => {}, 1049 + showEndorsements = false, 1122 1050 renderEndorsements = false, 1123 1051 setRenderEndorsements = () => {}, 1124 1052 }) { ··· 1473 1401 : 'Feature on profile'} 1474 1402 </MenuItem> 1475 1403 )} 1476 - {supportsEndorsements && !renderEndorsements && ( 1477 - <MenuItem onClick={() => setRenderEndorsements(true)}> 1478 - <Icon icon="endorsement" /> 1479 - <span> 1480 - <Trans>Show featured profiles</Trans> 1481 - </span> 1482 - </MenuItem> 1483 - )} 1404 + {showEndorsements && 1405 + supportsEndorsements && 1406 + !renderEndorsements && ( 1407 + <MenuItem onClick={() => setRenderEndorsements(true)}> 1408 + <Icon icon="endorsement" /> 1409 + <span> 1410 + <Trans>Show featured profiles</Trans> 1411 + </span> 1412 + </MenuItem> 1413 + )} 1484 1414 {/* Add/remove from lists is only possible if following the account */} 1485 1415 {following && ( 1486 1416 <MenuItem ··· 1908 1838 1909 1839 // Show endorsements if start following 1910 1840 if (newRelationship.following) { 1911 - setRenderEndorsements(true); 1841 + setRenderEndorsements('onlyOpenIfHasEndorsements'); 1912 1842 } 1913 1843 } 1914 1844 setRelationshipUIState('default'); ··· 2656 2586 <span class="handle-legend-icon server" />{' '} 2657 2587 <Trans>server domain name</Trans> 2658 2588 </span> 2589 + </div> 2590 + </div> 2591 + ); 2592 + } 2593 + 2594 + function Endorsements({ 2595 + accountID: id, 2596 + info, 2597 + open = false, 2598 + onlyOpenIfHasEndorsements = false, 2599 + }) { 2600 + const { masto } = api(); 2601 + const endorsementsContainer = useRef(); 2602 + const [endorsementsUIState, setEndorsementsUIState] = useState('default'); 2603 + const [endorsements, setEndorsements] = useState([]); 2604 + const [relationshipsMap, setRelationshipsMap] = useState({}); 2605 + useEffect(() => { 2606 + if (!supports('@mastodon/endorsements')) return; 2607 + if (!open) return; 2608 + (async () => { 2609 + setEndorsementsUIState('loading'); 2610 + try { 2611 + const accounts = await masto.v1.accounts.$select(id).endorsements.list({ 2612 + limit: ENDORSEMENTS_LIMIT, 2613 + }); 2614 + console.log({ endorsements: accounts }); 2615 + if (!accounts.length) { 2616 + setEndorsementsUIState('default'); 2617 + return; 2618 + } 2619 + setEndorsements(accounts); 2620 + setEndorsementsUIState('default'); 2621 + setTimeout(() => { 2622 + endorsementsContainer.current.scrollIntoView({ 2623 + behavior: 'smooth', 2624 + block: 'nearest', 2625 + }); 2626 + }, 300); 2627 + 2628 + const relationships = await fetchRelationships( 2629 + accounts, 2630 + relationshipsMap, 2631 + ); 2632 + if (relationships) { 2633 + setRelationshipsMap(relationships); 2634 + } 2635 + } catch (e) { 2636 + console.error(e); 2637 + setEndorsementsUIState('error'); 2638 + } 2639 + })(); 2640 + }, [open, id]); 2641 + 2642 + const reallyOpen = onlyOpenIfHasEndorsements 2643 + ? open && endorsements.length > 0 2644 + : open; 2645 + 2646 + if (!reallyOpen) return null; 2647 + 2648 + return ( 2649 + <div class="shazam-container"> 2650 + <div class="shazam-container-inner"> 2651 + <div class="endorsements-container" ref={endorsementsContainer}> 2652 + <h3> 2653 + <Trans>Profiles featured by @{info.username}</Trans> 2654 + </h3> 2655 + {endorsementsUIState === 'loading' ? ( 2656 + <p class="ui-state"> 2657 + <Loader abrupt /> 2658 + </p> 2659 + ) : endorsements.length > 0 ? ( 2660 + <ul 2661 + class={`endorsements ${ 2662 + endorsements.length > 10 ? 'expanded' : '' 2663 + }`} 2664 + > 2665 + {endorsements.map((account) => ( 2666 + <li> 2667 + <AccountBlock 2668 + key={account.id} 2669 + account={account} 2670 + showStats 2671 + avatarSize="xxl" 2672 + relationship={relationshipsMap[account.id]} 2673 + /> 2674 + </li> 2675 + ))} 2676 + </ul> 2677 + ) : ( 2678 + <p class="ui-state insignificant"> 2679 + <Trans>No featured profiles.</Trans> 2680 + </p> 2681 + )} 2682 + </div> 2659 2683 </div> 2660 2684 </div> 2661 2685 );
+129 -129
src/locales/en.po
··· 28 28 msgstr "" 29 29 30 30 #: src/components/account-block.jsx:163 31 - #: src/components/account-info.jsx:746 31 + #: src/components/account-info.jsx:705 32 32 msgid "Automated" 33 33 msgstr "" 34 34 35 35 #: src/components/account-block.jsx:170 36 - #: src/components/account-info.jsx:751 36 + #: src/components/account-info.jsx:710 37 37 #: src/components/status.jsx:577 38 38 msgid "Group" 39 39 msgstr "" ··· 43 43 msgstr "" 44 44 45 45 #: src/components/account-block.jsx:184 46 - #: src/components/account-info.jsx:1940 46 + #: src/components/account-info.jsx:1870 47 47 msgid "Requested" 48 48 msgstr "" 49 49 50 50 #: src/components/account-block.jsx:188 51 - #: src/components/account-info.jsx:1931 51 + #: src/components/account-info.jsx:1861 52 52 msgid "Following" 53 53 msgstr "" 54 54 55 55 #: src/components/account-block.jsx:192 56 - #: src/components/account-info.jsx:1247 56 + #: src/components/account-info.jsx:1175 57 57 msgid "Follows you" 58 58 msgstr "" 59 59 ··· 62 62 msgstr "" 63 63 64 64 #: src/components/account-block.jsx:209 65 - #: src/components/account-info.jsx:794 65 + #: src/components/account-info.jsx:753 66 66 msgid "Verified" 67 67 msgstr "" 68 68 69 69 #. placeholder {0}: niceDateTime(createdAt, { hideTime: true, }) 70 70 #. placeholder {0}: niceDateTime(createdAt, { hideTime: true, }) 71 71 #: src/components/account-block.jsx:224 72 - #: src/components/account-info.jsx:896 72 + #: src/components/account-info.jsx:855 73 73 msgid "Joined <0>{0}</0>" 74 74 msgstr "" 75 75 ··· 77 77 msgid "Forever" 78 78 msgstr "" 79 79 80 - #: src/components/account-info.jsx:439 80 + #: src/components/account-info.jsx:398 81 81 msgid "Unable to load account." 82 82 msgstr "" 83 83 84 - #: src/components/account-info.jsx:454 84 + #: src/components/account-info.jsx:413 85 85 msgid "Go to account page" 86 86 msgstr "" 87 87 88 - #: src/components/account-info.jsx:483 89 - #: src/components/account-info.jsx:816 90 - #: src/components/account-info.jsx:846 88 + #: src/components/account-info.jsx:442 89 + #: src/components/account-info.jsx:775 90 + #: src/components/account-info.jsx:805 91 91 msgid "Followers" 92 92 msgstr "" 93 93 94 94 #. js-lingui-explicit-id 95 - #: src/components/account-info.jsx:487 96 - #: src/components/account-info.jsx:856 97 - #: src/components/account-info.jsx:875 95 + #: src/components/account-info.jsx:446 96 + #: src/components/account-info.jsx:815 97 + #: src/components/account-info.jsx:834 98 98 msgid "following.stats" 99 99 msgstr "Following" 100 100 101 - #: src/components/account-info.jsx:490 102 - #: src/components/account-info.jsx:892 101 + #: src/components/account-info.jsx:449 102 + #: src/components/account-info.jsx:851 103 103 #: src/pages/account-statuses.jsx:482 104 104 #: src/pages/search.jsx:341 105 105 #: src/pages/search.jsx:488 106 106 msgid "Posts" 107 107 msgstr "" 108 108 109 - #: src/components/account-info.jsx:498 110 - #: src/components/account-info.jsx:1303 109 + #: src/components/account-info.jsx:457 110 + #: src/components/account-info.jsx:1231 111 111 #: src/components/compose.jsx:2776 112 112 #: src/components/media-alt-modal.jsx:46 113 113 #: src/components/media-modal.jsx:359 ··· 127 127 msgid "More" 128 128 msgstr "" 129 129 130 - #: src/components/account-info.jsx:510 130 + #: src/components/account-info.jsx:469 131 131 msgid "<0>{displayName}</0> has indicated that their new account is now:" 132 132 msgstr "" 133 133 134 - #: src/components/account-info.jsx:655 135 - #: src/components/account-info.jsx:1529 134 + #: src/components/account-info.jsx:614 135 + #: src/components/account-info.jsx:1459 136 136 msgid "Handle copied" 137 137 msgstr "Handle copied" 138 138 139 - #: src/components/account-info.jsx:658 140 - #: src/components/account-info.jsx:1532 139 + #: src/components/account-info.jsx:617 140 + #: src/components/account-info.jsx:1462 141 141 msgid "Unable to copy handle" 142 142 msgstr "Unable to copy handle" 143 143 144 - #: src/components/account-info.jsx:664 145 - #: src/components/account-info.jsx:1538 144 + #: src/components/account-info.jsx:623 145 + #: src/components/account-info.jsx:1468 146 146 msgid "Copy handle" 147 147 msgstr "" 148 148 149 - #: src/components/account-info.jsx:670 149 + #: src/components/account-info.jsx:629 150 150 msgid "Go to original profile page" 151 151 msgstr "" 152 152 153 - #: src/components/account-info.jsx:688 153 + #: src/components/account-info.jsx:647 154 154 msgid "View profile image" 155 155 msgstr "" 156 156 157 - #: src/components/account-info.jsx:706 157 + #: src/components/account-info.jsx:665 158 158 msgid "View profile header" 159 159 msgstr "" 160 160 161 - #: src/components/account-info.jsx:722 162 - #: src/components/account-info.jsx:1839 163 - #: src/components/account-info.jsx:2365 161 + #: src/components/account-info.jsx:681 162 + #: src/components/account-info.jsx:1769 163 + #: src/components/account-info.jsx:2295 164 164 msgid "Edit profile" 165 165 msgstr "" 166 166 167 - #: src/components/account-info.jsx:741 167 + #: src/components/account-info.jsx:700 168 168 msgid "In Memoriam" 169 169 msgstr "" 170 170 171 - #: src/components/account-info.jsx:823 172 - #: src/components/account-info.jsx:866 171 + #: src/components/account-info.jsx:782 172 + #: src/components/account-info.jsx:825 173 173 msgid "This user has chosen to not make this information available." 174 174 msgstr "This user has chosen to not make this information available." 175 175 176 176 #. placeholder {0}: ( postingStats.originals / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) 177 177 #. placeholder {1}: ( postingStats.replies / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) 178 178 #. placeholder {2}: ( postingStats.boosts / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) 179 - #: src/components/account-info.jsx:921 179 + #: src/components/account-info.jsx:880 180 180 msgid "{0} original posts, {1} replies, {2} boosts" 181 181 msgstr "{0} original posts, {1} replies, {2} boosts" 182 182 ··· 187 187 #. placeholder {4}: postingStats.total 188 188 #. placeholder {5}: postingStats.total 189 189 #. placeholder {6}: postingStats.daysSinceLastPost 190 - #: src/components/account-info.jsx:937 190 + #: src/components/account-info.jsx:896 191 191 msgid "{0, plural, one {{1, plural, one {Last 1 post in the past 1 day} other {Last 1 post in the past {2} days}}} other {{3, plural, one {Last {4} posts in the past 1 day} other {Last {5} posts in the past {6} days}}}}" 192 192 msgstr "" 193 193 194 194 #. placeholder {0}: postingStats.total 195 195 #. placeholder {1}: postingStats.total 196 - #: src/components/account-info.jsx:953 196 + #: src/components/account-info.jsx:912 197 197 msgid "{0, plural, one {Last 1 post in the past year(s)} other {Last {1} posts in the past year(s)}}" 198 198 msgstr "" 199 199 200 - #: src/components/account-info.jsx:978 200 + #: src/components/account-info.jsx:937 201 201 #: src/pages/catchup.jsx:70 202 202 msgid "Original" 203 203 msgstr "" 204 204 205 - #: src/components/account-info.jsx:982 205 + #: src/components/account-info.jsx:941 206 206 #: src/components/status.jsx:2364 207 207 #: src/pages/catchup.jsx:71 208 208 #: src/pages/catchup.jsx:1448 ··· 212 212 msgid "Replies" 213 213 msgstr "" 214 214 215 - #: src/components/account-info.jsx:986 215 + #: src/components/account-info.jsx:945 216 216 #: src/pages/catchup.jsx:72 217 217 #: src/pages/catchup.jsx:1450 218 218 #: src/pages/catchup.jsx:2073 ··· 220 220 msgid "Boosts" 221 221 msgstr "" 222 222 223 - #: src/components/account-info.jsx:992 223 + #: src/components/account-info.jsx:951 224 224 msgid "Post stats unavailable." 225 225 msgstr "" 226 226 227 - #: src/components/account-info.jsx:1023 227 + #: src/components/account-info.jsx:982 228 228 msgid "View post stats" 229 229 msgstr "" 230 230 231 - #. placeholder {0}: info.username 232 - #: src/components/account-info.jsx:1055 233 - msgid "Profiles featured by @{0}" 234 - msgstr "Profiles featured by @{0}" 235 - 236 - #: src/components/account-info.jsx:1081 237 - msgid "No featured profiles." 238 - msgstr "No featured profiles." 239 - 240 231 #. placeholder {0}: niceDateTime(lastStatusAt, { hideTime: true, }) 241 - #: src/components/account-info.jsx:1251 232 + #: src/components/account-info.jsx:1179 242 233 msgid "Last post: <0>{0}</0>" 243 234 msgstr "" 244 235 245 - #: src/components/account-info.jsx:1265 236 + #: src/components/account-info.jsx:1193 246 237 msgid "Muted" 247 238 msgstr "" 248 239 249 - #: src/components/account-info.jsx:1270 240 + #: src/components/account-info.jsx:1198 250 241 msgid "Blocked" 251 242 msgstr "" 252 243 253 - #: src/components/account-info.jsx:1279 244 + #: src/components/account-info.jsx:1207 254 245 msgid "Private note" 255 246 msgstr "Private note" 256 247 257 - #: src/components/account-info.jsx:1336 248 + #: src/components/account-info.jsx:1264 258 249 msgid "Mention <0>@{username}</0>" 259 250 msgstr "" 260 251 261 - #: src/components/account-info.jsx:1348 252 + #: src/components/account-info.jsx:1276 262 253 msgid "Translate bio" 263 254 msgstr "" 264 255 265 - #: src/components/account-info.jsx:1359 256 + #: src/components/account-info.jsx:1287 266 257 msgid "Edit private note" 267 258 msgstr "Edit private note" 268 259 269 - #: src/components/account-info.jsx:1359 260 + #: src/components/account-info.jsx:1287 270 261 msgid "Add private note" 271 262 msgstr "Add private note" 272 263 273 - #: src/components/account-info.jsx:1379 264 + #: src/components/account-info.jsx:1307 274 265 msgid "Notifications enabled for @{username}'s posts." 275 266 msgstr "Notifications enabled for @{username}'s posts." 276 267 277 - #: src/components/account-info.jsx:1380 268 + #: src/components/account-info.jsx:1308 278 269 msgid " Notifications disabled for @{username}'s posts." 279 270 msgstr " Notifications disabled for @{username}'s posts." 280 271 281 - #: src/components/account-info.jsx:1392 272 + #: src/components/account-info.jsx:1320 282 273 msgid "Disable notifications" 283 274 msgstr "Disable notifications" 284 275 285 - #: src/components/account-info.jsx:1393 276 + #: src/components/account-info.jsx:1321 286 277 msgid "Enable notifications" 287 278 msgstr "Enable notifications" 288 279 289 - #: src/components/account-info.jsx:1410 280 + #: src/components/account-info.jsx:1338 290 281 msgid "Boosts from @{username} enabled." 291 282 msgstr "Boosts from @{username} enabled." 292 283 293 - #: src/components/account-info.jsx:1411 284 + #: src/components/account-info.jsx:1339 294 285 msgid "Boosts from @{username} disabled." 295 286 msgstr "Boosts from @{username} disabled." 296 287 297 - #: src/components/account-info.jsx:1422 288 + #: src/components/account-info.jsx:1350 298 289 msgid "Disable boosts" 299 290 msgstr "Disable boosts" 300 291 301 - #: src/components/account-info.jsx:1422 292 + #: src/components/account-info.jsx:1350 302 293 msgid "Enable boosts" 303 294 msgstr "Enable boosts" 304 295 305 - #: src/components/account-info.jsx:1441 296 + #: src/components/account-info.jsx:1369 306 297 msgid "@{username} is no longer featured on your profile." 307 298 msgstr "@{username} is no longer featured on your profile." 308 299 309 - #: src/components/account-info.jsx:1451 300 + #: src/components/account-info.jsx:1379 310 301 msgid "@{username} is now featured on your profile." 311 302 msgstr "@{username} is now featured on your profile." 312 303 313 - #: src/components/account-info.jsx:1459 304 + #: src/components/account-info.jsx:1387 314 305 msgid "Unable to unfeature @{username} on your profile." 315 306 msgstr "Unable to unfeature @{username} on your profile." 316 307 317 - #: src/components/account-info.jsx:1463 308 + #: src/components/account-info.jsx:1391 318 309 msgid "Unable to feature @{username} on your profile." 319 310 msgstr "Unable to feature @{username} on your profile." 320 311 321 - #: src/components/account-info.jsx:1480 312 + #: src/components/account-info.jsx:1410 322 313 msgid "Show featured profiles" 323 314 msgstr "Show featured profiles" 324 315 325 - #: src/components/account-info.jsx:1495 326 - #: src/components/account-info.jsx:1505 327 - #: src/components/account-info.jsx:2111 316 + #: src/components/account-info.jsx:1425 317 + #: src/components/account-info.jsx:1435 318 + #: src/components/account-info.jsx:2041 328 319 msgid "Add/Remove from Lists" 329 320 msgstr "" 330 321 331 - #: src/components/account-info.jsx:1555 322 + #: src/components/account-info.jsx:1485 332 323 #: src/components/status.jsx:1245 333 324 msgid "Link copied" 334 325 msgstr "" 335 326 336 - #: src/components/account-info.jsx:1558 327 + #: src/components/account-info.jsx:1488 337 328 #: src/components/status.jsx:1248 338 329 msgid "Unable to copy link" 339 330 msgstr "" 340 331 341 - #: src/components/account-info.jsx:1564 332 + #: src/components/account-info.jsx:1494 342 333 #: src/components/shortcuts-settings.jsx:1059 343 334 #: src/components/status.jsx:1254 344 335 #: src/components/status.jsx:3358 345 336 msgid "Copy" 346 337 msgstr "" 347 338 348 - #: src/components/account-info.jsx:1579 339 + #: src/components/account-info.jsx:1509 349 340 #: src/components/shortcuts-settings.jsx:1077 350 341 #: src/components/status.jsx:1270 351 342 msgid "Sharing doesn't seem to work." 352 343 msgstr "" 353 344 354 - #: src/components/account-info.jsx:1585 345 + #: src/components/account-info.jsx:1515 355 346 #: src/components/status.jsx:1276 356 347 msgid "Share…" 357 348 msgstr "" 358 349 359 - #: src/components/account-info.jsx:1605 350 + #: src/components/account-info.jsx:1535 360 351 msgid "Unmuted @{username}" 361 352 msgstr "Unmuted @{username}" 362 353 363 - #: src/components/account-info.jsx:1617 354 + #: src/components/account-info.jsx:1547 364 355 msgid "Unmute <0>@{username}</0>" 365 356 msgstr "" 366 357 367 - #: src/components/account-info.jsx:1633 358 + #: src/components/account-info.jsx:1563 368 359 msgid "Mute <0>@{username}</0>…" 369 360 msgstr "" 370 361 371 362 #. placeholder {0}: typeof MUTE_DURATIONS_LABELS[duration] === 'function' ? MUTE_DURATIONS_LABELS[duration]() : _(MUTE_DURATIONS_LABELS[duration]) 372 - #: src/components/account-info.jsx:1665 363 + #: src/components/account-info.jsx:1595 373 364 msgid "Muted @{username} for {0}" 374 365 msgstr "Muted @{username} for {0}" 375 366 376 - #: src/components/account-info.jsx:1677 367 + #: src/components/account-info.jsx:1607 377 368 msgid "Unable to mute @{username}" 378 369 msgstr "Unable to mute @{username}" 379 370 380 - #: src/components/account-info.jsx:1698 371 + #: src/components/account-info.jsx:1628 381 372 msgid "Remove <0>@{username}</0> from followers?" 382 373 msgstr "" 383 374 384 - #: src/components/account-info.jsx:1718 375 + #: src/components/account-info.jsx:1648 385 376 msgid "@{username} removed from followers" 386 377 msgstr "@{username} removed from followers" 387 378 388 - #: src/components/account-info.jsx:1730 379 + #: src/components/account-info.jsx:1660 389 380 msgid "Remove follower…" 390 381 msgstr "" 391 382 392 - #: src/components/account-info.jsx:1741 383 + #: src/components/account-info.jsx:1671 393 384 msgid "Block <0>@{username}</0>?" 394 385 msgstr "" 395 386 396 - #: src/components/account-info.jsx:1765 387 + #: src/components/account-info.jsx:1695 397 388 msgid "Unblocked @{username}" 398 389 msgstr "Unblocked @{username}" 399 390 400 - #: src/components/account-info.jsx:1773 391 + #: src/components/account-info.jsx:1703 401 392 msgid "Blocked @{username}" 402 393 msgstr "Blocked @{username}" 403 394 404 - #: src/components/account-info.jsx:1781 395 + #: src/components/account-info.jsx:1711 405 396 msgid "Unable to unblock @{username}" 406 397 msgstr "Unable to unblock @{username}" 407 398 408 - #: src/components/account-info.jsx:1783 399 + #: src/components/account-info.jsx:1713 409 400 msgid "Unable to block @{username}" 410 401 msgstr "Unable to block @{username}" 411 402 412 - #: src/components/account-info.jsx:1793 403 + #: src/components/account-info.jsx:1723 413 404 msgid "Unblock <0>@{username}</0>" 414 405 msgstr "" 415 406 416 - #: src/components/account-info.jsx:1802 407 + #: src/components/account-info.jsx:1732 417 408 msgid "Block <0>@{username}</0>…" 418 409 msgstr "" 419 410 420 - #: src/components/account-info.jsx:1819 411 + #: src/components/account-info.jsx:1749 421 412 msgid "Report <0>@{username}</0>…" 422 413 msgstr "" 423 414 424 - #: src/components/account-info.jsx:1875 415 + #: src/components/account-info.jsx:1805 425 416 msgid "Withdraw follow request?" 426 417 msgstr "Withdraw follow request?" 427 418 428 419 #. placeholder {0}: info.acct || info.username 429 - #: src/components/account-info.jsx:1876 420 + #: src/components/account-info.jsx:1806 430 421 msgid "Unfollow @{0}?" 431 422 msgstr "Unfollow @{0}?" 432 423 433 - #: src/components/account-info.jsx:1934 424 + #: src/components/account-info.jsx:1864 434 425 msgid "Unfollow…" 435 426 msgstr "" 436 427 437 - #: src/components/account-info.jsx:1943 428 + #: src/components/account-info.jsx:1873 438 429 msgid "Withdraw…" 439 430 msgstr "" 440 431 441 - #: src/components/account-info.jsx:1950 442 - #: src/components/account-info.jsx:1954 432 + #: src/components/account-info.jsx:1880 433 + #: src/components/account-info.jsx:1884 443 434 #: src/pages/hashtag.jsx:264 444 435 msgid "Follow" 445 436 msgstr "" 446 437 447 - #: src/components/account-info.jsx:2051 448 - #: src/components/account-info.jsx:2106 449 - #: src/components/account-info.jsx:2240 450 - #: src/components/account-info.jsx:2360 438 + #: src/components/account-info.jsx:1981 439 + #: src/components/account-info.jsx:2036 440 + #: src/components/account-info.jsx:2170 441 + #: src/components/account-info.jsx:2290 451 442 #: src/components/account-sheet.jsx:38 452 443 #: src/components/compose.jsx:884 453 444 #: src/components/compose.jsx:2732 ··· 480 471 msgid "Close" 481 472 msgstr "" 482 473 483 - #: src/components/account-info.jsx:2056 474 + #: src/components/account-info.jsx:1986 484 475 msgid "Translated Bio" 485 476 msgstr "" 486 477 487 - #: src/components/account-info.jsx:2151 478 + #: src/components/account-info.jsx:2081 488 479 msgid "Unable to remove from list." 489 480 msgstr "Unable to remove from list." 490 481 491 - #: src/components/account-info.jsx:2152 482 + #: src/components/account-info.jsx:2082 492 483 msgid "Unable to add to list." 493 484 msgstr "Unable to add to list." 494 485 495 - #: src/components/account-info.jsx:2171 486 + #: src/components/account-info.jsx:2101 496 487 #: src/pages/lists.jsx:105 497 488 msgid "Unable to load lists." 498 489 msgstr "" 499 490 500 - #: src/components/account-info.jsx:2175 491 + #: src/components/account-info.jsx:2105 501 492 msgid "No lists." 502 493 msgstr "" 503 494 504 - #: src/components/account-info.jsx:2186 495 + #: src/components/account-info.jsx:2116 505 496 #: src/components/list-add-edit.jsx:40 506 497 #: src/pages/lists.jsx:59 507 498 msgid "New list" 508 499 msgstr "" 509 500 510 501 #. placeholder {0}: account?.username || account?.acct 511 - #: src/components/account-info.jsx:2245 502 + #: src/components/account-info.jsx:2175 512 503 msgid "Private note about <0>@{0}</0>" 513 504 msgstr "" 514 505 515 - #: src/components/account-info.jsx:2275 506 + #: src/components/account-info.jsx:2205 516 507 msgid "Unable to update private note." 517 508 msgstr "Unable to update private note." 518 509 519 - #: src/components/account-info.jsx:2298 520 - #: src/components/account-info.jsx:2596 510 + #: src/components/account-info.jsx:2228 511 + #: src/components/account-info.jsx:2526 521 512 msgid "Cancel" 522 513 msgstr "" 523 514 524 - #: src/components/account-info.jsx:2303 515 + #: src/components/account-info.jsx:2233 525 516 msgid "Save & close" 526 517 msgstr "" 527 518 528 - #: src/components/account-info.jsx:2420 519 + #: src/components/account-info.jsx:2350 529 520 msgid "Unable to update profile." 530 521 msgstr "Unable to update profile." 531 522 532 - #: src/components/account-info.jsx:2427 523 + #: src/components/account-info.jsx:2357 533 524 msgid "Header picture" 534 525 msgstr "Header picture" 535 526 536 - #: src/components/account-info.jsx:2479 527 + #: src/components/account-info.jsx:2409 537 528 msgid "Profile picture" 538 529 msgstr "Profile picture" 539 530 540 - #: src/components/account-info.jsx:2531 531 + #: src/components/account-info.jsx:2461 541 532 #: src/components/list-add-edit.jsx:105 542 533 msgid "Name" 543 534 msgstr "" 544 535 545 - #: src/components/account-info.jsx:2544 536 + #: src/components/account-info.jsx:2474 546 537 msgid "Bio" 547 538 msgstr "" 548 539 549 - #: src/components/account-info.jsx:2557 540 + #: src/components/account-info.jsx:2487 550 541 msgid "Extra fields" 551 542 msgstr "" 552 543 553 - #: src/components/account-info.jsx:2563 544 + #: src/components/account-info.jsx:2493 554 545 msgid "Label" 555 546 msgstr "" 556 547 557 - #: src/components/account-info.jsx:2566 548 + #: src/components/account-info.jsx:2496 558 549 msgid "Content" 559 550 msgstr "" 560 551 561 - #: src/components/account-info.jsx:2599 552 + #: src/components/account-info.jsx:2529 562 553 #: src/components/list-add-edit.jsx:150 563 554 #: src/components/shortcuts-settings.jsx:715 564 555 #: src/pages/filters.jsx:570 ··· 566 557 msgid "Save" 567 558 msgstr "" 568 559 569 - #: src/components/account-info.jsx:2653 560 + #: src/components/account-info.jsx:2583 570 561 msgid "username" 571 562 msgstr "" 572 563 573 - #: src/components/account-info.jsx:2657 564 + #: src/components/account-info.jsx:2587 574 565 msgid "server domain name" 575 566 msgstr "" 567 + 568 + #. placeholder {0}: info.username 569 + #: src/components/account-info.jsx:2653 570 + msgid "Profiles featured by @{0}" 571 + msgstr "Profiles featured by @{0}" 572 + 573 + #: src/components/account-info.jsx:2679 574 + msgid "No featured profiles." 575 + msgstr "No featured profiles." 576 576 577 577 #: src/components/background-service.jsx:158 578 578 msgid "Cloak mode disabled"