6dca1432e8
rel=me links allow cross-linking of user's identities. This behavior is used by software to determine if user controls profiles on two different sites. For example Mastodon uses it to display verified badge on links. Both Twitter and GitHub automatically add rel=me to links added to users' profiles. See: https://www.zylstra.org/blog/2018/10/mastodon-rel-me/ See: http://microformats.org/wiki/rel-me
160 lines
6.9 KiB
Text
160 lines
6.9 KiB
Text
- @hide_top_links = true
|
|
- @hide_breadcrumbs = true
|
|
- page_title @user.name
|
|
- page_description @user.bio
|
|
- header_title @user.name, user_path(@user)
|
|
- @no_container = true
|
|
|
|
= content_for :meta_tags do
|
|
= auto_discovery_link_tag(:atom, user_url(@user, format: :atom), title: "#{@user.name} activity")
|
|
|
|
.user-profile
|
|
.cover-block.user-cover-block.top-area
|
|
.cover-controls
|
|
- if @user == current_user
|
|
= link_to profile_path, class: 'btn btn-default has-tooltip', title: s_('UserProfile|Edit profile'), 'aria-label': 'Edit profile' do
|
|
= icon('pencil')
|
|
- elsif current_user
|
|
- if @user.abuse_report
|
|
%button.btn.btn-danger{ title: s_('UserProfile|Already reported for abuse'),
|
|
data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } }
|
|
= icon('exclamation-circle')
|
|
- else
|
|
= link_to new_abuse_report_path(user_id: @user.id, ref_url: request.referrer), class: 'btn',
|
|
title: s_('UserProfile|Report abuse'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do
|
|
= icon('exclamation-circle')
|
|
- if can?(current_user, :read_user_profile, @user)
|
|
= link_to user_path(@user, rss_url_options), class: 'btn btn-default has-tooltip', title: s_('UserProfile|Subscribe'), 'aria-label': 'Subscribe' do
|
|
= icon('rss')
|
|
- if current_user && current_user.admin?
|
|
= link_to [:admin, @user], class: 'btn btn-default', title: s_('UserProfile|View user in admin area'),
|
|
data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
|
|
= icon('users')
|
|
|
|
.profile-header{ class: [('with-no-profile-tabs' if profile_tabs.empty?)] }
|
|
.avatar-holder
|
|
= link_to avatar_icon_for_user(@user, 400), target: '_blank', rel: 'noopener noreferrer' do
|
|
= image_tag avatar_icon_for_user(@user, 90), class: "avatar s90", alt: ''
|
|
|
|
.user-info
|
|
.cover-title
|
|
= @user.name
|
|
|
|
- if @user.status
|
|
.cover-status
|
|
= emoji_icon(@user.status.emoji)
|
|
= markdown_field(@user.status, :message)
|
|
|
|
.cover-desc.member-date
|
|
%p
|
|
%span.middle-dot-divider
|
|
@#{@user.username}
|
|
- if can?(current_user, :read_user_profile, @user)
|
|
%span.middle-dot-divider
|
|
= s_('Member since %{date}') % { date: @user.created_at.to_date.to_s(:long) }
|
|
|
|
.cover-desc
|
|
- unless @user.public_email.blank?
|
|
.profile-link-holder.middle-dot-divider
|
|
= link_to @user.public_email, "mailto:#{@user.public_email}", class: 'text-link'
|
|
- unless @user.skype.blank?
|
|
.profile-link-holder.middle-dot-divider
|
|
= link_to "skype:#{@user.skype}", title: "Skype" do
|
|
= icon('skype')
|
|
- unless @user.linkedin.blank?
|
|
.profile-link-holder.middle-dot-divider
|
|
= link_to linkedin_url(@user), title: "LinkedIn", target: '_blank', rel: 'noopener noreferrer nofollow' do
|
|
= icon('linkedin-square')
|
|
- unless @user.twitter.blank?
|
|
.profile-link-holder.middle-dot-divider
|
|
= link_to twitter_url(@user), title: "Twitter", target: '_blank', rel: 'noopener noreferrer nofollow' do
|
|
= icon('twitter-square')
|
|
- unless @user.website_url.blank?
|
|
.profile-link-holder.middle-dot-divider
|
|
= link_to @user.short_website_url, @user.full_website_url, class: 'text-link', target: '_blank', rel: 'me noopener noreferrer nofollow'
|
|
- unless @user.location.blank?
|
|
.profile-link-holder.middle-dot-divider
|
|
= icon('map-marker')
|
|
= @user.location
|
|
- unless @user.organization.blank?
|
|
.profile-link-holder.middle-dot-divider
|
|
= icon('briefcase')
|
|
= @user.organization
|
|
|
|
- if @user.bio.present?
|
|
.cover-desc
|
|
%p.profile-user-bio
|
|
= @user.bio
|
|
|
|
- unless profile_tabs.empty?
|
|
.scrolling-tabs-container
|
|
.fade-left= icon('angle-left')
|
|
.fade-right= icon('angle-right')
|
|
%ul.nav-links.user-profile-nav.scrolling-tabs.nav.nav-tabs
|
|
- if profile_tab?(:overview)
|
|
%li.js-overview-tab
|
|
= link_to user_path, data: { target: 'div#js-overview', action: 'overview', toggle: 'tab' } do
|
|
= s_('UserProfile|Overview')
|
|
- if profile_tab?(:activity)
|
|
%li.js-activity-tab
|
|
= link_to user_activity_path, data: { target: 'div#activity', action: 'activity', toggle: 'tab' } do
|
|
= s_('UserProfile|Activity')
|
|
- if profile_tab?(:groups)
|
|
%li.js-groups-tab
|
|
= link_to user_groups_path, data: { target: 'div#groups', action: 'groups', toggle: 'tab', endpoint: user_groups_path(format: :json) } do
|
|
= s_('UserProfile|Groups')
|
|
- if profile_tab?(:contributed)
|
|
%li.js-contributed-tab
|
|
= link_to user_contributed_projects_path, data: { target: 'div#contributed', action: 'contributed', toggle: 'tab', endpoint: user_contributed_projects_path(format: :json) } do
|
|
= s_('UserProfile|Contributed projects')
|
|
- if profile_tab?(:projects)
|
|
%li.js-projects-tab
|
|
= link_to user_projects_path, data: { target: 'div#projects', action: 'projects', toggle: 'tab', endpoint: user_projects_path(format: :json) } do
|
|
= s_('UserProfile|Personal projects')
|
|
- if profile_tab?(:snippets)
|
|
%li.js-snippets-tab
|
|
= link_to user_snippets_path, data: { target: 'div#snippets', action: 'snippets', toggle: 'tab', endpoint: user_snippets_path(format: :json) } do
|
|
= s_('UserProfile|Snippets')
|
|
|
|
%div{ class: container_class }
|
|
.tab-content
|
|
- if profile_tab?(:overview)
|
|
#js-overview.tab-pane
|
|
= render "users/overview"
|
|
|
|
- if profile_tab?(:activity)
|
|
#activity.tab-pane
|
|
- if can?(current_user, :read_cross_project)
|
|
%h4.prepend-top-20
|
|
= s_('UserProfile|Most Recent Activity')
|
|
.content_list{ data: { href: user_path } }
|
|
= spinner
|
|
|
|
- if profile_tab?(:groups)
|
|
#groups.tab-pane
|
|
-# This tab is always loaded via AJAX
|
|
|
|
- if profile_tab?(:contributed)
|
|
#contributed.tab-pane
|
|
-# This tab is always loaded via AJAX
|
|
|
|
- if profile_tab?(:projects)
|
|
#projects.tab-pane
|
|
-# This tab is always loaded via AJAX
|
|
|
|
- if profile_tab?(:snippets)
|
|
#snippets.tab-pane
|
|
-# This tab is always loaded via AJAX
|
|
|
|
.loading-status
|
|
= spinner
|
|
|
|
- if profile_tabs.empty?
|
|
.row
|
|
.col-12
|
|
.svg-content
|
|
= image_tag 'illustrations/profile_private_mode.svg'
|
|
.col-12.text-center
|
|
.text-content
|
|
%h4
|
|
= s_('UserProfile|This user has a private profile')
|