From f82c14259b81d692b7f922b40895b60b2b240361 Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Thu, 20 Aug 2015 11:59:14 +0200
Subject: [PATCH] Rebuild navigation for dashboard

* projects from explore page are available from dashboard
* use dashboard sidebar for both logged in and not users
* move explroe projects under projects tab
* move explore groups under groups tab
* move public snippets under snippets tab

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
---
 app/assets/stylesheets/pages/explore.scss     |  8 +++
 app/controllers/snippets_controller.rb        |  2 +-
 app/helpers/explore_helper.rb                 |  2 +-
 app/helpers/tab_helper.rb                     |  8 ++-
 app/views/dashboard/_groups_head.html.haml    |  7 +++
 app/views/dashboard/_projects_head.html.haml  |  6 +-
 app/views/dashboard/groups/index.html.haml    |  2 +
 app/views/explore/groups/index.html.haml      |  2 +
 .../explore/projects/_dropdown.html.haml      | 27 +++++++++
 app/views/explore/projects/_filter.html.haml  | 20 +------
 app/views/explore/projects/index.html.haml    |  5 +-
 app/views/explore/projects/starred.html.haml  |  7 ++-
 app/views/explore/projects/trending.html.haml |  7 ++-
 app/views/layouts/explore.html.haml           |  7 ++-
 app/views/layouts/nav/_dashboard.html.haml    | 59 +++++++++----------
 app/views/layouts/nav/_explore.html.haml      | 18 ------
 app/views/layouts/nav/_snippets.html.haml     | 12 ----
 app/views/layouts/snippets.html.haml          |  7 ++-
 app/views/snippets/index.html.haml            |  3 +-
 19 files changed, 112 insertions(+), 97 deletions(-)
 create mode 100644 app/views/dashboard/_groups_head.html.haml
 create mode 100644 app/views/explore/projects/_dropdown.html.haml
 delete mode 100644 app/views/layouts/nav/_explore.html.haml
 delete mode 100644 app/views/layouts/nav/_snippets.html.haml

diff --git a/app/assets/stylesheets/pages/explore.scss b/app/assets/stylesheets/pages/explore.scss
index 9b92128624c..da06fe9954e 100644
--- a/app/assets/stylesheets/pages/explore.scss
+++ b/app/assets/stylesheets/pages/explore.scss
@@ -6,3 +6,11 @@
     font-size: 30px;
   }
 }
+
+.explore-trending-block {
+  .lead {
+    line-height: 32px;
+    font-size: 18px;
+    margin-top: 10px;
+  }
+}
diff --git a/app/controllers/snippets_controller.rb b/app/controllers/snippets_controller.rb
index e6ef636c4f3..8e7e45c781f 100644
--- a/app/controllers/snippets_controller.rb
+++ b/app/controllers/snippets_controller.rb
@@ -9,7 +9,7 @@ class SnippetsController < ApplicationController
 
   skip_before_action :authenticate_user!, only: [:index, :user_index, :show, :raw]
 
-  layout 'dashboard'
+  layout 'snippets'
   respond_to :html
 
   def index
diff --git a/app/helpers/explore_helper.rb b/app/helpers/explore_helper.rb
index 7616fe6bad8..0d291f9a87e 100644
--- a/app/helpers/explore_helper.rb
+++ b/app/helpers/explore_helper.rb
@@ -10,7 +10,7 @@ module ExploreHelper
 
     options = exist_opts.merge(options)
 
-    path = request.path
+    path = explore_projects_path
     path << "?#{options.to_param}"
     path
   end
diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb
index 9c99de1c3fa..0e7d8065ac7 100644
--- a/app/helpers/tab_helper.rb
+++ b/app/helpers/tab_helper.rb
@@ -68,7 +68,13 @@ module TabHelper
         current_path?(single_path)
       end
     elsif page = options.delete(:page)
