layout_auto: { id: 'layout.auto', defaultMessage: 'Auto' },
layout_desktop: { id: 'layout.desktop', defaultMessage: 'Desktop' },
layout_mobile: { id: 'layout.single', defaultMessage: 'Mobile' },
+ side_arm_none: { id: 'settings.side_arm.none', defaultMessage: 'None' },
});
@injectIntl
>
<FormattedMessage id='settings.navbar_under' defaultMessage='Navbar at the bottom (Mobile only)' />
</LocalSettingsPageItem>
+ <section>
+ <h2><FormattedMessage id='settings.compose_box_opts' defaultMessage='Compose box options' /></h2>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['side_arm']}
+ id='mastodon-settings--side_arm'
+ options={[
+ { value: 'none', message: intl.formatMessage(messages.side_arm_none) },
+ { value: 'direct', message: intl.formatMessage({ id: 'privacy.direct.short' }) },
+ { value: 'private', message: intl.formatMessage({ id: 'privacy.private.short' }) },
+ { value: 'unlisted', message: intl.formatMessage({ id: 'privacy.unlisted.short' }) },
+ { value: 'public', message: intl.formatMessage({ id: 'privacy.public.short' }) },
+ ]}
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.side_arm' defaultMessage='Secondary toot button:' />
+ </LocalSettingsPageItem>
+ </section>
</div>
),
({ onChange, settings }) => (
onSubmit: PropTypes.func.isRequired,
onClearSuggestions: PropTypes.func.isRequired,
onFetchSuggestions: PropTypes.func.isRequired,
+ onPrivacyChange: PropTypes.func.isRequired,
onSuggestionSelected: PropTypes.func.isRequired,
onChangeSpoilerText: PropTypes.func.isRequired,
onPaste: PropTypes.func.isRequired,
onPickEmoji: PropTypes.func.isRequired,
showSearch: PropTypes.bool,
+ settings : ImmutablePropTypes.map.isRequired,
};
static defaultProps = {
}
}
+ handleSubmit2 = () => {
+ this.props.onPrivacyChange(this.props.settings.get('side_arm'));
+ this.handleSubmit();
+ }
+
handleSubmit = () => {
if (this.props.text !== this.autosuggestTextarea.textarea.value) {
// Something changed the text inside the textarea (e.g. browser extensions like Grammarly)
const maybeEye = (this.props.advanced_options && this.props.advanced_options.do_not_federate) ? ' 👁️' : '';
const text = [this.props.spoiler_text, countableText(this.props.text), maybeEye].join('');
+ const sideArmVisibility = this.props.settings.get('side_arm');
+ let showSideArm = sideArmVisibility !== 'none';
+
let publishText = '';
- if (this.props.privacy === 'private' || this.props.privacy === 'direct') {
- publishText = <span className='compose-form__publish-private'><i className='fa fa-lock' /> {intl.formatMessage(messages.publish)}</span>;
- } else {
- publishText = this.props.privacy !== 'unlisted' ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);
- }
+ const privacyIcons = {
+ none: '',
+ public: 'globe',
+ unlisted: 'unlock-alt',
+ private: 'lock',
+ direct: 'envelope',
+ };
+
+ publishText = (
+ <span>
+ {
+ (this.props.settings.get('stretch') || !showSideArm) ?
+ <i
+ className={`fa fa-${privacyIcons[this.props.privacy]}`}
+ style={{ paddingRight: '5px' }}
+ /> :
+ ''
+ }
+ {intl.formatMessage(messages.publish)}
+ </span>
+ );
+
+ // side-arm
+ let publishText2 = (
+ <i
+ className={`fa fa-${privacyIcons[sideArmVisibility]}`}
+ aria-label={`${intl.formatMessage(messages.publish)}: ${intl.formatMessage({ id: `privacy.${sideArmVisibility}.short` })}`}
+ />
+ );
+
+ const submitDisabled = disabled || this.props.is_uploading || length(text) > 500 || (text.length !== 0 && text.trim().length === 0);
return (
<div className='compose-form'>
<div className='compose-form__publish'>
<div className='character-counter__wrapper'><CharacterCounter max={500} text={text} /></div>
- <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabled || this.props.is_uploading || length(text) > 500 || (text.length !== 0 && text.trim().length === 0)} block /></div>
+ <div className='compose-form__publish-button-wrapper'>
+ {
+ showSideArm ?
+ <Button
+ className='compose-form__publish__side-arm'
+ text={publishText2}
+ onClick={this.handleSubmit2}
+ disabled={submitDisabled}
+ /> :
+ ''
+ }
+ <Button
+ className='compose-form__publish__primary'
+ text={publishText}
+ onClick={this.handleSubmit}
+ disabled={submitDisabled}
+ block
+ />
+ </div>
</div>
</div>
</div>
import { connect } from 'react-redux';
import ComposeForm from '../components/compose_form';
-import { uploadCompose } from '../../../actions/compose';
+import { changeComposeVisibility, uploadCompose } from '../../../actions/compose';
import {
changeCompose,
submitCompose,
is_uploading: state.getIn(['compose', 'is_uploading']),
me: state.getIn(['compose', 'me']),
showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),
+ settings: state.get('local_settings'),
});
const mapDispatchToProps = (dispatch) => ({
dispatch(changeCompose(text));
},
+ onPrivacyChange (value) {
+ dispatch(changeComposeVisibility(value));
+ },
+
onSubmit () {
dispatch(submitCompose());
},