diff --git a/core/misc/tableheader.js b/core/misc/tableheader.js index 448d0b2..e47a4b2 100644 --- a/core/misc/tableheader.js +++ b/core/misc/tableheader.js @@ -1,13 +1,27 @@ (function ($, Drupal, displace) { "use strict"; - + + function checkTableHeaderInit($context) { + if (typeof TableHeader.offsetTop === 'undefined') { + var offsetTop = TableHeader.computeOffsetTop(); + var $firstTableOffset = $context.find('table.sticky-enabled').eq(0).offset(); + return scrollValue('scrollTop') > ($firstTableOffset.top - offsetTop); + } + return false; + } /** * Attaches sticky table headers. */ Drupal.behaviors.tableHeader = { attach: function (context) { - $(window).one('scroll.TableHeaderInit', {context: context}, tableHeaderInitHandler); + var $window = $(window); + var $context = $(context); + $window.one('scroll.TableHeaderInit', {$context: $context}, tableHeaderInitHandler); + // Initialize if the window is scrolled already. + if (checkTableHeaderInit($context)) { + $window.trigger('scroll.TableHeaderInit'); + } } }; @@ -17,10 +31,12 @@ // Select and initialize sticky table headers. function tableHeaderInitHandler(e) { - var $tables = $(e.data.context).find('table.sticky-enabled').once('tableheader'); + var $tables = e.data.$context.find('table.sticky-enabled').once('tableheader'); for (var i = 0, il = $tables.length; i < il; i++) { TableHeader.tables.push(new TableHeader($tables[i])); } + // Trigger the scroll event to immediately show headers is necessary. + $(window).trigger('scroll'); forTables('onScroll'); } @@ -115,7 +131,8 @@ * * @type {Array} */ - tables: [] + tables: [], + offsetTop: undefined }); /**