diff options
author | Jacob Schatz <jschatz@gitlab.com> | 2017-02-03 15:03:57 +0000 |
---|---|---|
committer | Jacob Schatz <jschatz@gitlab.com> | 2017-02-03 15:03:57 +0000 |
commit | 806b038a44cda37fa7d8ba9afae4b7adb07afe94 (patch) | |
tree | f8841e93eb070feae34fa2cc5f61e0efecf88bd0 /app/assets/javascripts/project.js | |
parent | 52ea505126da19717c9137e6bb301f55965eb6e4 (diff) | |
parent | 50d58c14cd2cd1b8fb1bb9e4a7a1091b5af90c04 (diff) | |
download | gitlab-ce-806b038a44cda37fa7d8ba9afae4b7adb07afe94.tar.gz |
Merge branch 'ref-switcher-perf' into 'master'
Improved ref switcher dropdown performance
Closes #18202
See merge request !7239
Diffstat (limited to 'app/assets/javascripts/project.js')
-rw-r--r-- | app/assets/javascripts/project.js | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/app/assets/javascripts/project.js b/app/assets/javascripts/project.js index 7cf630a1d76..67f8804666d 100644 --- a/app/assets/javascripts/project.js +++ b/app/assets/javascripts/project.js @@ -58,6 +58,11 @@ }; Project.prototype.initRefSwitcher = function() { + var refListItem = document.createElement('li'), + refLink = document.createElement('a'); + + refLink.href = '#'; + return $('.js-project-refs-dropdown').each(function() { var $dropdown, selected; $dropdown = $(this); @@ -67,7 +72,8 @@ return $.ajax({ url: $dropdown.data('refs-url'), data: { - ref: $dropdown.data('ref') + ref: $dropdown.data('ref'), + search: term }, dataType: "json" }).done(function(refs) { @@ -76,16 +82,29 @@ }, selectable: true, filterable: true, + filterRemote: true, filterByText: true, fieldName: $dropdown.data('field-name'), renderRow: function(ref) { - var link; + var li = refListItem.cloneNode(false); + 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 = refLink.cloneNode(false); + + if (ref === selected) { + link.className = 'is-active'; + } + + link.textContent = ref; + link.dataset.ref = ref; + + li.appendChild(link); } + + return li; }, id: function(obj, $el) { return $el.attr('data-ref'); |