This commit is contained in:
mgabdev
2020-03-03 22:45:16 -05:00
parent 0df3c073a5
commit 33952e424f
127 changed files with 765 additions and 3588 deletions

View File

@@ -40,7 +40,7 @@ class Avatar extends ImmutablePureComponent {
const shouldAnimate = animate || !sameImg
const options = {
className: [_s.default, _s.circle].join(' '),
className: [_s.default, _s.circle, _s.overflowHidden].join(' '),
onMouseEnter: shouldAnimate ? this.handleMouseEnter : undefined,
onMouseLeave: shouldAnimate ? this.handleMouseLeave : undefined,
src: account.get((hovering || animate) ? 'avatar' : 'avatar_static'),

View File

@@ -20,7 +20,7 @@ export default class Badge extends PureComponent {
render() {
const { children, description } = this.props
const { hovering } = this.state
const { hovering } = this.state // : todo : tooltip
return (
<Text

View File

@@ -0,0 +1,35 @@
import { Fragment } from 'react'
import { NavLink } from 'react-router-dom'
import ImmutablePropTypes from 'react-immutable-proptypes'
import { defineMessages, injectIntl } from 'react-intl'
import ImmutablePureComponent from 'react-immutable-pure-component'
import { me } from '../initial_state'
import Avatar from './avatar'
import DisplayName from './display_name'
import Button from './button'
import Text from './text'
const messages = defineMessages({
follow: { id: 'follow', defaultMessage: 'Follow' },
})
export default
@injectIntl
class Comment extends ImmutablePureComponent {
static propTypes = {
status: ImmutablePropTypes.map.isRequired,
}
render() {
//
return (
<div>
</div>
)
}
}

View File

@@ -28,6 +28,7 @@ class DisplayName extends ImmutablePureComponent {
multiline: PropTypes.bool,
large: PropTypes.bool,
noHover: PropTypes.bool,
noUsername: PropTypes.bool,
}
handleMouseEnter = debounce(() => {
@@ -41,7 +42,13 @@ class DisplayName extends ImmutablePureComponent {
}
render() {
const { account, multiline, large, noHover } = this.props
const {
account,
multiline,
large,
noHover,
noUsername
} = this.props
if (!account) return null
@@ -114,9 +121,12 @@ class DisplayName extends ImmutablePureComponent {
<Icon id='verified' width='16px' height='16px' className={_s.default} title='Gab Investor' />
*/ }
</div>
<span className={usernameClasses}>
@{account.get('acct')}
</span>
{
!noUsername &&
<span className={usernameClasses}>
@{account.get('acct')}
</span>
}
</span>
)
}

View File

@@ -0,0 +1,40 @@
import { Fragment } from 'react'
import { defineMessages, injectIntl } from 'react-intl'
import ImmutablePureComponent from 'react-immutable-pure-component'
import ImmutablePropTypes from 'react-immutable-proptypes'
import { shortNumberFormat } from '../../utils/numbers'
import PanelLayout from './panel_layout'
import Button from '../button'
import Divider from '../divider'
import Heading from '../heading'
import Icon from '../icon'
import Text from '../text'
const messages = defineMessages({
title: { id: 'notification_filters', defaultMessage: 'Notification Filters' },
})
export default
@injectIntl
class NotificationFilterPanel extends ImmutablePureComponent {
static propTypes = {
intl: PropTypes.object.isRequired,
}
render() {
const { intl } = this.props
// date
// verfied or not
// specific user
// specific status
// only people i do/not follow
return (
<PanelLayout title={intl.formatMessage(messages.title)}>
</PanelLayout>
)
}
}

View File

@@ -1,5 +1,39 @@
export default class StatusOptionsPopover extends PureComponent {
render() {
// if (publicStatus) {
// menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });
// menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
// menu.push(null);
// }
// if (me === status.getIn(['account', 'id'])) {
// if (publicStatus) {
// menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });
// } else {
// if (status.get('visibility') === 'private') {
// menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });
// }
// }
// menu.push(null);
// menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });
// menu.push(null);
// menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });
// menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });
// } else {
// menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });
// menu.push(null);
// menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });
// menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });
// menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });
// if (isStaff) {
// menu.push(null);
// menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });
// menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });
// }
// }
return (
<div>
{ /* */ }

View File

@@ -1,17 +1,17 @@
import { throttle } from 'lodash';
import { List as ImmutableList } from 'immutable';
import IntersectionObserverArticleContainer from '../containers/intersection_observer_article_container';
import IntersectionObserverWrapper from '../features/ui/util/intersection_observer_wrapper';
import ColumnIndicator from './column_indicator';
import LoadMore from './load_more';
import { throttle } from 'lodash'
import { List as ImmutableList } from 'immutable'
import IntersectionObserverArticle from './intersection_observer_article'
import IntersectionObserverWrapper from '../features/ui/util/intersection_observer_wrapper'
import ColumnIndicator from './column_indicator'
import LoadMore from './load_more'
const MOUSE_IDLE_DELAY = 300;
const MOUSE_IDLE_DELAY = 300
export default class ScrollableList extends PureComponent {
static contextTypes = {
router: PropTypes.object,
};
}
static propTypes = {
scrollKey: PropTypes.string.isRequired,
@@ -23,11 +23,11 @@ export default class ScrollableList extends PureComponent {
children: PropTypes.node,
onScrollToTop: PropTypes.func,
onScroll: PropTypes.func,
};
}
state = {
cachedMediaWidth: 250, // Default media/card width using default Gab Social theme
};
}
intersectionObserverWrapper = new IntersectionObserverWrapper();
@@ -213,7 +213,7 @@ export default class ScrollableList extends PureComponent {
<div className='scrollable-list' onMouseMove={this.handleMouseMove}>
<div role='feed'>
{React.Children.map(this.props.children, (child, index) => (
<IntersectionObserverArticleContainer
<IntersectionObserverArticle
key={child.key}
id={child.key}
index={index}
@@ -227,7 +227,7 @@ export default class ScrollableList extends PureComponent {
cachedMediaWidth: this.state.cachedMediaWidth,
cacheMediaWidth: this.cacheMediaWidth,
})}
</IntersectionObserverArticleContainer>
</IntersectionObserverArticle>
))}
{loadMore}

View File

@@ -272,9 +272,9 @@ class Status extends ImmutablePureComponent {
render() {
let media = null;
let statusAvatar, prepend, rebloggedByText, reblogContent;
let prepend, rebloggedByText, reblogContent;
const { intl, hidden, featured, otherAccounts, unread, showThread, group, promoted } = this.props;
const { intl, hidden, featured, unread, showThread, group, promoted } = this.props;
// console.log("replies:", this.props.replies)
@@ -321,7 +321,7 @@ class Status extends ImmutablePureComponent {
prepend = (
<div className={[_s.default, _s.flexRow, _s.alignItemsCenter, _s.borderBottom1PX, _s.borderColorSecondary, _s.paddingVertical5PX, _s.paddingHorizontal15PX].join(' ')}>
<Icon
id='pin'
id='star'
width='10px'
height='10px'
className={_s.fillColorSecondary}
@@ -366,7 +366,7 @@ class Status extends ImmutablePureComponent {
}
if (status.get('poll')) {
media = <Poll pollId={status.get('poll')} />;
media = <Poll pollId={status.get('poll')} />
} else if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
const video = status.getIn(['media_attachments', 0]);
@@ -375,6 +375,7 @@ class Status extends ImmutablePureComponent {
<Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer}>
{Component => (
<Component
inline
preview={video.get('preview_url')}
blurhash={video.get('blurhash')}
src={video.get('url')}
@@ -382,7 +383,6 @@ class Status extends ImmutablePureComponent {
aspectRatio={video.getIn(['meta', 'small', 'aspect'])}
width={this.props.cachedMediaWidth}
height={110}
inline
sensitive={status.get('sensitive')}
onOpenVideo={this.handleOpenVideo}
cacheWidth={this.props.cacheMediaWidth}
@@ -391,7 +391,7 @@ class Status extends ImmutablePureComponent {
/>
)}
</Bundle>
);
)
} else {
media = (
<Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>
@@ -408,10 +408,10 @@ class Status extends ImmutablePureComponent {
/>
)}
</Bundle>
);
)
}
} else if (status.get('spoiler_text').length === 0 && status.get('card')) {
console.log("card:", status.get('card'))
// console.log("card:", status.get('card'))
media = (
<Card
onOpenMedia={this.props.onOpenMedia}
@@ -419,23 +419,21 @@ class Status extends ImmutablePureComponent {
cacheWidth={this.props.cacheMediaWidth}
defaultWidth={this.props.cachedMediaWidth}
/>
);
)
}
const handlers = this.props.muted
? {}
: {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
mention: this.handleHotkeyMention,
open: this.handleHotkeyOpen,
openProfile: this.handleHotkeyOpenProfile,
moveUp: this.handleHotkeyMoveUp,
moveDown: this.handleHotkeyMoveDown,
toggleHidden: this.handleHotkeyToggleHidden,
toggleSensitive: this.handleHotkeyToggleSensitive,
};
const handlers = this.props.muted ? {} : {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
mention: this.handleHotkeyMention,
open: this.handleHotkeyOpen,
openProfile: this.handleHotkeyOpenProfile,
moveUp: this.handleHotkeyMoveUp,
moveDown: this.handleHotkeyMoveDown,
toggleHidden: this.handleHotkeyToggleHidden,
toggleSensitive: this.handleHotkeyToggleSensitive,
}
const statusUrl = `/${status.getIn(['account', 'acct'])}/posts/${status.get('id')}`;