debian-mirror-gitlab/app/views/users/show.html.haml

234 lines
12 KiB
Text
Raw Normal View History

2017-09-10 17:25:29 +05:30
- @hide_top_links = true
- @hide_breadcrumbs = true
2019-12-04 20:38:33 +05:30
- @no_container = true
2021-02-22 17:27:13 +05:30
- page_title user_display_name(@user)
2022-01-26 12:08:38 +05:30
- page_description @user.bio unless @user.blocked? || !@user.confirmed?
2021-01-29 00:20:46 +05:30
- page_itemtype 'http://schema.org/Person'
2022-08-27 11:52:29 +05:30
- add_page_specific_style 'page_bundles/profile'
2020-04-08 14:13:33 +05:30
- link_classes = "flex-grow-1 mx-1 "
2015-09-11 14:41:01 +05:30
= content_for :meta_tags do
= auto_discovery_link_tag(:atom, user_url(@user, format: :atom), title: "#{@user.name} activity")
2016-06-02 11:05:42 +05:30
.user-profile
2019-09-30 21:07:59 +05:30
.cover-block.user-cover-block{ class: [('border-bottom' if profile_tabs.empty?)] }
2020-04-08 14:13:33 +05:30
= render layout: 'users/cover_controls' do
2016-06-02 11:05:42 +05:30
- if @user == current_user
2023-01-13 00:05:48 +05:30
= render Pajamas::ButtonComponent.new(href: profile_path,
icon: 'pencil',
button_options: { class: 'gl-flex-grow-1 gl-mx-1 has-tooltip', title: s_('UserProfile|Edit profile'), 'aria-label': 'Edit profile', data: { toggle: 'tooltip', placement: 'bottom', container: 'body' }})
2016-06-02 11:05:42 +05:30
- elsif current_user
2023-03-17 16:20:25 +05:30
#js-report-abuse{ data: { report_abuse_path: add_category_abuse_reports_path, reported_user_id: @user.id, reported_from_url: user_url(@user) } }
2021-11-11 11:23:49 +05:30
- verified_gpg_keys = @user.gpg_keys.select(&:verified?)
- if verified_gpg_keys.any?
2023-01-13 00:05:48 +05:30
= render Pajamas::ButtonComponent.new(href: user_gpg_keys_path,
icon: 'key',
button_options: { class: 'gl-flex-grow-1 gl-mx-1 has-tooltip', title: n_('View public GPG key', 'View public GPG keys', verified_gpg_keys.length), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' }})
2018-11-18 11:00:15 +05:30
- if can?(current_user, :read_user_profile, @user)
2023-01-13 00:05:48 +05:30
= render Pajamas::ButtonComponent.new(href: user_path(@user, rss_url_options),
icon: 'rss',
button_options: { class: 'gl-flex-grow-1 gl-mx-1 has-tooltip', title: s_('UserProfile|Subscribe'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' }})
2017-08-17 22:00:37 +05:30
- if current_user && current_user.admin?
2023-01-13 00:05:48 +05:30
= render Pajamas::ButtonComponent.new(href: [:admin, @user],
icon: 'user',
button_options: { class: 'gl-flex-grow-1 gl-mx-1 has-tooltip', title: s_('UserProfile|View user in admin area'), data: {toggle: 'tooltip', placement: 'bottom', container: 'body'}})
2021-04-17 20:07:23 +05:30
- if current_user && current_user.id != @user.id
- if current_user.following?(@user)
2022-08-27 11:52:29 +05:30
= form_tag user_unfollow_path(@user, :json), class: link_classes + 'gl-display-inline-block' do
= render Pajamas::ButtonComponent.new(type: :submit, button_options: { class: 'gl-w-full', data: { track_action: 'click_button', track_label: 'unfollow_from_profile' } }) do
= _('Unfollow')
2021-04-17 20:07:23 +05:30
- else
2022-08-27 11:52:29 +05:30
= form_tag user_follow_path(@user, :json), class: link_classes + 'gl-display-inline-block' do
= render Pajamas::ButtonComponent.new(variant: :confirm, type: :submit, button_options: { class: 'gl-w-full', data: { qa_selector: 'follow_user_link', track_action: 'click_button', track_label: 'follow_from_profile' } }) do
= _('Follow')
2016-06-02 11:05:42 +05:30
2019-02-15 15:39:39 +05:30
.profile-header{ class: [('with-no-profile-tabs' if profile_tabs.empty?)] }
2016-11-03 12:29:30 +05:30
.avatar-holder
2022-04-04 11:22:00 +05:30
= link_to avatar_icon_for_user(@user, 400, current_user: current_user), target: '_blank', rel: 'noopener noreferrer' do
2022-08-27 11:52:29 +05:30
= render Pajamas::AvatarComponent.new(@user, alt: "", size: 96, avatar_options: { itemprop: "image" })
2016-06-02 11:05:42 +05:30
2021-02-22 17:27:13 +05:30
- if @user.blocked? || !@user.confirmed?
2020-01-01 13:55:28 +05:30
.user-info
2023-01-13 00:05:48 +05:30
%h1.cover-title
2021-02-22 17:27:13 +05:30
= user_display_name(@user)
2020-01-01 13:55:28 +05:30
= render "users/profile_basic_info"
- else
.user-info
2023-01-13 00:05:48 +05:30
%h1.cover-title{ itemprop: 'name' }
2020-01-01 13:55:28 +05:30
= @user.name
2021-09-04 01:27:46 +05:30
- if @user.pronouns.present?
%span.gl-font-base.gl-text-gray-500.gl-vertical-align-middle
= "(#{@user.pronouns})"
2022-08-27 11:52:29 +05:30
- if @user.status&.busy?
2021-01-29 00:20:46 +05:30
%span.gl-font-base.gl-text-gray-500.gl-vertical-align-middle= s_("UserProfile|(Busy)")
2020-01-01 13:55:28 +05:30
2021-10-27 15:23:28 +05:30
- if @user.pronunciation.present?
.gl-align-items-center
%p.gl-mb-4.gl-text-gray-500= s_("UserProfile|Pronounced as: %{pronunciation}") % { pronunciation: @user.pronunciation }
2022-08-27 11:52:29 +05:30
- if @user.status&.customized?
2021-03-11 19:13:27 +05:30
.cover-status.gl-display-inline-flex.gl-align-items-center
= emoji_icon(@user.status.emoji, class: 'gl-mr-2')
2020-01-01 13:55:28 +05:30
= markdown_field(@user.status, :message)
= render "users/profile_basic_info"
2021-11-11 11:23:49 +05:30
.gl-text-gray-900.mb-1.mb-sm-2
2020-04-08 14:13:33 +05:30
- unless @user.location.blank?
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider', stacking: true, itemprop: 'address', itemscope: true, itemtype: 'https://schema.org/PostalAddress' do
2021-04-29 21:17:54 +05:30
= sprite_icon('location', css_class: 'fgray')
%span{ itemprop: 'addressLocality' }
2020-04-08 14:13:33 +05:30
= @user.location
2021-11-18 22:05:49 +05:30
- user_local_time = local_time(@user.timezone)
- unless user_local_time.nil?
= render 'middle_dot_divider', stacking: true, data: { testid: 'user-local-time' } do
= sprite_icon('clock', css_class: 'fgray')
%span
= user_local_time
2020-04-08 14:13:33 +05:30
- unless work_information(@user).blank?
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider', stacking: true do
2021-04-29 21:17:54 +05:30
= sprite_icon('work', css_class: 'fgray')
%span
2021-01-29 00:20:46 +05:30
= work_information(@user, with_schema_markup: true)
2021-11-11 11:23:49 +05:30
.gl-text-gray-900
2020-01-01 13:55:28 +05:30
- unless @user.skype.blank?
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider' do
= link_to "skype:#{@user.skype}", class: 'gl-hover-text-decoration-none', title: "Skype" do
2022-03-02 08:16:31 +05:30
= sprite_icon('skype', css_class: 'skype-icon')
2020-01-01 13:55:28 +05:30
- unless @user.linkedin.blank?
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider' do
= link_to linkedin_url(@user), class: 'gl-hover-text-decoration-none', title: "LinkedIn", target: '_blank', rel: 'noopener noreferrer nofollow' do
2022-03-02 08:16:31 +05:30
= sprite_icon('linkedin', css_class: 'linkedin-icon')
2020-01-01 13:55:28 +05:30
- unless @user.twitter.blank?
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider', breakpoint: 'sm' do
= link_to twitter_url(@user), class: 'gl-hover-text-decoration-none', title: "Twitter", target: '_blank', rel: 'noopener noreferrer nofollow' do
2022-03-02 08:16:31 +05:30
= sprite_icon('twitter', css_class: 'twitter-icon')
2023-04-23 21:23:45 +05:30
- unless @user.discord.blank?
= render 'middle_dot_divider', breakpoint: 'sm' do
= link_to discord_url(@user), class: 'gl-hover-text-decoration-none', title: "Discord", target: '_blank', rel: 'noopener noreferrer nofollow' do
= sprite_icon('discord', css_class: 'discord-icon')
2020-01-01 13:55:28 +05:30
- unless @user.website_url.blank?
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider', stacking: true do
2021-01-03 14:25:43 +05:30
- if Feature.enabled?(:security_auto_fix) && @user.bot?
= sprite_icon('question', css_class: 'gl-text-blue-600')
2021-11-11 11:23:49 +05:30
= link_to @user.short_website_url, @user.full_website_url, target: '_blank', rel: 'me noopener noreferrer nofollow', itemprop: 'url'
2022-04-04 11:22:00 +05:30
- if display_public_email?(@user)
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider', stacking: true do
= link_to @user.public_email, "mailto:#{@user.public_email}", itemprop: 'email'
.gl-text-gray-900
2021-03-11 19:13:27 +05:30
= sprite_icon('users', css_class: 'gl-vertical-align-middle gl-text-gray-500')
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider' do
= link_to user_followers_path do
2021-03-11 19:13:27 +05:30
- count = @user.followers.count
= n_('1 follower', '%{count} followers', count) % { count: count }
2021-11-11 11:23:49 +05:30
= render 'middle_dot_divider' do
= link_to user_following_path, data: { qa_selector: 'following_link' } do
2021-03-11 19:13:27 +05:30
= @user.followees.count
= _('following')
2019-02-15 15:39:39 +05:30
- if @user.bio.present?
2021-11-11 11:23:49 +05:30
.gl-text-gray-900
2020-10-24 23:57:45 +05:30
.profile-user-bio
2021-11-11 11:23:49 +05:30
= @user.bio
2020-07-28 23:09:34 +05:30
2018-11-18 11:00:15 +05:30
- unless profile_tabs.empty?
2023-04-23 21:23:45 +05:30
- if Feature.enabled?(:profile_tabs_vue, current_user)
#js-profile-tabs
- else
.scrolling-tabs-container
.fade-left= sprite_icon('chevron-lg-left', size: 12)
.fade-right= sprite_icon('chevron-lg-right', size: 12)
%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')
- unless Feature.enabled?(:security_auto_fix) && @user.bot?
- 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?(:starred)
%li.js-starred-tab
= link_to user_starred_projects_path, data: { target: 'div#starred', action: 'starred', toggle: 'tab', endpoint: user_starred_projects_path(format: :json) } do
= s_('UserProfile|Starred 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')
- if profile_tab?(:followers)
%li.js-followers-tab
= link_to user_followers_path, data: { target: 'div#followers', action: 'followers', toggle: 'tab', endpoint: user_followers_path(format: :json) } do
= s_('UserProfile|Followers')
- if profile_tab?(:following)
%li.js-following-tab
= link_to user_following_path, data: { target: 'div#following', action: 'following', toggle: 'tab', endpoint: user_following_path(format: :json) } do
= s_('UserProfile|Following')
2015-04-26 12:48:37 +05:30
2016-06-02 11:05:42 +05:30
%div{ class: container_class }
2023-04-23 21:23:45 +05:30
- unless Feature.enabled?(:profile_tabs_vue, current_user)
.tab-content
- if profile_tab?(:overview)
#js-overview.tab-pane
= render "users/overview"
- if profile_tab?(:activity)
#activity.tab-pane
.flash-container
- if can?(current_user, :read_cross_project)
%h4.prepend-top-20
= s_('UserProfile|Most Recent Activity')
.content_list{ data: { href: user_activity_path } }
.loading
= gl_loading_icon(size: 'md')
- unless @user.bot?
- 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?(:starred)
#starred.tab-pane
-# This tab is always loaded via AJAX
- if profile_tab?(:snippets)
#snippets.tab-pane
-# This tab is always loaded via AJAX
- if profile_tab?(:followers)
#followers.tab-pane
-# This tab is always loaded via AJAX
- if profile_tab?(:following)
#following.tab-pane
-# This tab is always loaded via AJAX
.loading.hide
.gl-spinner.gl-spinner-md
2018-11-18 11:00:15 +05:30
2020-10-24 23:57:45 +05:30
- if profile_tabs.empty?
.svg-content
= image_tag 'illustrations/profile_private_mode.svg'
.text-content.text-center
%h4
- if @user.blocked?
= s_('UserProfile|This user is blocked')
- else
= s_('UserProfile|This user has a private profile')