diff --git a/app/helpers/avatars_helper.rb b/app/helpers/avatars_helper.rb index 3998c4411..42f44660c 100644 --- a/app/helpers/avatars_helper.rb +++ b/app/helpers/avatars_helper.rb @@ -47,6 +47,12 @@ module AvatarsHelper elsif user.to_s =~ %r{<(.+?)>} email = $1 end + if options[:default] == 'blank' + options[:style] ||= +'' + options[:style] << "background-image:url(\"data:image/svg+xml,#{url_encode(render(partial: 'common/initials.svg', locals: { initials: user.initials }))}\");" + options[:class] ||= +'' + options[:class] << " avatar-color-#{user.id % 8}" + end if email.present? gravatar(email.to_s.downcase, options) rescue nil elsif user.is_a?(AnonymousUser) diff --git a/app/models/anonymous_user.rb b/app/models/anonymous_user.rb index eddcf814c..aa16431cc 100644 --- a/app/models/anonymous_user.rb +++ b/app/models/anonymous_user.rb @@ -35,6 +35,7 @@ class AnonymousUser < User def logged?; false end def admin; false end def name(*args); I18n.t(:label_user_anonymous) end + def initials; 'AN' end def mail=(*args); nil end def mail; nil end def time_zone; nil end diff --git a/app/models/principal.rb b/app/models/principal.rb index b38418816..7d426ad02 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -128,6 +128,14 @@ class Principal < ActiveRecord::Base to_s end + def initials + if firstname.blank? && lastname.blank? + 'NN' + else + "#{firstname.to_s.strip.first}#{lastname.to_s.strip.first}".upcase.strip + end + end + def mail=(*args) nil end diff --git a/app/views/common/_initials.svg.erb b/app/views/common/_initials.svg.erb new file mode 100644 index 000000000..e58cf791d --- /dev/null +++ b/app/views/common/_initials.svg.erb @@ -0,0 +1,14 @@ + + + + + + <%= content_tag :text, initials, x: 50, y: 50, + 'font-size': 50, fill: 'white', + 'dy': '.36em', + 'text-anchor': 'middle' %> + diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index f837a710e..3439d842e 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -1874,3 +1874,35 @@ th[role=columnheader]:not(.no-sort):hover:after { display: inline; opacity: 1; } + +img.avatar-color-0 { + background-color: #880000; +} + +img.avatar-color-1 { + background-color: #ff0000; +} + +img.avatar-color-2 { + background-color: #00ff00; +} + +img.avatar-color-3 { + background-color: #008800; +} + +img.avatar-color-4 { + background-color: #0000ff; +} + +img.avatar-color-5 { + background-color: #000088; +} + +img.avatar-color-6 { + background-color: #ff8800; +} + +img.avatar-color-7 { + background-color: #ff0088; +}