mirror of
				https://github.com/lunaisnotaboy/mastodon.git
				synced 2025-11-04 06:45:01 +00:00 
			
		
		
		
	Add sign-up button to logged-out web UI (#19250)
This commit is contained in:
		
							parent
							
								
									43b5d5e38d
								
							
						
					
					
						commit
						e623c302d5
					
				| 
						 | 
				
			
			@ -17,6 +17,7 @@ class ColumnHeader extends React.PureComponent {
 | 
			
		|||
 | 
			
		||||
  static contextTypes = {
 | 
			
		||||
    router: PropTypes.object,
 | 
			
		||||
    identity: PropTypes.object,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +146,7 @@ class ColumnHeader extends React.PureComponent {
 | 
			
		|||
      collapsedContent.push(moveButtons);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (children || (multiColumn && this.props.onPin)) {
 | 
			
		||||
    if (this.context.identity.signedIn && (children || (multiColumn && this.props.onPin))) {
 | 
			
		||||
      collapseButton = (
 | 
			
		||||
        <button
 | 
			
		||||
          className={collapsibleButtonClassName}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,10 @@ const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => {
 | 
			
		|||
export default @injectIntl
 | 
			
		||||
class Poll extends ImmutablePureComponent {
 | 
			
		||||
 | 
			
		||||
  static contextTypes = {
 | 
			
		||||
    identity: PropTypes.object,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
    poll: ImmutablePropTypes.map,
 | 
			
		||||
    intl: PropTypes.object.isRequired,
 | 
			
		||||
| 
						 | 
				
			
			@ -217,7 +221,7 @@ class Poll extends ImmutablePureComponent {
 | 
			
		|||
        </ul>
 | 
			
		||||
 | 
			
		||||
        <div className='poll__footer'>
 | 
			
		||||
          {!showResults && <button className='button button-secondary' disabled={disabled} onClick={this.handleVote}><FormattedMessage id='poll.vote' defaultMessage='Vote' /></button>}
 | 
			
		||||
          {!showResults && <button className='button button-secondary' disabled={disabled || !this.context.identity.signedIn} onClick={this.handleVote}><FormattedMessage id='poll.vote' defaultMessage='Vote' /></button>}
 | 
			
		||||
          {showResults && !this.props.disabled && <span><button className='poll__link' onClick={this.handleRefresh}><FormattedMessage id='poll.refresh' defaultMessage='Refresh' /></button> · </span>}
 | 
			
		||||
          {votesCount}
 | 
			
		||||
          {poll.get('expires_at') && <span> · {timeRemaining}</span>}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ class StatusContent extends React.PureComponent {
 | 
			
		|||
 | 
			
		||||
  static contextTypes = {
 | 
			
		||||
    router: PropTypes.object,
 | 
			
		||||
    identity: PropTypes.object,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +181,7 @@ class StatusContent extends React.PureComponent {
 | 
			
		|||
    const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden;
 | 
			
		||||
    const renderReadMore = this.props.onClick && status.get('collapsed');
 | 
			
		||||
    const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']);
 | 
			
		||||
    const renderTranslate = this.props.onTranslate && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('contentHtml').length > 0 && intl.locale !== status.get('language');
 | 
			
		||||
    const renderTranslate = this.context.identity.signedIn && this.props.onTranslate && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('contentHtml').length > 0 && intl.locale !== status.get('language');
 | 
			
		||||
    const language = preloadedLanguages.find(lang => lang[0] === status.get('language'));
 | 
			
		||||
    const languageName = language ? language[2] : status.get('language');
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ class LinkFooter extends React.PureComponent {
 | 
			
		|||
      items.push(<a key='invites' href='/invites' target='_blank'><FormattedMessage id='getting_started.invite' defaultMessage='Invite people' /></a>);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (withHotkeys) {
 | 
			
		||||
    if (signedIn && withHotkeys) {
 | 
			
		||||
      items.push(<Link key='hotkeys' to='/keyboard-shortcuts'><FormattedMessage id='navigation_bar.keyboard_shortcuts' defaultMessage='Hotkeys' /></Link>);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,12 @@
 | 
			
		|||
import React from 'react';
 | 
			
		||||
import { FormattedMessage } from 'react-intl';
 | 
			
		||||
import { registrationsOpen } from 'mastodon/initial_state';
 | 
			
		||||
 | 
			
		||||
const SignInBanner = () => (
 | 
			
		||||
  <div className='sign-in-banner'>
 | 
			
		||||
    <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.' /></p>
 | 
			
		||||
    <a href='/auth/sign_in' className='button button--block'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Sign in' /></a>
 | 
			
		||||
    <a href={registrationsOpen ? '/auth/sign_up' : 'https://joinmastodon.org/servers'} className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' /></a>
 | 
			
		||||
  </div>
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ export const deleteModal = getMeta('delete_modal');
 | 
			
		|||
export const me = getMeta('me');
 | 
			
		||||
export const searchEnabled = getMeta('search_enabled');
 | 
			
		||||
export const limitedFederationMode = getMeta('limited_federation_mode');
 | 
			
		||||
export const registrationsOpen = getMeta('registrations_open');
 | 
			
		||||
export const repository = getMeta('repository');
 | 
			
		||||
export const source_url = getMeta('source_url');
 | 
			
		||||
export const version = getMeta('version');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,6 +134,26 @@
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  &.button-tertiary {
 | 
			
		||||
    background: transparent;
 | 
			
		||||
    padding: 6px 17px;
 | 
			
		||||
    color: $highlight-text-color;
 | 
			
		||||
    border: 1px solid $highlight-text-color;
 | 
			
		||||
 | 
			
		||||
    &:active,
 | 
			
		||||
    &:focus,
 | 
			
		||||
    &:hover {
 | 
			
		||||
      background: $ui-highlight-color;
 | 
			
		||||
      color: $primary-text-color;
 | 
			
		||||
      border: 0;
 | 
			
		||||
      padding: 7px 18px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:disabled {
 | 
			
		||||
      opacity: 0.5;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  &.button--block {
 | 
			
		||||
    display: block;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
| 
						 | 
				
			
			@ -708,6 +728,10 @@
 | 
			
		|||
    color: $darker-text-color;
 | 
			
		||||
    margin-bottom: 20px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .button {
 | 
			
		||||
    margin-bottom: 10px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.emojione {
 | 
			
		||||
| 
						 | 
				
			
			@ -3671,6 +3695,11 @@ a.status-card.compact:hover {
 | 
			
		|||
      background: lighten($ui-base-color, 8%);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  &:disabled {
 | 
			
		||||
    color: $dark-text-color;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.column-header__collapsible {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@ class InitialStateSerializer < ActiveModel::Serializer
 | 
			
		|||
      mascot: instance_presenter.mascot&.file&.url,
 | 
			
		||||
      profile_directory: Setting.profile_directory,
 | 
			
		||||
      trends: Setting.trends,
 | 
			
		||||
      registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if object.current_account
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue