this repo has no description
0
fork

Configure Feed

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

Allow configure referrer policy

+180 -180
+5
README.md
··· 233 233 - `PHANPY_DEFAULT_LANG` (optional): 234 234 - Default language is English (`en`) if not specified. 235 235 - Fallback language after multiple detection methods (`lang` query parameter, `lang` key in `localStorage` and `navigator.language`) 236 + - `PHANPY_REFERRER_POLICY` (optional, default: `origin`): 237 + - Referrer policy for the site. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy). 238 + - This is applied with the `<meta>` tag on the client-side. 239 + - The policy can also be set with `Referrer-Policy` header configured on the server-side (not this variable). 240 + - Note that since Phanpy uses hash-based URLs, the referrer does not include the hash part. 236 241 - `PHANPY_LINGVA_INSTANCES` (optional, space-separated list, default: `lingva.phanpy.social [...hard-coded list of fallback instances]`): 237 242 - Specify a space-separated list of instances. First will be used as default before falling back to the subsequent instances. If there's only 1 instance, means no fallback. 238 243 - May specify a self-hosted Lingva instance, powered by either [lingva-translate](https://github.com/thedaviddelta/lingva-translate) or [lingva-api](https://github.com/cheeaun/lingva-api)
+1 -5
src/components/account-info.jsx
··· 379 379 <Trans>Unable to load account.</Trans> 380 380 </p> 381 381 <p> 382 - <a 383 - href={isString ? account : url} 384 - target="_blank" 385 - rel="noopener noreferrer" 386 - > 382 + <a href={isString ? account : url} target="_blank" rel="noopener"> 387 383 <Trans>Go to account page</Trans> <Icon icon="external" /> 388 384 </a> 389 385 </p>
+1 -6
src/components/embed-modal.jsx
··· 13 13 <Icon icon="x" alt={t`Close`} /> 14 14 </button> 15 15 {url && ( 16 - <a 17 - href={url} 18 - target="_blank" 19 - rel="noopener noreferrer" 20 - class="button plain" 21 - > 16 + <a href={url} target="_blank" rel="noopener" class="button plain"> 22 17 <span> 23 18 <Trans>Open in new window</Trans> 24 19 </span>{' '}
+4 -4
src/components/notification.jsx
··· 510 510 <a 511 511 href={`https://${instance}/severed_relationships`} 512 512 target="_blank" 513 - rel="noopener noreferrer" 513 + rel="noopener" 514 514 > 515 515 <Trans> 516 516 Learn more <Icon icon="external" size="s" /> ··· 526 526 <a 527 527 href={`/disputes/strikes/${moderation_warning.id}`} 528 528 target="_blank" 529 - rel="noopener noreferrer" 529 + rel="noopener" 530 530 > 531 531 <Trans> 532 532 Learn more <Icon icon="external" size="s" /> ··· 550 550 <a 551 551 key={account.id} 552 552 href={account.url} 553 - rel="noopener noreferrer" 553 + rel="noopener" 554 554 class="account-avatar-stack" 555 555 onClick={(e) => { 556 556 e.preventDefault(); ··· 654 654 <a 655 655 key={account.id} 656 656 href={account.url} 657 - rel="noopener noreferrer" 657 + rel="noopener" 658 658 class="account-avatar-stack" 659 659 onClick={(e) => { 660 660 e.preventDefault();
+4 -4
src/components/status.jsx
··· 2282 2282 alt={visibilityText[visibility]} 2283 2283 /> */} 2284 2284 <span>{_(visibilityText[visibility])}</span> &bull;{' '} 2285 - <a href={url} target="_blank" rel="noopener noreferrer"> 2285 + <a href={url} target="_blank" rel="noopener"> 2286 2286 { 2287 2287 // within a day 2288 2288 new Date().getTime() - createdAtDate.getTime() < ··· 2820 2820 <a 2821 2821 href={cardStatusURL || url} 2822 2822 target={cardStatusURL ? null : '_blank'} 2823 - rel="nofollow noopener noreferrer" 2823 + rel="nofollow noopener" 2824 2824 class={`card link ${isPost ? 'card-post' : ''} ${ 2825 2825 blurhashImage ? '' : size 2826 2826 }`} ··· 2883 2883 <a 2884 2884 href={url} 2885 2885 target="_blank" 2886 - rel="nofollow noopener noreferrer" 2886 + rel="nofollow noopener" 2887 2887 class="card photo" 2888 2888 onClick={handleClick} 2889 2889 > ··· 2930 2930 <a 2931 2931 href={cardStatusURL || url} 2932 2932 target={cardStatusURL ? null : '_blank'} 2933 - rel="nofollow noopener noreferrer" 2933 + rel="nofollow noopener" 2934 2934 class={`card link ${isPost ? 'card-post' : ''} no-image`} 2935 2935 lang={language} 2936 2936 dir="auto"
+137 -137
src/locales/en.po
··· 28 28 msgstr "" 29 29 30 30 #: src/components/account-block.jsx:162 31 - #: src/components/account-info.jsx:636 31 + #: src/components/account-info.jsx:632 32 32 msgid "Automated" 33 33 msgstr "" 34 34 35 35 #: src/components/account-block.jsx:169 36 - #: src/components/account-info.jsx:641 36 + #: src/components/account-info.jsx:637 37 37 #: src/components/status.jsx:514 38 38 msgid "Group" 39 39 msgstr "" ··· 43 43 msgstr "" 44 44 45 45 #: src/components/account-block.jsx:183 46 - #: src/components/account-info.jsx:1682 46 + #: src/components/account-info.jsx:1678 47 47 msgid "Requested" 48 48 msgstr "" 49 49 50 50 #: src/components/account-block.jsx:187 51 - #: src/components/account-info.jsx:1673 51 + #: src/components/account-info.jsx:1669 52 52 msgid "Following" 53 53 msgstr "" 54 54 55 55 #: src/components/account-block.jsx:191 56 - #: src/components/account-info.jsx:1064 56 + #: src/components/account-info.jsx:1060 57 57 msgid "Follows you" 58 58 msgstr "" 59 59 ··· 62 62 msgstr "" 63 63 64 64 #: src/components/account-block.jsx:208 65 - #: src/components/account-info.jsx:682 65 + #: src/components/account-info.jsx:678 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:223 72 - #: src/components/account-info.jsx:782 72 + #: src/components/account-info.jsx:778 73 73 msgid "Joined <0>{0}</0>" 74 74 msgstr "" 75 75 ··· 81 81 msgid "Unable to load account." 82 82 msgstr "" 83 83 84 - #: src/components/account-info.jsx:387 84 + #: src/components/account-info.jsx:383 85 85 msgid "Go to account page" 86 86 msgstr "" 87 87 88 - #: src/components/account-info.jsx:415 89 - #: src/components/account-info.jsx:704 90 - #: src/components/account-info.jsx:734 88 + #: src/components/account-info.jsx:411 89 + #: src/components/account-info.jsx:700 90 + #: src/components/account-info.jsx:730 91 91 msgid "Followers" 92 92 msgstr "" 93 93 94 94 #. js-lingui-explicit-id 95 - #: src/components/account-info.jsx:418 96 - #: src/components/account-info.jsx:744 97 - #: src/components/account-info.jsx:761 95 + #: src/components/account-info.jsx:414 96 + #: src/components/account-info.jsx:740 97 + #: src/components/account-info.jsx:757 98 98 msgid "following.stats" 99 99 msgstr "Following" 100 100 101 - #: src/components/account-info.jsx:421 102 - #: src/components/account-info.jsx:778 101 + #: src/components/account-info.jsx:417 102 + #: src/components/account-info.jsx:774 103 103 #: src/pages/account-statuses.jsx:483 104 104 #: src/pages/search.jsx:328 105 105 #: src/pages/search.jsx:475 106 106 msgid "Posts" 107 107 msgstr "" 108 108 109 - #: src/components/account-info.jsx:429 110 - #: src/components/account-info.jsx:1120 109 + #: src/components/account-info.jsx:425 110 + #: src/components/account-info.jsx:1116 111 111 #: src/components/compose.jsx:2624 112 112 #: src/components/media-alt-modal.jsx:46 113 113 #: src/components/media-modal.jsx:358 ··· 126 126 msgid "More" 127 127 msgstr "" 128 128 129 - #: src/components/account-info.jsx:441 129 + #: src/components/account-info.jsx:437 130 130 msgid "<0>{displayName}</0> has indicated that their new account is now:" 131 131 msgstr "" 132 132 133 - #: src/components/account-info.jsx:586 134 - #: src/components/account-info.jsx:1278 133 + #: src/components/account-info.jsx:582 134 + #: src/components/account-info.jsx:1274 135 135 msgid "Handle copied" 136 136 msgstr "Handle copied" 137 137 138 - #: src/components/account-info.jsx:589 139 - #: src/components/account-info.jsx:1281 138 + #: src/components/account-info.jsx:585 139 + #: src/components/account-info.jsx:1277 140 140 msgid "Unable to copy handle" 141 141 msgstr "Unable to copy handle" 142 142 143 - #: src/components/account-info.jsx:595 144 - #: src/components/account-info.jsx:1287 143 + #: src/components/account-info.jsx:591 144 + #: src/components/account-info.jsx:1283 145 145 msgid "Copy handle" 146 146 msgstr "" 147 147 148 - #: src/components/account-info.jsx:601 148 + #: src/components/account-info.jsx:597 149 149 msgid "Go to original profile page" 150 150 msgstr "" 151 151 152 - #: src/components/account-info.jsx:608 152 + #: src/components/account-info.jsx:604 153 153 msgid "View profile image" 154 154 msgstr "" 155 155 156 - #: src/components/account-info.jsx:614 156 + #: src/components/account-info.jsx:610 157 157 msgid "View profile header" 158 158 msgstr "" 159 159 160 - #: src/components/account-info.jsx:631 160 + #: src/components/account-info.jsx:627 161 161 msgid "In Memoriam" 162 162 msgstr "" 163 163 164 - #: src/components/account-info.jsx:711 165 - #: src/components/account-info.jsx:752 164 + #: src/components/account-info.jsx:707 165 + #: src/components/account-info.jsx:748 166 166 msgid "This user has chosen to not make this information available." 167 167 msgstr "This user has chosen to not make this information available." 168 168 169 169 #. placeholder {0}: ( postingStats.originals / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) 170 170 #. placeholder {1}: ( postingStats.replies / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) 171 171 #. placeholder {2}: ( postingStats.boosts / postingStats.total ).toLocaleString(i18n.locale || undefined, { style: 'percent', }) 172 - #: src/components/account-info.jsx:807 172 + #: src/components/account-info.jsx:803 173 173 msgid "{0} original posts, {1} replies, {2} boosts" 174 174 msgstr "{0} original posts, {1} replies, {2} boosts" 175 175 ··· 180 180 #. placeholder {4}: postingStats.total 181 181 #. placeholder {5}: postingStats.total 182 182 #. placeholder {6}: postingStats.daysSinceLastPost 183 - #: src/components/account-info.jsx:823 183 + #: src/components/account-info.jsx:819 184 184 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}}}}" 185 185 msgstr "" 186 186 187 187 #. placeholder {0}: postingStats.total 188 188 #. placeholder {1}: postingStats.total 189 - #: src/components/account-info.jsx:836 189 + #: src/components/account-info.jsx:832 190 190 msgid "{0, plural, one {Last 1 post in the past year(s)} other {Last {1} posts in the past year(s)}}" 191 191 msgstr "" 192 192 193 - #: src/components/account-info.jsx:860 193 + #: src/components/account-info.jsx:856 194 194 #: src/pages/catchup.jsx:70 195 195 msgid "Original" 196 196 msgstr "" 197 197 198 - #: src/components/account-info.jsx:864 198 + #: src/components/account-info.jsx:860 199 199 #: src/components/status.jsx:2268 200 200 #: src/pages/catchup.jsx:71 201 201 #: src/pages/catchup.jsx:1445 ··· 205 205 msgid "Replies" 206 206 msgstr "" 207 207 208 - #: src/components/account-info.jsx:868 208 + #: src/components/account-info.jsx:864 209 209 #: src/pages/catchup.jsx:72 210 210 #: src/pages/catchup.jsx:1447 211 211 #: src/pages/catchup.jsx:2070 212 - #: src/pages/settings.jsx:1155 212 + #: src/pages/settings.jsx:1151 213 213 msgid "Boosts" 214 214 msgstr "" 215 215 216 - #: src/components/account-info.jsx:874 216 + #: src/components/account-info.jsx:870 217 217 msgid "Post stats unavailable." 218 218 msgstr "" 219 219 220 - #: src/components/account-info.jsx:905 220 + #: src/components/account-info.jsx:901 221 221 msgid "View post stats" 222 222 msgstr "" 223 223 224 224 #. placeholder {0}: niceDateTime(lastStatusAt, { hideTime: true, }) 225 - #: src/components/account-info.jsx:1068 225 + #: src/components/account-info.jsx:1064 226 226 msgid "Last post: <0>{0}</0>" 227 227 msgstr "" 228 228 229 - #: src/components/account-info.jsx:1082 229 + #: src/components/account-info.jsx:1078 230 230 msgid "Muted" 231 231 msgstr "" 232 232 233 - #: src/components/account-info.jsx:1087 233 + #: src/components/account-info.jsx:1083 234 234 msgid "Blocked" 235 235 msgstr "" 236 236 237 - #: src/components/account-info.jsx:1096 237 + #: src/components/account-info.jsx:1092 238 238 msgid "Private note" 239 239 msgstr "Private note" 240 240 241 - #: src/components/account-info.jsx:1153 241 + #: src/components/account-info.jsx:1149 242 242 msgid "Mention <0>@{username}</0>" 243 243 msgstr "" 244 244 245 - #: src/components/account-info.jsx:1165 245 + #: src/components/account-info.jsx:1161 246 246 msgid "Translate bio" 247 247 msgstr "" 248 248 249 - #: src/components/account-info.jsx:1176 249 + #: src/components/account-info.jsx:1172 250 250 msgid "Edit private note" 251 251 msgstr "Edit private note" 252 252 253 - #: src/components/account-info.jsx:1176 253 + #: src/components/account-info.jsx:1172 254 254 msgid "Add private note" 255 255 msgstr "Add private note" 256 256 257 - #: src/components/account-info.jsx:1196 257 + #: src/components/account-info.jsx:1192 258 258 msgid "Notifications enabled for @{username}'s posts." 259 259 msgstr "Notifications enabled for @{username}'s posts." 260 260 261 - #: src/components/account-info.jsx:1197 261 + #: src/components/account-info.jsx:1193 262 262 msgid " Notifications disabled for @{username}'s posts." 263 263 msgstr " Notifications disabled for @{username}'s posts." 264 264 265 - #: src/components/account-info.jsx:1209 265 + #: src/components/account-info.jsx:1205 266 266 msgid "Disable notifications" 267 267 msgstr "Disable notifications" 268 268 269 - #: src/components/account-info.jsx:1210 269 + #: src/components/account-info.jsx:1206 270 270 msgid "Enable notifications" 271 271 msgstr "Enable notifications" 272 272 273 - #: src/components/account-info.jsx:1227 273 + #: src/components/account-info.jsx:1223 274 274 msgid "Boosts from @{username} enabled." 275 275 msgstr "Boosts from @{username} enabled." 276 276 277 - #: src/components/account-info.jsx:1228 277 + #: src/components/account-info.jsx:1224 278 278 msgid "Boosts from @{username} disabled." 279 279 msgstr "Boosts from @{username} disabled." 280 280 281 - #: src/components/account-info.jsx:1239 281 + #: src/components/account-info.jsx:1235 282 282 msgid "Disable boosts" 283 283 msgstr "Disable boosts" 284 284 285 - #: src/components/account-info.jsx:1239 285 + #: src/components/account-info.jsx:1235 286 286 msgid "Enable boosts" 287 287 msgstr "Enable boosts" 288 288 289 - #: src/components/account-info.jsx:1255 290 - #: src/components/account-info.jsx:1265 291 - #: src/components/account-info.jsx:1868 289 + #: src/components/account-info.jsx:1251 290 + #: src/components/account-info.jsx:1261 291 + #: src/components/account-info.jsx:1864 292 292 msgid "Add/Remove from Lists" 293 293 msgstr "" 294 294 295 - #: src/components/account-info.jsx:1304 295 + #: src/components/account-info.jsx:1300 296 296 #: src/components/status.jsx:1177 297 297 msgid "Link copied" 298 298 msgstr "" 299 299 300 - #: src/components/account-info.jsx:1307 300 + #: src/components/account-info.jsx:1303 301 301 #: src/components/status.jsx:1180 302 302 msgid "Unable to copy link" 303 303 msgstr "" 304 304 305 - #: src/components/account-info.jsx:1313 305 + #: src/components/account-info.jsx:1309 306 306 #: src/components/shortcuts-settings.jsx:1059 307 307 #: src/components/status.jsx:1186 308 308 #: src/components/status.jsx:3269 309 309 msgid "Copy" 310 310 msgstr "" 311 311 312 - #: src/components/account-info.jsx:1328 312 + #: src/components/account-info.jsx:1324 313 313 #: src/components/shortcuts-settings.jsx:1077 314 314 #: src/components/status.jsx:1202 315 315 msgid "Sharing doesn't seem to work." 316 316 msgstr "" 317 317 318 - #: src/components/account-info.jsx:1334 318 + #: src/components/account-info.jsx:1330 319 319 #: src/components/status.jsx:1208 320 320 msgid "Share…" 321 321 msgstr "" 322 322 323 - #: src/components/account-info.jsx:1354 323 + #: src/components/account-info.jsx:1350 324 324 msgid "Unmuted @{username}" 325 325 msgstr "Unmuted @{username}" 326 326 327 - #: src/components/account-info.jsx:1366 327 + #: src/components/account-info.jsx:1362 328 328 msgid "Unmute <0>@{username}</0>" 329 329 msgstr "" 330 330 331 - #: src/components/account-info.jsx:1382 331 + #: src/components/account-info.jsx:1378 332 332 msgid "Mute <0>@{username}</0>…" 333 333 msgstr "" 334 334 335 335 #. placeholder {0}: typeof MUTE_DURATIONS_LABELS[duration] === 'function' ? MUTE_DURATIONS_LABELS[duration]() : _(MUTE_DURATIONS_LABELS[duration]) 336 - #: src/components/account-info.jsx:1414 336 + #: src/components/account-info.jsx:1410 337 337 msgid "Muted @{username} for {0}" 338 338 msgstr "Muted @{username} for {0}" 339 339 340 - #: src/components/account-info.jsx:1426 340 + #: src/components/account-info.jsx:1422 341 341 msgid "Unable to mute @{username}" 342 342 msgstr "Unable to mute @{username}" 343 343 344 - #: src/components/account-info.jsx:1447 344 + #: src/components/account-info.jsx:1443 345 345 msgid "Remove <0>@{username}</0> from followers?" 346 346 msgstr "" 347 347 348 - #: src/components/account-info.jsx:1467 348 + #: src/components/account-info.jsx:1463 349 349 msgid "@{username} removed from followers" 350 350 msgstr "@{username} removed from followers" 351 351 352 - #: src/components/account-info.jsx:1479 352 + #: src/components/account-info.jsx:1475 353 353 msgid "Remove follower…" 354 354 msgstr "" 355 355 356 - #: src/components/account-info.jsx:1490 356 + #: src/components/account-info.jsx:1486 357 357 msgid "Block <0>@{username}</0>?" 358 358 msgstr "" 359 359 360 - #: src/components/account-info.jsx:1514 360 + #: src/components/account-info.jsx:1510 361 361 msgid "Unblocked @{username}" 362 362 msgstr "Unblocked @{username}" 363 363 364 - #: src/components/account-info.jsx:1522 364 + #: src/components/account-info.jsx:1518 365 365 msgid "Blocked @{username}" 366 366 msgstr "Blocked @{username}" 367 367 368 - #: src/components/account-info.jsx:1530 368 + #: src/components/account-info.jsx:1526 369 369 msgid "Unable to unblock @{username}" 370 370 msgstr "Unable to unblock @{username}" 371 371 372 - #: src/components/account-info.jsx:1532 372 + #: src/components/account-info.jsx:1528 373 373 msgid "Unable to block @{username}" 374 374 msgstr "Unable to block @{username}" 375 375 376 - #: src/components/account-info.jsx:1542 376 + #: src/components/account-info.jsx:1538 377 377 msgid "Unblock <0>@{username}</0>" 378 378 msgstr "" 379 379 380 - #: src/components/account-info.jsx:1551 380 + #: src/components/account-info.jsx:1547 381 381 msgid "Block <0>@{username}</0>…" 382 382 msgstr "" 383 383 384 - #: src/components/account-info.jsx:1568 384 + #: src/components/account-info.jsx:1564 385 385 msgid "Report <0>@{username}</0>…" 386 386 msgstr "" 387 387 388 - #: src/components/account-info.jsx:1588 389 - #: src/components/account-info.jsx:2103 388 + #: src/components/account-info.jsx:1584 389 + #: src/components/account-info.jsx:2099 390 390 msgid "Edit profile" 391 391 msgstr "" 392 392 393 - #: src/components/account-info.jsx:1624 393 + #: src/components/account-info.jsx:1620 394 394 msgid "Withdraw follow request?" 395 395 msgstr "Withdraw follow request?" 396 396 397 397 #. placeholder {1}: info.acct || info.username 398 - #: src/components/account-info.jsx:1625 398 + #: src/components/account-info.jsx:1621 399 399 msgid "Unfollow @{1}?" 400 400 msgstr "Unfollow @{1}?" 401 401 402 - #: src/components/account-info.jsx:1676 402 + #: src/components/account-info.jsx:1672 403 403 msgid "Unfollow…" 404 404 msgstr "" 405 405 406 - #: src/components/account-info.jsx:1685 406 + #: src/components/account-info.jsx:1681 407 407 msgid "Withdraw…" 408 408 msgstr "" 409 409 410 + #: src/components/account-info.jsx:1688 410 411 #: src/components/account-info.jsx:1692 411 - #: src/components/account-info.jsx:1696 412 412 #: src/pages/hashtag.jsx:262 413 413 msgid "Follow" 414 414 msgstr "" 415 415 416 - #: src/components/account-info.jsx:1808 417 - #: src/components/account-info.jsx:1863 418 - #: src/components/account-info.jsx:1997 419 - #: src/components/account-info.jsx:2098 416 + #: src/components/account-info.jsx:1804 417 + #: src/components/account-info.jsx:1859 418 + #: src/components/account-info.jsx:1993 419 + #: src/components/account-info.jsx:2094 420 420 #: src/components/account-sheet.jsx:38 421 421 #: src/components/compose.jsx:859 422 422 #: src/components/compose.jsx:2580 ··· 448 448 msgid "Close" 449 449 msgstr "" 450 450 451 - #: src/components/account-info.jsx:1813 451 + #: src/components/account-info.jsx:1809 452 452 msgid "Translated Bio" 453 453 msgstr "" 454 454 455 - #: src/components/account-info.jsx:1908 455 + #: src/components/account-info.jsx:1904 456 456 msgid "Unable to remove from list." 457 457 msgstr "Unable to remove from list." 458 458 459 - #: src/components/account-info.jsx:1909 459 + #: src/components/account-info.jsx:1905 460 460 msgid "Unable to add to list." 461 461 msgstr "Unable to add to list." 462 462 463 - #: src/components/account-info.jsx:1928 463 + #: src/components/account-info.jsx:1924 464 464 #: src/pages/lists.jsx:105 465 465 msgid "Unable to load lists." 466 466 msgstr "" 467 467 468 - #: src/components/account-info.jsx:1932 468 + #: src/components/account-info.jsx:1928 469 469 msgid "No lists." 470 470 msgstr "" 471 471 472 - #: src/components/account-info.jsx:1943 472 + #: src/components/account-info.jsx:1939 473 473 #: src/components/list-add-edit.jsx:40 474 474 #: src/pages/lists.jsx:59 475 475 msgid "New list" 476 476 msgstr "" 477 477 478 478 #. placeholder {0}: account?.username || account?.acct 479 - #: src/components/account-info.jsx:2002 479 + #: src/components/account-info.jsx:1998 480 480 msgid "Private note about <0>@{0}</0>" 481 481 msgstr "" 482 482 483 - #: src/components/account-info.jsx:2032 483 + #: src/components/account-info.jsx:2028 484 484 msgid "Unable to update private note." 485 485 msgstr "Unable to update private note." 486 486 487 - #: src/components/account-info.jsx:2055 488 - #: src/components/account-info.jsx:2226 487 + #: src/components/account-info.jsx:2051 488 + #: src/components/account-info.jsx:2222 489 489 msgid "Cancel" 490 490 msgstr "" 491 491 492 - #: src/components/account-info.jsx:2060 492 + #: src/components/account-info.jsx:2056 493 493 msgid "Save & close" 494 494 msgstr "" 495 495 496 - #: src/components/account-info.jsx:2154 496 + #: src/components/account-info.jsx:2150 497 497 msgid "Unable to update profile." 498 498 msgstr "Unable to update profile." 499 499 500 - #: src/components/account-info.jsx:2161 500 + #: src/components/account-info.jsx:2157 501 501 #: src/components/list-add-edit.jsx:105 502 502 msgid "Name" 503 503 msgstr "" 504 504 505 - #: src/components/account-info.jsx:2174 505 + #: src/components/account-info.jsx:2170 506 506 msgid "Bio" 507 507 msgstr "" 508 508 509 - #: src/components/account-info.jsx:2187 509 + #: src/components/account-info.jsx:2183 510 510 msgid "Extra fields" 511 511 msgstr "" 512 512 513 - #: src/components/account-info.jsx:2193 513 + #: src/components/account-info.jsx:2189 514 514 msgid "Label" 515 515 msgstr "" 516 516 517 - #: src/components/account-info.jsx:2196 517 + #: src/components/account-info.jsx:2192 518 518 msgid "Content" 519 519 msgstr "" 520 520 521 - #: src/components/account-info.jsx:2229 521 + #: src/components/account-info.jsx:2225 522 522 #: src/components/list-add-edit.jsx:150 523 523 #: src/components/shortcuts-settings.jsx:715 524 524 #: src/pages/filters.jsx:554 ··· 526 526 msgid "Save" 527 527 msgstr "" 528 528 529 - #: src/components/account-info.jsx:2283 529 + #: src/components/account-info.jsx:2279 530 530 msgid "username" 531 531 msgstr "" 532 532 533 - #: src/components/account-info.jsx:2287 533 + #: src/components/account-info.jsx:2283 534 534 msgid "server domain name" 535 535 msgstr "" 536 536 ··· 984 984 msgid "Media" 985 985 msgstr "" 986 986 987 - #: src/components/embed-modal.jsx:23 987 + #: src/components/embed-modal.jsx:18 988 988 msgid "Open in new window" 989 989 msgstr "" 990 990 ··· 1327 1327 #: src/pages/home.jsx:225 1328 1328 #: src/pages/mentions.jsx:21 1329 1329 #: src/pages/mentions.jsx:168 1330 - #: src/pages/settings.jsx:1147 1330 + #: src/pages/settings.jsx:1143 1331 1331 #: src/pages/trending.jsx:382 1332 1332 msgid "Mentions" 1333 1333 msgstr "" ··· 1366 1366 #: src/pages/catchup.jsx:2064 1367 1367 #: src/pages/favourites.jsx:12 1368 1368 #: src/pages/favourites.jsx:24 1369 - #: src/pages/settings.jsx:1151 1369 + #: src/pages/settings.jsx:1147 1370 1370 msgid "Likes" 1371 1371 msgstr "" 1372 1372 ··· 2417 2417 msgstr "" 2418 2418 2419 2419 #: src/components/timeline.jsx:455 2420 - #: src/pages/settings.jsx:1175 2420 + #: src/pages/settings.jsx:1171 2421 2421 msgid "New posts" 2422 2422 msgstr "" 2423 2423 ··· 3291 3291 msgstr "" 3292 3292 3293 3293 #: src/pages/notifications.jsx:654 3294 - #: src/pages/settings.jsx:1163 3294 + #: src/pages/settings.jsx:1159 3295 3295 msgid "Follow requests" 3296 3296 msgstr "" 3297 3297 ··· 3634 3634 msgid "Donate" 3635 3635 msgstr "Donate" 3636 3636 3637 - #: src/pages/settings.jsx:793 3637 + #: src/pages/settings.jsx:789 3638 3638 msgid "Privacy Policy" 3639 3639 msgstr "" 3640 3640 3641 3641 #. placeholder {0}: WEBSITE.replace(/https?:\/\//g, '').replace(/\/$/, '') 3642 - #: src/pages/settings.jsx:800 3642 + #: src/pages/settings.jsx:796 3643 3643 msgid "<0>Site:</0> {0}" 3644 3644 msgstr "" 3645 3645 3646 - #. placeholder {0}: !__FAKE_COMMIT_HASH__ && ( <span class="ib insignificant"> ( <a href={`https://github.com/cheeaun/phanpy/commit/${__COMMIT_HASH__}`} target="_blank" rel="noopener noreferrer" > <RelativeTime datetime={new Date(__BUILD_TIME__)} /> </a> ) </span> ) 3647 - #: src/pages/settings.jsx:807 3646 + #. placeholder {0}: !__FAKE_COMMIT_HASH__ && ( <span class="ib insignificant"> ( <a href={`https://github.com/cheeaun/phanpy/commit/${__COMMIT_HASH__}`} target="_blank" rel="noopener" > <RelativeTime datetime={new Date(__BUILD_TIME__)} /> </a> ) </span> ) 3647 + #: src/pages/settings.jsx:803 3648 3648 msgid "<0>Version:</0> <1/> {0}" 3649 3649 msgstr "" 3650 3650 3651 - #: src/pages/settings.jsx:822 3651 + #: src/pages/settings.jsx:818 3652 3652 msgid "Version string copied" 3653 3653 msgstr "" 3654 3654 3655 - #: src/pages/settings.jsx:825 3655 + #: src/pages/settings.jsx:821 3656 3656 msgid "Unable to copy version string" 3657 3657 msgstr "" 3658 3658 3659 - #: src/pages/settings.jsx:1060 3660 - #: src/pages/settings.jsx:1065 3659 + #: src/pages/settings.jsx:1056 3660 + #: src/pages/settings.jsx:1061 3661 3661 msgid "Failed to update subscription. Please try again." 3662 3662 msgstr "" 3663 3663 3664 - #: src/pages/settings.jsx:1071 3664 + #: src/pages/settings.jsx:1067 3665 3665 msgid "Failed to remove subscription. Please try again." 3666 3666 msgstr "" 3667 3667 3668 - #: src/pages/settings.jsx:1078 3668 + #: src/pages/settings.jsx:1074 3669 3669 msgid "Push Notifications (beta)" 3670 3670 msgstr "" 3671 3671 3672 - #: src/pages/settings.jsx:1100 3672 + #: src/pages/settings.jsx:1096 3673 3673 msgid "Push notifications are blocked. Please enable them in your browser settings." 3674 3674 msgstr "" 3675 3675 3676 3676 #. placeholder {0}: [ { value: 'all', label: t`anyone`, }, { value: 'followed', label: t`people I follow`, }, { value: 'follower', label: t`followers`, }, ].map((type) => ( <option value={type.value}>{type.label}</option> )) 3677 - #: src/pages/settings.jsx:1109 3677 + #: src/pages/settings.jsx:1105 3678 3678 msgid "Allow from <0>{0}</0>" 3679 3679 msgstr "" 3680 3680 3681 - #: src/pages/settings.jsx:1118 3681 + #: src/pages/settings.jsx:1114 3682 3682 msgid "anyone" 3683 3683 msgstr "" 3684 3684 3685 - #: src/pages/settings.jsx:1122 3685 + #: src/pages/settings.jsx:1118 3686 3686 msgid "people I follow" 3687 3687 msgstr "" 3688 3688 3689 - #: src/pages/settings.jsx:1126 3689 + #: src/pages/settings.jsx:1122 3690 3690 msgid "followers" 3691 3691 msgstr "" 3692 3692 3693 - #: src/pages/settings.jsx:1159 3693 + #: src/pages/settings.jsx:1155 3694 3694 msgid "Follows" 3695 3695 msgstr "" 3696 3696 3697 - #: src/pages/settings.jsx:1167 3697 + #: src/pages/settings.jsx:1163 3698 3698 msgid "Polls" 3699 3699 msgstr "" 3700 3700 3701 - #: src/pages/settings.jsx:1171 3701 + #: src/pages/settings.jsx:1167 3702 3702 msgid "Post edits" 3703 3703 msgstr "" 3704 3704 3705 - #: src/pages/settings.jsx:1192 3705 + #: src/pages/settings.jsx:1188 3706 3706 msgid "Push permission was not granted since your last login. You'll need to <0><1>log in</1> again to grant push permission</0>." 3707 3707 msgstr "" 3708 3708 3709 - #: src/pages/settings.jsx:1208 3709 + #: src/pages/settings.jsx:1204 3710 3710 msgid "NOTE: Push notifications only work for <0>one account</0>." 3711 3711 msgstr "" 3712 3712 ··· 3807 3807 msgstr "" 3808 3808 3809 3809 #. By [Author] 3810 - #. placeholder {0}: author ? ( <NameText account={author} showAvatar /> ) : authorUrl ? ( <a href={authorUrl} target="_blank" rel="noopener noreferrer" > {authorName} </a> ) : ( authorName ) 3810 + #. placeholder {0}: author ? ( <NameText account={author} showAvatar /> ) : authorUrl ? ( <a href={authorUrl} target="_blank" rel="noopener" > {authorName} </a> ) : ( authorName ) 3811 3811 #: src/pages/trending.jsx:348 3812 3812 msgid "By {0}" 3813 3813 msgstr "By {0}"
+1 -1
src/pages/catchup.jsx
··· 1192 1192 key={url} 1193 1193 href={url} 1194 1194 target="_blank" 1195 - rel="noopener noreferrer" 1195 + rel="noopener" 1196 1196 class="link-block" 1197 1197 style={ 1198 1198 accentColor
+2 -2
src/pages/http-route.jsx
··· 68 68 <Trans>Resolving…</Trans> 69 69 </h2> 70 70 <p> 71 - <a href={url} target="_blank" rel="noopener noreferrer"> 71 + <a href={url} target="_blank" rel="noopener"> 72 72 {url} 73 73 </a> 74 74 </p> ··· 79 79 <Trans>Unable to resolve URL</Trans> 80 80 </h2> 81 81 <p> 82 - <a href={url} target="_blank" rel="noopener noreferrer"> 82 + <a href={url} target="_blank" rel="noopener"> 83 83 {url} 84 84 </a> 85 85 </p>
+14 -18
src/pages/settings.jsx
··· 250 250 <a 251 251 href="https://crowdin.com/project/phanpy" 252 252 target="_blank" 253 - rel="noopener noreferrer" 253 + rel="noopener" 254 254 > 255 255 <Trans>Volunteer translations</Trans> 256 256 </a> ··· 324 324 <a 325 325 href={`https://${instance}/`} 326 326 target="_blank" 327 - rel="noopener noreferrer" 327 + rel="noopener" 328 328 > 329 329 Go to your instance ({instance}) for more settings. 330 330 </a> ··· 483 483 <a 484 484 href="https://github.com/cheeaun/lingva-api" 485 485 target="_blank" 486 - rel="noopener noreferrer" 486 + rel="noopener" 487 487 > 488 488 Lingva API 489 489 </a>{' '} ··· 491 491 <a 492 492 href="https://github.com/thedaviddelta/lingva-translate" 493 493 target="_blank" 494 - rel="noopener noreferrer" 494 + rel="noopener" 495 495 > 496 496 Lingva Translate 497 497 </a> ··· 545 545 <a 546 546 href="https://developers.giphy.com/" 547 547 target="_blank" 548 - rel="noopener noreferrer" 548 + rel="noopener" 549 549 > 550 550 GIPHY 551 551 </a> ··· 585 585 <a 586 586 href="https://github.com/cheeaun/img-alt-api" 587 587 target="_blank" 588 - rel="noopener noreferrer" 588 + rel="noopener" 589 589 > 590 590 img-alt-api 591 591 </a> ··· 728 728 <a 729 729 href="https://hachyderm.io/@phanpy" 730 730 // target="_blank" 731 - rel="noopener noreferrer" 731 + rel="noopener" 732 732 onClick={(e) => { 733 733 e.preventDefault(); 734 734 states.showAccount = 'phanpy@hachyderm.io'; ··· 741 741 <a 742 742 href="https://github.com/cheeaun/phanpy" 743 743 target="_blank" 744 - rel="noopener noreferrer" 744 + rel="noopener" 745 745 > 746 746 Built 747 747 </a>{' '} ··· 749 749 <a 750 750 href="https://mastodon.social/@cheeaun" 751 751 // target="_blank" 752 - rel="noopener noreferrer" 752 + rel="noopener" 753 753 onClick={(e) => { 754 754 e.preventDefault(); 755 755 states.showAccount = 'cheeaun@mastodon.social'; ··· 764 764 <a 765 765 href="https://github.com/sponsors/cheeaun" 766 766 target="_blank" 767 - rel="noopener noreferrer" 767 + rel="noopener" 768 768 > 769 769 <Trans>Sponsor</Trans> 770 770 </a>{' '} ··· 772 772 <a 773 773 href="https://www.buymeacoffee.com/cheeaun" 774 774 target="_blank" 775 - rel="noopener noreferrer" 775 + rel="noopener" 776 776 > 777 777 <Trans>Donate</Trans> 778 778 </a>{' '} ··· 780 780 <a 781 781 href="https://patreon.com/cheeaun" 782 782 target="_blank" 783 - rel="noopener noreferrer" 783 + rel="noopener" 784 784 > 785 785 Patreon 786 786 </a>{' '} 787 787 &middot;{' '} 788 - <a 789 - href={PRIVACY_POLICY_URL} 790 - target="_blank" 791 - rel="noopener noreferrer" 792 - > 788 + <a href={PRIVACY_POLICY_URL} target="_blank" rel="noopener"> 793 789 <Trans>Privacy Policy</Trans> 794 790 </a> 795 791 </p> ··· 832 828 <a 833 829 href={`https://github.com/cheeaun/phanpy/commit/${__COMMIT_HASH__}`} 834 830 target="_blank" 835 - rel="noopener noreferrer" 831 + rel="noopener" 836 832 > 837 833 <RelativeTime datetime={new Date(__BUILD_TIME__)} /> 838 834 </a>
+2 -2
src/pages/trending.jsx
··· 274 274 ref={currentLink === url ? currentLinkRef : null} 275 275 href={url} 276 276 target="_blank" 277 - rel="noopener noreferrer" 277 + rel="noopener" 278 278 class={`link-block ${ 279 279 hasCurrentLink 280 280 ? currentLink === url ··· 353 353 <a 354 354 href={authorUrl} 355 355 target="_blank" 356 - rel="noopener noreferrer" 356 + rel="noopener" 357 357 > 358 358 {authorName} 359 359 </a>
+1 -1
src/utils/enhance-content.js
··· 218 218 if (TWITTER_MENTION_REGEX.test(html)) { 219 219 html = html.replaceAll( 220 220 TWITTER_MENTION_CAPTURE_REGEX, 221 - '<a href="https://twitter.com/$2" rel="nofollow noopener noreferrer" target="_blank">$1</a>', 221 + '<a href="https://twitter.com/$2" rel="nofollow noopener" target="_blank">$1</a>', 222 222 ); 223 223 } 224 224 fauxDiv.innerHTML = html;
+8
vite.config.js
··· 21 21 PHANPY_WEBSITE: WEBSITE, 22 22 PHANPY_CLIENT_NAME: CLIENT_NAME, 23 23 PHANPY_APP_ERROR_LOGGING: ERROR_LOGGING, 24 + PHANPY_REFERRER_POLICY: REFERRER_POLICY, 24 25 } = loadEnv('production', process.cwd(), allowedEnvPrefixes); 25 26 26 27 const now = new Date(); ··· 86 87 includes: ['log', 'debug', 'info', 'warn', 'error'], 87 88 }), 88 89 htmlPlugin({ 90 + metas: [ 91 + // Learn more: https://web.dev/articles/referrer-best-practices 92 + { 93 + name: 'referrer', 94 + content: REFERRER_POLICY || 'origin', 95 + }, 96 + ], 89 97 headScripts: ERROR_LOGGING ? [rollbarCode] : [], 90 98 links: [ 91 99 ...ALL_LOCALES.map((lang) => ({