From c85df8105e3b8982ecf6a16f8ae9f3af2f130030 Mon Sep 17 00:00:00 2001
From: Phil Hughes <me@iamphill.com>
Date: Thu, 6 Jul 2017 17:24:03 +0100
Subject: [PATCH] improvements to breadcrumb titles, links & nesting

---
 app/assets/javascripts/group_name.js          | 15 +++++++++------
 app/helpers/breadcrumbs_helper.rb             | 19 +++++++++++++++++++
 app/views/admin/appearances/show.html.haml    |  1 +
 .../admin/application_settings/show.html.haml |  1 +
 .../admin/broadcast_messages/edit.html.haml   |  1 +
 .../admin/broadcast_messages/index.html.haml  |  1 +
 app/views/admin/hooks/index.html.haml         |  1 +
 app/views/admin/services/index.html.haml      |  1 +
 app/views/dashboard/activity.html.haml        |  1 +
 app/views/dashboard/issues.html.haml          |  1 +
 app/views/dashboard/merge_requests.html.haml  |  1 +
 .../dashboard/projects/starred.html.haml      |  1 +
 app/views/dashboard/todos/index.html.haml     |  1 +
 app/views/explore/groups/index.html.haml      |  1 +
 app/views/explore/projects/index.html.haml    |  1 +
 app/views/explore/projects/starred.html.haml  |  1 +
 app/views/explore/projects/trending.html.haml |  1 +
 app/views/groups/edit.html.haml               |  1 +
 .../groups/group_members/index.html.haml      |  1 +
 app/views/groups/issues.html.haml             |  1 +
 app/views/groups/merge_requests.html.haml     |  1 +
 app/views/groups/new.html.haml                |  1 +
 app/views/layouts/_page.html.haml             |  2 +-
 app/views/layouts/nav/_breadcrumbs.html.haml  | 11 ++++++++---
 app/views/profiles/audit_log.html.haml        |  1 +
 app/views/profiles/show.html.haml             |  1 +
 .../profiles/two_factor_auths/show.html.haml  |  6 ++++++
 app/views/projects/activity.html.haml         |  3 +++
 app/views/projects/boards/_show.html.haml     |  4 ++--
 app/views/projects/branches/index.html.haml   |  3 +++
 app/views/projects/commits/show.html.haml     |  3 +++
 app/views/projects/compare/index.html.haml    |  2 ++
 app/views/projects/compare/show.html.haml     |  2 ++
 .../projects/cycle_analytics/show.html.haml   |  2 ++
 app/views/projects/edit.html.haml             |  1 +
 app/views/projects/graphs/charts.html.haml    |  2 ++
 app/views/projects/graphs/show.html.haml      |  4 ++++
 .../merge_requests/creations/new.html.haml    |  1 +
 app/views/projects/network/show.html.haml     |  2 ++
 app/views/projects/new.html.haml              |  1 +
 .../pipeline_schedules/index.html.haml        |  4 ++++
 .../projects/pipeline_schedules/new.html.haml |  5 +++++
 app/views/projects/pipelines/charts.html.haml |  3 +++
 .../projects/settings/ci_cd/show.html.haml    |  5 +++++
 app/views/projects/tags/index.html.haml       |  3 +++
 app/views/projects/wikis/show.html.haml       |  1 +
 app/views/search/show.html.haml               |  1 +
 app/views/users/show.html.haml                |  2 ++
 48 files changed, 117 insertions(+), 12 deletions(-)
 create mode 100644 app/helpers/breadcrumbs_helper.rb

