parent
1bc4b8a0a5
commit
f72af5794d
@ -0,0 +1,26 @@ |
||||
import React from 'react'; |
||||
import PropTypes from 'prop-types'; |
||||
import Motion from 'flavours/glitch/util/optional_motion'; |
||||
import spring from 'react-motion/lib/spring'; |
||||
|
||||
export default class Warning extends React.PureComponent { |
||||
|
||||
static propTypes = { |
||||
message: PropTypes.node.isRequired, |
||||
}; |
||||
|
||||
render () { |
||||
const { message } = this.props; |
||||
|
||||
return ( |
||||
<Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}> |
||||
{({ opacity, scaleX, scaleY }) => ( |
||||
<div className='composer--warning' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}> |
||||
{message} |
||||
</div> |
||||
)} |
||||
</Motion> |
||||
); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,44 @@ |
||||
import React from 'react'; |
||||
import { connect } from 'react-redux'; |
||||
import Warning from '../components/warning'; |
||||
import PropTypes from 'prop-types'; |
||||
import { FormattedMessage } from 'react-intl'; |
||||
import { me } from 'flavours/glitch/util/initial_state'; |
||||
|
||||
const APPROX_HASHTAG_RE = /(?:^|[^\/\)\w])#(\w*[a-zA-Z·]\w*)/i; |
||||
|
||||
const mapStateToProps = state => ({ |
||||
needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', me, 'locked']), |
||||
hashtagWarning: state.getIn(['compose', 'privacy']) !== 'public' && APPROX_HASHTAG_RE.test(state.getIn(['compose', 'text'])), |
||||
directMessageWarning: state.getIn(['compose', 'privacy']) === 'direct', |
||||
}); |
||||
|
||||
const WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning }) => { |
||||
if (needsLockWarning) { |
||||
return <Warning message={<FormattedMessage id='compose_form.lock_disclaimer' defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.' values={{ locked: <a href='/settings/profile'><FormattedMessage id='compose_form.lock_disclaimer.lock' defaultMessage='locked' /></a> }} />} />; |
||||
} |
||||
|
||||
if (hashtagWarning) { |
||||
return <Warning message={<FormattedMessage id='compose_form.hashtag_warning' defaultMessage="This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag." />} />; |
||||
} |
||||
|
||||
if (directMessageWarning) { |
||||
const message = ( |
||||
<span> |
||||
<FormattedMessage id='compose_form.direct_message_warning' defaultMessage='This toot will only be sent to all the mentioned users.' /> <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a> |
||||
</span> |
||||
); |
||||
|
||||
return <Warning message={message} />; |
||||
} |
||||
|
||||
return null; |
||||
}; |
||||
|
||||
WarningWrapper.propTypes = { |
||||
needsLockWarning: PropTypes.bool, |
||||
hashtagWarning: PropTypes.bool, |
||||
directMessageWarning: PropTypes.bool, |
||||
}; |
||||
|
||||
export default connect(mapStateToProps)(WarningWrapper); |
@ -1,55 +0,0 @@ |
||||
import React from 'react'; |
||||
import Motion from 'flavours/glitch/util/optional_motion'; |
||||
import spring from 'react-motion/lib/spring'; |
||||
import { defineMessages, FormattedMessage } from 'react-intl'; |
||||
import { termsLink} from 'flavours/glitch/util/backend_links'; |
||||
|
||||
// This is the spring used with our motion.
|
||||
const motionSpring = spring(1, { damping: 35, stiffness: 400 }); |
||||
|
||||
// Messages.
|
||||
const messages = defineMessages({ |
||||
disclaimer: { |
||||
defaultMessage: 'This toot will only be sent to all the mentioned users.', |
||||
id: 'compose_form.direct_message_warning', |
||||
}, |
||||
learn_more: { |
||||
defaultMessage: 'Learn more', |
||||
id: 'compose_form.direct_message_warning_learn_more' |
||||
} |
||||
}); |
||||
|
||||
// The component.
|
||||
export default function ComposerDirectWarning () { |
||||
return ( |
||||
<Motion |
||||
defaultStyle={{ |
||||
opacity: 0, |
||||
scaleX: 0.85, |
||||
scaleY: 0.75, |
||||
}} |
||||
style={{ |
||||
opacity: motionSpring, |
||||
scaleX: motionSpring, |
||||
scaleY: motionSpring, |
||||
}} |
||||
> |
||||
{({ opacity, scaleX, scaleY }) => ( |
||||
<div |
||||
className='composer--warning' |
||||
style={{ |
||||
opacity: opacity, |
||||
transform: `scale(${scaleX}, ${scaleY})`, |
||||
}} |
||||
> |
||||
<span> |
||||
<FormattedMessage {...messages.disclaimer} /> |
||||
{ termsLink !== undefined && <a href={termsLink} target='_blank'><FormattedMessage {...messages.learn_more} /></a> } |
||||
</span> |
||||
</div> |
||||
)} |
||||
</Motion> |
||||
); |
||||
} |
||||
|
||||
ComposerDirectWarning.propTypes = {}; |
@ -1,49 +0,0 @@ |
||||
import React from 'react'; |
||||
import Motion from 'flavours/glitch/util/optional_motion'; |
||||
import spring from 'react-motion/lib/spring'; |
||||
import { defineMessages, FormattedMessage } from 'react-intl'; |
||||
|
||||
// This is the spring used with our motion.
|
||||
const motionSpring = spring(1, { damping: 35, stiffness: 400 }); |
||||
|
||||
// Messages.
|
||||
const messages = defineMessages({ |
||||
disclaimer: { |
||||
defaultMessage: 'This toot won\'t be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.', |
||||
id: 'compose_form.hashtag_warning', |
||||
}, |
||||
}); |
||||
|
||||
// The component.
|
||||
export default function ComposerHashtagWarning () { |
||||
return ( |
||||
<Motion |
||||
defaultStyle={{ |
||||
opacity: 0, |
||||
scaleX: 0.85, |
||||
scaleY: 0.75, |
||||
}} |
||||
style={{ |
||||
opacity: motionSpring, |
||||
scaleX: motionSpring, |
||||
scaleY: motionSpring, |
||||
}} |
||||
> |
||||
{({ opacity, scaleX, scaleY }) => ( |
||||
<div |
||||
className='composer--warning' |
||||
style={{ |
||||
opacity: opacity, |
||||
transform: `scale(${scaleX}, ${scaleY})`, |
||||
}} |
||||
> |
||||
<FormattedMessage |
||||
{...messages.disclaimer} |
||||
/> |
||||
</div> |
||||
)} |
||||
</Motion> |
||||
); |
||||
} |
||||
|
||||
ComposerHashtagWarning.propTypes = {}; |
@ -1,59 +0,0 @@ |
||||
import React from 'react'; |
||||
import Motion from 'flavours/glitch/util/optional_motion'; |
||||
import spring from 'react-motion/lib/spring'; |
||||
import { defineMessages, FormattedMessage } from 'react-intl'; |
||||
import { profileLink } from 'flavours/glitch/util/backend_links'; |
||||
|
||||
// This is the spring used with our motion.
|
||||
const motionSpring = spring(1, { damping: 35, stiffness: 400 }); |
||||
|
||||
// Messages.
|
||||
const messages = defineMessages({ |
||||
disclaimer: { |
||||
defaultMessage: 'Your account is not {locked}. Anyone can follow you to view your follower-only posts.', |
||||
id: 'compose_form.lock_disclaimer', |
||||
}, |
||||
locked: { |
||||
defaultMessage: 'locked', |
||||
id: 'compose_form.lock_disclaimer.lock', |
||||
}, |
||||
}); |
||||
|
||||
// The component.
|
||||
export default function ComposerWarning () { |
||||
let lockedLink = <FormattedMessage {...messages.locked} />; |
||||
if (profileLink !== undefined) { |
||||
lockedLink = <a href={profileLink}>{lockedLink}</a>; |
||||
} |
||||
return ( |
||||
<Motion |
||||
defaultStyle={{ |
||||
opacity: 0, |
||||
scaleX: 0.85, |
||||
scaleY: 0.75, |
||||
}} |
||||
style={{ |
||||
opacity: motionSpring, |
||||
scaleX: motionSpring, |
||||
scaleY: motionSpring, |
||||
}} |
||||
> |
||||
{({ opacity, scaleX, scaleY }) => ( |
||||
<div |
||||
className='composer--warning' |
||||
style={{ |
||||
opacity: opacity, |
||||
transform: `scale(${scaleX}, ${scaleY})`, |
||||
}} |
||||
> |
||||
<FormattedMessage |
||||
{...messages.disclaimer} |
||||
values={{ locked: lockedLink }} |
||||
/> |
||||
</div> |
||||
)} |
||||
</Motion> |
||||
); |
||||
} |
||||
|
||||
ComposerWarning.propTypes = {}; |
Loading…
Reference in new issue