-      current_page?(page)
+      unless page.respond_to?(:each)
+        page = [page]
+      end
+
+      page.any? do |single_page|
+        current_page?(single_page)
+      end
     else
       c = options.delete(:controller)
       a = options.delete(:action)
diff --git a/app/views/dashboard/_groups_head.html.haml b/app/views/dashboard/_groups_head.html.haml
new file mode 100644
index 00000000000..8a397a84e0e
--- /dev/null
+++ b/app/views/dashboard/_groups_head.html.haml
@@ -0,0 +1,7 @@
+%ul.center-top-menu
+  = nav_link(page: [dashboard_groups_path]) do
+    = link_to dashboard_groups_path, title: 'Your groups', data: {placement: 'right'} do
+      Your Groups
+  = nav_link(page: [explore_groups_path]) do
+    = link_to explore_groups_path, title: 'Explore groups', data: {toggle: 'tooltip', placement: 'bottom'} do
+      Explore Groups
diff --git a/app/views/dashboard/_projects_head.html.haml b/app/views/dashboard/_projects_head.html.haml
index 7de9480fd8f..f7be194c696 100644
--- a/app/views/dashboard/_projects_head.html.haml
+++ b/app/views/dashboard/_projects_head.html.haml
@@ -1,10 +1,10 @@
 %ul.center-top-menu
-  = nav_link(path: ['dashboard#show', 'root#show'], html_options: {class: 'home'}) do
+  = nav_link(path: ['dashboard#show', 'root#show']) do
     = link_to dashboard_path, title: 'Home', class: 'shortcuts-activity', data: {placement: 'right'} do
       Your Projects
-  = nav_link(path: 'projects#starred') do
+  = nav_link(page: starred_dashboard_projects_path) do
     = link_to starred_dashboard_projects_path, title: 'Starred Projects', data: {placement: 'right'} do
       Starred Projects
-  = nav_link(controller: :explore) do
+  = nav_link(page: [explore_root_path, trending_explore_projects_path, starred_explore_projects_path, explore_projects_path]) do
     = link_to explore_root_path, title: 'Explore', data: {toggle: 'tooltip', placement: 'bottom'} do
       Explore Projects
diff --git a/app/views/dashboard/groups/index.html.haml b/app/views/dashboard/groups/index.html.haml
index 0a354373b9b..37315070ea8 100644
--- a/app/views/dashboard/groups/index.html.haml
+++ b/app/views/dashboard/groups/index.html.haml
@@ -1,4 +1,6 @@
 - page_title "Groups"
+= render 'dashboard/groups_head'
+
 %h3.page-title
   Group Membership
   - if current_user.can_create_group?
diff --git a/app/views/explore/groups/index.html.haml b/app/views/explore/groups/index.html.haml
index f3f0b778539..c34493d0c20 100644
--- a/app/views/explore/groups/index.html.haml
+++ b/app/views/explore/groups/index.html.haml
@@ -1,4 +1,6 @@
 - page_title "Groups"
+- if current_user
+  = render 'dashboard/groups_head'
 .clearfix
   .pull-left
     = form_tag explore_groups_path, method: :get, class: 'form-inline form-tiny' do |f|
