Merge commit 'e1dbbf6c9db6dbf3f356dae4c59fa05299372370' into glitch-soc/merge-upstream

This commit is contained in:
Claire
2025-03-25 19:59:59 +01:00
32 changed files with 329 additions and 155 deletions
+23 -2
View File
@@ -1,4 +1,9 @@
import type { AxiosResponse, Method, RawAxiosRequestHeaders } from 'axios';
import type {
AxiosError,
AxiosResponse,
Method,
RawAxiosRequestHeaders,
} from 'axios';
import axios from 'axios';
import LinkHeader from 'http-link-header';
@@ -41,7 +46,7 @@ const authorizationTokenFromInitialState = (): RawAxiosRequestHeaders => {
// eslint-disable-next-line import/no-default-export
export default function api(withAuthorization = true) {
return axios.create({
const instance = axios.create({
transitional: {
clarifyTimeoutError: true,
},
@@ -60,6 +65,22 @@ export default function api(withAuthorization = true) {
},
],
});
instance.interceptors.response.use(
(response: AxiosResponse) => {
if (response.headers.deprecation) {
console.warn(
`Deprecated request: ${response.config.method} ${response.config.url}`,
);
}
return response;
},
(error: AxiosError) => {
return Promise.reject(error);
},
);
return instance;
}
type RequestParamsOrData = Record<string, unknown>;
@@ -99,6 +99,7 @@ class Bookmarks extends ImmutablePureComponent {
onLoadMore={this.handleLoadMore}
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}
timelineId='bookmarks'
/>
<Helmet>
@@ -99,6 +99,7 @@ class Favourites extends ImmutablePureComponent {
onLoadMore={this.handleLoadMore}
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}
timelineId='favourites'
/>
<Helmet>
@@ -15,6 +15,7 @@ import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?re
import { AnimatedNumber } from 'mastodon/components/animated_number';
import { ContentWarning } from 'mastodon/components/content_warning';
import EditedTimestamp from 'mastodon/components/edited_timestamp';
import { FilterWarning } from 'mastodon/components/filter_warning';
import type { StatusLike } from 'mastodon/components/hashtag_bar';
import { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar';
import { Icon } from 'mastodon/components/icon';
@@ -70,6 +71,7 @@ export const DetailedStatus: React.FC<{
}) => {
const properStatus = status?.get('reblog') ?? status;
const [height, setHeight] = useState(0);
const [showDespiteFilter, setShowDespiteFilter] = useState(false);
const nodeRef = useRef<HTMLDivElement>();
const handleOpenVideo = useCallback(
@@ -82,6 +84,10 @@ export const DetailedStatus: React.FC<{
[onOpenVideo, status],
);
const handleFilterToggle = useCallback(() => {
setShowDespiteFilter(!showDespiteFilter);
}, [showDespiteFilter, setShowDespiteFilter]);
const handleExpandedToggle = useCallback(() => {
if (onToggleHidden) onToggleHidden(status);
}, [onToggleHidden, status]);
@@ -292,8 +298,12 @@ export const DetailedStatus: React.FC<{
const { statusContentProps, hashtagBar } = getHashtagBarForStatus(
status as StatusLike,
);
const matchedFilters = status.get('matched_filters');
const expanded =
!status.get('hidden') || status.get('spoiler_text').length === 0;
(!matchedFilters || showDespiteFilter) &&
(!status.get('hidden') || status.get('spoiler_text').length === 0);
return (
<div style={outerStyle}>
@@ -334,17 +344,26 @@ export const DetailedStatus: React.FC<{
)}
</Link>
{status.get('spoiler_text').length > 0 && (
<ContentWarning
text={
status.getIn(['translation', 'spoilerHtml']) ||
status.get('spoilerHtml')
}
expanded={expanded}
onClick={handleExpandedToggle}
{matchedFilters && (
<FilterWarning
title={matchedFilters.join(', ')}
expanded={showDespiteFilter}
onClick={handleFilterToggle}
/>
)}
{status.get('spoiler_text').length > 0 &&
(!matchedFilters || showDespiteFilter) && (
<ContentWarning
text={
status.getIn(['translation', 'spoilerHtml']) ||
status.get('spoilerHtml')
}
expanded={expanded}
onClick={handleExpandedToggle}
/>
)}
{expanded && (
<>
<StatusContent
@@ -138,7 +138,7 @@ const makeMapStateToProps = () => {
});
const mapStateToProps = (state, props) => {
const status = getStatus(state, { id: props.params.statusId });
const status = getStatus(state, { id: props.params.statusId, contextType: 'detailed' });
let ancestorsIds = ImmutableList();
let descendantsIds = ImmutableList();
+1 -1
View File
@@ -110,7 +110,7 @@
"annual_report.summary.most_used_hashtag.most_used_hashtag": "nejpoužívanější hashtag",
"annual_report.summary.most_used_hashtag.none": "Žádné",
"annual_report.summary.new_posts.new_posts": "nové příspěvky",
"annual_report.summary.percentile.text": "<topLabel>To vás umisťuje do vrcholu</topLabel><percentage></percentage><bottomLabel>{domain} uživatelů.</bottomLabel>",
"annual_report.summary.percentile.text": "<topLabel>To vás umisťuje do horních</topLabel><percentage></percentage><bottomLabel> uživatelů domény {domain}.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "To, že jste zdejší smetánka, zůstane mezi námi ;).",
"annual_report.summary.thanks": "Děkujeme, že jste součástí Mastodonu!",
"attachments_list.unprocessed": "(nezpracováno)",
+20 -20
View File
@@ -6,20 +6,20 @@
"account.badges.group": "ჯგუფი",
"account.block": "დაბლოკე @{name}",
"account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}",
"account.blocked": "დაიბლოკა",
"account.blocked": "დაბლოკილია",
"account.cancel_follow_request": "Withdraw follow request",
"account.domain_blocked": "დომენი დამალულია",
"account.edit_profile": "პროფილის ცვლილება",
"account.endorse": "გამორჩევა პროფილზე",
"account.featured_tags.last_status_never": "პოსტები არ არის",
"account.featured_tags.last_status_never": "პოსტების გარეშე",
"account.follow": "გაყოლა",
"account.followers": "მიმდევრები",
"account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან",
"account.media": "მედია",
"account.mention": "ასახელეთ @{name}",
"account.mute": "გააჩუმე @{name}",
"account.muted": "გაჩუმებული",
"account.posts": "ტუტები",
"account.muted": "დადუმებულია",
"account.posts": "პოსტები",
"account.posts_with_replies": "ტუტები და პასუხები",
"account.report": "დაარეპორტე @{name}",
"account.requested": "დამტკიცების მოლოდინში. დააწკაპუნეთ რომ უარყოთ დადევნების მოთხონვა",
@@ -42,7 +42,7 @@
"column.community": "ლოკალური თაიმლაინი",
"column.domain_blocks": "დამალული დომენები",
"column.follow_requests": "დადევნების მოთხოვნები",
"column.home": "სახლი",
"column.home": "საწყისი",
"column.lists": "სიები",
"column.mutes": "გაჩუმებული მომხმარებლები",
"column.notifications": "შეტყობინებები",
@@ -52,9 +52,9 @@
"column_header.hide_settings": "პარამეტრების დამალვა",
"column_header.moveLeft_settings": "სვეტის მარცხნივ გადატანა",
"column_header.moveRight_settings": "სვეტის მარჯვნივ გადატანა",
"column_header.pin": "აპინვა",
"column_header.pin": "მიმაგრება",
"column_header.show_settings": "პარამეტრების ჩვენება",
"column_header.unpin": "პინის მოხსნა",
"column_header.unpin": "მოხსნა",
"column_subheading.settings": "პარამეტრები",
"community.column_settings.media_only": "მხოლოდ მედია",
"compose_form.direct_message_warning_learn_more": "გაიგე მეტი",
@@ -66,21 +66,21 @@
"compose_form.publish_form": "Publish",
"compose_form.spoiler.marked": "გაფრთხილების უკან ტექსტი დამალულია",
"compose_form.spoiler.unmarked": "ტექსტი არაა დამალული",
"confirmation_modal.cancel": "უარყოფა",
"confirmation_modal.cancel": "გაუქმება",
"confirmations.block.confirm": "ბლოკი",
"confirmations.delete.confirm": "გაუქმება",
"confirmations.delete.confirm": "წაშლა",
"confirmations.delete.message": "დარწმუნებული ხართ, გსურთ გააუქმოთ ეს სტატუსი?",
"confirmations.delete_list.confirm": "გაუქმება",
"confirmations.delete_list.confirm": "წაშლა",
"confirmations.delete_list.message": "დარწმუნებული ხართ, გსურთ სამუდამოდ გააუქმოთ ეს სია?",
"confirmations.mute.confirm": "გაჩუმება",
"confirmations.mute.confirm": "დადუმება",
"confirmations.redraft.confirm": "გაუქმება და გადანაწილება",
"confirmations.unfollow.confirm": "ნუღარ მიჰყვები",
"confirmations.unfollow.message": "დარწმუნებული ხართ, აღარ გსურთ მიჰყვებოდეთ {name}-ს?",
"embed.instructions": "ეს სტატუსი ჩასვით თქვენს ვებ-საიტზე შემდეგი კოდის კოპირებით.",
"embed.preview": "ესაა თუ როგორც გამოჩნდება:",
"emoji_button.activity": "აქტივობა",
"emoji_button.custom": "პერსონალიზირებული",
"emoji_button.flags": "დროშები",
"emoji_button.custom": "მომხმარებლის",
"emoji_button.flags": "ალმები",
"emoji_button.food": "საჭმელი და სასლმელი",
"emoji_button.label": "ემოჯის ჩასმა",
"emoji_button.nature": "ბუმება",
@@ -119,7 +119,7 @@
"keyboard_shortcuts.federated": "to open federated timeline",
"keyboard_shortcuts.heading": "კლავიატურის სწრაფი ბმულები",
"keyboard_shortcuts.home": "to open home timeline",
"keyboard_shortcuts.hotkey": "ცხელი კლავიში",
"keyboard_shortcuts.hotkey": "მალსახმობი ღილაკი",
"keyboard_shortcuts.legend": "ამ ლეგენდის გამოსაჩენად",
"keyboard_shortcuts.local": "to open local timeline",
"keyboard_shortcuts.mention": "ავტორის დასახელებლად",
@@ -180,20 +180,20 @@
"relative_time.just_now": "ახლა",
"relative_time.minutes": "{number}წთ",
"relative_time.seconds": "{number}წმ",
"reply_indicator.cancel": "უარყოფა",
"reply_indicator.cancel": "გაუქმება",
"report.forward": "ფორვარდი {target}-ს",
"report.forward_hint": "ანგარიში სხვა სერვერიდანაა. გავაგზავნოთ რეპორტის ანონიმური ასლიც?",
"report.placeholder": "დამატებითი კომენტარები",
"report.submit": "დასრულება",
"report.submit": "გადაცემა",
"report.target": "არეპორტებთ {target}",
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
"search.placeholder": "ძებნა",
"search_results.hashtags": "ჰეშტეგები",
"search_results.statuses": "ტუტები",
"sign_in_banner.sign_in": "Sign in",
"search_results.statuses": "პოსტები",
"sign_in_banner.sign_in": "შესვლა",
"status.admin_status": "Open this status in the moderation interface",
"status.block": "დაბლოკე @{name}",
"status.cancel_reblog_private": "ბუსტის მოშორება",
"status.cancel_reblog_private": "ბუსტის მოხსნა",
"status.cannot_reblog": "ეს პოსტი ვერ დაიბუსტება",
"status.copy": "Copy link to status",
"status.delete": "წაშლა",
@@ -222,7 +222,7 @@
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
"status.unmute_conversation": "საუბარზე გაჩუმების მოშორება",
"status.unpin": "პროფილიდან პინის მოშორება",
"tabs_bar.home": "სახლი",
"tabs_bar.home": "საწყისი",
"tabs_bar.notifications": "შეტყობინებები",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.",
+4 -4
View File
@@ -173,7 +173,7 @@
"compose.published.open": "Atvērt",
"compose.saved.body": "Ziņa saglabāta.",
"compose_form.direct_message_warning_learn_more": "Uzzināt vairāk",
"compose_form.encryption_warning": "Mastodon ieraksti nav pilnībā šifrēti. Nedalies ar jebkādu jutīgu informāciju caur Mastodon!",
"compose_form.encryption_warning": "Mastodon ieraksti nav pilnībā šifrēti. Nedalies ar jebkādu jūtīgu informāciju caur Mastodon!",
"compose_form.hashtag_warning": "Šis ieraksts netiks uzrādīts nevienā tēmturī, jo tas nav redzams visiem. Tikai visiem redzamos ierakstus var meklēt pēc tēmtura.",
"compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var Tev sekot, lai redzētu tikai sekotājiem paredzētos ierakstus.",
"compose_form.lock_disclaimer.lock": "slēgts",
@@ -474,9 +474,9 @@
"notification.moderation_warning": "Ir saņemts satura pārraudzības brīdinājums",
"notification.moderation_warning.action_delete_statuses": "Daži no Taviem ierakstiem tika noņemti.",
"notification.moderation_warning.action_disable": "Tavs konts tika atspējots.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Daži no Taviem ierakstiem tika atzīmēti kā jutīgi.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Daži no Taviem ierakstiem tika atzīmēti kā jūtīgi.",
"notification.moderation_warning.action_none": "Konts ir saņēmis satura pārraudzības brīdinājumu.",
"notification.moderation_warning.action_sensitive": "Tavi ieraksti turpmāk tiks atzīmēti kā jutīgi.",
"notification.moderation_warning.action_sensitive": "Tavi ieraksti turpmāk tiks atzīmēti kā jūtīgi.",
"notification.moderation_warning.action_silence": "Tavs konts tika ierobežots.",
"notification.moderation_warning.action_suspend": "Tava konta darbība tika apturēta.",
"notification.own_poll": "Tava aptauja ir noslēgusies",
@@ -702,7 +702,7 @@
"status.reply": "Atbildēt",
"status.replyAll": "Atbildēt uz tematu",
"status.report": "Ziņot par @{name}",
"status.sensitive_warning": "Sensitīvs saturs",
"status.sensitive_warning": "Jūtīgs saturs",
"status.share": "Kopīgot",
"status.show_less_all": "Rādīt mazāk visiem",
"status.show_more_all": "Rādīt vairāk visiem",
+3 -2
View File
@@ -15,9 +15,10 @@ export const makeGetStatus = () => {
(state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]),
(state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]),
getFilters,
(_, { contextType }) => ['detailed', 'bookmarks', 'favourites'].includes(contextType),
],
(statusBase, statusReblog, accountBase, accountReblog, filters) => {
(statusBase, statusReblog, accountBase, accountReblog, filters, warnInsteadOfHide) => {
if (!statusBase || statusBase.get('isLoading')) {
return null;
}
@@ -31,7 +32,7 @@ export const makeGetStatus = () => {
let filtered = false;
if ((accountReblog || accountBase).get('id') !== me && filters) {
let filterResults = statusReblog?.get('filtered') || statusBase.get('filtered') || ImmutableList();
if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) {
if (!warnInsteadOfHide && filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) {
return null;
}
filterResults = filterResults.filter(result => filters.has(result.get('filter')));
+5
View File
@@ -6,6 +6,11 @@ export const toServerSideType = (columnType: string) => {
case 'thread':
case 'account':
return columnType;
case 'detailed':
return 'thread';
case 'bookmarks':
case 'favourites':
return 'home';
default:
if (columnType.includes('list:')) {
return 'home';