forked from cybrespace/mastodon
		
	Improve public account cards (#6559)
- Add follow/unfollow/remote follow buttons - Format the bio properly - Always show username@domain, even for local accounts
This commit is contained in:
		
							parent
							
								
									c33931b613
								
							
						
					
					
						commit
						18513a978a
					
				
					 6 changed files with 73 additions and 51 deletions
				
			
		| 
						 | 
					@ -7,7 +7,9 @@ class FollowerAccountsController < ApplicationController
 | 
				
			||||||
    @follows = Follow.where(target_account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account)
 | 
					    @follows = Follow.where(target_account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    respond_to do |format|
 | 
					    respond_to do |format|
 | 
				
			||||||
      format.html
 | 
					      format.html do
 | 
				
			||||||
 | 
					        @relationships = AccountRelationshipsPresenter.new(@follows.map(&:account_id), current_user.account_id) if user_signed_in?
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      format.json do
 | 
					      format.json do
 | 
				
			||||||
        render json: collection_presenter,
 | 
					        render json: collection_presenter,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,9 @@ class FollowingAccountsController < ApplicationController
 | 
				
			||||||
    @follows = Follow.where(account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account)
 | 
					    @follows = Follow.where(account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    respond_to do |format|
 | 
					    respond_to do |format|
 | 
				
			||||||
      format.html
 | 
					      format.html do
 | 
				
			||||||
 | 
					        @relationships = AccountRelationshipsPresenter.new(@follows.map(&:target_account_id), current_user.account_id) if user_signed_in?
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      format.json do
 | 
					      format.json do
 | 
				
			||||||
        render json: collection_presenter,
 | 
					        render json: collection_presenter,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -97,32 +97,6 @@
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .controls {
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    top: 15px;
 | 
					 | 
				
			||||||
    left: 15px;
 | 
					 | 
				
			||||||
    z-index: 2;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    .icon-button {
 | 
					 | 
				
			||||||
      color: rgba($white, 0.8);
 | 
					 | 
				
			||||||
      text-decoration: none;
 | 
					 | 
				
			||||||
      font-size: 13px;
 | 
					 | 
				
			||||||
      line-height: 13px;
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      .fa {
 | 
					 | 
				
			||||||
        font-weight: 400;
 | 
					 | 
				
			||||||
        margin-right: 5px;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      &:hover,
 | 
					 | 
				
			||||||
      &:active,
 | 
					 | 
				
			||||||
      &:focus {
 | 
					 | 
				
			||||||
        color: $white;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  .roles {
 | 
					  .roles {
 | 
				
			||||||
    margin-bottom: 30px;
 | 
					    margin-bottom: 30px;
 | 
				
			||||||
    padding: 0 15px;
 | 
					    padding: 0 15px;
 | 
				
			||||||
| 
						 | 
					@ -226,6 +200,40 @@
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card,
 | 
				
			||||||
 | 
					.account-grid-card {
 | 
				
			||||||
 | 
					  .controls {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 15px;
 | 
				
			||||||
 | 
					    left: 15px;
 | 
				
			||||||
 | 
					    z-index: 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .icon-button {
 | 
				
			||||||
 | 
					      color: rgba($white, 0.8);
 | 
				
			||||||
 | 
					      text-decoration: none;
 | 
				
			||||||
 | 
					      font-size: 13px;
 | 
				
			||||||
 | 
					      line-height: 13px;
 | 
				
			||||||
 | 
					      font-weight: 500;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      .fa {
 | 
				
			||||||
 | 
					        font-weight: 400;
 | 
				
			||||||
 | 
					        margin-right: 5px;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      &:hover,
 | 
				
			||||||
 | 
					      &:active,
 | 
				
			||||||
 | 
					      &:focus {
 | 
				
			||||||
 | 
					        color: $white;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.account-grid-card .controls {
 | 
				
			||||||
 | 
					  left: auto;
 | 
				
			||||||
 | 
					  right: 15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.pagination {
 | 
					.pagination {
 | 
				
			||||||
  padding: 30px 0;
 | 
					  padding: 30px 0;
 | 
				
			||||||
  text-align: center;
 | 
					  text-align: center;
 | 
				
			||||||
| 
						 | 
					@ -411,13 +419,14 @@
 | 
				
			||||||
      font-weight: 400;
 | 
					      font-weight: 400;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .note {
 | 
					    .account__header__content {
 | 
				
			||||||
      padding: 10px 15px;
 | 
					      padding: 10px 15px;
 | 
				
			||||||
      padding-top: 15px;
 | 
					      padding-top: 15px;
 | 
				
			||||||
      box-sizing: border-box;
 | 
					 | 
				
			||||||
      color: lighten($ui-base-color, 26%);
 | 
					      color: lighten($ui-base-color, 26%);
 | 
				
			||||||
      word-wrap: break-word;
 | 
					      word-wrap: break-word;
 | 
				
			||||||
      min-height: 80px;
 | 
					      overflow: hidden;
 | 
				
			||||||
 | 
					      text-overflow: ellipsis;
 | 
				
			||||||
 | 
					      height: 5.5em;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										23
									
								
								app/views/accounts/_follow_button.html.haml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								app/views/accounts/_follow_button.html.haml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					- relationships ||= nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- unless account.memorial? || account.moved?
 | 
				
			||||||
 | 
					  - if user_signed_in?
 | 
				
			||||||
 | 
					    - requested = relationships ? relationships.requested[account.id].present? : current_account.requested?(account)
 | 
				
			||||||
 | 
					    - following = relationships ? relationships.following[account.id].present? : current_account.following?(account)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - if user_signed_in? && current_account.id != account.id && !requested
 | 
				
			||||||
 | 
					    .controls
 | 
				
			||||||
 | 
					      - if following
 | 
				
			||||||
 | 
					        = link_to account_unfollow_path(account), data: { method: :post }, class: 'icon-button' do
 | 
				
			||||||
 | 
					          = fa_icon 'user-times'
 | 
				
			||||||
 | 
					          = t('accounts.unfollow')
 | 
				
			||||||
 | 
					      - else
 | 
				
			||||||
 | 
					        = link_to account_follow_path(account), data: { method: :post }, class: 'icon-button' do
 | 
				
			||||||
 | 
					          = fa_icon 'user-plus'
 | 
				
			||||||
 | 
					          = t('accounts.follow')
 | 
				
			||||||
 | 
					  - elsif !user_signed_in?
 | 
				
			||||||
 | 
					    .controls
 | 
				
			||||||
 | 
					      .remote-follow
 | 
				
			||||||
 | 
					        = link_to account_remote_follow_path(account), class: 'icon-button' do
 | 
				
			||||||
 | 
					          = fa_icon 'user-plus'
 | 
				
			||||||
 | 
					          = t('accounts.remote_follow')
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,12 @@
 | 
				
			||||||
.account-grid-card
 | 
					.account-grid-card
 | 
				
			||||||
  .account-grid-card__header{ style: "background-image: url(#{account.header.url(:original)})" }
 | 
					  .account-grid-card__header{ style: "background-image: url(#{account.header.url(:original)})" }
 | 
				
			||||||
 | 
					    = render 'accounts/follow_button', account: account, relationships: @relationships
 | 
				
			||||||
  .account-grid-card__avatar
 | 
					  .account-grid-card__avatar
 | 
				
			||||||
    .avatar= image_tag account.avatar.url(:original)
 | 
					    .avatar= image_tag account.avatar.url(:original)
 | 
				
			||||||
  .name
 | 
					  .name
 | 
				
			||||||
    = link_to TagManager.instance.url_for(account) do
 | 
					    = link_to TagManager.instance.url_for(account) do
 | 
				
			||||||
      %span.display_name.emojify= display_name(account)
 | 
					      %span.display_name.emojify= display_name(account)
 | 
				
			||||||
      %span.username @#{account.acct}
 | 
					      %span.username
 | 
				
			||||||
  %p.note.emojify= truncate(strip_tags(account.note), length: 150)
 | 
					        @#{account.local? ? account.local_username_and_domain : account.acct}
 | 
				
			||||||
 | 
					        = fa_icon('lock') if account.locked?
 | 
				
			||||||
 | 
					  .account__header__content.p-note.emojify= Formatter.instance.simplified_format(account)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,23 +1,6 @@
 | 
				
			||||||
.card.h-card.p-author{ style: "background-image: url(#{account.header.url(:original)})" }
 | 
					.card.h-card.p-author{ style: "background-image: url(#{account.header.url(:original)})" }
 | 
				
			||||||
  .card__illustration
 | 
					  .card__illustration
 | 
				
			||||||
    - unless account.memorial? || account.moved?
 | 
					    = render 'accounts/follow_button', account: account
 | 
				
			||||||
      - if user_signed_in? && current_account.id != account.id && !current_account.requested?(account)
 | 
					 | 
				
			||||||
        .controls
 | 
					 | 
				
			||||||
          - if current_account.following?(account)
 | 
					 | 
				
			||||||
            = link_to account_unfollow_path(account), data: { method: :post }, class: 'icon-button' do
 | 
					 | 
				
			||||||
              = fa_icon 'user-times'
 | 
					 | 
				
			||||||
              = t('accounts.unfollow')
 | 
					 | 
				
			||||||
          - else
 | 
					 | 
				
			||||||
            = link_to account_follow_path(account), data: { method: :post }, class: 'icon-button' do
 | 
					 | 
				
			||||||
              = fa_icon 'user-plus'
 | 
					 | 
				
			||||||
              = t('accounts.follow')
 | 
					 | 
				
			||||||
      - elsif !user_signed_in?
 | 
					 | 
				
			||||||
        .controls
 | 
					 | 
				
			||||||
          .remote-follow
 | 
					 | 
				
			||||||
            = link_to account_remote_follow_path(account), class: 'icon-button' do
 | 
					 | 
				
			||||||
              = fa_icon 'user-plus'
 | 
					 | 
				
			||||||
              = t('accounts.remote_follow')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    .avatar= image_tag account.avatar.url(:original), class: 'u-photo'
 | 
					    .avatar= image_tag account.avatar.url(:original), class: 'u-photo'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .card__bio
 | 
					  .card__bio
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue