Add API modifiers to limit returned toots from public/hashtag timelines
to only those from local users; Add link to "extended information" to getting started in the UI; Add defaults for posting privacy; Change how publish button looks depending on posting privacy chosen
This commit is contained in:
		
							parent
							
								
									4d2be9f432
								
							
						
					
					
						commit
						347a153b3d
					
				
					 15 changed files with 55 additions and 34 deletions
				
			
		| 
						 | 
				
			
			@ -9,6 +9,7 @@ const Button = React.createClass({
 | 
			
		|||
    block: React.PropTypes.bool,
 | 
			
		||||
    secondary: React.PropTypes.bool,
 | 
			
		||||
    size: React.PropTypes.number,
 | 
			
		||||
    children: React.PropTypes.node
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  getDefaultProps () {
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +39,6 @@ const Button = React.createClass({
 | 
			
		|||
      fontSize: '14px',
 | 
			
		||||
      fontWeight: '500',
 | 
			
		||||
      letterSpacing: '0',
 | 
			
		||||
      textTransform: 'uppercase',
 | 
			
		||||
      padding: `0 ${this.props.size / 2.25}px`,
 | 
			
		||||
      height: `${this.props.size}px`,
 | 
			
		||||
      cursor: 'pointer',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -117,9 +117,10 @@ const ComposeForm = React.createClass({
 | 
			
		|||
  },
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { intl } = this.props;
 | 
			
		||||
    let replyArea  = '';
 | 
			
		||||
    const disabled = this.props.is_submitting || this.props.is_uploading;
 | 
			
		||||
    const { intl }  = this.props;
 | 
			
		||||
    let replyArea   = '';
 | 
			
		||||
    let publishText = '';
 | 
			
		||||
    const disabled  = this.props.is_submitting || this.props.is_uploading;
 | 
			
		||||
 | 
			
		||||
    if (this.props.in_reply_to) {
 | 
			
		||||
      replyArea = <ReplyIndicator status={this.props.in_reply_to} onCancel={this.props.onCancelReply} />;
 | 
			
		||||
| 
						 | 
				
			
			@ -127,6 +128,12 @@ const ComposeForm = React.createClass({
 | 
			
		|||
 | 
			
		||||
    let reply_to_other = !!this.props.in_reply_to && (this.props.in_reply_to.getIn(['account', 'id']) !== this.props.me);
 | 
			
		||||
 | 
			
		||||
    if (this.props.private) {
 | 
			
		||||
      publishText = <span><i className='fa fa-lock' /> {intl.formatMessage(messages.publish)}</span>;
 | 
			
		||||
    } else {
 | 
			
		||||
      publishText = intl.formatMessage(messages.publish) + (!this.props.unlisted ? '!' : '');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div style={{ padding: '10px' }}>
 | 
			
		||||
        <Motion defaultStyle={{ opacity: !this.props.spoiler ? 0 : 100, height: !this.props.spoiler ? 50 : 0 }} style={{ opacity: spring(!this.props.spoiler ? 0 : 100), height: spring(!this.props.spoiler ? 0 : 50) }}>
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +161,7 @@ const ComposeForm = React.createClass({
 | 
			
		|||
        />
 | 
			
		||||
 | 
			
		||||
        <div style={{ marginTop: '10px', overflow: 'hidden' }}>
 | 
			
		||||
          <div style={{ float: 'right' }}><Button text={intl.formatMessage(messages.publish)} onClick={this.handleSubmit} disabled={disabled} /></div>
 | 
			
		||||
          <div style={{ float: 'right' }}><Button text={publishText} onClick={this.handleSubmit} disabled={disabled} /></div>
 | 
			
		||||
          <div style={{ float: 'right', marginRight: '16px', lineHeight: '36px' }}><CharacterCounter max={500} text={[this.props.spoiler_text, this.props.text].join('')} /></div>
 | 
			
		||||
          <UploadButtonContainer style={{ paddingTop: '4px' }} />
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,14 +26,14 @@ const makeMapStateToProps = () => {
 | 
			
		|||
      sensitive: state.getIn(['compose', 'sensitive']),
 | 
			
		||||
      spoiler: state.getIn(['compose', 'spoiler']),
 | 
			
		||||
      spoiler_text: state.getIn(['compose', 'spoiler_text']),
 | 
			
		||||
      unlisted: state.getIn(['compose', 'unlisted']),
 | 
			
		||||
      unlisted: state.getIn(['compose', 'unlisted'], ),
 | 
			
		||||
      private: state.getIn(['compose', 'private']),
 | 
			
		||||
      fileDropDate: state.getIn(['compose', 'fileDropDate']),
 | 
			
		||||
      is_submitting: state.getIn(['compose', 'is_submitting']),
 | 
			
		||||
      is_uploading: state.getIn(['compose', 'is_uploading']),
 | 
			
		||||
      in_reply_to: getStatus(state, state.getIn(['compose', 'in_reply_to'])),
 | 
			
		||||
      media_count: state.getIn(['compose', 'media_attachments']).size,
 | 
			
		||||
      me: state.getIn(['compose', 'me'])
 | 
			
		||||
      me: state.getIn(['compose', 'me']),
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,8 @@ const messages = defineMessages({
 | 
			
		|||
  follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
 | 
			
		||||
  sign_out: { id: 'navigation_bar.logout', defaultMessage: 'Sign out' },
 | 
			
		||||
  favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
 | 
			
		||||
  blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' }
 | 
			
		||||
  blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
 | 
			
		||||
  info: { id: 'navigation_bar.info', defaultMessage: 'Extended information' }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const mapStateToProps = state => ({
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +35,7 @@ const GettingStarted = ({ intl, me }) => {
 | 
			
		|||
        <ColumnLink icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />
 | 
			
		||||
        {followRequests}
 | 
			
		||||
        <ColumnLink icon='users' text={intl.formatMessage(messages.blocks)} to='/blocks' />
 | 
			
		||||
        <ColumnLink icon='book' text={intl.formatMessage(messages.info)} href='/about/more' />
 | 
			
		||||
        <ColumnLink icon='sign-out' text={intl.formatMessage(messages.sign_out)} href='/auth/sign_out' method='delete' />
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@ const initialState = Immutable.Map({
 | 
			
		|||
  suggestion_token: null,
 | 
			
		||||
  suggestions: Immutable.List(),
 | 
			
		||||
  me: null,
 | 
			
		||||
  default_privacy: 'public',
 | 
			
		||||
  resetFileKey: Math.floor((Math.random() * 0x10000))
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -64,6 +65,8 @@ function clearAll(state) {
 | 
			
		|||
    map.set('spoiler_text', '');
 | 
			
		||||
    map.set('is_submitting', false);
 | 
			
		||||
    map.set('in_reply_to', null);
 | 
			
		||||
    map.set('unlisted', state.get('default_privacy') === 'unlisted');
 | 
			
		||||
    map.set('private', state.get('default_privacy') === 'private');
 | 
			
		||||
    map.update('media_attachments', list => list.clear());
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +100,7 @@ const insertSuggestion = (state, position, token, completion) => {
 | 
			
		|||
export default function compose(state = initialState, action) {
 | 
			
		||||
  switch(action.type) {
 | 
			
		||||
  case STORE_HYDRATE:
 | 
			
		||||
    return state.merge(action.state.get('compose'));
 | 
			
		||||
    return clearAll(state.merge(action.state.get('compose')));
 | 
			
		||||
  case COMPOSE_MOUNT:
 | 
			
		||||
    return state.set('mounted', true);
 | 
			
		||||
  case COMPOSE_UNMOUNT:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue