Add "Show poll" link to quoted poll

This commit is contained in:
noellabo 2019-11-12 14:09:06 +09:00
parent f49c59bc02
commit 815766cc54
4 changed files with 20 additions and 4 deletions

View file

@ -39,6 +39,9 @@ class Poll extends ImmutablePureComponent {
static getDerivedStateFromProps (props, state) {
const { poll, intl } = props;
if (!poll) {
return null;
}
const expires_at = poll.get('expires_at');
const expired = poll.get('expired') || expires_at !== null && (new Date(expires_at)).getTime() < intl.now();
return (expired === state.expired) ? null : { expired };
@ -59,7 +62,7 @@ class Poll extends ImmutablePureComponent {
_setupTimer () {
const { poll, intl } = this.props;
clearTimeout(this._timer);
if (!this.state.expired) {
if (!this.state.expired && !!poll) {
const delay = (new Date(poll.get('expires_at'))).getTime() - intl.now();
this._timer = setTimeout(() => {
this.setState({ expired: true });

View file

@ -183,6 +183,7 @@ export default class StatusContent extends React.PureComponent {
const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden;
const renderReadMore = this.props.onClick && status.get('collapsed');
const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']);
const renderShowPoll = !!status.get('poll');
const content = { __html: status.get('contentHtml') };
const spoilerContent = { __html: status.get('spoilerHtml') };
@ -204,6 +205,16 @@ export default class StatusContent extends React.PureComponent {
</button>
);
const showPollButton = (
<button className='status__content__read-more-button' onClick={this.props.onClick} key='show-poll'>
<FormattedMessage id='status.show_poll' defaultMessage='Show poll' /><Icon id='angle-right' fixedWidth />
</button>
);
const pollContainer = (
<PollContainer pollId={status.get('poll')} />
);
if (status.get('spoiler_text').length > 0) {
let mentionsPlaceholder = '';
@ -231,7 +242,7 @@ export default class StatusContent extends React.PureComponent {
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''} translate`} dangerouslySetInnerHTML={content} />
{!quote && !hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
{!hidden && renderShowPoll && quote ? showPollButton : pollContainer}
{renderViewThread && showThreadButton}
</div>
@ -241,7 +252,7 @@ export default class StatusContent extends React.PureComponent {
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
<div className='status__content__text status__content__text--visible translate' dangerouslySetInnerHTML={content} />
{!quote && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
{renderShowPoll && quote ? showPollButton : pollContainer}
{renderViewThread && showThreadButton}
</div>,
@ -257,7 +268,7 @@ export default class StatusContent extends React.PureComponent {
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
<div className='status__content__text status__content__text--visible translate' dangerouslySetInnerHTML={content} />
{!quote && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
{renderShowPoll && quote ? showPollButton : pollContainer}
{renderViewThread && showThreadButton}
</div>

View file

@ -420,6 +420,7 @@
"status.show_less_all": "Show less for all",
"status.show_more": "Show more",
"status.show_more_all": "Show more for all",
"status.show_poll": "Show poll",
"status.show_thread": "Show thread",
"status.uncached_media_warning": "Not available",
"status.unmute_conversation": "Unmute conversation",

View file

@ -421,6 +421,7 @@
"status.show_less_all": "全て隠す",
"status.show_more": "もっと見る",
"status.show_more_all": "全て見る",
"status.show_poll": "アンケートを表示",
"status.show_thread": "スレッドを表示",
"status.uncached_media_warning": "利用できません",
"status.unmute_conversation": "会話のミュートを解除",