diff options
author | Phil Hughes <me@iamphill.com> | 2016-11-02 11:11:47 +0000 |
---|---|---|
committer | Jacob Schatz <jschatz1@gmail.com> | 2016-11-21 21:01:45 -0500 |
commit | 1a21fa26f6f4ef70157c58329687976fc3f555f7 (patch) | |
tree | bf26d97040526811ff25a242dc7317f74faa8e7f | |
parent | d17f5068118a0c86fcd39b3576161b2408596e2d (diff) | |
download | gitlab-ce-1a21fa26f6f4ef70157c58329687976fc3f555f7.tar.gz |
Improved ref switcher dropdown performance
Closes #18202
-rw-r--r-- | app/assets/javascripts/project.js | 21 | ||||
-rw-r--r-- | 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 $('<li />').addClass('dropdown-header').text(ref.header); + li.className = 'dropdown-header'; + li.textContent = ref.header; } else { - link = $('<a />').attr('href', '#').addClass(ref === selected ? 'is-active' : '').text(ref).attr('data-ref', ref); - return $('<li />').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 |