Merge pull request #9670 from janten/gravatar-retina
Add support for HiDPI displays in gravatar service
This commit is contained in:
commit
2f90e71fd3
4 changed files with 18 additions and 14 deletions
|
@ -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
|
||||||
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
|
||||||
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
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue