Commit 2f90e71f authored by Stan Hu's avatar Stan Hu

Merge pull request #9670 from janten/gravatar-retina

Add support for HiDPI displays in gravatar service
parents 1befbbf5 3b717c8a
...@@ -68,7 +68,7 @@ module ApplicationHelper ...@@ -68,7 +68,7 @@ module ApplicationHelper
end end
end end
def avatar_icon(user_or_email = nil, size = nil) def avatar_icon(user_or_email = nil, size = nil, scale = 2)
if user_or_email.is_a?(User) if user_or_email.is_a?(User)
user = user_or_email user = user_or_email
else else
...@@ -78,12 +78,12 @@ module ApplicationHelper ...@@ -78,12 +78,12 @@ module ApplicationHelper
if user if user
user.avatar_url(size) || default_avatar user.avatar_url(size) || default_avatar
else else
gravatar_icon(user_or_email, size) gravatar_icon(user_or_email, size, scale)
end end
end end
def gravatar_icon(user_email = '', size = nil) def gravatar_icon(user_email = '', size = nil, scale = 2)
GravatarService.new.execute(user_email, size) || GravatarService.new.execute(user_email, size, scale) ||
default_avatar default_avatar
end end
......
...@@ -637,11 +637,11 @@ class User < ActiveRecord::Base ...@@ -637,11 +637,11 @@ class User < ActiveRecord::Base
email.start_with?('temp-email-for-oauth') email.start_with?('temp-email-for-oauth')
end end
def avatar_url(size = nil) def avatar_url(size = nil, scale = 2)
if avatar.present? if avatar.present?
[gitlab_config.url, avatar.url].join [gitlab_config.url, avatar.url].join
else else
GravatarService.new.execute(email, size) GravatarService.new.execute(email, size, scale)
end end
end end
......
class GravatarService class GravatarService
include Gitlab::CurrentSettings include Gitlab::CurrentSettings
def execute(email, size = nil) def execute(email, size = nil, scale = 2)
if current_application_settings.gravatar_enabled? && email.present? if current_application_settings.gravatar_enabled? && email.present?
size = 40 if size.nil? || size <= 0 size = 40 if size.nil? || size <= 0
sprintf gravatar_url, sprintf gravatar_url,
hash: Digest::MD5.hexdigest(email.strip.downcase), hash: Digest::MD5.hexdigest(email.strip.downcase),
size: size, size: size * scale,
email: email.strip email: email.strip
end end
end end
......
...@@ -95,9 +95,9 @@ describe ApplicationHelper do ...@@ -95,9 +95,9 @@ describe ApplicationHelper do
end end
it 'should call gravatar_icon when no User exists with the given email' do it 'should call gravatar_icon when no User exists with the given email' do
expect(helper).to receive(:gravatar_icon).with('foo@example.com', 20) expect(helper).to receive(:gravatar_icon).with('foo@example.com', 20, 2)
helper.avatar_icon('foo@example.com', 20) helper.avatar_icon('foo@example.com', 20, 2)
end end
describe 'using a User' do describe 'using a User' do
...@@ -150,15 +150,19 @@ describe ApplicationHelper do ...@@ -150,15 +150,19 @@ describe ApplicationHelper do
stub_gravatar_setting(plain_url: 'http://example.local/?s=%{size}&hash=%{hash}') stub_gravatar_setting(plain_url: 'http://example.local/?s=%{size}&hash=%{hash}')
expect(gravatar_icon(user_email, 20)). expect(gravatar_icon(user_email, 20)).
to eq('http://example.local/?s=20&hash=b58c6f14d292556214bd64909bcdb118') to eq('http://example.local/?s=40&hash=b58c6f14d292556214bd64909bcdb118')
end end
it 'accepts a custom size argument' do it 'accepts a custom size argument' do
expect(helper.gravatar_icon(user_email, 64)).to include '?s=64' expect(helper.gravatar_icon(user_email, 64)).to include '?s=128'
end end
it 'defaults size to 40 when given an invalid size' do it 'defaults size to 40@2x when given an invalid size' do
expect(helper.gravatar_icon(user_email, nil)).to include '?s=40' expect(helper.gravatar_icon(user_email, nil)).to include '?s=80'
end
it 'accepts a scaling factor' do
expect(helper.gravatar_icon(user_email, 40, 3)).to include '?s=120'
end end
it 'ignores case and surrounding whitespace' do it 'ignores case and surrounding whitespace' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment