summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2016-11-02 11:11:47 +0000
committerJacob Schatz <jschatz1@gmail.com>2016-11-21 21:01:45 -0500
commit1a21fa26f6f4ef70157c58329687976fc3f555f7 (patch)
treebf26d97040526811ff25a242dc7317f74faa8e7f
parentd17f5068118a0c86fcd39b3576161b2408596e2d (diff)
downloadgitlab-ce-1a21fa26f6f4ef70157c58329687976fc3f555f7.tar.gz
Improved ref switcher dropdown performance
Closes #18202
-rw-r--r--app/assets/javascripts/project.js21
-rw-r--r--app/controllers/projects_controller.rb7
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