From 6a74d23db5cd585b693e352d00106c13b2bc0e41 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Wed, 2 Oct 2013 13:52:08 -0700 Subject: [PATCH] listView: implement fixed header when scrolling --- ui/scripts/ui/widgets/listView.js | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) 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;