diff options
Diffstat (limited to 'app/assets/javascripts/components/components/status_content.jsx')
-rw-r--r-- | app/assets/javascripts/components/components/status_content.jsx | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/app/assets/javascripts/components/components/status_content.jsx b/app/assets/javascripts/components/components/status_content.jsx index 1ee720c9b..ff90226d8 100644 --- a/app/assets/javascripts/components/components/status_content.jsx +++ b/app/assets/javascripts/components/components/status_content.jsx @@ -1,6 +1,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PureRenderMixin from 'react-addons-pure-render-mixin'; import emojify from '../emoji'; +import { FormattedMessage } from 'react-intl'; const StatusContent = React.createClass({ @@ -13,6 +14,12 @@ const StatusContent = React.createClass({ onClick: React.PropTypes.func }, + getInitialState () { + return { + hidden: true + }; + }, + mixins: [PureRenderMixin], componentDidMount () { @@ -69,20 +76,40 @@ const StatusContent = React.createClass({ this.startXY = null; }, + handleSpoilerClick () { + this.setState({ hidden: !this.state.hidden }); + }, + render () { const { status } = this.props; + const { hidden } = this.state; const content = { __html: emojify(status.get('content')) }; - - return ( - <div - className='status__content' - style={{ cursor: 'pointer' }} - dangerouslySetInnerHTML={content} - onMouseDown={this.handleMouseDown} - onMouseUp={this.handleMouseUp} - /> - ); + const spoilerContent = { __html: emojify(status.get('spoiler_text')) }; + + if (status.get('spoiler_text').length > 0) { + const toggleText = hidden ? <FormattedMessage id='status.show_more' defaultMessage='Show more' /> : <FormattedMessage id='status.show_less' defaultMessage='Show less' />; + + return ( + <div className='status__content' style={{ cursor: 'pointer' }} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}> + <p> + <span dangerouslySetInnerHTML={spoilerContent} /> <a onClick={this.handleSpoilerClick}>{toggleText}</a> + </p> + + <div style={{ display: hidden ? 'none' : 'block' }} dangerouslySetInnerHTML={content} /> + </div> + ); + } else { + return ( + <div + className='status__content' + style={{ cursor: 'pointer' }} + onMouseDown={this.handleMouseDown} + onMouseUp={this.handleMouseUp} + dangerouslySetInnerHTML={content} + /> + ); + } }, }); |