Module: AvatarsHelper

Constant Summary collapse

DEFAULT_AVATAR_PATH =
'no_avatar.png'

Instance Method Summary collapse

Instance Method Details

#author_avatar(commit_or_event, options = {}) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/helpers/avatars_helper.rb', line 59

def author_avatar(commit_or_event, options = {})
  options[:css_class] ||= "gl-hidden sm:gl-inline-block"

  if Feature.enabled?(:cached_author_avatar_helper, options.delete(:project))
    Gitlab::AvatarCache.by_email(commit_or_event.author_email, commit_or_event.author_name, options) do
      user_avatar(options.merge({
        user: commit_or_event.author,
        user_name: commit_or_event.author_name,
        user_email: commit_or_event.author_email
      }))
    end.html_safe # rubocop: disable Rails/OutputSafety -- this is only needed as the AvatarCache is a direct Redis cache
  else
    user_avatar(options.merge({
      user: commit_or_event.author,
      user_name: commit_or_event.author_name,
      user_email: commit_or_event.author_email
    }))
  end
end

#avatar_icon_for(user = nil, email = nil, size = nil, scale = 2, only_path: true) ⇒ Object

Takes both user and email and returns the avatar_icon by user (preferred) or email.



16
17
18
19
20
21
22
23
24
# File 'app/helpers/avatars_helper.rb', line 16

def avatar_icon_for(user = nil, email = nil, size = nil, scale = 2, only_path: true)
  if user
    avatar_icon_for_user(user, size, scale, only_path: only_path)
  elsif email
    avatar_icon_for_email(email, size, scale, only_path: only_path)
  else
    default_avatar
  end
end

#avatar_icon_for_email(email = nil, size = nil, scale = 2, only_path: true, by_commit_email: false) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/helpers/avatars_helper.rb', line 26

def avatar_icon_for_email(email = nil, size = nil, scale = 2, only_path: true, by_commit_email: false)
  return default_avatar if email.blank?

  Gitlab::AvatarCache.by_email(email, size, scale, only_path) do
    avatar_icon_by_user_email_or_gravatar(
      email,
      size,
      scale,
      only_path: only_path,
      by_commit_email: by_commit_email
    )
  end
end

#avatar_icon_for_user(user = nil, size = nil, scale = 2, only_path: true, current_user: nil) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'app/helpers/avatars_helper.rb', line 40

def avatar_icon_for_user(user = nil, size = nil, scale = 2, only_path: true, current_user: nil)
  return gravatar_icon(nil, size, scale) unless user
  return default_avatar if blocked_or_unconfirmed?(user) && !can_admin?(current_user)

  image_size = !size.nil? ? size * 2 : size

  user_avatar = user.avatar_url(size: image_size, only_path: only_path)
  user_avatar || default_avatar
end


122
123
124
125
126
127
128
129
# File 'app/helpers/avatars_helper.rb', line 122

def avatar_without_link(resource, options = {})
  case resource
  when Namespaces::UserNamespace
    user_avatar_without_link(options.merge(user: resource.first_owner))
  when Group
    render Pajamas::AvatarComponent.new(resource, class: 'gl-avatar-circle gl-mr-3', size: 32)
  end
end

#default_avatarObject



55
56
57
# File 'app/helpers/avatars_helper.rb', line 55

def default_avatar
  ActionController::Base.helpers.image_path(DEFAULT_AVATAR_PATH)
end

#gravatar_icon(user_email = '', size = nil, scale = 2) ⇒ Object



50
51
52
53
# File 'app/helpers/avatars_helper.rb', line 50

def gravatar_icon(user_email = '', size = nil, scale = 2)
  GravatarService.new.execute(user_email, size, scale) ||
    default_avatar
end

#group_icon(group, options = {}) ⇒ Object



6
7
8
# File 'app/helpers/avatars_helper.rb', line 6

def group_icon(group, options = {})
  source_icon(group, options)
end

#topic_icon(topic, options = {}) ⇒ Object



10
11
12
# File 'app/helpers/avatars_helper.rb', line 10

def topic_icon(topic, options = {})
  source_icon(topic, options)
end

#user_avatar(options = {}) ⇒ Object



79
80
81
82
83
84
85
86
87
# File 'app/helpers/avatars_helper.rb', line 79

def user_avatar(options = {})
  avatar = user_avatar_without_link(options)

  if options[:user]
    link_to(avatar, user_path(options[:user]))
  elsif options[:user_email]
    mail_to(options[:user_email], avatar)
  end
end


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'app/helpers/avatars_helper.rb', line 89

def user_avatar_without_link(options = {})
  avatar_size = options[:size] || 16
  user_name = options[:user].try(:name) || options[:user_name]

  avatar_url = user_avatar_url_for(**options.merge(size: avatar_size))

  has_tooltip = options[:has_tooltip].nil? ? true : options[:has_tooltip]
  data_attributes = options[:data] || {}
  css_class = %W[avatar s#{avatar_size}].push(*options[:css_class])
  alt_text = user_name ? "#{user_name}'s avatar" : "default avatar"

  if has_tooltip
    css_class.push('has-tooltip')
    data_attributes[:container] = 'body'
  end

  if options[:lazy]
    css_class << 'lazy'
    data_attributes[:src] = avatar_url
    avatar_url = LazyImageTagHelper.placeholder_image
  end

  image_options = {
    alt: alt_text,
    src: avatar_url,
    data: data_attributes,
    class: css_class,
    title: user_name
  }

  tag.img(**image_options)
end