This commit is contained in:
Mario 2025-06-15 01:03:30 -04:00
parent 19c8848507
commit 86191f3ce1

View file

@ -1,101 +1,81 @@
import { FormattedMessage } from 'react-intl'; import PropTypes from 'prop-types';
import { PureComponent } from 'react';
import { FormattedMessage, injectIntl } from 'react-intl';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { import { connect } from 'react-redux';
domain,
version,
source_url,
statusPageUrl,
profile_directory as canProfileDirectory,
termsOfServiceEnabled,
} from 'mastodon/initial_state';
const DividingCircle: React.FC = () => <span aria-hidden>{' · '}</span>; import { openModal } from 'mastodon/actions/modal';
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
import { domain, version, source_url, statusPageUrl, profile_directory as profileDirectory } from 'mastodon/initial_state';
import { PERMISSION_INVITE_USERS } from 'mastodon/permissions';
export const LinkFooter: React.FC<{ const mapDispatchToProps = (dispatch) => ({
multiColumn: boolean; onLogout () {
}> = ({ multiColumn }) => { dispatch(openModal({ modalType: 'CONFIRM_LOG_OUT' }));
return (
<div className='link-footer'>
<p>
<strong>{domain}</strong>:{' '}
<Link to='/about' target={multiColumn ? '_blank' : undefined}>
<FormattedMessage id='footer.about' defaultMessage='About' />
</Link>
{statusPageUrl && (
<>
<DividingCircle />
<a href={statusPageUrl} target='_blank' rel='noopener'>
<FormattedMessage id='footer.status' defaultMessage='Status' />
</a>
</>
)}
{canProfileDirectory && (
<>
<DividingCircle />
<Link to='/directory'>
<FormattedMessage
id='footer.directory'
defaultMessage='Profiles directory'
/>
</Link>
</>
)}
<DividingCircle />
<Link
to='/privacy-policy'
target={multiColumn ? '_blank' : undefined}
rel='privacy-policy'
>
<FormattedMessage
id='footer.privacy_policy'
defaultMessage='Privacy policy'
/>
</Link>
{termsOfServiceEnabled && (
<>
<DividingCircle />
<Link
to='/terms-of-service'
target={multiColumn ? '_blank' : undefined}
rel='terms-of-service'
>
<FormattedMessage
id='footer.terms_of_service'
defaultMessage='Terms of service'
/>
</Link>
</>
)}
</p>
<p> },
<strong>Mastodon</strong>:{' '} });
<a href='https://joinmastodon.org' target='_blank' rel='noopener'>
<FormattedMessage id='footer.about' defaultMessage='About' /> class LinkFooter extends PureComponent {
</a> static propTypes = {
<DividingCircle /> identity: identityContextPropShape,
<a href='https://joinmastodon.org/apps' target='_blank' rel='noopener'> multiColumn: PropTypes.bool,
<FormattedMessage id='footer.get_app' defaultMessage='Get the app' /> onLogout: PropTypes.func.isRequired,
</a> intl: PropTypes.object.isRequired,
<DividingCircle /> };
<Link to='/keyboard-shortcuts'>
<FormattedMessage handleLogoutClick = e => {
id='footer.keyboard_shortcuts' e.preventDefault();
defaultMessage='Keyboard shortcuts' e.stopPropagation();
/>
</Link> this.props.onLogout();
<DividingCircle />
<a href={source_url} rel='noopener' target='_blank'> return false;
<FormattedMessage };
id='footer.source_code'
defaultMessage='View source code' render () {
/> const { signedIn, permissions } = this.props.identity;
</a> const { multiColumn } = this.props;
<DividingCircle />
<span className='version'>v{version}</span> const canInvite = signedIn && ((permissions & PERMISSION_INVITE_USERS) === PERMISSION_INVITE_USERS);
</p> const canProfileDirectory = profileDirectory;
</div>
); const DividingCircle = <span aria-hidden>{' · '}</span>;
};
return (
<div className='link-footer'>
<p>
<strong>{domain}</strong>:
{' '}
<Link to='/about' target={multiColumn ? '_blank' : undefined}><FormattedMessage id='footer.about' defaultMessage='About' /></Link>
{statusPageUrl && (
<>
{DividingCircle}
<a href={statusPageUrl} target='_blank' rel='noopener'><FormattedMessage id='footer.status' defaultMessage='Status' /></a>
</>
)}
{canInvite && (
<>
{DividingCircle}
<a href='/invites' target='_blank'><FormattedMessage id='footer.invite' defaultMessage='Invite people' /></a>
</>
)}
{DividingCircle}
<Link to='/privacy-policy' target={multiColumn ? '_blank' : undefined}><FormattedMessage id='footer.privacy_policy' defaultMessage='Privacy policy' /></Link>
{DividingCircle}
<Link to='/keyboard-shortcuts'><FormattedMessage id='footer.keyboard_shortcuts' defaultMessage='Keyboard shortcuts' /></Link>
{DividingCircle}
<a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='footer.source_code' defaultMessage='View source code' /></a>
{DividingCircle}
<span className='version'>v{version}</span>
</p>
</div>
);
}
}
export default injectIntl(withIdentity(connect(null, mapDispatchToProps)(LinkFooter)));