Commit 1a4206d8 authored by Stan Hu's avatar Stan Hu

Merge branch 'xanf/gitlab-ce-improve-project-overview' into 'master'

Improvements to Project overview UI

Closes #55025

See merge request gitlab-org/gitlab-ce!26796
parents 48b025d1 6ea92ef1
...@@ -93,4 +93,11 @@ module NotificationsHelper ...@@ -93,4 +93,11 @@ module NotificationsHelper
s_(event.to_s.humanize) s_(event.to_s.humanize)
end end
end end
def notification_setting_icon(notification_setting)
sprite_icon(
notification_setting.disabled? ? "notifications-off" : "notifications",
css_class: "icon notifications-icon js-notifications-icon"
)
end
end end
...@@ -37,7 +37,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated ...@@ -37,7 +37,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
autodevops_anchor_data(show_auto_devops_callout: show_auto_devops_callout), autodevops_anchor_data(show_auto_devops_callout: show_auto_devops_callout),
kubernetes_cluster_anchor_data, kubernetes_cluster_anchor_data,
gitlab_ci_anchor_data gitlab_ci_anchor_data
].compact.reject(&:is_link) ].compact.reject(&:is_link).sort_by.with_index { |item, idx| [item.class_modifier ? 0 : 1, idx] }
end end
def empty_repo_statistics_anchors def empty_repo_statistics_anchors
...@@ -259,7 +259,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated ...@@ -259,7 +259,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
if current_user && can?(current_user, :admin_pipeline, project) && repository.gitlab_ci_yml.blank? && !show_auto_devops_callout if current_user && can?(current_user, :admin_pipeline, project) && repository.gitlab_ci_yml.blank? && !show_auto_devops_callout
if auto_devops_enabled? if auto_devops_enabled?
AnchorData.new(false, AnchorData.new(false,
statistic_icon('doc-text') + _('Auto DevOps enabled'), statistic_icon('settings') + _('Auto DevOps enabled'),
project_settings_ci_cd_path(project, anchor: 'autodevops-settings'), project_settings_ci_cd_path(project, anchor: 'autodevops-settings'),
'default') 'default')
else else
......
...@@ -10,14 +10,14 @@ ...@@ -10,14 +10,14 @@
%div{ class: ("btn-group" if notification_setting.custom?) } %div{ class: ("btn-group" if notification_setting.custom?) }
- if notification_setting.custom? - if notification_setting.custom?
%button.dropdown-new.btn.btn-default.has-tooltip.notifications-btn#notifications-button{ type: "button", title: _("Notification setting - %{notification_title}") % { notification_title: notification_title(notification_setting.level) }, class: "#{btn_class}", "aria-label" => _("Notification setting - %{notification_title}") % { notification_title: notification_title(notification_setting.level) }, data: { container: "body", placement: 'top', toggle: "modal", target: "#" + notifications_menu_identifier("modal", notification_setting), display: 'static' } } %button.dropdown-new.btn.btn-default.has-tooltip.notifications-btn#notifications-button{ type: "button", title: _("Notification setting - %{notification_title}") % { notification_title: notification_title(notification_setting.level) }, class: "#{btn_class}", "aria-label" => _("Notification setting - %{notification_title}") % { notification_title: notification_title(notification_setting.level) }, data: { container: "body", placement: 'top', toggle: "modal", target: "#" + notifications_menu_identifier("modal", notification_setting), display: 'static' } }
= sprite_icon("notifications", css_class: "icon notifications-icon js-notifications-icon") = notification_setting_icon(notification_setting)
%span.js-notification-loading.fa.hidden %span.js-notification-loading.fa.hidden
%button.btn.dropdown-toggle{ data: { toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" }, class: "#{btn_class}" } %button.btn.dropdown-toggle{ data: { toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" }, class: "#{btn_class}" }
= sprite_icon("arrow-down", css_class: "icon mr-0") = sprite_icon("arrow-down", css_class: "icon mr-0")
.sr-only Toggle dropdown .sr-only Toggle dropdown
- else - else
%button.dropdown-new.btn.btn-default.has-tooltip.notifications-btn#notifications-button{ type: "button", title: "Notification setting - #{notification_title(notification_setting.level)}", class: "#{btn_class}", "aria-label" => "Notification setting: #{notification_title(notification_setting.level)}", data: { container: "body", placement: 'top', toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" } } %button.dropdown-new.btn.btn-default.has-tooltip.notifications-btn#notifications-button{ type: "button", title: "Notification setting - #{notification_title(notification_setting.level)}", class: "#{btn_class}", "aria-label" => "Notification setting: #{notification_title(notification_setting.level)}", data: { container: "body", placement: 'top', toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" } }
= sprite_icon("notifications", css_class: "icon notifications-icon js-notifications-icon") = notification_setting_icon(notification_setting)
%span.js-notification-loading.fa.hidden %span.js-notification-loading.fa.hidden
= sprite_icon("arrow-down", css_class: "icon") = sprite_icon("arrow-down", css_class: "icon")
......
---
title: Improve icons and button order in project overview
merge_request: 26796
author:
type: other
...@@ -20,6 +20,16 @@ describe 'Projects > Show > User manages notifications', :js do ...@@ -20,6 +20,16 @@ describe 'Projects > Show > User manages notifications', :js do
click_notifications_button click_notifications_button
expect(find('.update-notification.is-active')).to have_content('On mention') expect(find('.update-notification.is-active')).to have_content('On mention')
expect(find('.notifications-icon use')[:'xlink:href']).to end_with('#notifications')
end
it 'changes the notification setting to disabled' do
click_notifications_button
click_link 'Disabled'
wait_for_requests
expect(find('.notifications-icon use')[:'xlink:href']).to end_with('#notifications-off')
end end
context 'custom notification settings' do context 'custom notification settings' do
......
...@@ -411,4 +411,23 @@ describe ProjectPresenter do ...@@ -411,4 +411,23 @@ describe ProjectPresenter do
end end
end end
end end
describe '#statistics_buttons' do
let(:project) { build(:project) }
let(:presenter) { described_class.new(project, current_user: user) }
it 'orders the items correctly' do
allow(project.repository).to receive(:readme).and_return(double(name: 'readme'))
allow(project.repository).to receive(:changelog).and_return(nil)
allow(project.repository).to receive(:contribution_guide).and_return(double(name: 'foo'))
allow(presenter).to receive(:filename_path).and_return('fake/path')
allow(presenter).to receive(:contribution_guide_path).and_return('fake_path')
buttons = presenter.statistics_buttons(show_auto_devops_callout: false)
expect(buttons.map(&:label)).to start_with(
a_string_including('README'),
a_string_including('CONTRIBUTING')
)
end
end
end end
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