From 81e7086fec60c368dcd54ff7195f37f6cb8f481c Mon Sep 17 00:00:00 2001
From: Phil Hughes <me@iamphill.com>
Date: Fri, 15 Jan 2016 09:13:12 +0000
Subject: [PATCH] uses AJAX to select the projects

---
 app/assets/javascripts/project.js.coffee      | 10 +++++++++
 app/assets/stylesheets/framework/common.scss  |  4 ++--
 app/assets/stylesheets/framework/header.scss  | 22 -------------------
 app/helpers/projects_helper.rb                | 20 ++++-------------
 .../shared/_new_project_item_select.html.haml |  8 +++----
 5 files changed, 20 insertions(+), 44 deletions(-)

diff --git a/app/assets/javascripts/project.js.coffee b/app/assets/javascripts/project.js.coffee
index d7a658f8faa..9e313436804 100644
--- a/app/assets/javascripts/project.js.coffee
+++ b/app/assets/javascripts/project.js.coffee
@@ -50,3 +50,13 @@ class @Project
       $('#notifications-button').empty().append("<i class='fa fa-bell'></i>" + label + "<i class='fa fa-angle-down'></i>")
       $(@).parents('ul').find('li.active').removeClass 'active'
       $(@).parent().addClass 'active'
+
+    @._projectSelectDropdown()
+
+  _projectSelectDropdown: ->
+    new ProjectSelect()
+
+    $('.js-projects-dropdown-toggle').on 'click', (e) ->
+      e.preventDefault()
+
+      $('.js-projects-dropdown').select2 'open'
diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss
index 6ea2219073c..ea56d9e12a0 100644
--- a/app/assets/stylesheets/framework/common.scss
+++ b/app/assets/stylesheets/framework/common.scss
@@ -376,11 +376,11 @@ table {
   margin-bottom: $gl-padding;
 }
 
-.new-project-item-select-holder {
+.project-item-select-holder {
   display: inline-block;
   position: relative;
 
-  .new-project-item-select {
+  .project-item-select {
     position: absolute;
     top: 0;
     right: 0;
diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss
index c71c1cbae34..7871a33b6c5 100644
--- a/app/assets/stylesheets/framework/header.scss
+++ b/app/assets/stylesheets/framework/header.scss
@@ -88,34 +88,12 @@ header {
         }
       }
 
-      .dropdown {
-        display: inline-block;
-      }
-
-      .dropdown-menu {
-        max-height: 300px;
-        overflow: auto;
-      }
-
       .dropdown-toggle-caret {
         position: relative;
         top: -2px;
         margin-left: 5px;
         font-size: 10px;
       }
-
-      .dropdown-item {
-        &.active {
-          .dropdown-link {
-            color: #fff;
-          }
-        }
-
-        .dropdown-link:hover {
-          color: #fff;
-          text-decoration: none;
-        }
-      }
     }
 
     .navbar-collapse {
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 238bbbbe0a5..c175de94361 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -56,23 +56,11 @@ module ProjectsHelper
 
     all_projects = current_user.authorized_projects.sorted_by_activity.non_archived
 
-    project_link = content_tag :div, {class: "dropdown"} do
-      output = content_tag :a, {class: "dropdown-toggle", href: "#", data: {toggle: "dropdown"}} do
-        btnOutput = simple_sanitize(project.name)
-        btnOutput += content_tag :span, nil, {class: "fa fa-chevron-down dropdown-toggle-caret"}
-      end
-
-      list = all_projects.map do |project|
-        content_tag :li, {class: "dropdown-item #{"active" if project_id == project.id}"} do
-          link_to project_path(project), {class: "dropdown-link"} do
-            project.owner.name + ' / ' + simple_sanitize(project.name)
-          end
-        end
-      end
+    project_link = link_to project_path(project), {class: "project-item-select-holder js-projects-dropdown-toggle"} do
+      link_output = simple_sanitize(project.name)
+      link_output += content_tag :span, nil, {class: "fa fa-chevron-down dropdown-toggle-caret"}
 
-      output += content_tag :ul, {class: "dropdown-menu"} do
-        list.join.html_safe
-      end
+      link_output += project_select_tag :project_path, class: "project-item-select js-projects-dropdown", data: { include_groups: false }
     end
 
     full_title = namespace_link + ' / ' + project_link
diff --git a/app/views/shared/_new_project_item_select.html.haml b/app/views/shared/_new_project_item_select.html.haml
index c4431d66927..46095912821 100644
--- a/app/views/shared/_new_project_item_select.html.haml
+++ b/app/views/shared/_new_project_item_select.html.haml
@@ -1,6 +1,6 @@
 - if @projects.any?
-  .prepend-left-10.new-project-item-select-holder
-    = project_select_tag :project_path, class: "new-project-item-select", data: { include_groups: local_assigns[:include_groups] }
+  .prepend-left-10.project-item-select-holder
+    = project_select_tag :project_path, class: "project-item-select", data: { include_groups: local_assigns[:include_groups] }
     %a.btn.btn-new.new-project-item-select-button
       = icon('plus')
       = local_assigns[:label]
@@ -8,12 +8,12 @@
 
   :javascript
     $('.new-project-item-select-button').on('click', function() {
-      $('.new-project-item-select').select2('open');
+      $('.project-item-select').select2('open');
     });
 
     var relativePath = '#{local_assigns[:path]}';
 
-    $('.new-project-item-select').on('click', function() {
+    $('.project-item-select').on('click', function() {
       window.location = $(this).val() + '/' + relativePath;
     });
 
-- 
GitLab