From 1a21fa26f6f4ef70157c58329687976fc3f555f7 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 2 Nov 2016 11:11:47 +0000 Subject: Improved ref switcher dropdown performance Closes #18202 --- app/assets/javascripts/project.js | 21 ++++++++++++++++----- app/controllers/projects_controller.rb | 7 +++++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/project.js b/app/assets/javascripts/project.js index 016d999d77e..78ab69206af 100644 --- a/app/assets/javascripts/project.js +++ b/app/assets/javascripts/project.js @@ -63,7 +63,8 @@ return $.ajax({ url: $dropdown.data('refs-url'), data: { - ref: $dropdown.data('ref') + ref: $dropdown.data('ref'), + search: term }, dataType: "json" }).done(function(refs) { @@ -72,16 +73,26 @@ }, selectable: true, filterable: true, + filterRemote: true, filterByText: true, fieldName: $dropdown.data('field-name'), renderRow: function(ref) { - var link; + var li = document.createElement('li'); + if (ref.header != null) { - return $('
  • ').addClass('dropdown-header').text(ref.header); + li.className = 'dropdown-header'; + li.textContent = ref.header; } else { - link = $('').attr('href', '#').addClass(ref === selected ? 'is-active' : '').text(ref).attr('data-ref', ref); - return $('
  • ').append(link); + var link = document.createElement('a'); + link.href = '#'; + link.className = ref.name === selected ? 'is-active' : ''; + link.textContent = ref.name; + link.dataset.ref = ref.name; + + li.appendChild(link); } + + return li; }, id: function(obj, $el) { return $el.attr('data-ref'); diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index a8a18b4fa16..fe0670aa246 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -267,12 +267,15 @@ class ProjectsController < Projects::ApplicationController end def refs + branches = BranchesFinder.new(@repository, params).execute + options = { - 'Branches' => @repository.branch_names, + 'Branches' => Kaminari.paginate_array(branches).page(params[:page]).per(100), } unless @repository.tag_count.zero? - options['Tags'] = VersionSorter.rsort(@repository.tag_names) + tags = TagsFinder.new(@repository, params).execute + options['Tags'] = Kaminari.paginate_array(tags).page(params[:page]).per(100) end # If reference is commit id - we should add it to branch/tag selectbox -- cgit v1.2.1