Commit e09d573e authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch '18338-change-admin-navigation-to-match-new-ui' into 'master'

Resolve "Change admin navigation to match new UI"

## What does this MR do?
Moves admin navigation to layout nav to match Project, Groups, and Profile navigation

## Are there points in the code the reviewer needs to double check?

## Why was this MR needed?

## What are the relevant issue numbers?
Closes #18338

## Screenshots (if relevant)
![Screen_Shot_2016-06-14_at_10.26.40_AM](/uploads/f0b8c8b259da16d929be2b36e8eeafb8/Screen_Shot_2016-06-14_at_10.26.40_AM.png)
![Screen_Shot_2016-06-14_at_10.26.44_AM](/uploads/07d9ece2063dfcfec1f0f2647d8ee782/Screen_Shot_2016-06-14_at_10.26.44_AM.png)
## Does this MR meet the acceptance criteria?

- [ ] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- [ ] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)
- [ ] API support added
- [ ] Tests
  - [ ] Added for this feature/bug
  - [ ] All builds are passing
- [ ] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [ ] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [ ] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)

See merge request !4650
parents b2247398 bcbe9b4d
.nav-links.sub-nav
%ul{ class: (container_class) }
= nav_link(controller: :background_jobs) do
= link_to admin_background_jobs_path, title: 'Background Jobs' do
%span
Background Jobs
= nav_link(controller: :logs) do
= link_to admin_logs_path, title: 'Logs' do
%span
Logs
= nav_link(controller: :health_check) do
= link_to admin_health_check_path, title: 'Health Check' do
%span
Health Check
- @no_container = true
- page_title "Background Jobs" - page_title "Background Jobs"
%h3.page-title Background Jobs = render 'admin/background_jobs/head'
%p.light GitLab uses #{link_to "sidekiq", "http://sidekiq.org/"} library for async job processing
%hr %div{ class: (container_class) }
%h3.page-title Background Jobs
%p.light GitLab uses #{link_to "sidekiq", "http://sidekiq.org/"} library for async job processing
.panel.panel-default %hr
.panel.panel-default
.panel-heading Sidekiq running processes .panel-heading Sidekiq running processes
.panel-body .panel-body
- if @sidekiq_processes.empty? - if @sidekiq_processes.empty?
...@@ -42,5 +46,5 @@ ...@@ -42,5 +46,5 @@
.panel.panel-default .panel.panel-default
%iframe{src: sidekiq_path, width: '100%', height: 970, style: "border: none"} %iframe{src: sidekiq_path, width: '100%', height: 970, style: "border: none"}
.top-area - @no_container = true
= render "admin/dashboard/head"
%div{ class: (container_class) }
.top-area
%ul.nav-links %ul.nav-links
%li{class: ('active' if @scope.nil?)} %li{class: ('active' if @scope.nil?)}
= link_to admin_builds_path do = link_to admin_builds_path do
...@@ -19,10 +24,10 @@ ...@@ -19,10 +24,10 @@
- if @all_builds.running_or_pending.any? - if @all_builds.running_or_pending.any?
= link_to 'Cancel all', cancel_all_admin_builds_path, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger', method: :post = link_to 'Cancel all', cancel_all_admin_builds_path, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger', method: :post
.row-content-block.second-block .row-content-block.second-block
#{(@scope || 'all').capitalize} builds #{(@scope || 'all').capitalize} builds
%ul.content-list %ul.content-list
- if @builds.blank? - if @builds.blank?
%li %li
.nothing-here-block No builds to show .nothing-here-block No builds to show
......
.nav-links.sub-nav
%ul{ class: (container_class) }
= nav_link(controller: :dashboard, html_options: {class: 'home'}) do
= link_to admin_root_path, title: 'Overview' do
%span
Overview
= nav_link(controller: [:admin, :projects]) do
= link_to admin_namespaces_projects_path, title: 'Projects' do
%span
Projects
= nav_link(controller: :users) do
= link_to admin_users_path, title: 'Users' do
%span
Users
= nav_link(controller: :groups) do
= link_to admin_groups_path, title: 'Groups' do
%span
Groups
= nav_link path: 'builds#index' do
= link_to admin_builds_path, title: 'Builds' do
%span
Builds
.admin-dashboard.prepend-top-default - @no_container = true
= render "admin/dashboard/head"
%div{ class: (container_class) }
.admin-dashboard.prepend-top-default
.row .row
.col-md-4 .col-md-4
%h4 Statistics %h4 Statistics
......
- @no_container = true
- page_title "Groups" - page_title "Groups"
%h3.page-title = render "admin/dashboard/head"
%div{ class: (container_class) }
%h3.page-title
Groups (#{number_with_delimiter(@groups.total_count)}) Groups (#{number_with_delimiter(@groups.total_count)})
%p.light %p.light
Group allows you to keep projects organized. Group allows you to keep projects organized.
Use groups for uniting related projects. Use groups for uniting related projects.
.top-area .top-area
.nav-search .nav-search
= form_tag admin_groups_path, method: :get, class: 'form-inline' do = form_tag admin_groups_path, method: :get, class: 'form-inline' do
= hidden_field_tag :sort, @sort = hidden_field_tag :sort, @sort
...@@ -34,8 +38,8 @@ ...@@ -34,8 +38,8 @@
= sort_title_oldest_updated = sort_title_oldest_updated
= link_to 'New Group', new_admin_group_path, class: "btn btn-new" = link_to 'New Group', new_admin_group_path, class: "btn btn-new"
%ul.content-list %ul.content-list
- @groups.each do |group| - @groups.each do |group|
= render 'group', group: group = render 'group', group: group
= paginate @groups, theme: "gitlab" = paginate @groups, theme: "gitlab"
- @no_container = true
- page_title "Health Check" - page_title "Health Check"
= render 'admin/background_jobs/head'
%h3.page-title %div{ class: (container_class) }
%h3.page-title
Health Check Health Check
.bs-callout.clearfix .bs-callout.clearfix
.pull-left .pull-left
%p %p
Access token is Access token is
...@@ -12,7 +15,7 @@ ...@@ -12,7 +15,7 @@
data: { confirm: 'Are you sure you want to reset the health check token?' } do data: { confirm: 'Are you sure you want to reset the health check token?' } do
= icon('refresh') = icon('refresh')
Reset health check access token Reset health check access token
%p.light %p.light
Health information can be retrieved as plain text, JSON, or XML using: Health information can be retrieved as plain text, JSON, or XML using:
%ul %ul
%li %li
...@@ -22,7 +25,7 @@ ...@@ -22,7 +25,7 @@
%li %li
%code= health_check_url(token: current_application_settings.health_check_access_token, format: :xml) %code= health_check_url(token: current_application_settings.health_check_access_token, format: :xml)
%p.light %p.light
You can also ask for the status of specific services: You can also ask for the status of specific services:
%ul %ul
%li %li
...@@ -32,8 +35,8 @@ ...@@ -32,8 +35,8 @@
%li %li
%code= health_check_url(token: current_application_settings.health_check_access_token, checks: :migrations) %code= health_check_url(token: current_application_settings.health_check_access_token, checks: :migrations)
%hr %hr
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
Current Status: Current Status:
- if @errors.blank? - if @errors.blank?
......
- @no_container = true
- page_title "Logs" - page_title "Logs"
- loggers = [Gitlab::GitLogger, Gitlab::AppLogger, - loggers = [Gitlab::GitLogger, Gitlab::AppLogger,
Gitlab::ProductionLogger, Gitlab::SidekiqLogger, Gitlab::ProductionLogger, Gitlab::SidekiqLogger,
Gitlab::RepositoryCheckLogger] Gitlab::RepositoryCheckLogger]
%ul.nav-links.log-tabs = render 'admin/background_jobs/head'
%div{ class: (container_class) }
%ul.nav-links.log-tabs
- loggers.each do |klass| - loggers.each do |klass|
%li{ class: (klass == Gitlab::GitLogger ? 'active' : '') } %li{ class: (klass == Gitlab::GitLogger ? 'active' : '') }
= link_to klass::file_name, "##{klass::file_name_noext}", = link_to klass::file_name, "##{klass::file_name_noext}",
'data-toggle' => 'tab' 'data-toggle' => 'tab'
.row-content-block .row-content-block
To prevent performance issues admin logs output the last 2000 lines To prevent performance issues admin logs output the last 2000 lines
.tab-content .tab-content
- loggers.each do |klass| - loggers.each do |klass|
.tab-pane{ class: (klass == Gitlab::GitLogger ? 'active' : ''), .tab-pane{ class: (klass == Gitlab::GitLogger ? 'active' : ''),
id: klass::file_name_noext } id: klass::file_name_noext }
......
- @no_container = true
- page_title "Projects" - page_title "Projects"
= render 'shared/show_aside' = render 'shared/show_aside'
= render "admin/dashboard/head"
.row.prepend-top-default %div{ class: (container_class) }
.row.prepend-top-default
%aside.col-md-3 %aside.col-md-3
.panel.admin-filter .panel.admin-filter
= form_tag admin_namespaces_projects_path, method: :get, class: '' do = form_tag admin_namespaces_projects_path, method: :get, class: '' do
......
- @no_container = true
- page_title "Users" - page_title "Users"
= render 'shared/show_aside' = render 'shared/show_aside'
= render "admin/dashboard/head"
.admin-filter %div{ class: (container_class) }
.admin-filter
%ul.nav-links %ul.nav-links
%li{class: "#{'active' unless params[:filter]}"} %li{class: "#{'active' unless params[:filter]}"}
= link_to admin_users_path do = link_to admin_users_path do
...@@ -68,7 +71,7 @@ ...@@ -68,7 +71,7 @@
%i.fa.fa-search %i.fa.fa-search
.panel.panel-default .panel.panel-default
%ul.well-list %ul.well-list
- @users.each do |user| - @users.each do |user|
%li %li
...@@ -104,4 +107,4 @@ ...@@ -104,4 +107,4 @@
= link_to 'Unlock', unlock_admin_user_path(user), method: :put, class: 'btn-grouped btn btn-xs btn-success', data: { confirm: 'Are you sure?' } = link_to 'Unlock', unlock_admin_user_path(user), method: :put, class: 'btn-grouped btn btn-xs btn-success', data: { confirm: 'Are you sure?' }
- if user.can_be_removed? - if user.can_be_removed?
= link_to 'Destroy', [:admin, user], data: { confirm: "USER #{user.name} WILL BE REMOVED! All issues, merge requests and groups linked to this user will also be removed! Maybe block the user instead? Are you sure?" }, method: :delete, class: 'btn-grouped btn btn-xs btn-remove' = link_to 'Destroy', [:admin, user], data: { confirm: "USER #{user.name} WILL BE REMOVED! All issues, merge requests and groups linked to this user will also be removed! Maybe block the user instead? Are you sure?" }, method: :delete, class: 'btn-grouped btn btn-xs btn-remove'
= paginate @users, theme: "gitlab" = paginate @users, theme: "gitlab"
- page_title "Admin Area" - page_title "Admin Area"
- header_title "Admin Area", admin_root_path - header_title "Admin Area", admin_root_path
- sidebar "admin" - nav "admin"
= render template: "layouts/application" = render template: "layouts/application"
%ul.nav.nav-sidebar %ul.nav-links.scrolling-tabs
= nav_link(controller: :dashboard, html_options: {class: 'home'}) do .fade-left
= link_to admin_root_path, title: 'Overview' do = nav_link(controller: %w(dashboard admin projects users groups builds), html_options: {class: 'home'}) do
= icon('dashboard fw') = link_to admin_root_path, title: 'Overview', class: 'shortcuts-tree' do
%span %span
Overview Overview
= nav_link(controller: [:admin, :projects]) do = nav_link(controller: %w(background_jobs logs health_check)) do
= link_to admin_namespaces_projects_path, title: 'Projects' do = link_to admin_background_jobs_path, title: 'Monitoring' do
= icon('cube fw')
%span %span
Projects Monitoring
= nav_link(controller: :users) do
= link_to admin_users_path, title: 'Users' do
= icon('user fw')
%span
Users
= nav_link(controller: :groups) do
= link_to admin_groups_path, title: 'Groups' do
= icon('group fw')
%span
Groups
= nav_link(controller: :deploy_keys) do = nav_link(controller: :deploy_keys) do
= link_to admin_deploy_keys_path, title: 'Deploy Keys' do = link_to admin_deploy_keys_path, title: 'Deploy Keys' do
= icon('key fw')
%span %span
Deploy Keys Deploy Keys
= nav_link path: ['runners#index', 'runners#show'] do = nav_link path: ['runners#index', 'runners#show'] do
= link_to admin_runners_path, title: 'Runners' do = link_to admin_runners_path, title: 'Runners' do
= icon('cog fw')
%span %span
Runners Runners
%span.count= number_with_delimiter(Ci::Runner.count(:all))
= nav_link path: 'builds#index' do
= link_to admin_builds_path, title: 'Builds' do
= icon('link fw')
%span
Builds
%span.count= number_with_delimiter(Ci::Build.count(:all))
= nav_link(controller: :logs) do
= link_to admin_logs_path, title: 'Logs' do
= icon('file-text fw')
%span
Logs
= nav_link(controller: :health_check) do
= link_to admin_health_check_path, title: 'Health Check' do
= icon('medkit fw')
%span
Health Check
= nav_link(controller: :broadcast_messages) do = nav_link(controller: :broadcast_messages) do
= link_to admin_broadcast_messages_path, title: 'Messages' do = link_to admin_broadcast_messages_path, title: 'Messages' do
= icon('bullhorn fw')
%span %span
Messages Messages
= nav_link(controller: :hooks) do = nav_link(controller: :hooks) do
= link_to admin_hooks_path, title: 'Hooks' do = link_to admin_hooks_path, title: 'Hooks' do
= icon('external-link fw')
%span %span
Hooks Hooks
= nav_link(controller: :background_jobs) do
= link_to admin_background_jobs_path, title: 'Background Jobs' do
= icon('cog fw')
%span
Background Jobs
= nav_link(controller: :appearances) do = nav_link(controller: :appearances) do
= link_to admin_appearances_path, title: 'Appearances' do = link_to admin_appearances_path, title: 'Appearances' do
= icon('image')
%span %span
Appearance Appearance
= nav_link(controller: :applications) do = nav_link(controller: :applications) do
= link_to admin_applications_path, title: 'Applications' do = link_to admin_applications_path, title: 'Applications' do
= icon('cloud fw')
%span %span
Applications Applications
= nav_link(controller: :services) do = nav_link(controller: :services) do
= link_to admin_application_settings_services_path, title: 'Service Templates' do = link_to admin_application_settings_services_path, title: 'Service Templates' do
= icon('copy fw')
%span %span
Service Templates Service Templates
= nav_link(controller: :labels) do = nav_link(controller: :labels) do
= link_to admin_labels_path, title: 'Labels' do = link_to admin_labels_path, title: 'Labels' do
= icon('tags fw')
%span %span
Labels Labels
= nav_link(controller: :abuse_reports) do = nav_link(controller: :abuse_reports) do
= link_to admin_abuse_reports_path, title: "Abuse Reports" do = link_to admin_abuse_reports_path, title: "Abuse Reports" do
= icon('exclamation-circle fw')
%span %span
Abuse Reports Abuse Reports
%span.count= number_with_delimiter(AbuseReport.count(:all)) %span.badge.count= number_with_delimiter(AbuseReport.count(:all))
- if askimet_enabled? - if askimet_enabled?
= nav_link(controller: :spam_logs) do = nav_link(controller: :spam_logs) do
= link_to admin_spam_logs_path, title: "Spam Logs" do = link_to admin_spam_logs_path, title: "Spam Logs" do
= icon('exclamation-triangle fw')
%span %span
Spam Logs Spam Logs
%span.count= number_with_delimiter(SpamLog.count(:all))
= nav_link(controller: :application_settings, html_options: { class: 'separate-item'}) do = nav_link(controller: :application_settings, html_options: { class: 'separate-item'}) do
= link_to admin_application_settings_path, title: 'Settings' do = link_to admin_application_settings_path, title: 'Settings' do
= icon('cogs fw')
%span %span
Settings Settings
.fade-right
...@@ -5,28 +5,36 @@ Feature: Admin Active Tab ...@@ -5,28 +5,36 @@ Feature: Admin Active Tab
Scenario: On Admin Home Scenario: On Admin Home
Given I visit admin page Given I visit admin page
Then the active main tab should be Home Then the active main tab should be Overview
And no other main tabs should be active And no other main tabs should be active
Scenario: On Admin Projects Scenario: On Admin Projects
Given I visit admin projects page Given I visit admin projects page
Then the active main tab should be Projects Then the active main tab should be Overview
And the active sub tab should be Projects
And no other main tabs should be active And no other main tabs should be active
And no other sub tabs should be active
Scenario: On Admin Groups Scenario: On Admin Groups
Given I visit admin groups page Given I visit admin groups page
Then the active main tab should be Groups Then the active main tab should be Overview
And the active sub tab should be Groups
And no other main tabs should be active And no other main tabs should be active
And no other sub tabs should be active
Scenario: On Admin Users Scenario: On Admin Users
Given I visit admin users page Given I visit admin users page
Then the active main tab should be Users Then the active main tab should be Overview
And the active sub tab should be Users
And no other main tabs should be active And no other main tabs should be active
And no other sub tabs should be active
Scenario: On Admin Logs Scenario: On Admin Logs
Given I visit admin logs page Given I visit admin logs page
Then the active main tab should be Logs Then the active main tab should be Monitoring
And the active sub tab should be Logs
And no other main tabs should be active And no other main tabs should be active
And no other sub tabs should be active
Scenario: On Admin Messages Scenario: On Admin Messages
Given I visit admin messages page Given I visit admin messages page
...@@ -40,5 +48,7 @@ Feature: Admin Active Tab ...@@ -40,5 +48,7 @@ Feature: Admin Active Tab
Scenario: On Admin Resque Scenario: On Admin Resque
Given I visit admin Resque page Given I visit admin Resque page
Then the active main tab should be Resque Then the active main tab should be Monitoring
And the active sub tab should be Resque
And no other main tabs should be active And no other main tabs should be active
And no other sub tabs should be active
class Spinach::Features::AdminActiveTab < Spinach::FeatureSteps class Spinach::Features::AdminActiveTab < Spinach::FeatureSteps
include SharedAuthentication include SharedAuthentication
include SharedPaths include SharedPaths
include SharedSidebarActiveTab include SharedActiveTab
step 'the active main tab should be Home' do step 'the active main tab should be Overview' do
ensure_active_main_tab('Overview') ensure_active_main_tab('Overview')
end end
step 'the active main tab should be Projects' do step 'the active sub tab should be Projects' do
ensure_active_main_tab('Projects') ensure_active_sub_tab('Projects')
end end
step 'the active main tab should be Groups' do step 'the active sub tab should be Groups' do
ensure_active_main_tab('Groups') ensure_active_sub_tab('Groups')
end end
step 'the active main tab should be Users' do step 'the active sub tab should be Users' do
ensure_active_main_tab('Users') ensure_active_sub_tab('Users')
end
step 'the active main tab should be Logs' do
ensure_active_main_tab('Logs')
end end
step 'the active main tab should be Hooks' do step 'the active main tab should be Hooks' do
ensure_active_main_tab('Hooks') ensure_active_main_tab('Hooks')
end end
step 'the active main tab should be Resque' do step 'the active main tab should be Monitoring' do
ensure_active_main_tab('Background Jobs') ensure_active_main_tab('Monitoring')
end end
step 'the active main tab should be Messages' do step 'the active sub tab should be Resque' do
ensure_active_main_tab('Messages') ensure_active_sub_tab('Background Jobs')
end end
step 'no other main tabs should be active' do step 'the active sub tab should be Logs' do
expect(page).to have_selector('.nav-sidebar > li.active', count: 1) ensure_active_sub_tab('Logs')
end end
def ensure_active_main_tab(content) step 'the active main tab should be Messages' do
expect(find('.nav-sidebar > li.active')).to have_content(content) ensure_active_main_tab('Messages')
end end
end end
...@@ -12,9 +12,11 @@ describe "Admin::Hooks", feature: true do ...@@ -12,9 +12,11 @@ describe "Admin::Hooks", feature: true do
describe "GET /admin/hooks" do describe "GET /admin/hooks" do
it "should be ok" do it "should be ok" do
visit admin_root_path visit admin_root_path
page.within ".sidebar-wrapper" do
page.within ".layout-nav" do
click_on "Hooks" click_on "Hooks"
end end
expect(current_path).to eq(admin_hooks_path) expect(current_path).to eq(admin_hooks_path)
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