diff --git a/app/views/explore/projects/_dropdown.html.haml b/app/views/explore/projects/_dropdown.html.haml
new file mode 100644
index 00000000000..b23a3c1e5c1
--- /dev/null
+++ b/app/views/explore/projects/_dropdown.html.haml
@@ -0,0 +1,27 @@
+.dropdown.inline
+  %button.dropdown-toggle.btn{type: 'button', 'data-toggle' => 'dropdown'}
+    %span.light sort:
+    - if @sort.present?
+      = sort_options_hash[@sort]
+    - elsif current_page?(trending_explore_projects_path) || current_page?(explore_root_path)
+      Trending projects
+    - elsif current_page?(starred_explore_projects_path)
+      Most stars
+    - else
+      = sort_title_recently_created
+    %b.caret
+  %ul.dropdown-menu
+    %li
+      = link_to trending_explore_projects_path do
+        Trending projects
+      = link_to starred_explore_projects_path do
+        Most stars
+      = link_to explore_projects_filter_path(sort: sort_value_recently_created) do
+        = sort_title_recently_created
+      = link_to explore_projects_filter_path(sort: sort_value_oldest_created) do
+        = sort_title_oldest_created
+      = link_to explore_projects_filter_path(sort: sort_value_recently_updated) do
+        = sort_title_recently_updated
+      = link_to explore_projects_filter_path(sort: sort_value_oldest_updated) do
+        = sort_title_oldest_updated
+
diff --git a/app/views/explore/projects/_filter.html.haml b/app/views/explore/projects/_filter.html.haml
index 82622a58ed2..4b91291caf4 100644
--- a/app/views/explore/projects/_filter.html.haml
+++ b/app/views/explore/projects/_filter.html.haml
@@ -46,22 +46,4 @@
             = link_to explore_projects_filter_path(tag: tag.name) do
               %i.fa.fa-tag
               = tag.name
-
-  .dropdown.inline
-    %button.dropdown-toggle.btn{type: 'button', 'data-toggle' => 'dropdown'}
-      %span.light sort:
-      - if @sort.present?
-        = sort_options_hash[@sort]
-      - else
-        = sort_title_recently_created
-      %b.caret
-    %ul.dropdown-menu
-      %li
-        = link_to explore_projects_filter_path(sort: sort_value_recently_created) do
-          = sort_title_recently_created
-        = link_to explore_projects_filter_path(sort: sort_value_oldest_created) do
-          = sort_title_oldest_created
-        = link_to explore_projects_filter_path(sort: sort_value_recently_updated) do
-          = sort_title_recently_updated
-        = link_to explore_projects_filter_path(sort: sort_value_oldest_updated) do
-          = sort_title_oldest_updated
+  = render 'explore/projects/dropdown'
diff --git a/app/views/explore/projects/index.html.haml b/app/views/explore/projects/index.html.haml
index ba2276f51ce..4956081e1ed 100644
--- a/app/views/explore/projects/index.html.haml
+++ b/app/views/explore/projects/index.html.haml
@@ -1,8 +1,9 @@
 - page_title "Projects"
+- if current_user
+  = render 'dashboard/projects_head'
 .clearfix
   = render 'filter'
-
-%hr
+%br
 .public-projects
   %ul.bordered-list.top-list
     = render @projects
diff --git a/app/views/explore/projects/starred.html.haml b/app/views/explore/projects/starred.html.haml
index b5d146b1f2f..fdccbe5692f 100644
--- a/app/views/explore/projects/starred.html.haml
+++ b/app/views/explore/projects/starred.html.haml
@@ -1,9 +1,12 @@
 - page_title "Starred Projects"
+- if current_user
+  = render 'dashboard/projects_head'
 .explore-trending-block
-  %p.lead
+  .lead
     %i.fa.fa-star
     See most starred projects
-  %hr
+    .pull-right
+      = render 'explore/projects/dropdown'
   .public-projects
     %ul.bordered-list
       = render @starred_projects
diff --git a/app/views/explore/projects/trending.html.haml b/app/views/explore/projects/trending.html.haml
index 5e24df76a63..98a4174b426 100644
--- a/app/views/explore/projects/trending.html.haml
+++ b/app/views/explore/projects/trending.html.haml
@@ -1,4 +1,6 @@
 - page_title "Trending Projects"
+- if current_user
+  = render 'dashboard/projects_head'
 .explore-title
   %h3
     Explore GitLab
@@ -6,10 +8,11 @@
     Discover projects and groups. Share your projects with others
 %hr
 .explore-trending-block
-  %p.lead
+  .lead
     %i.fa.fa-comments-o
     See most discussed projects for last month
-  %hr
+    .pull-right
+      = render 'explore/projects/dropdown'
   .public-projects
     %ul.bordered-list
       = render @trending_projects