diff --git a/app/assets/javascripts/group_name.js b/app/assets/javascripts/group_name.js
index 37c6765d94..3e483b69fd 100644
--- a/app/assets/javascripts/group_name.js
+++ b/app/assets/javascripts/group_name.js
@@ -5,12 +5,15 @@ export default class GroupName {
   constructor() {
     this.titleContainer = document.querySelector('.js-title-container');
     this.title = this.titleContainer.querySelector('.title');
-    this.titleWidth = this.title.offsetWidth;
-    this.groupTitle = this.titleContainer.querySelector('.group-title');
-    this.groups = this.titleContainer.querySelectorAll('.group-path');
-    this.toggle = null;
-    this.isHidden = false;
-    this.init();
+
+    if (this.title) {
+      this.titleWidth = this.title.offsetWidth;
+      this.groupTitle = this.titleContainer.querySelector('.group-title');
+      this.groups = this.titleContainer.querySelectorAll('.group-path');
+      this.toggle = null;
+      this.isHidden = false;
+      this.init();
+    }
   }
 
   init() {
diff --git a/app/helpers/breadcrumbs_helper.rb b/app/helpers/breadcrumbs_helper.rb
new file mode 100644
index 0000000000..eb8df3bc1e
--- /dev/null
+++ b/app/helpers/breadcrumbs_helper.rb
@@ -0,0 +1,19 @@
+module BreadcrumbsHelper
+  def breadcrumbs_extra_links(text, link)
+    @breadcrumbs_extra_links ||= []
+    @breadcrumbs_extra_links.push({
+      text: text,
+      link: link
+    })
+  end
+
+  def breadcrumb_title_link
+    return @breadcrumb_link if @breadcrumb_link
+
+    if controller.available_action?(:index)
+      url_for(action: "index")
+    else
+      request.path
+    end
+  end
+end
diff --git a/app/views/admin/appearances/show.html.haml b/app/views/admin/appearances/show.html.haml
index 454b779842..3d1929a8b7 100644
--- a/app/views/admin/appearances/show.html.haml
+++ b/app/views/admin/appearances/show.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Appearance"
 - page_title "Appearance"
 
 %h3.page-title
diff --git a/app/views/admin/application_settings/show.html.haml b/app/views/admin/application_settings/show.html.haml
index ecc46d86af..2e7f47e261 100644
--- a/app/views/admin/application_settings/show.html.haml
+++ b/app/views/admin/application_settings/show.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Settings"
 - page_title "Settings"
 
 %h3.page-title Settings
diff --git a/app/views/admin/broadcast_messages/edit.html.haml b/app/views/admin/broadcast_messages/edit.html.haml
index 45e053eb31..d0e4d4435d 100644
--- a/app/views/admin/broadcast_messages/edit.html.haml
+++ b/app/views/admin/broadcast_messages/edit.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Messages"
 - page_title "Broadcast Messages"
 
 = render 'form'
diff --git a/app/views/admin/broadcast_messages/index.html.haml b/app/views/admin/broadcast_messages/index.html.haml
index 4f2ae081d7..2e4390c361 100644
--- a/app/views/admin/broadcast_messages/index.html.haml
+++ b/app/views/admin/broadcast_messages/index.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Messages"
 - page_title "Broadcast Messages"
 
 %h3.page-title
diff --git a/app/views/admin/hooks/index.html.haml b/app/views/admin/hooks/index.html.haml
index e92b8bc39f..89592d4464 100644
--- a/app/views/admin/hooks/index.html.haml
+++ b/app/views/admin/hooks/index.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "System Hooks"
 - page_title 'System Hooks'
 %h3.page-title
   System hooks
diff --git a/app/views/admin/services/index.html.haml b/app/views/admin/services/index.html.haml
index 5013257209..438907e234 100644
--- a/app/views/admin/services/index.html.haml
+++ b/app/views/admin/services/index.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Services Templates"
 - page_title "Service Templates"
 %h3.page-title Service templates
 %p.light Service template allows you to set default values for project services
diff --git a/app/views/dashboard/activity.html.haml b/app/views/dashboard/activity.html.haml
index ad35d05c29..60dfa75351 100644
--- a/app/views/dashboard/activity.html.haml
+++ b/app/views/dashboard/activity.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Activity"
 - @hide_top_links = true
 - @no_container = true
 
diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml
index 9f3f6b7400..52e0012fd7 100644
--- a/app/views/dashboard/issues.html.haml
+++ b/app/views/dashboard/issues.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title "Issues"
 - header_title  "Issues", issues_dashboard_path(assignee_id: current_user.id)
 = content_for :meta_tags do
diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml
index 32c57c2613..c3fe14da2b 100644
--- a/app/views/dashboard/merge_requests.html.haml
+++ b/app/views/dashboard/merge_requests.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title "Merge Requests"
 - header_title  "Merge Requests", merge_requests_dashboard_path(assignee_id: current_user.id)
 
diff --git a/app/views/dashboard/projects/starred.html.haml b/app/views/dashboard/projects/starred.html.haml
index 99efe9c9b8..da80515c17 100644
--- a/app/views/dashboard/projects/starred.html.haml
+++ b/app/views/dashboard/projects/starred.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - @no_container = true
 
 - page_title "Starred Projects"
diff --git a/app/views/dashboard/todos/index.html.haml b/app/views/dashboard/todos/index.html.haml
index 52d6ebd8a1..9b615ec999 100644
--- a/app/views/dashboard/todos/index.html.haml
+++ b/app/views/dashboard/todos/index.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title "Todos"
 - header_title "Todos", dashboard_todos_path
 
diff --git a/app/views/explore/groups/index.html.haml b/app/views/explore/groups/index.html.haml
index ffe07b217a..2651ef37e6 100644
--- a/app/views/explore/groups/index.html.haml
+++ b/app/views/explore/groups/index.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title    "Groups"
 - header_title  "Groups", dashboard_groups_path
 
diff --git a/app/views/explore/projects/index.html.haml b/app/views/explore/projects/index.html.haml
index ec46175510..f00802e0af 100644
--- a/app/views/explore/projects/index.html.haml
+++ b/app/views/explore/projects/index.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title    "Projects"
 - header_title  "Projects", dashboard_projects_path
 
diff --git a/app/views/explore/projects/starred.html.haml b/app/views/explore/projects/starred.html.haml
index ec46175510..f00802e0af 100644
--- a/app/views/explore/projects/starred.html.haml
+++ b/app/views/explore/projects/starred.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title    "Projects"
 - header_title  "Projects", dashboard_projects_path
 
diff --git a/app/views/explore/projects/trending.html.haml b/app/views/explore/projects/trending.html.haml
index ec46175510..f00802e0af 100644
--- a/app/views/explore/projects/trending.html.haml
+++ b/app/views/explore/projects/trending.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title    "Projects"
 - header_title  "Projects", dashboard_projects_path
 
diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml
index 7d5add3cc1..2d32d5299b 100644
--- a/app/views/groups/edit.html.haml
+++ b/app/views/groups/edit.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Settings"
 = render "groups/settings_head"
 .panel.panel-default.prepend-top-default
   .panel-heading
diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml
index 2e4e4511bb..9864c805b0 100644
--- a/app/views/groups/group_members/index.html.haml
+++ b/app/views/groups/group_members/index.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Members"
 - page_title "Members"
 
 .project-members-page.prepend-top-default
diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml
index 735d939069..a7003f6cd3 100644
--- a/app/views/groups/issues.html.haml
+++ b/app/views/groups/issues.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Issues"
 - page_title "Issues"
 - group_issues_exists = group_issues(@group).exists?
 = render "head_issues"
diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml
index 997c82c77d..a43061dacf 100644
--- a/app/views/groups/merge_requests.html.haml
+++ b/app/views/groups/merge_requests.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Merge Requests"
 - page_title "Merge Requests"
 
 - if show_new_nav? && current_user
diff --git a/app/views/groups/new.html.haml b/app/views/groups/new.html.haml
index 000c7af232..dc7bd18343 100644
--- a/app/views/groups/new.html.haml
+++ b/app/views/groups/new.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title    'New Group'
 - header_title  "Groups", dashboard_groups_path
 
diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml
index 1a9f5401a7..f2c16d82d4 100644
--- a/app/views/layouts/_page.html.haml
+++ b/app/views/layouts/_page.html.haml
@@ -14,7 +14,7 @@
       = render "layouts/broadcast"
       = render "layouts/flash"
       = yield :flash_message
-    - if show_new_nav?
+    - if show_new_nav? && !@hide_breadcrumbs
       = render "layouts/nav/breadcrumbs"
     %div{ class: "#{(container_class unless @no_container)} #{@content_class}" }
       .content{ id: "content-body" }
diff --git a/app/views/layouts/nav/_breadcrumbs.html.haml b/app/views/layouts/nav/_breadcrumbs.html.haml
index 5f1641f430..171ece25de 100644
--- a/app/views/layouts/nav/_breadcrumbs.html.haml
+++ b/app/views/layouts/nav/_breadcrumbs.html.haml
@@ -1,4 +1,5 @@
 - breadcrumb_title = @breadcrumb_title || controller.controller_name.humanize
+- breadcrumb_link = breadcrumb_title_link
 - hide_top_links = @hide_top_links || false
 
 %nav.breadcrumbs{ role: "navigation" }
@@ -8,12 +9,16 @@
         .title
           = link_to "GitLab", root_path
           \/
+          - if content_for?(:header_title_before)
+            = yield :header_title_before
+            \/
           = header_title
       %h2.breadcrumbs-sub-title
         %ul.list-unstyled
-          - if content_for?(:sub_title_before)
-            = yield :sub_title_before
-          %li= link_to breadcrumb_title, request.path
+          - if @breadcrumbs_extra_links
+            - @breadcrumbs_extra_links.each do |extra|
+              %li= link_to extra[:text], extra[:link]
+          %li= link_to breadcrumb_title, breadcrumb_link
     - if content_for?(:breadcrumbs_extra)
       .breadcrumbs-extra.hidden-xs= yield :breadcrumbs_extra
     = yield :header_content
diff --git a/app/views/profiles/audit_log.html.haml b/app/views/profiles/audit_log.html.haml
index 1a392e29e2..00d61e5b92 100644
--- a/app/views/profiles/audit_log.html.haml
+++ b/app/views/profiles/audit_log.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Authentication log"
 - page_title "Authentication log"
 - @content_class = "limit-container-width" unless fluid_layout
 = render 'profiles/head'
diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml
index bac75a4907..6d97d08ed1 100644
--- a/app/views/profiles/show.html.haml
+++ b/app/views/profiles/show.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Profile"
 - @content_class = "limit-container-width" unless fluid_layout
 = render 'profiles/head'
 
diff --git a/app/views/profiles/two_factor_auths/show.html.haml b/app/views/profiles/two_factor_auths/show.html.haml
index 67792de387..35a547c2e3 100644
--- a/app/views/profiles/two_factor_auths/show.html.haml
+++ b/app/views/profiles/two_factor_auths/show.html.haml
@@ -1,6 +1,12 @@
 - page_title 'Two-Factor Authentication', 'Account'
 - header_title "Two-Factor Authentication", profile_two_factor_auth_path
+- @breadcrumb_title = "Two-Factor Authentication"
 - @content_class = "limit-container-width" unless fluid_layout
+
+- if show_new_nav?
+  - content_for :header_title_before do
+    = link_to "User Settings", profile_path
+
 = render 'profiles/head'
 
 - if inject_u2f_api?
diff --git a/app/views/projects/activity.html.haml b/app/views/projects/activity.html.haml
index 9ff6ac4f8a..23eb1b5290 100644
--- a/app/views/projects/activity.html.haml
+++ b/app/views/projects/activity.html.haml
@@ -1,6 +1,9 @@
 - @no_container = true
 - @breadcrumb_title = "Activity"
 
+- if show_new_nav?
+  - breadcrumbs_extra_links("Project", project_path(@project))
+
 - page_title "Activity"
 = render "projects/head"
 
diff --git a/app/views/projects/boards/_show.html.haml b/app/views/projects/boards/_show.html.haml
index 3622720a8b..8e070a7cc0 100644
--- a/app/views/projects/boards/_show.html.haml
+++ b/app/views/projects/boards/_show.html.haml
@@ -1,10 +1,10 @@
 - @no_container = true
 - @content_class = "issue-boards-content"
+- @breadcrumb_title = "Board"
 - page_title "Boards"
 
 - if show_new_nav?
-  - content_for :sub_title_before do
-    %li= link_to "Issues", namespace_project_issues_path(@project.namespace, @project)
+  - breadcrumbs_extra_links("Issues", namespace_project_issues_path(@project.namespace, @project))
 
 - content_for :page_specific_javascripts do
   = webpack_bundle_tag 'common_vue'
diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml
index 4bade77a07..b4d5d045a2 100644
--- a/app/views/projects/branches/index.html.haml
+++ b/app/views/projects/branches/index.html.haml
@@ -2,6 +2,9 @@
 - page_title "Branches"
 = render "projects/commits/head"
 
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
+
 %div{ class: container_class }
   .top-area.adjust
     .nav-text
diff --git a/app/views/projects/commits/show.html.haml b/app/views/projects/commits/show.html.haml
index 7ed7e44134..a824af1417 100644
--- a/app/views/projects/commits/show.html.haml
+++ b/app/views/projects/commits/show.html.haml
@@ -4,6 +4,9 @@
 = content_for :meta_tags do
   = auto_discovery_link_tag(:atom, namespace_project_commits_url(@project.namespace, @project, @ref, rss_url_options), title: "#{@project.name}:#{@ref} commits")
 
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
+
 = content_for :sub_nav do
   = render "head"
 
diff --git a/app/views/projects/compare/index.html.haml b/app/views/projects/compare/index.html.haml
index 2cf14859f3..d71bc88298 100644
--- a/app/views/projects/compare/index.html.haml
+++ b/app/views/projects/compare/index.html.haml
@@ -1,5 +1,7 @@
 - @no_container = true
 - page_title "Compare"
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
 = render "projects/commits/head"
 
 %div{ class: container_class }
diff --git a/app/views/projects/compare/show.html.haml b/app/views/projects/compare/show.html.haml
index a1bca2cf83..db722554f1 100644
--- a/app/views/projects/compare/show.html.haml
+++ b/app/views/projects/compare/show.html.haml
@@ -1,5 +1,7 @@
 - @no_container = true
 - page_title "#{params[:from]}...#{params[:to]}"
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
 = render "projects/commits/head"
 
 %div{ class: container_class }
diff --git a/app/views/projects/cycle_analytics/show.html.haml b/app/views/projects/cycle_analytics/show.html.haml
index 7000b289f7..f13499a5c1 100644
--- a/app/views/projects/cycle_analytics/show.html.haml
+++ b/app/views/projects/cycle_analytics/show.html.haml
@@ -1,5 +1,7 @@
 - @no_container = true
 - page_title "Cycle Analytics"
+- if show_new_nav?
+  - breadcrumbs_extra_links("Project", project_path(@project))
 - content_for :page_specific_javascripts do
   = page_specific_javascript_bundle_tag('common_vue')
   = page_specific_javascript_bundle_tag('cycle_analytics')
diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml
index 78057facde..61c414b2e1 100644
--- a/app/views/projects/edit.html.haml
+++ b/app/views/projects/edit.html.haml
@@ -1,4 +1,5 @@
 - @content_class = "limit-container-width" unless fluid_layout
+- @breadcrumb_title = "Settings"
 
 = render "projects/settings/head"
 .project-edit-container
diff --git a/app/views/projects/graphs/charts.html.haml b/app/views/projects/graphs/charts.html.haml
index 79872c4ea6..f873f62993 100644
--- a/app/views/projects/graphs/charts.html.haml
+++ b/app/views/projects/graphs/charts.html.haml
@@ -1,6 +1,8 @@
 - @no_container = true
 - @breadcrumb_title = "Charts"
 - page_title "Charts"
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
 - content_for :page_specific_javascripts do
   = page_specific_javascript_bundle_tag('common_d3')
   = page_specific_javascript_bundle_tag('graphs')
diff --git a/app/views/projects/graphs/show.html.haml b/app/views/projects/graphs/show.html.haml
index 239a189cae..67383a2342 100644
--- a/app/views/projects/graphs/show.html.haml
+++ b/app/views/projects/graphs/show.html.haml
@@ -4,6 +4,10 @@
 - content_for :page_specific_javascripts do
   = page_specific_javascript_bundle_tag('common_d3')
   = page_specific_javascript_bundle_tag('graphs')
+
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
+
 = render 'projects/commits/head'
 
 %div{ class: container_class }
diff --git a/app/views/projects/merge_requests/creations/new.html.haml b/app/views/projects/merge_requests/creations/new.html.haml
index 2e798ce780..59a88c6800 100644
--- a/app/views/projects/merge_requests/creations/new.html.haml
+++ b/app/views/projects/merge_requests/creations/new.html.haml
@@ -1,3 +1,4 @@
+- @breadcrumb_title = "Merge Requests"
 - page_title "New Merge Request"
 
 - if @merge_request.can_be_created && !params[:change_branches]
diff --git a/app/views/projects/network/show.html.haml b/app/views/projects/network/show.html.haml
index c89b037f44..efe0513037 100644
--- a/app/views/projects/network/show.html.haml
+++ b/app/views/projects/network/show.html.haml
@@ -2,6 +2,8 @@
 - page_title "Graph", @ref
 - content_for :page_specific_javascripts do
   = page_specific_javascript_bundle_tag('network')
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
 = render "projects/commits/head"
 = render "head"
 %div{ class: container_class }
diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml
index 7b8be58554..f025a7a55a 100644
--- a/app/views/projects/new.html.haml
+++ b/app/views/projects/new.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title    'New Project'
 - header_title  "Projects", dashboard_projects_path
 - visibility_level = params.dig(:project, :visibility_level) || default_project_visibility
diff --git a/app/views/projects/pipeline_schedules/index.html.haml b/app/views/projects/pipeline_schedules/index.html.haml
index 127f26899e..cbda522f28 100644
--- a/app/views/projects/pipeline_schedules/index.html.haml
+++ b/app/views/projects/pipeline_schedules/index.html.haml
@@ -1,3 +1,5 @@
+- @breadcrumb_title = "Schedules"
+
 - content_for :page_specific_javascripts do
   = webpack_bundle_tag 'common_vue'
   = webpack_bundle_tag 'schedules_index'
@@ -9,6 +11,8 @@
   - content_for :breadcrumbs_extra do
     = link_to _('New schedule'), new_namespace_project_pipeline_schedule_path(@project.namespace, @project), class: 'btn btn-create'
 
+  - breadcrumbs_extra_links("Pipelines", project_pipelines_path(@project))
+
 = render "projects/pipelines/head"
 
 %div{ class: container_class }
diff --git a/app/views/projects/pipeline_schedules/new.html.haml b/app/views/projects/pipeline_schedules/new.html.haml
index 87390d4dd0..f7db249814 100644
--- a/app/views/projects/pipeline_schedules/new.html.haml
+++ b/app/views/projects/pipeline_schedules/new.html.haml
@@ -1,5 +1,10 @@
+- @breadcrumb_title = "Schedules"
+- @breadcrumb_link = namespace_project_pipeline_schedules_path(@project.namespace, @project)
 - page_title _("New Pipeline Schedule")
 
+- if show_new_nav?
+  - breadcrumbs_extra_links("Pipelines", project_pipelines_path(@project))
+
 %h3.page-title
   = _("Schedule a new pipeline")
 %hr
diff --git a/app/views/projects/pipelines/charts.html.haml b/app/views/projects/pipelines/charts.html.haml
index 8ffddfe615..d557126bf3 100644
--- a/app/views/projects/pipelines/charts.html.haml
+++ b/app/views/projects/pipelines/charts.html.haml
@@ -1,5 +1,8 @@
 - @no_container = true
+- @breadcrumb_title = "Charts"
 - page_title "Charts", "Pipelines"
+- if show_new_nav?
+  - breadcrumbs_extra_links("Pipelines", project_pipelines_path(@project))
 - content_for :page_specific_javascripts do
   = page_specific_javascript_bundle_tag('common_d3')
   = page_specific_javascript_bundle_tag('graphs')
diff --git a/app/views/projects/settings/ci_cd/show.html.haml b/app/views/projects/settings/ci_cd/show.html.haml
index 00ccc3ec41..712799dbad 100644
--- a/app/views/projects/settings/ci_cd/show.html.haml
+++ b/app/views/projects/settings/ci_cd/show.html.haml
@@ -1,5 +1,10 @@
 - @content_class = "limit-container-width" unless fluid_layout
+- @breadcrumb_title = "Pipelines"
 - page_title "Pipelines"
+
+- if show_new_nav?
+  - breadcrumbs_extra_links("Settings", edit_project_path(@project))
+
 = render "projects/settings/head"
 
 = render 'projects/runners/index'
diff --git a/app/views/projects/tags/index.html.haml b/app/views/projects/tags/index.html.haml
index 56656ea3d8..c0b801124b 100644
--- a/app/views/projects/tags/index.html.haml
+++ b/app/views/projects/tags/index.html.haml
@@ -3,6 +3,9 @@
 - page_title "Tags"
 = render "projects/commits/head"
 
+- if show_new_nav?
+  - breadcrumbs_extra_links("Repository", project_files_path(@project))
+
 .flex-list{ class: container_class }
   .top-area.adjust
     .nav-text.row-main-content
diff --git a/app/views/projects/wikis/show.html.haml b/app/views/projects/wikis/show.html.haml
index f003ff6b63..0ca811e295 100644
--- a/app/views/projects/wikis/show.html.haml
+++ b/app/views/projects/wikis/show.html.haml
@@ -1,4 +1,5 @@
 - @content_class = "limit-container-width limit-container-width-sm" unless fluid_layout
+- @breadcrumb_title = "Wiki"
 - page_title @page.title.capitalize, "Wiki"
 
 .wiki-page-header.has-sidebar-toggle
diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml
index 215dbb3909..4834441f78 100644
--- a/app/views/search/show.html.haml
+++ b/app/views/search/show.html.haml
@@ -1,3 +1,4 @@
+- @hide_top_links = true
 - page_title @search_term
 
 .prepend-top-default
diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml
index f246bd7a58..919ba5d15d 100644
--- a/app/views/users/show.html.haml
+++ b/app/views/users/show.html.haml
@@ -1,3 +1,5 @@
+- @hide_top_links = true
+- @hide_breadcrumbs = true
 - page_title       @user.name
 - page_description @user.bio
 - content_for :page_specific_javascripts do
-- 
2.30.9