Change responsive break points on navigation panel in web UI (#32034)

This commit is contained in:
Eugen Rochko 2024-09-25 18:36:19 +02:00 committed by GitHub
parent 28966fa0a6
commit 28c4eca0af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 112 additions and 91 deletions

View file

@ -4,22 +4,22 @@ import AccountNavigation from 'mastodon/features/account/navigation';
import Trends from 'mastodon/features/getting_started/containers/trends_container'; import Trends from 'mastodon/features/getting_started/containers/trends_container';
import { showTrends } from 'mastodon/initial_state'; import { showTrends } from 'mastodon/initial_state';
const DefaultNavigation: React.FC = () => const DefaultNavigation: React.FC = () => (showTrends ? <Trends /> : null);
showTrends ? (
<>
<div className='flex-spacer' />
<Trends />
</>
) : null;
export const NavigationPortal: React.FC = () => ( export const NavigationPortal: React.FC = () => (
<div className='navigation-panel__portal'>
<Switch> <Switch>
<Route path='/@:acct' exact component={AccountNavigation} /> <Route path='/@:acct' exact component={AccountNavigation} />
<Route path='/@:acct/tagged/:tagged?' exact component={AccountNavigation} /> <Route
path='/@:acct/tagged/:tagged?'
exact
component={AccountNavigation}
/>
<Route path='/@:acct/with_replies' exact component={AccountNavigation} /> <Route path='/@:acct/with_replies' exact component={AccountNavigation} />
<Route path='/@:acct/followers' exact component={AccountNavigation} /> <Route path='/@:acct/followers' exact component={AccountNavigation} />
<Route path='/@:acct/following' exact component={AccountNavigation} /> <Route path='/@:acct/following' exact component={AccountNavigation} />
<Route path='/@:acct/media' exact component={AccountNavigation} /> <Route path='/@:acct/media' exact component={AccountNavigation} />
<Route component={DefaultNavigation} /> <Route component={DefaultNavigation} />
</Switch> </Switch>
</div>
); );

View file

@ -43,10 +43,7 @@ class AccountNavigation extends PureComponent {
} }
return ( return (
<>
<div className='flex-spacer' />
<FeaturedTags accountId={accountId} tagged={tagged} /> <FeaturedTags accountId={accountId} tagged={tagged} />
</>
); );
} }

View file

@ -5,9 +5,9 @@ import { useRouteMatch, NavLink } from 'react-router-dom';
import { Icon } from 'mastodon/components/icon'; import { Icon } from 'mastodon/components/icon';
const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, href, method, badge, transparent, ...other }) => { const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, href, method, badge, transparent, optional, ...other }) => {
const match = useRouteMatch(to); const match = useRouteMatch(to);
const className = classNames('column-link', { 'column-link--transparent': transparent }); const className = classNames('column-link', { 'column-link--transparent': transparent, 'column-link--optional': optional });
const badgeElement = typeof badge !== 'undefined' ? <span className='column-link__badge'>{badge}</span> : null; const badgeElement = typeof badge !== 'undefined' ? <span className='column-link__badge'>{badge}</span> : null;
const iconElement = (typeof icon === 'string' || iconComponent) ? <Icon id={icon} icon={iconComponent} className='column-link__icon' /> : icon; const iconElement = (typeof icon === 'string' || iconComponent) ? <Icon id={icon} icon={iconComponent} className='column-link__icon' /> : icon;
const activeIconElement = activeIcon ?? (activeIconComponent ? <Icon id={icon} icon={activeIconComponent} className='column-link__icon' /> : iconElement); const activeIconElement = activeIcon ?? (activeIconComponent ? <Icon id={icon} icon={activeIconComponent} className='column-link__icon' /> : iconElement);
@ -43,6 +43,7 @@ ColumnLink.propTypes = {
method: PropTypes.string, method: PropTypes.string,
badge: PropTypes.node, badge: PropTypes.node,
transparent: PropTypes.bool, transparent: PropTypes.bool,
optional: PropTypes.bool,
}; };
export default ColumnLink; export default ColumnLink;

View file

@ -120,14 +120,17 @@ class NavigationPanel extends Component {
let banner = undefined; let banner = undefined;
if(transientSingleColumn) if (transientSingleColumn) {
banner = (<div className='switch-to-advanced'> banner = (
<div className='switch-to-advanced'>
{intl.formatMessage(messages.openedInClassicInterface)} {intl.formatMessage(messages.openedInClassicInterface)}
{" "} {" "}
<a href={`/deck${location.pathname}`} className='switch-to-advanced__toggle'> <a href={`/deck${location.pathname}`} className='switch-to-advanced__toggle'>
{intl.formatMessage(messages.advancedInterface)} {intl.formatMessage(messages.advancedInterface)}
</a> </a>
</div>); </div>
);
}
return ( return (
<div className='navigation-panel'> <div className='navigation-panel'>
@ -141,6 +144,7 @@ class NavigationPanel extends Component {
</div> </div>
} }
<div className='navigation-panel__menu'>
{signedIn && ( {signedIn && (
<> <>
<ColumnLink transparent to='/home' icon='home' iconComponent={HomeIcon} activeIconComponent={HomeActiveIcon} text={intl.formatMessage(messages.home)} /> <ColumnLink transparent to='/home' icon='home' iconComponent={HomeIcon} activeIconComponent={HomeActiveIcon} text={intl.formatMessage(messages.home)} />
@ -179,8 +183,8 @@ class NavigationPanel extends Component {
<ColumnLink transparent href='/settings/preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} /> <ColumnLink transparent href='/settings/preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} />
{canManageReports(permissions) && <ColumnLink transparent href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />} {canManageReports(permissions) && <ColumnLink optional transparent href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />}
{canViewAdminDashboard(permissions) && <ColumnLink transparent href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />} {canViewAdminDashboard(permissions) && <ColumnLink optional transparent href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />}
</> </>
)} )}
@ -188,6 +192,9 @@ class NavigationPanel extends Component {
<hr /> <hr />
<ColumnLink transparent to='/about' icon='ellipsis-h' iconComponent={MoreHorizIcon} text={intl.formatMessage(messages.about)} /> <ColumnLink transparent to='/about' icon='ellipsis-h' iconComponent={MoreHorizIcon} text={intl.formatMessage(messages.about)} />
</div> </div>
</div>
<div className='flex-spacer' />
<NavigationPortal /> <NavigationPortal />
</div> </div>

View file

@ -3490,12 +3490,14 @@ $ui-header-logo-wordmark-width: 99px;
margin-top: 10px; margin-top: 10px;
margin-bottom: 10px; margin-bottom: 10px;
height: calc(100% - 20px); height: calc(100% - 20px);
overflow-y: auto; overflow: hidden;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
& > a { &__menu {
flex: 0 0 auto; flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
} }
.logo { .logo {
@ -3506,6 +3508,36 @@ $ui-header-logo-wordmark-width: 99px;
&__logo { &__logo {
margin-bottom: 12px; margin-bottom: 12px;
} }
@media screen and (height <= 710px) {
&__portal {
display: none;
}
}
@media screen and (height <= 765px) {
&__portal .trends__item:nth-child(n + 3) {
display: none;
}
}
@media screen and (height <= 820px) {
&__portal .trends__item:nth-child(n + 4) {
display: none;
}
}
@media screen and (height <= 920px) {
.column-link.column-link--optional {
display: none;
}
}
@media screen and (height <= 1040px) {
.list-panel {
display: none;
}
}
} }
.navigation-panel, .navigation-panel,
@ -3869,22 +3901,6 @@ $ui-header-logo-wordmark-width: 99px;
} }
} }
@media screen and (height <= 810px) {
.trends__item:nth-of-type(3) {
display: none;
}
}
@media screen and (height <= 720px) {
.trends__item:nth-of-type(2) {
display: none;
}
}
@media screen and (height <= 670px) {
display: none;
}
.trends__item { .trends__item {
border-bottom: 0; border-bottom: 0;
padding: 10px; padding: 10px;