diff --git a/app/views/layouts/explore.html.haml b/app/views/layouts/explore.html.haml
index 56bb92a536e..17fee9c510d 100644
--- a/app/views/layouts/explore.html.haml
+++ b/app/views/layouts/explore.html.haml
@@ -1,5 +1,8 @@
 - page_title    "Explore"
-- header_title  "Explore GitLab", explore_root_path
-- sidebar       "explore"
+- if current_user
+  - header_title  "Dashboard", root_path
+- else
+  - header_title  "Explore GitLab", explore_root_path
+- sidebar       "dashboard"
 
 = render template: "layouts/application"
diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml
index a77d39acb8c..8f010196d1a 100644
--- a/app/views/layouts/nav/_dashboard.html.haml
+++ b/app/views/layouts/nav/_dashboard.html.haml
@@ -1,46 +1,43 @@
 %ul.nav.nav-sidebar
-  = nav_link(path: ['dashboard#show', 'root#show', 'projects#starred'], html_options: {class: 'home'}) do
-    = link_to root_path, title: 'Home', class: 'shortcuts-activity', data: {placement: 'right'} do
+  = nav_link(path: ['dashboard#show', 'root#show', 'projects#trending', 'projects#starred', 'projects#index'], html_options: {class: 'home'}) do
+    = link_to (current_user ? root_path : explore_root_path), title: 'Home', class: 'shortcuts-activity', data: {placement: 'right'} do
       = icon('dashboard fw')
       %span
         Projects
-  -#= nav_link(path: 'projects#starred') do
-    -#= link_to starred_dashboard_projects_path, title: 'Starred Projects', data: {placement: 'right'} do
-      -#= icon('star fw')
-      -#%span
-        -#Starred Projects
   = nav_link(controller: :groups) do
-    = link_to dashboard_groups_path, title: 'Groups', data: {placement: 'right'} do
+    = link_to (current_user ? dashboard_groups_path : explore_groups_path), title: 'Groups', data: {placement: 'right'} do
       = icon('group fw')
       %span
         Groups
-  = nav_link(controller: :milestones) do
-    = link_to dashboard_milestones_path, title: 'Milestones', data: {placement: 'right'} do
-      = icon('clock-o fw')
-      %span
-        Milestones
-  = nav_link(path: 'dashboard#issues') do
-    = link_to assigned_issues_dashboard_path, title: 'Issues', class: 'shortcuts-issues', data: {placement: 'right'} do
-      = icon('exclamation-circle fw')
-      %span
-        Issues
-        %span.count= current_user.assigned_issues.opened.count
-  = nav_link(path: 'dashboard#merge_requests') do
-    = link_to assigned_mrs_dashboard_path, title: 'Merge Requests', class: 'shortcuts-merge_requests', data: {placement: 'right'} do
-      = icon('tasks fw')
-      %span
-        Merge Requests
-        %span.count= current_user.assigned_merge_requests.opened.count
+  - if current_user
+    = nav_link(controller: :milestones) do
+      = link_to dashboard_milestones_path, title: 'Milestones', data: {placement: 'right'} do
+        = icon('clock-o fw')
+        %span
+          Milestones
+    = nav_link(path: 'dashboard#issues') do
+      = link_to assigned_issues_dashboard_path, title: 'Issues', class: 'shortcuts-issues', data: {placement: 'right'} do
+        = icon('exclamation-circle fw')
+        %span
+          Issues
+          %span.count= current_user.assigned_issues.opened.count
+    = nav_link(path: 'dashboard#merge_requests') do
+      = link_to assigned_mrs_dashboard_path, title: 'Merge Requests', class: 'shortcuts-merge_requests', data: {placement: 'right'} do
+        = icon('tasks fw')
+        %span
+          Merge Requests
+          %span.count= current_user.assigned_merge_requests.opened.count
   = nav_link(controller: :snippets) do
