Add opt-in feature to have the spoilers field always on (fixes #634)
This commit is contained in:
		@@ -51,6 +51,7 @@ import { privacyPreference } from 'flavours/glitch/util/privacy_preference';
 | 
			
		||||
 | 
			
		||||
//  State mapping.
 | 
			
		||||
function mapStateToProps (state) {
 | 
			
		||||
  const spoilersAlwaysOn = state.getIn(['local_settings', 'always_show_spoilers_field']);
 | 
			
		||||
  const inReplyTo = state.getIn(['compose', 'in_reply_to']);
 | 
			
		||||
  const replyPrivacy = inReplyTo ? state.getIn(['statuses', inReplyTo, 'visibility']) : null;
 | 
			
		||||
  const sideArmBasePrivacy = state.getIn(['local_settings', 'side_arm']);
 | 
			
		||||
@@ -85,12 +86,13 @@ function mapStateToProps (state) {
 | 
			
		||||
    sideArm: sideArmPrivacy,
 | 
			
		||||
    sensitive: state.getIn(['compose', 'sensitive']),
 | 
			
		||||
    showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),
 | 
			
		||||
    spoiler: state.getIn(['compose', 'spoiler']),
 | 
			
		||||
    spoiler: spoilersAlwaysOn || state.getIn(['compose', 'spoiler']),
 | 
			
		||||
    spoilerText: state.getIn(['compose', 'spoiler_text']),
 | 
			
		||||
    suggestionToken: state.getIn(['compose', 'suggestion_token']),
 | 
			
		||||
    suggestions: state.getIn(['compose', 'suggestions']),
 | 
			
		||||
    text: state.getIn(['compose', 'text']),
 | 
			
		||||
    anyMedia: state.getIn(['compose', 'media_attachments']).size > 0,
 | 
			
		||||
    spoilersAlwaysOn: spoilersAlwaysOn,
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -376,6 +378,7 @@ class Composer extends React.Component {
 | 
			
		||||
      spoilerText,
 | 
			
		||||
      suggestions,
 | 
			
		||||
      text,
 | 
			
		||||
      spoilersAlwaysOn,
 | 
			
		||||
    } = this.props;
 | 
			
		||||
 | 
			
		||||
    let disabledButton = isSubmitting || isUploading || (!!text.length && !text.trim().length && !anyMedia);
 | 
			
		||||
@@ -443,7 +446,7 @@ class Composer extends React.Component {
 | 
			
		||||
          onDoodleOpen={onOpenDoodleModal}
 | 
			
		||||
          onModalClose={onCloseModal}
 | 
			
		||||
          onModalOpen={onOpenActionsModal}
 | 
			
		||||
          onToggleSpoiler={onChangeSpoilerness}
 | 
			
		||||
          onToggleSpoiler={spoilersAlwaysOn ? null : onChangeSpoilerness}
 | 
			
		||||
          onUpload={onUpload}
 | 
			
		||||
          privacy={privacy}
 | 
			
		||||
          resetFileKey={resetFileKey}
 | 
			
		||||
@@ -515,6 +518,7 @@ Composer.propTypes = {
 | 
			
		||||
  onUnmount: PropTypes.func,
 | 
			
		||||
  onUpload: PropTypes.func,
 | 
			
		||||
  anyMedia: PropTypes.bool,
 | 
			
		||||
  spoilersAlwaysOn: PropTypes.bool,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//  Connecting and export.
 | 
			
		||||
 
 | 
			
		||||
@@ -285,13 +285,15 @@ export default class ComposerOptions extends React.PureComponent {
 | 
			
		||||
          title={intl.formatMessage(messages.change_privacy)}
 | 
			
		||||
          value={privacy}
 | 
			
		||||
        />
 | 
			
		||||
        <TextIconButton
 | 
			
		||||
          active={spoiler}
 | 
			
		||||
          ariaControls='glitch.composer.spoiler.input'
 | 
			
		||||
          label='CW'
 | 
			
		||||
          onClick={onToggleSpoiler}
 | 
			
		||||
          title={intl.formatMessage(messages.spoiler)}
 | 
			
		||||
        />
 | 
			
		||||
        {onToggleSpoiler && (
 | 
			
		||||
          <TextIconButton
 | 
			
		||||
            active={spoiler}
 | 
			
		||||
            ariaControls='glitch.composer.spoiler.input'
 | 
			
		||||
            label='CW'
 | 
			
		||||
            onClick={onToggleSpoiler}
 | 
			
		||||
            title={intl.formatMessage(messages.spoiler)}
 | 
			
		||||
          />
 | 
			
		||||
        )}
 | 
			
		||||
        <Dropdown
 | 
			
		||||
          active={advancedOptions && advancedOptions.some(value => !!value)}
 | 
			
		||||
          disabled={disabled}
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,14 @@ export default class LocalSettingsPage extends React.PureComponent {
 | 
			
		||||
        </section>
 | 
			
		||||
        <section>
 | 
			
		||||
          <h2><FormattedMessage id='settings.compose_box_opts' defaultMessage='Compose box options' /></h2>
 | 
			
		||||
          <LocalSettingsPageItem
 | 
			
		||||
            settings={settings}
 | 
			
		||||
            item={['always_show_spoilers_field']}
 | 
			
		||||
            id='mastodon-settings--always_show_spoilers_field'
 | 
			
		||||
            onChange={onChange}
 | 
			
		||||
          >
 | 
			
		||||
            <FormattedMessage id='settings.always_show_spoilers_field' defaultMessage='Always enable the Content Warning field' />
 | 
			
		||||
          </LocalSettingsPageItem>
 | 
			
		||||
          <LocalSettingsPageItem
 | 
			
		||||
            settings={settings}
 | 
			
		||||
            item={['side_arm']}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ const initialState = ImmutableMap({
 | 
			
		||||
  side_arm  : 'none',
 | 
			
		||||
  side_arm_reply_mode : 'keep',
 | 
			
		||||
  show_reply_count : false,
 | 
			
		||||
  always_show_spoilers_field: false,
 | 
			
		||||
  collapsed : ImmutableMap({
 | 
			
		||||
    enabled     : true,
 | 
			
		||||
    auto        : ImmutableMap({
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user