Merge branch 'yiskah-patch-5'

rebase/4.0.0rc2
Eugen Rochko 2017-02-13 18:38:31 +01:00
commit 77df3785f1
4 changed files with 41 additions and 5 deletions

View File

@ -36,6 +36,8 @@ const ComposeForm = React.createClass({
in_reply_to: ImmutablePropTypes.map, in_reply_to: ImmutablePropTypes.map,
media_count: React.PropTypes.number, media_count: React.PropTypes.number,
me: React.PropTypes.number, me: React.PropTypes.number,
needsPrivacyWarning: React.PropTypes.bool,
mentionedDomains: React.PropTypes.array.isRequired,
onChange: React.PropTypes.func.isRequired, onChange: React.PropTypes.func.isRequired,
onSubmit: React.PropTypes.func.isRequired, onSubmit: React.PropTypes.func.isRequired,
onCancelReply: React.PropTypes.func.isRequired, onCancelReply: React.PropTypes.func.isRequired,
@ -117,16 +119,29 @@ const ComposeForm = React.createClass({
}, },
render () { render () {
const { intl } = this.props; const { intl, needsPrivacyWarning, mentionedDomains } = this.props;
let replyArea = ''; const disabled = this.props.is_submitting || this.props.is_uploading;
let publishText = '';
const disabled = this.props.is_submitting || this.props.is_uploading; let replyArea = '';
let publishText = '';
let privacyWarning = '';
let reply_to_other = !!this.props.in_reply_to && (this.props.in_reply_to.getIn(['account', 'id']) !== this.props.me);
if (this.props.in_reply_to) { if (this.props.in_reply_to) {
replyArea = <ReplyIndicator status={this.props.in_reply_to} onCancel={this.props.onCancelReply} />; replyArea = <ReplyIndicator status={this.props.in_reply_to} onCancel={this.props.onCancelReply} />;
} }
let reply_to_other = !!this.props.in_reply_to && (this.props.in_reply_to.getIn(['account', 'id']) !== this.props.me); if (needsPrivacyWarning) {
privacyWarning = (
<div className='compose-form__warning'>
<FormattedMessage
id='compose_form.privacy_disclaimer'
defaultMessage='Your private status will be delivered to mentioned users on {domains}. Do you trust {domainsCount, plural, one {that server} other {those servers}} to not leak your status?'
values={{ domains: <strong>{mentionedDomains.join(', ')}</strong>, domainsCount: mentionedDomains.length }}
/>
</div>
);
}
if (this.props.private) { if (this.props.private) {
publishText = <span><i className='fa fa-lock' /> {intl.formatMessage(messages.publish)}</span>; publishText = <span><i className='fa fa-lock' /> {intl.formatMessage(messages.publish)}</span>;
@ -142,6 +157,7 @@ const ComposeForm = React.createClass({
</div> </div>
</Collapsable> </Collapsable>
{privacyWarning}
{replyArea} {replyArea}
<AutosuggestTextarea <AutosuggestTextarea

View File

@ -19,6 +19,8 @@ const makeMapStateToProps = () => {
const getStatus = makeGetStatus(); const getStatus = makeGetStatus();
const mapStateToProps = function (state, props) { const mapStateToProps = function (state, props) {
const mentionedUsernamesWithDomains = state.getIn(['compose', 'text']).match(/(?:^|[^\/\w])@([a-z0-9_]+@[a-z0-9\.\-]+)/ig);
return { return {
text: state.getIn(['compose', 'text']), text: state.getIn(['compose', 'text']),
suggestion_token: state.getIn(['compose', 'suggestion_token']), suggestion_token: state.getIn(['compose', 'suggestion_token']),
@ -34,6 +36,8 @@ const makeMapStateToProps = () => {
in_reply_to: getStatus(state, state.getIn(['compose', 'in_reply_to'])), in_reply_to: getStatus(state, state.getIn(['compose', 'in_reply_to'])),
media_count: state.getIn(['compose', 'media_attachments']).size, media_count: state.getIn(['compose', 'media_attachments']).size,
me: state.getIn(['compose', 'me']), me: state.getIn(['compose', 'me']),
needsPrivacyWarning: state.getIn(['compose', 'private']) && mentionedUsernamesWithDomains !== null,
mentionedDomains: mentionedUsernamesWithDomains !== null ? [...new Set(mentionedUsernamesWithDomains.map(item => item.split('@')[2]))] : []
}; };
}; };

View File

@ -41,6 +41,7 @@ const en = {
"compose_form.sensitive": "Mark media as sensitive", "compose_form.sensitive": "Mark media as sensitive",
"compose_form.spoiler": "Hide text behind warning", "compose_form.spoiler": "Hide text behind warning",
"compose_form.private": "Mark as private", "compose_form.private": "Mark as private",
"compose_form.privacy_disclaimer": "Your private status will be delivered to mentioned users on {domains}. Do you trust {domainsCount, plural, one {that server} other {those servers}} to not leak your status?",
"compose_form.unlisted": "Do not display in public timeline", "compose_form.unlisted": "Do not display in public timeline",
"navigation_bar.edit_profile": "Edit profile", "navigation_bar.edit_profile": "Edit profile",
"navigation_bar.preferences": "Preferences", "navigation_bar.preferences": "Preferences",

View File

@ -78,6 +78,21 @@
color: $color1; color: $color1;
} }
.compose-form__warning {
color: $color2;
margin-bottom: 15px;
border: 1px solid $color3;
padding: 8px 10px;
border-radius: 4px;
font-size: 12px;
font-weight: 400;
strong {
color: $color5;
font-weight: 500;
}
}
.compose-form__label { .compose-form__label {
display: block; display: block;
line-height: 24px; line-height: 24px;