@ -14,6 +14,7 @@ import { Motion, spring } from 'react-motion';
const messages = defineMessages ( {
placeholder : { id : 'compose_form.placeholder' , defaultMessage : 'What is on your mind?' } ,
spoiler _placeholder : { id : 'compose_form.spoiler_placeholder' , defaultMessage : 'Content warning' } ,
publish : { id : 'compose_form.publish' , defaultMessage : 'Publish' }
} ) ;
@ -25,6 +26,8 @@ const ComposeForm = React.createClass({
suggestion _token : React . PropTypes . string ,
suggestions : ImmutablePropTypes . list ,
sensitive : React . PropTypes . bool ,
spoiler : React . PropTypes . bool ,
spoiler _text : React . PropTypes . string ,
unlisted : React . PropTypes . bool ,
private : React . PropTypes . bool ,
fileDropDate : React . PropTypes . instanceOf ( Date ) ,
@ -40,6 +43,8 @@ const ComposeForm = React.createClass({
onFetchSuggestions : React . PropTypes . func . isRequired ,
onSuggestionSelected : React . PropTypes . func . isRequired ,
onChangeSensitivity : React . PropTypes . func . isRequired ,
onChangeSpoilerness : React . PropTypes . func . isRequired ,
onChangeSpoilerText : React . PropTypes . func . isRequired ,
onChangeVisibility : React . PropTypes . func . isRequired ,
onChangeListability : React . PropTypes . func . isRequired ,
} ,
@ -77,6 +82,15 @@ const ComposeForm = React.createClass({
this . props . onChangeSensitivity ( e . target . checked ) ;
} ,
handleChangeSpoilerness ( e ) {
this . props . onChangeSpoilerness ( e . target . checked ) ;
this . props . onChangeSpoilerText ( '' ) ;
} ,
handleChangeSpoilerText ( e ) {
this . props . onChangeSpoilerText ( e . target . value ) ;
} ,
handleChangeVisibility ( e ) {
this . props . onChangeVisibility ( e . target . checked ) ;
} ,
@ -115,6 +129,14 @@ const ComposeForm = React.createClass({
return (
< div style = { { padding : '10px' } } >
< Motion defaultStyle = { { opacity : ! this . props . spoiler ? 0 : 100 , height : ! this . props . spoiler ? 50 : 0 } } style = { { opacity : spring ( ! this . props . spoiler ? 0 : 100 ) , height : spring ( ! this . props . spoiler ? 0 : 50 ) } } >
{ ( { opacity , height } ) =>
< div className = "spoiler-input" style = { { height : ` ${ height } px ` , overflow : 'hidden' , opacity : opacity / 100 } } >
< input placeholder = { intl . formatMessage ( messages . spoiler _placeholder ) } value = { this . props . spoiler _text } onChange = { this . handleChangeSpoilerText } type = "text" className = "spoiler-input__input" / >
< / div >
}
< / Motion >
{ replyArea }
< AutosuggestTextarea
@ -133,7 +155,7 @@ const ComposeForm = React.createClass({
< div style = { { marginTop : '10px' , overflow : 'hidden' } } >
< div style = { { float : 'right' } } > < Button text = { intl . formatMessage ( messages . publish ) } onClick = { this . handleSubmit } disabled = { disabled } / > < / div >
< div style = { { float : 'right' , marginRight : '16px' , lineHeight : '36px' } } > < CharacterCounter max = { 500 } text = { this . props . text } / > < / div >
< div style = { { float : 'right' , marginRight : '16px' , lineHeight : '36px' } } > < CharacterCounter max = { 500 } text = { this . props . spoiler ? ( this . props . spoiler _text + "\n" + this . props . text ) : this . props . text } / > < / div >
< UploadButtonContainer style = { { paddingTop : '4px' } } / >
< / div >
@ -142,6 +164,11 @@ const ComposeForm = React.createClass({
< span style = { { display : 'inline-block' , verticalAlign : 'middle' , marginBottom : '14px' , marginLeft : '8px' , color : '#9baec8' } } > < FormattedMessage id = 'compose_form.private' defaultMessage = 'Mark as private' / > < / span >
< / label >
< label style = { { display : 'block' , lineHeight : '24px' , verticalAlign : 'middle' } } >
< Toggle checked = { this . props . spoiler } onChange = { this . handleChangeSpoilerness } / >
< span style = { { display : 'inline-block' , verticalAlign : 'middle' , marginBottom : '14px' , marginLeft : '8px' , color : '#9baec8' } } > < FormattedMessage id = 'compose_form.spoiler' defaultMessage = 'Hide behind content warning' / > < / span >
< / label >
< Motion defaultStyle = { { opacity : ( this . props . private || reply _to _other ) ? 0 : 100 , height : ( this . props . private || reply _to _other ) ? 39.5 : 0 } } style = { { opacity : spring ( ( this . props . private || reply _to _other ) ? 0 : 100 ) , height : spring ( ( this . props . private || reply _to _other ) ? 0 : 39.5 ) } } >
{ ( { opacity , height } ) =>
< label style = { { display : 'block' , lineHeight : '24px' , verticalAlign : 'middle' , height : ` ${ height } px ` , overflow : 'hidden' , opacity : opacity / 100 } } >