-    = link_to user_snippets_path(current_user), title: 'Your snippets', data: {placement: 'right'} do
+    = link_to (current_user ? user_snippets_path(current_user) : snippets_path), title: 'Your snippets', data: {placement: 'right'} do
       = icon('dashboard fw')
       %span
         Snippets
-  = nav_link(controller: :profile) do
-    = link_to profile_path, title: 'Profile settings', data: {toggle: 'tooltip', placement: 'bottom'} do
-      = icon('user fw')
-      %span
-        Profile
+  - if current_user
+    = nav_link(controller: :profile) do
+      = link_to profile_path, title: 'Profile settings', data: {toggle: 'tooltip', placement: 'bottom'} do
+        = icon('user fw')
+        %span
+          Profile
   = nav_link(controller: :help) do
     = link_to help_path, title: 'Help', data: {placement: 'right'} do
       = icon('question-circle fw')
diff --git a/app/views/layouts/nav/_explore.html.haml b/app/views/layouts/nav/_explore.html.haml
deleted file mode 100644
index 66870e84ceb..00000000000
--- a/app/views/layouts/nav/_explore.html.haml
+++ /dev/null
@@ -1,18 +0,0 @@
-%ul.nav.nav-sidebar
-  = nav_link(path: 'projects#trending') do
-    = link_to explore_root_path, title: 'Trending Projects', data: {placement: 'right'} do
-      = icon('comments fw')
-      %span Trending Projects
-  = nav_link(path: 'projects#starred') do
-    = link_to starred_explore_projects_path, title: 'Most-starred Projects', data: {placement: 'right'} do
-      = icon('star fw')
-      %span Most-starred Projects
-  = nav_link(path: 'projects#index') do
-    = link_to explore_projects_path, title: 'All Projects', data: {placement: 'right'} do
-      = icon('bookmark fw')
-      %span All Projects
-  = nav_link(controller: :groups) do
-    = link_to explore_groups_path, title: 'All Groups', data: {placement: 'right'} do
-      = icon('group fw')
-      %span All Groups
-
diff --git a/app/views/layouts/nav/_snippets.html.haml b/app/views/layouts/nav/_snippets.html.haml
deleted file mode 100644
index 458b76a2c99..00000000000
--- a/app/views/layouts/nav/_snippets.html.haml
+++ /dev/null
@@ -1,12 +0,0 @@
-%ul.nav.nav-sidebar
-  - if current_user
-    = nav_link(path: user_snippets_path(current_user), html_options: {class: 'home'}) do
-      = link_to user_snippets_path(current_user), title: 'Your snippets', data: {placement: 'right'} do
-        = icon('dashboard fw')
-        %span
-          Your Snippets
-  = nav_link(path: snippets_path) do
-    = link_to snippets_path, title: 'Discover snippets', data: {placement: 'right'} do
-      = icon('globe fw')
-      %span
-        Discover Snippets
diff --git a/app/views/layouts/snippets.html.haml b/app/views/layouts/snippets.html.haml
index 9b0f40073ab..b77fe09fc2a 100644
--- a/app/views/layouts/snippets.html.haml
+++ b/app/views/layouts/snippets.html.haml
@@ -1,5 +1,8 @@
 - page_title    'Snippets'
-- header_title  'Snippets', snippets_path
-- sidebar       "snippets"
+- if current_user
+  - header_title  "Dashboard", root_path
+- else
+  - header_title  'Snippets', snippets_path
+- sidebar       "dashboard"
 
 = render template: "layouts/application"
diff --git a/app/views/snippets/index.html.haml b/app/views/snippets/index.html.haml
index dc45cfacd84..cd65bf6f681 100644
--- a/app/views/snippets/index.html.haml
+++ b/app/views/snippets/index.html.haml
@@ -1,5 +1,6 @@
 - page_title "Public Snippets"
-= render 'head'
+- if current_user
+  = render 'head'
 %h3.page-title
   Public snippets
 
-- 
GitLab