Make the "mark media as sensitive" button more obvious in web UI (#10673)
* Make the "mark media as sensitive" button more obvious in web UI * Use eye-slash icon instead of eye icon to mean "hide"
This commit is contained in:
		
							parent
							
								
									967e419f8f
								
							
						
					
					
						commit
						05ef3462ba
					
				
					 6 changed files with 19 additions and 35 deletions
				
			
		|  | @ -314,7 +314,7 @@ class MediaGallery extends React.PureComponent { | |||
|     } | ||||
| 
 | ||||
|     if (visible) { | ||||
|       spoilerButton = <IconButton title={intl.formatMessage(messages.toggle_visible)} icon={visible ? 'eye' : 'eye-slash'} overlay onClick={this.handleOpen} />; | ||||
|       spoilerButton = <IconButton title={intl.formatMessage(messages.toggle_visible)} icon='eye-slash' overlay onClick={this.handleOpen} />; | ||||
|     } else { | ||||
|       spoilerButton = ( | ||||
|         <button type='button' onClick={this.handleOpen} className='spoiler-button__overlay'> | ||||
|  |  | |||
|  | @ -10,7 +10,6 @@ import UploadButtonContainer from '../containers/upload_button_container'; | |||
| import { defineMessages, injectIntl } from 'react-intl'; | ||||
| import SpoilerButtonContainer from '../containers/spoiler_button_container'; | ||||
| import PrivacyDropdownContainer from '../containers/privacy_dropdown_container'; | ||||
| import SensitiveButtonContainer from '../containers/sensitive_button_container'; | ||||
| import EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container'; | ||||
| import PollFormContainer from '../containers/poll_form_container'; | ||||
| import UploadFormContainer from '../containers/upload_form_container'; | ||||
|  | @ -214,7 +213,6 @@ class ComposeForm extends ImmutablePureComponent { | |||
|             <UploadButtonContainer /> | ||||
|             <PollButtonContainer /> | ||||
|             <PrivacyDropdownContainer /> | ||||
|             <SensitiveButtonContainer /> | ||||
|             <SpoilerButtonContainer /> | ||||
|           </div> | ||||
|           <div className='character-counter__wrapper'><CharacterCounter max={500} text={text} /></div> | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; | |||
| import UploadProgressContainer from '../containers/upload_progress_container'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| import UploadContainer from '../containers/upload_container'; | ||||
| import SensitiveButtonContainer from '../containers/sensitive_button_container'; | ||||
| 
 | ||||
| export default class UploadForm extends ImmutablePureComponent { | ||||
| 
 | ||||
|  | @ -22,6 +23,8 @@ export default class UploadForm extends ImmutablePureComponent { | |||
|             <UploadContainer id={id} key={id} /> | ||||
|           ))} | ||||
|         </div> | ||||
| 
 | ||||
|         {!mediaIds.isEmpty() && <SensitiveButtonContainer />} | ||||
|       </div> | ||||
|     ); | ||||
|   } | ||||
|  |  | |||
|  | @ -2,11 +2,9 @@ import React from 'react'; | |||
| import { connect } from 'react-redux'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import classNames from 'classnames'; | ||||
| import IconButton from '../../../components/icon_button'; | ||||
| import { changeComposeSensitivity } from '../../../actions/compose'; | ||||
| import Motion from '../../ui/util/optional_motion'; | ||||
| import spring from 'react-motion/lib/spring'; | ||||
| import { injectIntl, defineMessages } from 'react-intl'; | ||||
| import { changeComposeSensitivity } from 'mastodon/actions/compose'; | ||||
| import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; | ||||
| import Icon from 'mastodon/components/icon'; | ||||
| 
 | ||||
| const messages = defineMessages({ | ||||
|   marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' }, | ||||
|  | @ -14,7 +12,6 @@ const messages = defineMessages({ | |||
| }); | ||||
| 
 | ||||
| const mapStateToProps = state => ({ | ||||
|   visible: state.getIn(['compose', 'media_attachments']).size > 0, | ||||
|   active: state.getIn(['compose', 'sensitive']), | ||||
|   disabled: state.getIn(['compose', 'spoiler']), | ||||
| }); | ||||
|  | @ -30,7 +27,6 @@ const mapDispatchToProps = dispatch => ({ | |||
| class SensitiveButton extends React.PureComponent { | ||||
| 
 | ||||
|   static propTypes = { | ||||
|     visible: PropTypes.bool, | ||||
|     active: PropTypes.bool, | ||||
|     disabled: PropTypes.bool, | ||||
|     onClick: PropTypes.func.isRequired, | ||||
|  | @ -38,32 +34,14 @@ class SensitiveButton extends React.PureComponent { | |||
|   }; | ||||
| 
 | ||||
|   render () { | ||||
|     const { visible, active, disabled, onClick, intl } = this.props; | ||||
|     const { active, disabled, onClick, intl } = this.props; | ||||
| 
 | ||||
|     return ( | ||||
|       <Motion defaultStyle={{ scale: 0.87 }} style={{ scale: spring(visible ? 1 : 0.87, { stiffness: 200, damping: 3 }) }}> | ||||
|         {({ scale }) => { | ||||
|           const icon = active ? 'eye-slash' : 'eye'; | ||||
|           const className = classNames('compose-form__sensitive-button', { | ||||
|             'compose-form__sensitive-button--visible': visible, | ||||
|           }); | ||||
|           return ( | ||||
|             <div className={className} style={{ transform: `scale(${scale})` }}> | ||||
|               <IconButton | ||||
|                 className='compose-form__sensitive-button__icon' | ||||
|                 title={intl.formatMessage(active ? messages.marked : messages.unmarked)} | ||||
|                 icon={icon} | ||||
|                 onClick={onClick} | ||||
|                 size={18} | ||||
|                 active={active} | ||||
|                 disabled={disabled} | ||||
|                 style={{ lineHeight: null, height: null }} | ||||
|                 inverted | ||||
|               /> | ||||
|             </div> | ||||
|           ); | ||||
|         }} | ||||
|       </Motion> | ||||
|       <div className='compose-form__sensitive-button'> | ||||
|         <button className={classNames('icon-button', { active })} onClick={onClick} disabled={disabled} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}> | ||||
|           <Icon id='eye-slash' /> <FormattedMessage id='compose_form.sensitive.hide' defaultMessage='Mark media as sensitive' /> | ||||
|         </button> | ||||
|       </div> | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -472,7 +472,7 @@ class Video extends React.PureComponent { | |||
|             </div> | ||||
| 
 | ||||
|             <div className='video-player__buttons right'> | ||||
|               {!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye' fixedWidth /></button>} | ||||
|               {!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} | ||||
|               {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>} | ||||
|               {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>} | ||||
|               <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button> | ||||
|  |  | |||
|  | @ -264,6 +264,11 @@ | |||
| .compose-form { | ||||
|   padding: 10px; | ||||
| 
 | ||||
|   &__sensitive-button { | ||||
|     padding: 10px; | ||||
|     padding-top: 0; | ||||
|   } | ||||
| 
 | ||||
|   .compose-form__warning { | ||||
|     color: $inverted-text-color; | ||||
|     margin-bottom: 10px; | ||||
|  |  | |||
		Reference in a new issue