From 0c8f07774c2a128aa8aff6be00ed91be2a08cddb Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Mon, 14 Sep 2015 19:46:58 +0200
Subject: [PATCH] Add page titles to header for group and project

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
---
 app/helpers/gitlab_routing_helper.rb     |  8 +++
 app/helpers/projects_helper.rb           | 69 ++++++++++++++++++------
 app/views/groups/edit.html.haml          |  2 +
 app/views/groups/projects.html.haml      |  2 +
 app/views/layouts/nav/_project.html.haml |  4 +-
 app/views/layouts/project.html.haml      |  2 +-
 6 files changed, 67 insertions(+), 20 deletions(-)

diff --git a/app/helpers/gitlab_routing_helper.rb b/app/helpers/gitlab_routing_helper.rb
index d0fae255a0..e0816f4e71 100644
--- a/app/helpers/gitlab_routing_helper.rb
+++ b/app/helpers/gitlab_routing_helper.rb
@@ -17,6 +17,14 @@ module GitlabRoutingHelper
     namespace_project_path(project.namespace, project, *args)
   end
 
+  def project_files_path(project, *args)
+    namespace_project_tree_path(project.namespace, project, @ref || project.repository.root_ref)
+  end
+
+  def project_commits_path(project, *args)
+    namespace_project_commits_path(project.namespace, project, @ref || project.repository.root_ref)
+  end
+
   def activity_project_path(project, *args)
     activity_namespace_project_path(project.namespace, project, *args)
   end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index ab9b068de0..268c563700 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -43,24 +43,22 @@ module ProjectsHelper
     end
   end
 
-  def project_title(project)
-    if project.group
-      content_tag :span do
-        link_to(
-          simple_sanitize(project.group.name), group_path(project.group)
-        ) + ' / ' +
-          link_to(simple_sanitize(project.name),
-                  project_path(project))
-      end
-    else
-      owner = project.namespace.owner
-      content_tag :span do
-        link_to(
-          simple_sanitize(owner.name), user_path(owner)
-        ) + ' / ' +
-          link_to(simple_sanitize(project.name),
-                  project_path(project))
+  def project_title(project, name = nil, url = nil)
+    namespace_link =
+      if project.group
+        link_to(simple_sanitize(project.group.name), group_path(project.group))
+      else
+        owner = project.namespace.owner
+        link_to(simple_sanitize(owner.name), user_path(owner))
       end
+
+    project_link = link_to(simple_sanitize(project.name), project_path(project))
+
+    full_title = namespace_link + ' / ' + project_link
+    full_title += ' &middot; '.html_safe + link_to(simple_sanitize(name), url) if name
+
+    content_tag :span do
+      full_title
     end
   end
 
@@ -315,6 +313,43 @@ module ProjectsHelper
     end
   end
 
+  def detect_project_title(project)
+    current_ref = @ref || project.repository.root_ref
+
+    name, url =
+      if current_controller? 'wikis'
+        ['Wiki', get_project_wiki_path(project)]
+      elsif current_controller? 'project_members'
+        ['Members', namespace_project_project_members_path(project.namespace, project)]
+      elsif current_controller? 'labels'
+        ['Labels', namespace_project_labels_path(project.namespace, project)]
+      elsif current_controller? 'members'
+        ['Members', project_files_path(project)]
+      elsif current_controller? 'commits'
+        ['Commits', project_commits_path(project)]
+      elsif current_controller? 'graphs'
+        ['Graphs', namespace_project_graph_path(project.namespace, project, current_ref)]
+      elsif current_controller? 'network'
+        ['Network', namespace_project_network_path(project.namespace, project, current_ref)]
+      elsif current_controller? 'milestones'
+        ['Milestones', namespace_project_milestones_path(project.namespace, project)]
+      elsif current_controller? 'snippets'
+        ['Snippets', namespace_project_snippets_path(project.namespace, project)]
+      elsif current_controller? 'issues'
+        ['Issues', namespace_project_issues_path(project.namespace, project)]
+      elsif current_controller? 'merge_requests'
+        ['Merge Requests', namespace_project_merge_requests_path(project.namespace, project)]
+      elsif current_controller? 'tree', 'blob'
+        ['Files', project_files_path(project)]
+      elsif current_path? 'projects#activity'
+        ['Activity', activity_project_path(project)]
+      else
+        [nil, nil]
+      end
+
+    project_title(project, name, url)
+  end
+
   private
 
   def filename_path(project, filename)
diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml
index ac7d9ba0f4..ae8fc9f85f 100644
--- a/app/views/groups/edit.html.haml
+++ b/app/views/groups/edit.html.haml
@@ -1,4 +1,6 @@
+- header_title group_title(@group, "Settings", edit_group_path(@group))
 - @blank_container = true
+
 .panel.panel-default
   .panel-heading
     %strong= @group.name
diff --git a/app/views/groups/projects.html.haml b/app/views/groups/projects.html.haml
index d06cfa7ff9..f1d507a50c 100644
--- a/app/views/groups/projects.html.haml
+++ b/app/views/groups/projects.html.haml
@@ -1,4 +1,6 @@
 - page_title "Projects"
+- header_title group_title(@group, "Projects", projects_group_path(@group))
+
 .panel.panel-default
   .panel-heading
     %strong= @group.name
diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml
index 1d22a7442e..2159d931da 100644
--- a/app/views/layouts/nav/_project.html.haml
+++ b/app/views/layouts/nav/_project.html.haml
@@ -26,14 +26,14 @@
         Activity
   - if project_nav_tab? :files
     = nav_link(controller: %w(tree blob blame edit_tree new_tree)) do
-      = link_to namespace_project_tree_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Files',  class: 'shortcuts-tree', data: {placement: 'right'} do
+      = link_to project_files_path(@project), title: 'Files',  class: 'shortcuts-tree', data: {placement: 'right'} do
         = icon('files-o fw')
         %span
           Files
 
   - if project_nav_tab? :commits
     = nav_link(controller: %w(commit commits compare repositories tags branches)) do
-      = link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Commits', class: 'shortcuts-commits', data: {placement: 'right'} do
+      = link_to project_commits_path(@project), title: 'Commits', class: 'shortcuts-commits', data: {placement: 'right'} do
         = icon('history fw')
         %span
           Commits
diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
index 44afa33dfe..5c4dd67f0e 100644
--- a/app/views/layouts/project.html.haml
+++ b/app/views/layouts/project.html.haml
@@ -1,5 +1,5 @@
 - page_title    @project.name_with_namespace
-- header_title  project_title(@project)
+- header_title  detect_project_title(@project)
 - sidebar       "project" unless sidebar
 
 - content_for :scripts_body_top do
-- 
2.30.9