Commit 8c43fa1f authored by Tim Zallmann's avatar Tim Zallmann

Merge branch 'ee-39455-clone-dropdown-should-not-have-a-tooltip' into 'master'

EE counterpart for Resolve "Clone dropdown should not have a tooltip"

See merge request gitlab-org/gitlab-ee!3375
parents bffd07ca 93a4b1a4
...@@ -17,13 +17,14 @@ export default class Project { ...@@ -17,13 +17,14 @@ export default class Project {
$('a', $cloneOptions).on('click', (e) => { $('a', $cloneOptions).on('click', (e) => {
const $this = $(e.currentTarget); const $this = $(e.currentTarget);
const url = $this.attr('href'); const url = $this.attr('href');
const activeText = $this.find('.dropdown-menu-inner-title').text();
e.preventDefault(); e.preventDefault();
$('.is-active', $cloneOptions).not($this).removeClass('is-active'); $('.is-active', $cloneOptions).not($this).removeClass('is-active');
$this.toggleClass('is-active'); $this.toggleClass('is-active');
$projectCloneField.val(url); $projectCloneField.val(url);
$cloneBtnText.text($this.text()); $cloneBtnText.text(activeText);
$('#modal-geo-info').data({ $('#modal-geo-info').data({
cloneUrlSecondary: $this.attr('href'), cloneUrlSecondary: $this.attr('href'),
......
...@@ -410,6 +410,18 @@ ...@@ -410,6 +410,18 @@
} }
} }
} }
.clone-dropdown-btn {
background-color: $white-light;
}
.clone-options-dropdown {
min-width: 240px;
.dropdown-menu-inner-content {
min-width: 320px;
}
}
} }
.project-repo-buttons { .project-repo-buttons {
......
...@@ -31,9 +31,9 @@ module ApplicationSettingsHelper ...@@ -31,9 +31,9 @@ module ApplicationSettingsHelper
def enabled_project_button(project, protocol) def enabled_project_button(project, protocol)
case protocol case protocol
when 'ssh' when 'ssh'
ssh_clone_button(project, 'bottom', append_link: false) ssh_clone_button(project, append_link: false)
else else
http_clone_button(project, 'bottom', append_link: false) http_clone_button(project, append_link: false)
end end
end end
......
...@@ -56,44 +56,41 @@ module ButtonHelper ...@@ -56,44 +56,41 @@ module ButtonHelper
end end
end end
def http_clone_button(project, placement = 'right', append_link: true) def http_clone_button(project, append_link: true)
klass = 'http-selector'
klass << ' has-tooltip' if current_user.try(:require_extra_setup_for_git_auth?)
protocol = gitlab_config.protocol.upcase protocol = gitlab_config.protocol.upcase
dropdown_description = http_dropdown_description(protocol)
append_url = project.http_url_to_repo if append_link
geo_url = geo_primary_http_url_to_repo(project) if Gitlab::Geo.secondary?
tooltip_title = dropdown_item_with_description(protocol, dropdown_description, href: append_url, geo_url: geo_url)
if current_user.try(:require_password_creation_for_git?) end
_("Set a password on your account to pull or push via %{protocol}.") % { protocol: protocol }
else
_("Create a personal access token on your account to pull or push via %{protocol}.") % { protocol: protocol }
end
content_tag (append_link ? :a : :span), protocol, def http_dropdown_description(protocol)
class: klass, if current_user.try(:require_password_creation_for_git?)
href: (project.http_url_to_repo if append_link), _("Set a password on your account to pull or push via %{protocol}.") % { protocol: protocol }
data: { else
html: true, _("Create a personal access token on your account to pull or push via %{protocol}.") % { protocol: protocol }
placement: placement, end
container: 'body',
title: tooltip_title,
primary_url: (geo_primary_http_url_to_repo(project) if Gitlab::Geo.secondary?)
}
end end
def ssh_clone_button(project, placement = 'right', append_link: true) def ssh_clone_button(project, append_link: true)
klass = 'ssh-selector' dropdown_description = _("You won't be able to pull or push project code via SSH until you add an SSH key to your profile") if current_user.try(:require_ssh_key?)
klass << ' has-tooltip' if current_user.try(:require_ssh_key?) append_url = project.ssh_url_to_repo if append_link
geo_url = geo_primary_ssh_url_to_repo(project) if Gitlab::Geo.secondary?
content_tag (append_link ? :a : :span), 'SSH', dropdown_item_with_description('SSH', dropdown_description, href: append_url, geo_url: geo_url)
class: klass, end
href: (project.ssh_url_to_repo if append_link),
def dropdown_item_with_description(title, description, href: nil, geo_url: nil)
button_content = content_tag(:strong, title, class: 'dropdown-menu-inner-title')
button_content << content_tag(:span, description, class: 'dropdown-menu-inner-content') if description
content_tag (href ? :a : :span),
button_content,
class: "#{title.downcase}-selector",
href: (href if href),
data: { data: {
html: true, primary_url: (geo_url if geo_url)
placement: placement,
container: 'body',
title: _('Add an SSH key to your profile to pull or push via SSH.'),
primary_url: (geo_primary_ssh_url_to_repo(project) if Gitlab::Geo.secondary?)
} }
end end
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
%span %span
= enabled_project_button(project, enabled_protocol) = enabled_project_button(project, enabled_protocol)
- else - else
%a#clone-dropdown.clone-dropdown-btn.btn{ href: '#', data: { toggle: 'dropdown' } } %a#clone-dropdown.btn.clone-dropdown-btn{ href: '#', data: { toggle: 'dropdown' } }
%span %span
= default_clone_protocol.upcase = default_clone_protocol.upcase
= icon('caret-down') = icon('caret-down')
......
---
title: Removed tooltip from clone dropdown
merge_request: 15334
author:
type: other
...@@ -26,9 +26,10 @@ describe ButtonHelper do ...@@ -26,9 +26,10 @@ describe ButtonHelper do
context 'when user has password automatically set' do context 'when user has password automatically set' do
let(:user) { create(:user, password_automatically_set: true) } let(:user) { create(:user, password_automatically_set: true) }
it 'shows a password tooltip' do it 'shows the password text on the dropdown' do
expect(element.attr('class')).to include(has_tooltip_class) description = element.search('.dropdown-menu-inner-content').first
expect(element.attr('data-title')).to eq('Set a password on your account to pull or push via HTTP.')
expect(description.inner_text).to eq 'Set a password on your account to pull or push via HTTP.'
end end
end end
end end
...@@ -39,17 +40,10 @@ describe ButtonHelper do ...@@ -39,17 +40,10 @@ describe ButtonHelper do
end end
context 'when user has no personal access tokens' do context 'when user has no personal access tokens' do
it 'has a personal access token tooltip ' do it 'has a personal access token text on the dropdown description ' do
expect(element.attr('class')).to include(has_tooltip_class) description = element.search('.dropdown-menu-inner-content').first
expect(element.attr('data-title')).to eq('Create a personal access token on your account to pull or push via HTTP.')
end
end
context 'when user has a personal access token' do
it 'shows no tooltip' do
create(:personal_access_token, user: user)
expect(element.attr('class')).not_to include(has_tooltip_class) expect(description.inner_text).to eq 'Create a personal access token on your account to pull or push via HTTP.'
end end
end end
end end
...@@ -63,6 +57,41 @@ describe ButtonHelper do ...@@ -63,6 +57,41 @@ describe ButtonHelper do
end end
end end
describe 'ssh_button' do
let(:user) { create(:user) }
let(:project) { build_stubbed(:project) }
def element
element = helper.ssh_clone_button(project)
Nokogiri::HTML::DocumentFragment.parse(element).first_element_child
end
before do
allow(helper).to receive(:current_user).and_return(user)
end
context 'without an ssh key on the user' do
it 'shows a warning on the dropdown description' do
description = element.search('.dropdown-menu-inner-content').first
expect(description.inner_text).to eq "You won't be able to pull or push project code via SSH until you add an SSH key to your profile"
end
end
context 'with an ssh key on the user' do
before do
create(:key, user: user)
end
it 'there is no warning on the dropdown description' do
description = element.search('.dropdown-menu-inner-content').first
expect(description).to eq nil
end
end
end
describe 'clipboard_button' do describe 'clipboard_button' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { build_stubbed(:project) } let(:project) { build_stubbed(:project) }
......
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