diff --git a/core/modules/views/views.module b/core/modules/views/views.module index 59ec800..2bfe1af9 100644 --- a/core/modules/views/views.module +++ b/core/modules/views/views.module @@ -9,6 +9,7 @@ * incoming page and block requests. */ +use Drupal\Component\Utility\String; use Drupal\Core\Cache\Cache; use Drupal\Core\Database\Query\AlterableInterface; use Drupal\Core\Language\Language; @@ -57,6 +58,37 @@ function views_element_info() { } /** + * View pre render callback. + */ +function views_views_pre_render($view) { + // If using AJAX, send identifying data about this view. + if ($view->ajaxEnabled() && empty($view->is_attachment) && empty($view->live_preview)) { + $settings = array( + 'views' => array( + 'ajax_path' => url('views/ajax'), + 'ajaxViews' => array( + 'views_dom_id:' . $view->dom_id => array( + 'view_name' => $view->storage->id(), + 'view_display_id' => $view->current_display, + 'view_args' => String::checkPlain(implode('/', $view->args)), + 'view_path' => String::checkPlain(current_path()), + 'view_base_path' => $view->getPath(), + 'view_dom_id' => $view->dom_id, + // To fit multiple views on a page, the programmer may have + // overridden the display's pager_element. + 'pager_element' => isset($view->pager) ? $view->pager->getPagerId() : 0, + ), + ), + ), + ); + $view->element['#attached']['js'][] = array('type' => 'setting', 'data' => $settings); + $view->element['#attached']['library'][] = array('views', 'views.ajax'); + } + + return $view; +} + +/** * View element pre render callback. */ function views_pre_render_view_element($element) {