Browse Source

Improve public account cards (#6559)

- Add follow/unfollow/remote follow buttons
- Format the bio properly
- Always show username@domain, even for local accounts
master
Eugen Rochko 6 years ago
committed by GitHub
parent
commit
18513a978a
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 73 additions and 51 deletions
  1. +3
    -1
      app/controllers/follower_accounts_controller.rb
  2. +3
    -1
      app/controllers/following_accounts_controller.rb
  3. +38
    -29
      app/javascript/styles/mastodon/accounts.scss
  4. +23
    -0
      app/views/accounts/_follow_button.html.haml
  5. +5
    -2
      app/views/accounts/_grid_card.html.haml
  6. +1
    -18
      app/views/accounts/_header.html.haml

+ 3
- 1
app/controllers/follower_accounts_controller.rb View File

@ -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,

+ 3
- 1
app/controllers/following_accounts_controller.rb View File

@ -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,

+ 38
- 29
app/javascript/styles/mastodon/accounts.scss View File

@ -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
- 0
app/views/accounts/_follow_button.html.haml View 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')

+ 5
- 2
app/views/accounts/_grid_card.html.haml View File

@ -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}
%p.note.emojify= truncate(strip_tags(account.note), length: 150)
%span.username
@#{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
- 18
app/views/accounts/_header.html.haml View File

@ -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?
- 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')
= render 'accounts/follow_button', account: account
.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…
Cancel
Save