revert Footer
This commit is contained in:
gitea 2025-06-15 07:13:19 +02:00
parent 75c4430778
commit 5c122a035b

View file

@ -1,78 +1,101 @@
import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl';
import { PureComponent } from 'react';
import { FormattedMessage, injectIntl } from 'react-intl';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { connect } from 'react-redux'; import {
domain,
version,
source_url,
statusPageUrl,
profile_directory as canProfileDirectory,
termsOfServiceEnabled,
} from 'mastodon/initial_state';
import { openModal } from 'mastodon/actions/modal'; const DividingCircle: React.FC = () => <span aria-hidden>{' · '}</span>;
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';
const mapDispatchToProps = (dispatch) => ({ export const LinkFooter: React.FC<{
onLogout () { multiColumn: boolean;
dispatch(openModal({ modalType: 'CONFIRM_LOG_OUT' })); }> = ({ multiColumn }) => {
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'>
class LinkFooter extends PureComponent { <FormattedMessage id='footer.about' defaultMessage='About' />
static propTypes = { </a>
identity: identityContextPropShape, <DividingCircle />
multiColumn: PropTypes.bool, <a href='https://joinmastodon.org/apps' target='_blank' rel='noopener'>
onLogout: PropTypes.func.isRequired, <FormattedMessage id='footer.get_app' defaultMessage='Get the app' />
intl: PropTypes.object.isRequired, </a>
}; <DividingCircle />
<Link to='/keyboard-shortcuts'>
handleLogoutClick = e => { <FormattedMessage
e.preventDefault(); id='footer.keyboard_shortcuts'
e.stopPropagation(); defaultMessage='Keyboard shortcuts'
/>
this.props.onLogout(); </Link>
<DividingCircle />
return false; <a href={source_url} rel='noopener' target='_blank'>
}; <FormattedMessage
id='footer.source_code'
render () { defaultMessage='View source code'
const { signedIn, permissions } = this.props.identity; />
const { multiColumn } = this.props; </a>
const canInvite = signedIn && ((permissions & PERMISSION_INVITE_USERS) === PERMISSION_INVITE_USERS); <DividingCircle />
const canProfileDirectory = profileDirectory; <span className='version'>v{version}</span>
</p>
const DividingCircle = <span aria-hidden>{' · '}</span>; </div>
);
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>
);
}
}