Add default avatar to group
This commit is contained in:
parent
d90676b1ed
commit
e40d626b68
|
|
@ -103,6 +103,7 @@
|
|||
display: flex;
|
||||
|
||||
a {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -823,10 +823,6 @@ pre.light-well {
|
|||
|
||||
.avatar-container {
|
||||
align-self: flex-start;
|
||||
|
||||
> a {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.project-details {
|
||||
|
|
|
|||
|
|
@ -1,28 +1,10 @@
|
|||
module AvatarsHelper
|
||||
def project_icon(project_id, options = {})
|
||||
project =
|
||||
if project_id.respond_to?(:avatar_url)
|
||||
project_id
|
||||
else
|
||||
Project.find_by_full_path(project_id)
|
||||
end
|
||||
|
||||
if project.avatar_url
|
||||
image_tag project.avatar_url, options
|
||||
else # generated icon
|
||||
project_identicon(project, options)
|
||||
end
|
||||
source_icon(Project, project_id, options)
|
||||
end
|
||||
|
||||
def project_identicon(project, options = {})
|
||||
bg_key = (project.id % 7) + 1
|
||||
options[:class] ||= ''
|
||||
options[:class] << ' identicon'
|
||||
options[:class] << " bg#{bg_key}"
|
||||
|
||||
content_tag(:div, class: options[:class]) do
|
||||
project.name[0, 1].upcase
|
||||
end
|
||||
def group_icon(group_id, options = {})
|
||||
source_icon(Group, group_id, options)
|
||||
end
|
||||
|
||||
# Takes both user and email and returns the avatar_icon by
|
||||
|
|
@ -123,4 +105,32 @@ module AvatarsHelper
|
|||
mail_to(options[:user_email], avatar)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def source_icon(klass, source_id, options = {})
|
||||
source =
|
||||
if source_id.respond_to?(:avatar_url)
|
||||
source_id
|
||||
else
|
||||
klass.find_by_full_path(source_id)
|
||||
end
|
||||
|
||||
if source.avatar_url
|
||||
image_tag source.avatar_url, options
|
||||
else
|
||||
source_identicon(source, options)
|
||||
end
|
||||
end
|
||||
|
||||
def source_identicon(source, options = {})
|
||||
bg_key = (source.id % 7) + 1
|
||||
options[:class] ||= ''
|
||||
options[:class] << ' identicon'
|
||||
options[:class] << " bg#{bg_key}"
|
||||
|
||||
content_tag(:div, class: options[:class].strip) do
|
||||
source.name[0, 1].upcase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -33,11 +33,6 @@ module GroupsHelper
|
|||
.count
|
||||
end
|
||||
|
||||
def group_icon(group, options = {})
|
||||
img_path = group_icon_url(group, options)
|
||||
image_tag img_path, options
|
||||
end
|
||||
|
||||
def group_icon_url(group, options = {})
|
||||
if group.is_a?(String)
|
||||
group = Group.find_by_full_path(group)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
.bordered-box.fork-thumbnail.text-center.prepend-left-default.append-right-default.prepend-top-default.append-bottom-default.forked
|
||||
= link_to project_path(forked_project) do
|
||||
- if /no_((\w*)_)*avatar/.match(avatar)
|
||||
= project_identicon(namespace, class: "avatar s100 identicon")
|
||||
= project_icon(namespace, class: "avatar s100 identicon")
|
||||
- else
|
||||
.avatar-container.s100
|
||||
= image_tag(avatar, class: "avatar s100")
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
class: ("disabled has-tooltip" unless can_create_project),
|
||||
title: (_('You have reached your project limit') unless can_create_project) do
|
||||
- if /no_((\w*)_)*avatar/.match(avatar)
|
||||
= project_identicon(namespace, class: "avatar s100 identicon")
|
||||
= project_icon(namespace, class: "avatar s100 identicon")
|
||||
- else
|
||||
.avatar-container.s100
|
||||
= image_tag(avatar, class: "avatar s100")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add default avatar to group
|
||||
merge_request: 17271
|
||||
author: George Tsiolis
|
||||
type: changed
|
||||
|
|
@ -5,12 +5,67 @@ describe AvatarsHelper do
|
|||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
describe '#project_icon' do
|
||||
it 'returns an url for the avatar' do
|
||||
project = create(:project, :public, avatar: File.open(uploaded_image_temp_path))
|
||||
describe '#project_icon & #group_icon' do
|
||||
shared_examples 'resource with a default avatar' do |source_type|
|
||||
it 'returns a default avatar div' do
|
||||
expect(public_send("#{source_type}_icon", *helper_args))
|
||||
.to match(%r{<div class="identicon bg\d+">F</div>})
|
||||
end
|
||||
end
|
||||
|
||||
expect(helper.project_icon(project.full_path).to_s)
|
||||
.to eq "<img data-src=\"#{project.avatar.url}\" class=\" lazy\" src=\"#{LazyImageTagHelper.placeholder_image}\" />"
|
||||
shared_examples 'resource with a custom avatar' do |source_type|
|
||||
it 'returns a custom avatar image' do
|
||||
expect(public_send("#{source_type}_icon", *helper_args))
|
||||
.to eq "<img src=\"#{resource.avatar.url}\" alt=\"Banana sample\" />"
|
||||
end
|
||||
end
|
||||
|
||||
context 'when providing a project' do
|
||||
it_behaves_like 'resource with a default avatar', 'project' do
|
||||
let(:resource) { create(:project, name: 'foo') }
|
||||
let(:helper_args) { [resource] }
|
||||
end
|
||||
|
||||
it_behaves_like 'resource with a custom avatar', 'project' do
|
||||
let(:resource) { create(:project, :public, avatar: File.open(uploaded_image_temp_path)) }
|
||||
let(:helper_args) { [resource] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when providing a project path' do
|
||||
it_behaves_like 'resource with a default avatar', 'project' do
|
||||
let(:resource) { create(:project, name: 'foo') }
|
||||
let(:helper_args) { [resource.full_path] }
|
||||
end
|
||||
|
||||
it_behaves_like 'resource with a custom avatar', 'project' do
|
||||
let(:resource) { create(:project, :public, avatar: File.open(uploaded_image_temp_path)) }
|
||||
let(:helper_args) { [resource.full_path] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when providing a group' do
|
||||
it_behaves_like 'resource with a default avatar', 'group' do
|
||||
let(:resource) { create(:group, name: 'foo') }
|
||||
let(:helper_args) { [resource] }
|
||||
end
|
||||
|
||||
it_behaves_like 'resource with a custom avatar', 'group' do
|
||||
let(:resource) { create(:group, avatar: File.open(uploaded_image_temp_path)) }
|
||||
let(:helper_args) { [resource] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when providing a group path' do
|
||||
it_behaves_like 'resource with a default avatar', 'group' do
|
||||
let(:resource) { create(:group, name: 'foo') }
|
||||
let(:helper_args) { [resource.full_path] }
|
||||
end
|
||||
|
||||
it_behaves_like 'resource with a custom avatar', 'group' do
|
||||
let(:resource) { create(:group, avatar: File.open(uploaded_image_temp_path)) }
|
||||
let(:helper_args) { [resource.full_path] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -3,19 +3,6 @@ require 'spec_helper'
|
|||
describe GroupsHelper do
|
||||
include ApplicationHelper
|
||||
|
||||
describe 'group_icon' do
|
||||
it 'returns an url for the avatar' do
|
||||
avatar_file_path = File.join('spec', 'fixtures', 'banana_sample.gif')
|
||||
|
||||
group = create(:group)
|
||||
group.avatar = fixture_file_upload(avatar_file_path)
|
||||
group.save!
|
||||
|
||||
expect(helper.group_icon(group).to_s)
|
||||
.to eq "<img data-src=\"#{group.avatar.url}\" class=\" lazy\" src=\"#{LazyImageTagHelper.placeholder_image}\" />"
|
||||
end
|
||||
end
|
||||
|
||||
describe 'group_icon_url' do
|
||||
it 'returns an url for the avatar' do
|
||||
avatar_file_path = File.join('spec', 'fixtures', 'banana_sample.gif')
|
||||
|
|
|
|||
Loading…
Reference in New Issue