Column: consolidate column components, refactor transparency, get rid of .column-area--mobile, wtf

profile-avatar-switcher
Alex Gleason 2021-10-06 15:57:24 -05:00
rodzic 4b92dbc93d
commit b6704991d2
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 7211D1F99744FBB7
26 zmienionych plików z 61 dodań i 104 usunięć

Wyświetl plik

@ -6,18 +6,20 @@ export default class Column extends React.PureComponent {
static propTypes = { static propTypes = {
className: PropTypes.string, className: PropTypes.string,
transparent: PropTypes.bool,
children: PropTypes.node, children: PropTypes.node,
label: PropTypes.string, label: PropTypes.string,
}; };
render() { render() {
const { className, label, children } = this.props; const { className, label, children, transparent, ...rest } = this.props;
return ( return (
<div <div
role='region' role='region'
aria-label={label} aria-label={label}
className={classNames('column', className)} className={classNames('column', className, { 'column--transparent': transparent })}
{...rest}
> >
{children} {children}
</div> </div>

Wyświetl plik

@ -177,7 +177,7 @@ class AccountTimeline extends ImmutablePureComponent {
} }
return ( return (
<Column showBackBtn={false}> <Column transparent>
<div className='account__section-headline'> <div className='account__section-headline'>
<NavLink exact to={`/@${accountUsername}`}> <NavLink exact to={`/@${accountUsername}`}>
<FormattedMessage id='account.posts' defaultMessage='Posts' /> <FormattedMessage id='account.posts' defaultMessage='Posts' />

Wyświetl plik

@ -55,7 +55,7 @@ class Bookmarks extends ImmutablePureComponent {
const emptyMessage = <FormattedMessage id='empty_column.bookmarks' defaultMessage="You don't have any bookmarks yet. When you add one, it will show up here." />; const emptyMessage = <FormattedMessage id='empty_column.bookmarks' defaultMessage="You don't have any bookmarks yet. When you add one, it will show up here." />;
return ( return (
<Column icon='bookmark' heading={intl.formatMessage(messages.heading)} backBtnSlim> <Column heading={intl.formatMessage(messages.heading)} transparent>
<StatusList <StatusList
trackScroll={!pinned} trackScroll={!pinned}
statusIds={statusIds} statusIds={statusIds}

Wyświetl plik

@ -73,7 +73,7 @@ class CommunityTimeline extends React.PureComponent {
const { intl, onlyMedia, timelineId } = this.props; const { intl, onlyMedia, timelineId } = this.props;
return ( return (
<Column label={intl.formatMessage(messages.title)}> <Column label={intl.formatMessage(messages.title)} transparent>
<SubNavigation message={intl.formatMessage(messages.title)} /> <SubNavigation message={intl.formatMessage(messages.title)} />
<StatusListContainer <StatusListContainer
scrollKey={`${timelineId}_timeline`} scrollKey={`${timelineId}_timeline`}

Wyświetl plik

@ -48,7 +48,7 @@ class DirectTimeline extends React.PureComponent {
const { intl, hasUnread } = this.props; const { intl, hasUnread } = this.props;
return ( return (
<Column label={intl.formatMessage(messages.title)}> <Column label={intl.formatMessage(messages.title)} transparent>
<ColumnHeader <ColumnHeader
icon='envelope' icon='envelope'
active={hasUnread} active={hasUnread}

Wyświetl plik

@ -98,7 +98,7 @@ class HomeTimeline extends React.PureComponent {
const { done } = this.state; const { done } = this.state;
return ( return (
<Column label={intl.formatMessage(messages.title)}> <Column label={intl.formatMessage(messages.title)} transparent>
{(features.suggestions && isEmpty && !isLoading && !done) ? ( {(features.suggestions && isEmpty && !isLoading && !done) ? (
<BundleContainer fetchComponent={FollowRecommendationsContainer}> <BundleContainer fetchComponent={FollowRecommendationsContainer}>
{Component => <Component onDone={this.handleDone} />} {Component => <Component onDone={this.handleDone} />}

Wyświetl plik

@ -97,7 +97,7 @@ class CommunityTimeline extends React.PureComponent {
const { intl, onlyMedia, timelineId, siteTitle, showExplanationBox, explanationBoxExpanded } = this.props; const { intl, onlyMedia, timelineId, siteTitle, showExplanationBox, explanationBoxExpanded } = this.props;
return ( return (
<Column label={intl.formatMessage(messages.title)}> <Column label={intl.formatMessage(messages.title)} transparent>
<SubNavigation message={intl.formatMessage(messages.title)} /> <SubNavigation message={intl.formatMessage(messages.title)} />
<PinnedHostsPicker /> <PinnedHostsPicker />
{showExplanationBox && <div className='explanation-box'> {showExplanationBox && <div className='explanation-box'>

Wyświetl plik

@ -85,7 +85,7 @@ class RemoteTimeline extends React.PureComponent {
const { intl, hasUnread, onlyMedia, timelineId, instance, pinned } = this.props; const { intl, hasUnread, onlyMedia, timelineId, instance, pinned } = this.props;
return ( return (
<Column label={intl.formatMessage(messages.title)}> <Column label={intl.formatMessage(messages.title)} transparent>
<HomeColumnHeader activeItem='fediverse' active={hasUnread} /> <HomeColumnHeader activeItem='fediverse' active={hasUnread} />
<PinnedHostsPicker host={instance} /> <PinnedHostsPicker host={instance} />
{!pinned && <div className='timeline-filter-message'> {!pinned && <div className='timeline-filter-message'>

Wyświetl plik

@ -1,11 +1,12 @@
import React from 'react'; import React from 'react';
import ColumnHeader from './column_header'; import ColumnHeader from './column_header';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Column from 'soapbox/components/column';
import ColumnBackButton from '../../../components/column_back_button_slim'; import ColumnBackButton from '../../../components/column_back_button_slim';
import DropdownMenu from 'soapbox/containers/dropdown_menu_container'; import DropdownMenu from 'soapbox/containers/dropdown_menu_container';
// Yes, there are 3 types of columns at this point, but this one is better, I swear // Yes, there are 3 types of columns at this point, but this one is better, I swear
export default class Column extends React.PureComponent { export default class BetterColumn extends React.PureComponent {
static propTypes = { static propTypes = {
heading: PropTypes.string, heading: PropTypes.string,
@ -16,11 +17,11 @@ export default class Column extends React.PureComponent {
}; };
render() { render() {
const { heading, icon, children, active, menu } = this.props; const { heading, icon, children, active, menu, ...rest } = this.props;
const columnHeaderId = heading && heading.replace(/ /g, '-'); const columnHeaderId = heading && heading.replace(/ /g, '-');
return ( return (
<div role='region' aria-labelledby={columnHeaderId} className='column column--better'> <Column aria-labelledby={columnHeaderId} className='column--better' {...rest}>
<div className='column__top'> <div className='column__top'>
{heading && <ColumnHeader icon={icon} active={active} type={heading} columnHeaderId={columnHeaderId} />} {heading && <ColumnHeader icon={icon} active={active} type={heading} columnHeaderId={columnHeaderId} />}
{menu && ( {menu && (
@ -31,7 +32,7 @@ export default class Column extends React.PureComponent {
<ColumnBackButton /> <ColumnBackButton />
</div> </div>
{children} {children}
</div> </Column>
); );
} }

Wyświetl plik

@ -1,8 +1,9 @@
import React from 'react'; import React from 'react';
import ColumnHeader from './column_header'; import ColumnHeader from './column_header';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Column from 'soapbox/components/column';
export default class Column extends React.PureComponent { export default class UIColumn extends React.PureComponent {
static propTypes = { static propTypes = {
heading: PropTypes.string, heading: PropTypes.string,
@ -17,14 +18,14 @@ export default class Column extends React.PureComponent {
} }
render() { render() {
const { heading, icon, children, active, showBackBtn } = this.props; const { heading, icon, children, active, showBackBtn, ...rest } = this.props;
const columnHeaderId = heading && heading.replace(/ /g, '-'); const columnHeaderId = heading && heading.replace(/ /g, '-');
return ( return (
<div role='region' aria-labelledby={columnHeaderId} className='column'> <Column aria-labelledby={columnHeaderId} {...rest}>
{heading && <ColumnHeader icon={icon} active={active} type={heading} columnHeaderId={columnHeaderId} showBackBtn={showBackBtn} />} {heading && <ColumnHeader icon={icon} active={active} type={heading} columnHeaderId={columnHeaderId} showBackBtn={showBackBtn} />}
{children} {children}
</div> </Column>
); );
} }

Wyświetl plik

@ -30,7 +30,7 @@ class ColumnsArea extends ImmutablePureComponent {
</div> </div>
<div className='columns-area__panels__main'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -27,7 +27,7 @@ class AdminPage extends ImmutablePureComponent {
</div> </div>
<div className='columns-area__panels__main'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -45,7 +45,7 @@ class DefaultPage extends ImmutablePureComponent {
</div> </div>
<div className='columns-area__panels__main'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -16,7 +16,7 @@ export default class DefaultPage extends ImmutablePureComponent {
</div> </div>
<div className='columns-area__panels__main'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -54,7 +54,7 @@ class GroupPage extends ImmutablePureComponent {
</div> </div>
<div className='columns-area__panels__main'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -39,7 +39,7 @@ class GroupsPage extends ImmutablePureComponent {
</div> </div>
<div className='columns-area__panels__main'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -67,8 +67,8 @@ class HomePage extends ImmutablePureComponent {
</div> </div>
</div> </div>
<div className='columns-area__panels__main columns-area__panels__main--transparent'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile columns-area--transparent'> <div className='columns-area'>
{me && <div className='timeline-compose-block' ref={this.composeBlock}> {me && <div className='timeline-compose-block' ref={this.composeBlock}>
<Link className='timeline-compose-block__avatar' to={`/@${acct}`}> <Link className='timeline-compose-block__avatar' to={`/@${acct}`}>
<Avatar account={account} size={46} /> <Avatar account={account} size={46} />

Wyświetl plik

@ -98,8 +98,8 @@ class ProfilePage extends ImmutablePureComponent {
</div> </div>
</div> </div>
<div className='columns-area__panels__main columns-area__panels__main--transparent'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile columns-area--transparent'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -48,7 +48,7 @@ class RemoteInstancePage extends ImmutablePureComponent {
</div> </div>
<div className='columns-area__panels__main'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -45,8 +45,8 @@ class StatusPage extends ImmutablePureComponent {
</div> </div>
</div> </div>
<div className='columns-area__panels__main columns-area__panels__main--transparent'> <div className='columns-area__panels__main'>
<div className='columns-area columns-area--mobile columns-area--transparent'> <div className='columns-area'>
{children} {children}
</div> </div>
</div> </div>

Wyświetl plik

@ -463,10 +463,6 @@ a .account__avatar {
} }
.account__section-headline { .account__section-headline {
background: var(--foreground-color);
width: 100%;
display: flex;
button, button,
a { a {
flex: none; flex: none;

Wyświetl plik

@ -366,7 +366,7 @@
max-width: none; max-width: none;
} }
.columns-area--mobile .column { .columns-area .column {
border-radius: 0; border-radius: 0;
} }

Wyświetl plik

@ -93,7 +93,7 @@
} }
} }
.columns-area--mobile { .columns-area {
display: block; display: block;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
@ -340,34 +340,20 @@
cursor: default; cursor: default;
} }
.columns-area--mobile .column { .columns-area .column {
@include standard-panel; @include standard-panel;
&--transparent {
background: transparent;
border-radius: 0;
box-shadow: none;
}
@media screen and (max-width: 580px) { @media screen and (max-width: 580px) {
border-radius: 0; border-radius: 0;
} }
} }
.columns-area--transparent .column {
background: transparent;
border-radius: 0;
box-shadow: none;
.column-back-button {
background: transparent;
}
.account__section-headline {
background: transparent;
border: 0;
}
.empty-column-indicator,
.error-column {
background: transparent;
}
}
.column-header__wrapper { .column-header__wrapper {
position: relative; position: relative;
flex: 0 0 auto; flex: 0 0 auto;
@ -817,26 +803,6 @@
} }
} }
.columns-area--transparent .follow-recommendations-container {
@include standard-panel;
}
// Let transparent columns extend the full width of the screen
@media screen and (max-width: 450px) {
.columns-area__panels__main--transparent {
padding: 0;
}
.columns-area--transparent {
.status__wrapper,
.detailed-status__wrapper,
.timeline-compose-block,
.follow-recommendations-container {
border-radius: 0;
}
}
}
.column-title { .column-title {
text-align: center; text-align: center;
padding: 40px; padding: 40px;
@ -896,3 +862,21 @@
border-radius: 0; border-radius: 0;
} }
} }
// Make MaterialStatus flush against SubNavigation
.sub-navigation ~ .slist .item-list > article:first-child .material-status__status {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
// Display background for loading indicator
.column--transparent {
.slist__append {
@include standard-panel;
}
.sub-navigation ~ .slist .slist__append {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
}

Wyświetl plik

@ -111,7 +111,6 @@
} }
.detailed-status__wrapper { .detailed-status__wrapper {
@include standard-panel;
margin-bottom: 10px; margin-bottom: 10px;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
@ -159,19 +158,3 @@
float: left; float: left;
margin-right: 5px; margin-right: 5px;
} }
.thread {
// Don't display gaps between statuses in a thread
.status-container {
padding: 0;
}
.status__wrapper {
border-radius: 0;
}
.detailed-status__wrapper {
border-radius: 0;
margin: 0;
}
}

Wyświetl plik

@ -170,15 +170,6 @@
margin-top: 8px; margin-top: 8px;
} }
&.status-direct:not(.read) {
background: var(--brand-color--med);
border-bottom-color: var(--brand-color--med);
.status__content a {
color: var(--brand-color--hicontrast);
}
}
&.light { &.light {
.status__relative-time { .status__relative-time {
color: var(--primary-text-color--faint); color: var(--primary-text-color--faint);

Wyświetl plik

@ -443,7 +443,6 @@
&__append { &__append {
flex: 1 1 auto; flex: 1 1 auto;
position: relative; position: relative;
min-height: 120px;
padding: 30px 15px; padding: 30px 15px;
} }
} }