Merge pull request #2181 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes
pull/59/head
Claire 2023-04-17 13:10:52 +02:00 committed by GitHub
commit f30c5e7f15
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
158 changed files with 1133 additions and 1136 deletions

View File

@ -42,7 +42,7 @@ jobs:
- name: Check for missing strings in English JSON
run: |
yarn build:development
yarn manage:translations
yarn manage:translations en
git diff --exit-code
- name: Check locale file normalization

View File

@ -28,7 +28,7 @@ gem 'addressable', '~> 2.8'
gem 'bootsnap', '~> 1.16.0', require: false
gem 'browser'
gem 'charlock_holmes', '~> 0.7.7'
gem 'chewy', '~> 7.2'
gem 'chewy', '~> 7.3'
gem 'devise', '~> 4.9'
gem 'devise-two-factor', '~> 4.0'
@ -36,7 +36,7 @@ group :pam_authentication, optional: true do
gem 'devise_pam_authenticatable2', '~> 9.2'
end
gem 'net-ldap', '~> 0.17'
gem 'net-ldap', '~> 0.18'
gem 'omniauth-cas', '~> 2.0'
gem 'omniauth-saml', '~> 1.10'
gem 'omniauth_openid_connect', '~> 0.6.1'

View File

@ -94,7 +94,7 @@ GEM
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.2)
addressable (2.8.4)
public_suffix (>= 2.0.2, < 6.0)
aes_key_wrap (1.1.0)
airbrussh (1.4.1)
@ -109,7 +109,7 @@ GEM
attr_required (1.0.1)
awrence (1.2.1)
aws-eventstream (1.2.0)
aws-partitions (1.739.0)
aws-partitions (1.743.0)
aws-sdk-core (3.171.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
@ -118,7 +118,7 @@ GEM
aws-sdk-kms (1.63.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.120.0)
aws-sdk-s3 (1.120.1)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
@ -179,7 +179,7 @@ GEM
activesupport
cbor (0.5.9.6)
charlock_holmes (0.7.7)
chewy (7.2.7)
chewy (7.3.0)
activesupport (>= 5.2)
elasticsearch (>= 7.12.0, < 7.14.0)
elasticsearch-dsl
@ -428,7 +428,7 @@ GEM
net-imap (0.3.4)
date
net-protocol
net-ldap (0.17.1)
net-ldap (0.18.0)
net-pop (0.1.2)
net-protocol
net-protocol (0.2.1)
@ -439,7 +439,7 @@ GEM
net-protocol
net-ssh (7.0.1)
nio4r (2.5.9)
nokogiri (1.14.2)
nokogiri (1.14.3)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
nsa (0.2.8)
@ -447,7 +447,7 @@ GEM
concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (>= 3.5)
statsd-ruby (~> 1.4, >= 1.4.0)
oj (3.14.2)
oj (3.14.3)
omniauth (1.9.2)
hashie (>= 3.4.6)
rack (>= 1.6.2, < 3)
@ -617,7 +617,7 @@ GEM
parser (>= 3.2.1.0)
rubocop-capybara (2.17.1)
rubocop (~> 1.41)
rubocop-performance (1.16.0)
rubocop-performance (1.17.1)
rubocop (>= 1.7.0, < 2.0)
rubocop-ast (>= 0.4.0)
rubocop-rails (2.18.0)
@ -681,7 +681,7 @@ GEM
sshkit (1.21.4)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
stackprof (0.2.24)
stackprof (0.2.25)
statsd-ruby (1.5.0)
stoplight (3.0.1)
redlock (~> 1.0)
@ -785,7 +785,7 @@ DEPENDENCIES
capistrano-yarn (~> 2.0)
capybara (~> 3.39)
charlock_holmes (~> 0.7.7)
chewy (~> 7.2)
chewy (~> 7.3)
climate_control
cocoon (~> 1.2)
color_diff (~> 0.1)
@ -829,7 +829,7 @@ DEPENDENCIES
memory_profiler
mime-types (~> 3.4.1)
net-http (~> 0.3.2)
net-ldap (~> 0.17)
net-ldap (~> 0.18)
nokogiri (~> 1.14)
nsa (~> 0.2)
oj (~> 3.14)

View File

@ -1,29 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import illustration from 'flavours/glitch/images/elephant_ui_disappointed.svg';
import classNames from 'classnames';
import { Helmet } from 'react-helmet';
const MissingIndicator = ({ fullPage }) => (
<div className={classNames('regeneration-indicator', { 'regeneration-indicator--without-header': fullPage })}>
<div className='regeneration-indicator__figure'>
<img src={illustration} alt='' />
</div>
<div className='regeneration-indicator__label'>
<FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
<FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
</div>
<Helmet>
<meta name='robots' content='noindex' />
</Helmet>
</div>
);
MissingIndicator.propTypes = {
fullPage: PropTypes.bool,
};
export default MissingIndicator;

View File

@ -13,9 +13,9 @@ import MediaItem from './components/media_item';
import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
import ScrollContainer from 'flavours/glitch/containers/scroll_container';
import LoadMore from 'flavours/glitch/components/load_more';
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import { openModal } from 'flavours/glitch/actions/modal';
import { normalizeForLookup } from 'flavours/glitch/reducers/accounts_map';
import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';
const mapStateToProps = (state, { params: { acct, id } }) => {
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
@ -166,9 +166,7 @@ class AccountGallery extends ImmutablePureComponent {
if (!isAccount) {
return (
<Column>
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
import InnerHeader from 'flavours/glitch/features/account/components/header';
import ActionBar from 'flavours/glitch/features/account/components/action_bar';
import ImmutablePureComponent from 'react-immutable-pure-component';
import MemorialNote from './memorial_note';
import { FormattedMessage } from 'react-intl';
import { NavLink } from 'react-router-dom';
import MovedNote from './moved_note';
@ -116,6 +117,7 @@ export default class Header extends ImmutablePureComponent {
return (
<div className='account-timeline__header'>
{(!hidden && account.get('memorial')) && <MemorialNote />}
{(!hidden && account.get('moved')) && <MovedNote from={account} to={account.get('moved')} />}
<InnerHeader

View File

@ -0,0 +1,12 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
const MemorialNote = () => (
<div className='account-memorial-banner'>
<div className='account-memorial-banner__message'>
<FormattedMessage id='account.in_memoriam' defaultMessage='In Memoriam.' />
</div>
</div>
);
export default MemorialNote;

View File

@ -13,12 +13,12 @@ import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import { List as ImmutableList } from 'immutable';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage } from 'react-intl';
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import TimelineHint from 'flavours/glitch/components/timeline_hint';
import LimitedAccountHint from './components/limited_account_hint';
import { getAccountHidden } from 'flavours/glitch/selectors';
import { normalizeForLookup } from 'flavours/glitch/reducers/accounts_map';
import { fetchFeaturedTags } from '../../actions/featured_tags';
import { normalizeForLookup } from 'flavours/glitch/reducers/accounts_map';
import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';
const emptyList = ImmutableList();
@ -160,10 +160,7 @@ class AccountTimeline extends ImmutablePureComponent {
);
} else if (!isLoading && !isAccount) {
return (
<Column>
<ColumnBackButton multiColumn={multiColumn} />
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -16,12 +16,12 @@ import Column from 'flavours/glitch/features/ui/components/column';
import ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';
import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
import ImmutablePureComponent from 'react-immutable-pure-component';
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import ScrollableList from 'flavours/glitch/components/scrollable_list';
import TimelineHint from 'flavours/glitch/components/timeline_hint';
import LimitedAccountHint from '../account_timeline/components/limited_account_hint';
import { getAccountHidden } from 'flavours/glitch/selectors';
import { normalizeForLookup } from 'flavours/glitch/reducers/accounts_map';
import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';
const mapStateToProps = (state, { params: { acct, id } }) => {
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
@ -117,9 +117,7 @@ class Followers extends ImmutablePureComponent {
if (!isAccount) {
return (
<Column>
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -16,12 +16,12 @@ import Column from 'flavours/glitch/features/ui/components/column';
import ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';
import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
import ImmutablePureComponent from 'react-immutable-pure-component';
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import ScrollableList from 'flavours/glitch/components/scrollable_list';
import TimelineHint from 'flavours/glitch/components/timeline_hint';
import LimitedAccountHint from '../account_timeline/components/limited_account_hint';
import { getAccountHidden } from 'flavours/glitch/selectors';
import { normalizeForLookup } from 'flavours/glitch/reducers/accounts_map';
import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';
const mapStateToProps = (state, { params: { acct, id } }) => {
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
@ -117,9 +117,7 @@ class Following extends ImmutablePureComponent {
if (!isAccount) {
return (
<Column>
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -1,11 +0,0 @@
import React from 'react';
import Column from 'flavours/glitch/features/ui/components/column';
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
const GenericNotFound = () => (
<Column>
<MissingIndicator fullPage />
</Column>
);
export default GenericNotFound;

View File

@ -10,13 +10,12 @@ import { openModal } from 'flavours/glitch/actions/modal';
import { connectListStream } from 'flavours/glitch/actions/streaming';
import { expandListTimeline } from 'flavours/glitch/actions/timelines';
import Column from 'flavours/glitch/components/column';
import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import ColumnHeader from 'flavours/glitch/components/column_header';
import Icon from 'flavours/glitch/components/icon';
import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import RadioButton from 'flavours/glitch/components/radio_button';
import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';
const messages = defineMessages({
deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' },
@ -156,11 +155,7 @@ class ListTimeline extends React.PureComponent {
);
} else if (list === false) {
return (
<Column>
<div className='scrollable'>
<MissingIndicator />
</div>
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -16,7 +16,6 @@ import {
translateStatus,
undoStatusTranslation,
} from 'flavours/glitch/actions/statuses';
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
import DetailedStatus from './components/detailed_status';
import ActionBar from './components/action_bar';
@ -43,7 +42,6 @@ import { initReport } from 'flavours/glitch/actions/reports';
import { initBoostModal } from 'flavours/glitch/actions/boosts';
import { makeGetStatus, makeGetPictureInPicture } from 'flavours/glitch/selectors';
import ScrollContainer from 'flavours/glitch/containers/scroll_container';
import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import ColumnHeader from '../../components/column_header';
import StatusContainer from 'flavours/glitch/containers/status_container';
import { openModal } from 'flavours/glitch/actions/modal';
@ -56,6 +54,7 @@ import { autoUnfoldCW } from 'flavours/glitch/utils/content_warning';
import { textForScreenReader, defaultMediaVisibility } from 'flavours/glitch/components/status';
import Icon from 'flavours/glitch/components/icon';
import { Helmet } from 'react-helmet';
import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';
const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
@ -620,21 +619,18 @@ class Status extends ImmutablePureComponent {
if (status === null) {
return (
<Column>
<ColumnBackButton multiColumn={multiColumn} />
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}
const isExpanded = settings.getIn(['content_warnings', 'shared_state']) ? !status.get('hidden') : this.state.isExpanded;
if (ancestorsIds && ancestorsIds.size > 0) {
ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;
ancestors = <>{this.renderChildren(ancestorsIds)}</>;
}
if (descendantsIds && descendantsIds.size > 0) {
descendants = <div>{this.renderChildren(descendantsIds)}</div>;
descendants = <>{this.renderChildren(descendantsIds)}</>;
}
const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;

View File

@ -90,10 +90,6 @@ export function FollowRequests () {
return import(/* webpackChunkName: "flavours/glitch/async/follow_requests" */'flavours/glitch/features/follow_requests');
}
export function GenericNotFound () {
return import(/* webpackChunkName: "flavours/glitch/async/generic_not_found" */'flavours/glitch/features/generic_not_found');
}
export function FavouritedStatuses () {
return import(/* webpackChunkName: "flavours/glitch/async/favourited_statuses" */'flavours/glitch/features/favourited_statuses');
}

View File

@ -388,7 +388,7 @@
content: '';
position: absolute;
bottom: 0;
inset-inline-start: 50%;
left: 50%;
width: 0;
height: 0;
transform: translateX(-50%);
@ -770,7 +770,8 @@
}
.moved-account-banner,
.follow-request-banner {
.follow-request-banner,
.account-memorial-banner {
padding: 20px;
background: lighten($ui-base-color, 4%);
display: flex;
@ -804,3 +805,7 @@
.follow-request-banner .button {
width: 100%;
}
.account-memorial-banner__message {
margin-bottom: 0;
}

View File

@ -1,29 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import illustration from 'mastodon/../images/elephant_ui_disappointed.svg';
import classNames from 'classnames';
import { Helmet } from 'react-helmet';
const MissingIndicator = ({ fullPage }) => (
<div className={classNames('regeneration-indicator', { 'regeneration-indicator--without-header': fullPage })}>
<div className='regeneration-indicator__figure'>
<img src={illustration} alt='' />
</div>
<div className='regeneration-indicator__label'>
<FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
<FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
</div>
<Helmet>
<meta name='robots' content='noindex' />
</Helmet>
</div>
);
MissingIndicator.propTypes = {
fullPage: PropTypes.bool,
};
export default MissingIndicator;

View File

@ -13,10 +13,10 @@ import MediaItem from './components/media_item';
import HeaderContainer from '../account_timeline/containers/header_container';
import ScrollContainer from 'mastodon/containers/scroll_container';
import LoadMore from 'mastodon/components/load_more';
import MissingIndicator from 'mastodon/components/missing_indicator';
import { openModal } from 'mastodon/actions/modal';
import { FormattedMessage } from 'react-intl';
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
const mapStateToProps = (state, { params: { acct, id } }) => {
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
@ -161,9 +161,7 @@ class AccountGallery extends ImmutablePureComponent {
if (!isAccount) {
return (
<Column>
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -3,6 +3,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import InnerHeader from '../../account/components/header';
import ImmutablePureComponent from 'react-immutable-pure-component';
import MemorialNote from './memorial_note';
import MovedNote from './moved_note';
import { FormattedMessage } from 'react-intl';
import { NavLink } from 'react-router-dom';
@ -115,6 +116,7 @@ export default class Header extends ImmutablePureComponent {
return (
<div className='account-timeline__header'>
{(!hidden && account.get('memorial')) && <MemorialNote />}
{(!hidden && account.get('moved')) && <MovedNote from={account} to={account.get('moved')} />}
<InnerHeader

View File

@ -0,0 +1,12 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
const MemorialNote = () => (
<div className='account-memorial-banner'>
<div className='account-memorial-banner__message'>
<FormattedMessage id='account.in_memoriam' defaultMessage='In Memoriam.' />
</div>
</div>
);
export default MemorialNote;

View File

@ -12,7 +12,6 @@ import ColumnBackButton from '../../components/column_back_button';
import { List as ImmutableList } from 'immutable';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage } from 'react-intl';
import MissingIndicator from 'mastodon/components/missing_indicator';
import TimelineHint from 'mastodon/components/timeline_hint';
import { me } from 'mastodon/initial_state';
import { connectTimeline, disconnectTimeline } from 'mastodon/actions/timelines';
@ -20,6 +19,7 @@ import LimitedAccountHint from './components/limited_account_hint';
import { getAccountHidden } from 'mastodon/selectors';
import { fetchFeaturedTags } from '../../actions/featured_tags';
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
const emptyList = ImmutableList();
@ -157,10 +157,7 @@ class AccountTimeline extends ImmutablePureComponent {
);
} else if (!isLoading && !isAccount) {
return (
<Column>
<ColumnBackButton multiColumn={multiColumn} />
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -17,11 +17,11 @@ import Column from '../ui/components/column';
import HeaderContainer from '../account_timeline/containers/header_container';
import ColumnBackButton from '../../components/column_back_button';
import ScrollableList from '../../components/scrollable_list';
import MissingIndicator from 'mastodon/components/missing_indicator';
import TimelineHint from 'mastodon/components/timeline_hint';
import LimitedAccountHint from '../account_timeline/components/limited_account_hint';
import { getAccountHidden } from 'mastodon/selectors';
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
const mapStateToProps = (state, { params: { acct, id } }) => {
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
@ -111,9 +111,7 @@ class Followers extends ImmutablePureComponent {
if (!isAccount) {
return (
<Column>
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -17,11 +17,11 @@ import Column from '../ui/components/column';
import HeaderContainer from '../account_timeline/containers/header_container';
import ColumnBackButton from '../../components/column_back_button';
import ScrollableList from '../../components/scrollable_list';
import MissingIndicator from 'mastodon/components/missing_indicator';
import TimelineHint from 'mastodon/components/timeline_hint';
import LimitedAccountHint from '../account_timeline/components/limited_account_hint';
import { getAccountHidden } from 'mastodon/selectors';
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
const mapStateToProps = (state, { params: { acct, id } }) => {
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
@ -111,9 +111,7 @@ class Following extends ImmutablePureComponent {
if (!isAccount) {
return (
<Column>
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -1,11 +0,0 @@
import React from 'react';
import Column from '../ui/components/column';
import MissingIndicator from '../../components/missing_indicator';
const GenericNotFound = () => (
<Column>
<MissingIndicator fullPage />
</Column>
);
export default GenericNotFound;

View File

@ -10,13 +10,12 @@ import { openModal } from 'mastodon/actions/modal';
import { connectListStream } from 'mastodon/actions/streaming';
import { expandListTimeline } from 'mastodon/actions/timelines';
import Column from 'mastodon/components/column';
import ColumnBackButton from 'mastodon/components/column_back_button';
import ColumnHeader from 'mastodon/components/column_header';
import Icon from 'mastodon/components/icon';
import LoadingIndicator from 'mastodon/components/loading_indicator';
import MissingIndicator from 'mastodon/components/missing_indicator';
import RadioButton from 'mastodon/components/radio_button';
import StatusListContainer from 'mastodon/features/ui/containers/status_list_container';
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
const messages = defineMessages({
deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' },
@ -156,10 +155,7 @@ class ListTimeline extends React.PureComponent {
);
} else if (list === false) {
return (
<Column>
<ColumnBackButton multiColumn={multiColumn} />
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}

View File

@ -16,7 +16,6 @@ import {
translateStatus,
undoStatusTranslation,
} from '../../actions/statuses';
import MissingIndicator from '../../components/missing_indicator';
import LoadingIndicator from 'mastodon/components/loading_indicator';
import DetailedStatus from './components/detailed_status';
import ActionBar from './components/action_bar';
@ -50,7 +49,6 @@ import { initBoostModal } from '../../actions/boosts';
import { initReport } from '../../actions/reports';
import { makeGetStatus, makeGetPictureInPicture } from '../../selectors';
import ScrollContainer from 'mastodon/containers/scroll_container';
import ColumnBackButton from '../../components/column_back_button';
import ColumnHeader from '../../components/column_header';
import StatusContainer from '../../containers/status_container';
import { openModal } from '../../actions/modal';
@ -62,6 +60,7 @@ import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from
import { textForScreenReader, defaultMediaVisibility } from '../../components/status';
import Icon from 'mastodon/components/icon';
import { Helmet } from 'react-helmet';
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
@ -584,19 +583,16 @@ class Status extends ImmutablePureComponent {
if (status === null) {
return (
<Column>
<ColumnBackButton multiColumn={multiColumn} />
<MissingIndicator />
</Column>
<BundleColumnError multiColumn={multiColumn} errorType='routing' />
);
}
if (ancestorsIds && ancestorsIds.size > 0) {
ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;
ancestors = <>{this.renderChildren(ancestorsIds)}</>;
}
if (descendantsIds && descendantsIds.size > 0) {
descendants = <div>{this.renderChildren(descendantsIds)}</div>;
descendants = <>{this.renderChildren(descendantsIds)}</>;
}
const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;

View File

@ -82,10 +82,6 @@ export function FollowRequests () {
return import(/* webpackChunkName: "features/follow_requests" */'../../follow_requests');
}
export function GenericNotFound () {
return import(/* webpackChunkName: "features/generic_not_found" */'../../generic_not_found');
}
export function FavouritedStatuses () {
return import(/* webpackChunkName: "features/favourited_statuses" */'../../favourited_statuses');
}

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# new item} other {# new items}}",
"loading_indicator.label": "Loading...",
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"moved_to_account_banner.text": "Jou rekening {disabledAccount} is tans gedeaktiveer omdat jy na {movedToAccount} verhuis het.",
"mute_modal.duration": "Duration",
"mute_modal.hide_notifications": "Hide notifications from this user?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}",
"loading_indicator.label": "Cargando...",
"media_gallery.toggle_visible": "{number, plural, one {Amaga la imachen} other {Amaga las imáchens}}",
"missing_indicator.label": "No trobau",
"missing_indicator.sublabel": "No se trobó este recurso",
"moved_to_account_banner.text": "La tuya cuenta {disabledAccount} ye actualment deshabilitada perque t'has mudau a {movedToAccount}.",
"mute_modal.duration": "Duración",
"mute_modal.hide_notifications": "Amagar notificacions d'este usuario?",

View File

@ -102,7 +102,7 @@
"column.blocks": "المُستَخدِمون المَحظورون",
"column.bookmarks": "الفواصل المرجعية",
"column.community": "الخيط الزمني المحلي",
"column.direct": "Private mentions",
"column.direct": "الإشارات الخاصة",
"column.directory": "تَصَفُّحُ المَلفات الشخصية",
"column.domain_blocks": "النطاقات المحظورة",
"column.favourites": "المُفَضَّلَة",
@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}",
"loading_indicator.label": "جارٍ التحميل…",
"media_gallery.toggle_visible": "{number, plural, zero {} one {اخف الصورة} two {اخف الصورتين} few {اخف الصور} many {اخف الصور} other {اخف الصور}}",
"missing_indicator.label": "غير موجود",
"missing_indicator.sublabel": "تعذر العثور على هذا المورد",
"moved_to_account_banner.text": "حسابك {disabledAccount} معطل حاليًا لأنك انتقلت إلى {movedToAccount}.",
"mute_modal.duration": "المدة",
"mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
@ -376,7 +374,7 @@
"navigation_bar.bookmarks": "الفواصل المرجعية",
"navigation_bar.community_timeline": "الخيط المحلي",
"navigation_bar.compose": "تحرير منشور جديد",
"navigation_bar.direct": "Private mentions",
"navigation_bar.direct": "الإشارات الخاصة",
"navigation_bar.discover": "اكتشف",
"navigation_bar.domain_blocks": "النطاقات المحظورة",
"navigation_bar.edit_profile": "عدّل الملف التعريفي",
@ -522,17 +520,17 @@
"report_notification.categories.spam": "مزعج",
"report_notification.categories.violation": "القاعدة المنتهَكة",
"report_notification.open": "فتح التقرير",
"search.no_recent_searches": "No recent searches",
"search.no_recent_searches": "ما من عمليات بحث تمت مؤخرًا",
"search.placeholder": "ابحث",
"search.quick_action.account_search": "Profiles matching {x}",
"search.quick_action.go_to_account": "Go to profile {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon",
"search.quick_action.go_to_account": "الذهاب إلى الصفحة الشخصية لـ {x}",
"search.quick_action.go_to_hashtag": "الذهاب إلى الوسم {x}",
"search.quick_action.open_url": "فتح الرابط التشعبي في ماستدون",
"search.quick_action.status_search": "Posts matching {x}",
"search.search_or_paste": "ابحث أو أدخل رابطا تشعبيا URL",
"search_popout.quick_actions": "Quick actions",
"search_popout.recent": "Recent searches",
"search_results.accounts": "Profiles",
"search_popout.quick_actions": "الإجراءات السريعة",
"search_popout.recent": "عمليات البحث الأخيرة",
"search_results.accounts": "الصفحات التعريفية",
"search_results.all": "الكل",
"search_results.hashtags": "الوُسوم",
"search_results.nothing_found": "تعذر العثور على نتائج تتضمن هذه المصطلحات",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}",
"loading_indicator.label": "Cargando…",
"media_gallery.toggle_visible": "{number, plural, one {Anubrir la imaxe} other {Anubrir les imáxenes}}",
"missing_indicator.label": "Nun s'atopó",
"missing_indicator.sublabel": "Nun se pudo atopar esti recursu",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
"mute_modal.duration": "Duración",
"mute_modal.hide_notifications": "¿Quies anubrir los avisos d'esti perfil?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}",
"loading_indicator.label": "Загрузка...",
"media_gallery.toggle_visible": "{number, plural, one {Схаваць відарыс} other {Схаваць відарысы}}",
"missing_indicator.label": "Не знойдзена",
"missing_indicator.sublabel": "Гэты рэсурс не магчыма знайсці",
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.",
"mute_modal.duration": "Працягласць",
"mute_modal.hide_notifications": "Схаваць апавяшчэнні ад гэтага карыстальніка?",

View File

@ -20,7 +20,7 @@
"account.blocked": "Блокирани",
"account.browse_more_on_origin_server": "Разглеждане на още в оригиналния профил",
"account.cancel_follow_request": "Оттегляне на заявката за последване",
"account.direct": "Privately mention @{name}",
"account.direct": "Частно споменаване на @{name}",
"account.disable_notifications": "Сприране на известия при публикуване от @{name}",
"account.domain_blocked": "Блокиран домейн",
"account.edit_profile": "Редактиране на профила",
@ -102,7 +102,7 @@
"column.blocks": "Блокирани потребители",
"column.bookmarks": "Отметки",
"column.community": "Локална часова ос",
"column.direct": "Private mentions",
"column.direct": "Частни споменавания",
"column.directory": "Разглеждане на профили",
"column.domain_blocks": "Блокирани домейни",
"column.favourites": "Любими",
@ -216,7 +216,7 @@
"empty_column.blocks": "Още не сте блокирали никакви потребители.",
"empty_column.bookmarked_statuses": "Още не сте отметнали публикации. Отметвайки някоя, то тя ще се покаже тук.",
"empty_column.community": "Местната часова ос е празна. Напишете нещо обществено, за да завъртите нещата!",
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.",
"empty_column.direct": "Още нямате никакви частни споменавания. Тук ще се показват, изпращайки или получавайки едно.",
"empty_column.domain_blocks": "Още няма блокирани домейни.",
"empty_column.explore_statuses": "Няма нищо налагащо се в момента. Проверете пак по-късно!",
"empty_column.favourited_statuses": "Още нямате любими публикации. Поставяйки някоя в любими, то тя ще се покаже тук.",
@ -314,7 +314,7 @@
"keyboard_shortcuts.column": "Съсредоточение на колона",
"keyboard_shortcuts.compose": "Фокус на текстовата зона за съставяне",
"keyboard_shortcuts.description": "Опис",
"keyboard_shortcuts.direct": "to open direct messages column",
"keyboard_shortcuts.direct": "за отваряне на колоната с частни споменавания",
"keyboard_shortcuts.down": "Преместване надолу в списъка",
"keyboard_shortcuts.enter": "Отваряне на публикация",
"keyboard_shortcuts.favourite": "Към любими публикации",
@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# нов елемент} other {# нови елемента}}",
"loading_indicator.label": "Зареждане...",
"media_gallery.toggle_visible": "Скриване на {number, plural, one {изображение} other {изображения}}",
"missing_indicator.label": "Не е намерено",
"missing_indicator.sublabel": "Ресурсът не може да се намери",
"moved_to_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен, защото се преместихте в {movedToAccount}.",
"mute_modal.duration": "Времетраене",
"mute_modal.hide_notifications": "Скривате ли известията от потребителя?",
@ -376,7 +374,7 @@
"navigation_bar.bookmarks": "Отметки",
"navigation_bar.community_timeline": "Локален инфопоток",
"navigation_bar.compose": "Съставяне на нова публикация",
"navigation_bar.direct": "Private mentions",
"navigation_bar.direct": "Частни споменавания",
"navigation_bar.discover": "Откриване",
"navigation_bar.domain_blocks": "Блокирани домейни",
"navigation_bar.edit_profile": "Редактиране на профила",
@ -522,17 +520,17 @@
"report_notification.categories.spam": "Спам",
"report_notification.categories.violation": "Нарушение на правилото",
"report_notification.open": "Отваряне на доклада",
"search.no_recent_searches": "No recent searches",
"search.no_recent_searches": "Няма скорошни търсения",
"search.placeholder": "Търсене",
"search.quick_action.account_search": "Profiles matching {x}",
"search.quick_action.go_to_account": "Go to profile {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon",
"search.quick_action.status_search": "Posts matching {x}",
"search.quick_action.account_search": "Съвпадение на профили {x}",
"search.quick_action.go_to_account": "Към профил {x}",
"search.quick_action.go_to_hashtag": "Към хаштаг {x}",
"search.quick_action.open_url": "Отваряне на URL адреса в Mastodon",
"search.quick_action.status_search": "Съвпадение на публикации {x}",
"search.search_or_paste": "Търсене или поставяне на URL адрес",
"search_popout.quick_actions": "Quick actions",
"search_popout.recent": "Recent searches",
"search_results.accounts": "Profiles",
"search_popout.quick_actions": "Бързи действия",
"search_popout.recent": "Скорошни търсения",
"search_results.accounts": "Профили",
"search_results.all": "Всичко",
"search_results.hashtags": "Хаштагове",
"search_results.nothing_found": "Не може да се намери каквото и да било за тези термини при търсене",
@ -559,8 +557,8 @@
"status.copy": "Копиране на връзката към публикация",
"status.delete": "Изтриване",
"status.detailed_status": "Подробен изглед на разговора",
"status.direct": "Privately mention @{name}",
"status.direct_indicator": "Private mention",
"status.direct": "Частно споменаване на @{name}",
"status.direct_indicator": "Частно споменаване",
"status.edit": "Редактиране",
"status.edited": "Редактирано на {date}",
"status.edited_x_times": "Редактирано {count, plural,one {{count} път} other {{count} пъти}}",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# নতুন জিনিস} other {# নতুন জিনিস}}",
"loading_indicator.label": "আসছে...",
"media_gallery.toggle_visible": "দৃশ্যতার অবস্থা বদলান",
"missing_indicator.label": "খুঁজে পাওয়া যায়নি",
"missing_indicator.sublabel": "জিনিসটা খুঁজে পাওয়া যায়নি",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
"mute_modal.duration": "সময়কাল",
"mute_modal.hide_notifications": "এই ব্যবহারকারীর প্রজ্ঞাপন বন্ধ করবেন ?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# dra nevez} other {# dra nevez}}",
"loading_indicator.label": "O kargañ...",
"media_gallery.toggle_visible": "{number, plural, one {Kuzhat ar skeudenn} other {Kuzhat ar skeudenn}}",
"missing_indicator.label": "Digavet",
"missing_indicator.sublabel": "An danvez-se ne vez ket kavet",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
"mute_modal.duration": "Padelezh",
"mute_modal.hide_notifications": "Kuzhat kemenadennoù eus an implijer-se ?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# new item} other {# new items}}",
"loading_indicator.label": "Loading...",
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
"mute_modal.duration": "Duration",
"mute_modal.hide_notifications": "Hide notifications from this user?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# element nou} other {# elements nous}}",
"loading_indicator.label": "Es carrega...",
"media_gallery.toggle_visible": "{number, plural, one {Amaga la imatge} other {Amaga les imatges}}",
"missing_indicator.label": "No s'ha trobat",
"missing_indicator.sublabel": "Aquest recurs no s'ha trobat",
"moved_to_account_banner.text": "El teu compte {disabledAccount} està actualment desactivat perquè l'has traslladat a {movedToAccount}.",
"mute_modal.duration": "Durada",
"mute_modal.hide_notifications": "Amagar les notificacions d'aquest usuari?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# بەڕگەی نوێ} other {# بەڕگەی نوێ}}",
"loading_indicator.label": "بارکردن...",
"media_gallery.toggle_visible": "شاردنەوەی {number, plural, one {image} other {images}}",
"missing_indicator.label": "نەدۆزرایەوە",
"missing_indicator.sublabel": "ئەو سەرچاوەیە نادۆزرێتەوە",
"moved_to_account_banner.text": "ئەکاونتەکەت {disabledAccount} لە ئێستادا لەکارخراوە چونکە تۆ چوویتە {movedToAccount}.",
"mute_modal.duration": "ماوە",
"mute_modal.hide_notifications": "شاردنەوەی ئاگانامەکان لەم بەکارهێنەرە؟ ",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}",
"loading_indicator.label": "Caricamentu...",
"media_gallery.toggle_visible": "Piattà {number, plural, one {ritrattu} other {ritratti}}",
"missing_indicator.label": "Micca trovu",
"missing_indicator.sublabel": "Ùn era micca pussivule di truvà sta risorsa",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
"mute_modal.duration": "Durata",
"mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}",
"loading_indicator.label": "Načítání...",
"media_gallery.toggle_visible": "{number, plural, one {Skrýt obrázek} few {Skrýt obrázky} many {Skrýt obrázky} other {Skrýt obrázky}}",
"missing_indicator.label": "Nenalezeno",
"missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
"moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován, protože jste se přesunul/a na {movedToAccount}.",
"mute_modal.duration": "Trvání",
"mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# new item} other {# new items}}",
"loading_indicator.label": "Loading...",
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
"mute_modal.duration": "Duration",
"mute_modal.hide_notifications": "Hide notifications from this user?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# eitem newydd} other {# eitem newydd}}",
"loading_indicator.label": "Llwytho...",
"media_gallery.toggle_visible": "{number, plural, one {Cuddio delwedd} other {Cuddio delwedd}}",
"missing_indicator.label": "Heb ei ganfod",
"missing_indicator.sublabel": "Nid oes modd canfod yr adnodd hwn",
"moved_to_account_banner.text": "Ar hyn y bryd, mae eich cyfrif {disabledAccount} wedi ei analluogi am i chi symud i {movedToAccount}.",
"mute_modal.duration": "Hyd",
"mute_modal.hide_notifications": "Cuddio hysbysiadau gan y defnyddiwr hwn?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# nyt emne} other {# nye emner}}",
"loading_indicator.label": "Indlæser...",
"media_gallery.toggle_visible": "{number, plural, one {Skjul billede} other {Skjul billeder}}",
"missing_indicator.label": "Ikke fundet",
"missing_indicator.sublabel": "Denne ressource kunne ikke findes",
"moved_to_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret, da du flyttede til {movedToAccount}.",
"mute_modal.duration": "Varighed",
"mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}",
"loading_indicator.label": "Wird geladen …",
"media_gallery.toggle_visible": "{number, plural, one {Medium ausblenden} other {Medien ausblenden}}",
"missing_indicator.label": "Nicht gefunden",
"missing_indicator.sublabel": "Der Inhalt konnte nicht gefunden werden",
"moved_to_account_banner.text": "Dein Konto {disabledAccount} ist derzeit deaktiviert, weil du zu {movedToAccount} umgezogen bist.",
"mute_modal.duration": "Dauer",
"mute_modal.hide_notifications": "Benachrichtigungen dieses Profils ausblenden?",

View File

@ -353,19 +353,6 @@
],
"path": "app/javascript/mastodon/components/media_gallery.json"
},
{
"descriptors": [
{
"defaultMessage": "Not found",
"id": "missing_indicator.label"
},
{
"defaultMessage": "This resource could not be found",
"id": "missing_indicator.sublabel"
}
],
"path": "app/javascript/mastodon/components/missing_indicator.json"
},
{
"descriptors": [
{
@ -960,6 +947,15 @@
],
"path": "app/javascript/mastodon/features/account_timeline/components/limited_account_hint.json"
},
{
"descriptors": [
{
"defaultMessage": "In Memoriam.",
"id": "account.in_memoriam"
}
],
"path": "app/javascript/mastodon/features/account_timeline/components/memorial_note.json"
},
{
"descriptors": [
{

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# νέο} other {# νέα}}",
"loading_indicator.label": "Φορτώνει...",
"media_gallery.toggle_visible": "Εναλλαγή ορατότητας",
"missing_indicator.label": "Δε βρέθηκε",
"missing_indicator.sublabel": "Αδύνατη η εύρεση αυτού του πόρου",
"moved_to_account_banner.text": "Ο λογαριασμός σας {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφερθήκατε στο {movedToAccount}.",
"mute_modal.duration": "Διάρκεια",
"mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;",

View File

@ -365,8 +365,6 @@
"load_pending": "{count, plural, one {# new item} other {# new items}}",
"loading_indicator.label": "Loading...",
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
"mute_modal.duration": "Duration",
"mute_modal.hide_notifications": "Hide notifications from this user?",