Module: AvatarsHelper

Included in:
Banzai::Filter::CommitTrailersFilter, Gitlab::BlamePresenter, Groups::GroupMembersHelper
Defined in:
app/helpers/avatars_helper.rb

Instance Method Summary collapse

Instance Method Details

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


50
51
52
53
54
55
56
57
# File 'app/helpers/avatars_helper.rb', line 50

def author_avatar(commit_or_event, options = {})
  user_avatar(options.merge({
    user: commit_or_event.author,
    user_name: commit_or_event.author_name,
    user_email: commit_or_event.author_email,
    css_class: 'd-none d-sm-inline-block'
  }))
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.


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

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) ⇒ Object


24
25
26
27
28
29
30
31
# File 'app/helpers/avatars_helper.rb', line 24

def avatar_icon_for_email(email = nil, size = nil, scale = 2, only_path: true)
  user = User.find_by_any_email(email)
  if user
    avatar_icon_for_user(user, size, scale, only_path: only_path)
  else
    gravatar_icon(email, size, scale)
  end
end

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


33
34
35
36
37
38
39
# File 'app/helpers/avatars_helper.rb', line 33

def avatar_icon_for_user(user = nil, size = nil, scale = 2, only_path: true)
  if user
    user.avatar_url(size: size, only_path: only_path) || default_avatar
  else
    gravatar_icon(nil, size, scale)
  end
end

#default_avatarObject


46
47
48
# File 'app/helpers/avatars_helper.rb', line 46

def default_avatar
  ActionController::Base.helpers.image_path('no_avatar.png')
end

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


41
42
43
44
# File 'app/helpers/avatars_helper.rb', line 41

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

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


8
9
10
# File 'app/helpers/avatars_helper.rb', line 8

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

#project_icon(project, options = {}) ⇒ Object


4
5
6
# File 'app/helpers/avatars_helper.rb', line 4

def project_icon(project, options = {})
  source_icon(project, options)
end

#user_avatar(options = {}) ⇒ Object


92
93
94
95
96
97
98
99
100
# File 'app/helpers/avatars_helper.rb', line 92

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

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'app/helpers/avatars_helper.rb', line 59

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