diff --git a/js/infinite-scroll.js b/js/infinite-scroll.js index 0a66527..dacaa6e 100644 --- a/js/infinite-scroll.js +++ b/js/infinite-scroll.js @@ -18,9 +18,6 @@ // The selector for both manual load and automatic pager. var pagerSelector = '[data-drupal-views-infinite-scroll-pager]'; - // The selector for the automatic pager. - var contentWrapperSelector = '[data-drupal-views-infinite-scroll-content-wrapper]'; - // The event and namespace that is bound to window for automatic scrolling. var scrollEvent = 'scroll.views_infinite_scroll'; @@ -45,6 +42,12 @@ var $existingPager = view.$view.find(pagerSelector); $existingPager.removeOnce('infinite-scroll'); + // The selector for the automatic pager. + var contentWrapperSelector = '[data-drupal-views-infinite-scroll-content-wrapper]'; + if ($newView.find('[data-drupal-views-infinite-scroll-table]' + ' > tbody').length) { + contentWrapperSelector = '[data-drupal-views-infinite-scroll-table]' + ' > tbody'; + } + var $newRows = $newView.find(contentWrapperSelector).children(); var $newPager = $newView.find(pagerSelector); diff --git a/views_infinite_scroll.module b/views_infinite_scroll.module index 38b3537..06b3d68 100644 --- a/views_infinite_scroll.module +++ b/views_infinite_scroll.module @@ -39,16 +39,40 @@ function views_infinite_scroll_preprocess_views_infinite_scroll_pager(&$vars) { * Implements hook_preprocess_views_view(). */ function views_infinite_scroll_preprocess_views_view(&$vars) { + $has_pager = _views_infinite_scroll_has_pager($vars); + if ($has_pager) { + $vars['rows']['#theme_wrappers'] = ['container']; + $vars['rows']['#attributes'] = [ + 'data-drupal-views-infinite-scroll-content-wrapper' => TRUE, + 'class' => [ + 'views-infinite-scroll-content-wrapper', + 'clearfix', + ], + ]; + } +} + +/** + * Implements hook_preprocess_views_view_table(). + */ +function views_infinite_scroll_preprocess_views_view_table(&$vars) { + $has_pager = _views_infinite_scroll_has_pager($vars); + if ($has_pager) { + $vars['attributes']['data-drupal-views-infinite-scroll-table'] = TRUE; + } +} + +/** + * Helper function that determines whether views_infinite_scroll pager is in use. + */ +function _views_infinite_scroll_has_pager($vars) { + $has_pager = FALSE; $view = $vars['view']; if ($view->getDisplay()->isPagerEnabled() && !empty($vars['rows'])) { $pager = $view->getPager(); if ($pager && $pager instanceof InfiniteScroll) { - if (!isset($vars['rows']['#theme_wrappers'])) { - $vars['rows']['#theme_wrappers'] = []; - } - $vars['rows']['#theme_wrappers']['container']['#attributes']['data-drupal-views-infinite-scroll-content-wrapper'] = TRUE; - $vars['rows']['#theme_wrappers']['container']['#attributes']['class'][] = 'views-infinite-scroll-content-wrapper'; - $vars['rows']['#theme_wrappers']['container']['#attributes']['class'][] = 'clearfix'; + $has_pager = TRUE; } } + return $has_pager; }