diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js index 5da7253f583..5498a3874c8 100644 --- a/ui/scripts/ui/widgets/listView.js +++ b/ui/scripts/ui/widgets/listView.js @@ -1881,6 +1881,43 @@ // Infinite scrolling event $listView.bind('scroll', function(event) { + var $fixedElems = $listView.find('.toolbar:first, thead:first'); + var $fixedContainer = $('
').addClass('fixed-container'); + + $listView.find('.fixed-container').remove(); + + if ($listView.scrollTop()) { + $fixedElems.addClass('hidden').css({ visibility: 'hidden' }).clone() + .css({ + visibility: 'visible', + width: $listView.width() + }) + .appendTo($fixedContainer); + $fixedContainer.append($('').append($fixedContainer.find('thead'))); + $fixedElems.find('thead').wrap( + $('
') + ); + $fixedContainer.find('table').width($listView.find('table tbody').width()); + $fixedContainer.find('.toolbar').width($listView.find('.toolbar.hidden').outerWidth()); + $fixedContainer.find('thead th').each(function() { + var $th = $(this); + var $td = $listView.find('tbody tr:first td').filter(function() { + return $(this).index() === $th.index(); + }); + + $th.width($td.outerWidth()); + }); + $fixedContainer.css({ + position: 'absolute', + width: $fixedElems.outerWidth() + }).prependTo($listView); + } else { + $fixedContainer.remove(); + $fixedElems.removeClass('hidden'); + $listView.find('.toolbar').css('visibility', 'visible'); + $listView.find('thead').css('visibility', 'visible'); + } + if (args.listView && args.listView.disableInfiniteScrolling) return false; if ($listView.find('tr.last, td.loading:visible').size()) return false;