X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fviews%2Fviews.theme.inc;h=cb9aee7ba7126aed74a2ea975b793cf5ab277c60;hb=5b8bb166bfa98770daef9de5c127fc2e6ef02340;hp=a26742b91c1a3b7fa4b330b786884cb245e9a384;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/web/core/modules/views/views.theme.inc b/web/core/modules/views/views.theme.inc index a26742b91..cb9aee7ba 100644 --- a/web/core/modules/views/views.theme.inc +++ b/web/core/modules/views/views.theme.inc @@ -34,8 +34,17 @@ function template_preprocess_views_view(&$variables) { $css_class = $view->display_handler->getOption('css_class'); if (!empty($css_class)) { - $variables['css_class'] = preg_replace('/[^a-zA-Z0-9- ]/', '-', $css_class); - $variables['attributes']['class'][] = $variables['css_class']; + // Views uses its own sanitization method. This is preserved to keep + // backwards compatibility. + // @todo https://www.drupal.org/project/drupal/issues/2977950 Decide what to + // do with the backwards compatibility layer. + $bc_classes = explode(' ', preg_replace('/[^a-zA-Z0-9- ]/', '-', $css_class)); + // Sanitize the classes using the classes using the proper API. + $sanitized_classes = array_map('\Drupal\Component\Utility\Html::cleanCssIdentifier', explode(' ', $css_class)); + $view_classes = array_unique(array_merge($bc_classes, $sanitized_classes)); + // Merge the view display classes into any existing classes if they exist. + $variables['attributes']['class'] = !empty($variables['attributes']['class']) ? array_merge($variables['attributes']['class'], $view_classes) : $view_classes; + $variables['css_class'] = implode(' ', $view_classes); } // contextual_preprocess() only works on render elements, and since this theme @@ -575,12 +584,12 @@ function template_preprocess_views_view_table(&$variables) { if (!empty($column_reference['content']) && !empty($options['info'][$column]['separator'])) { $column_reference['content'][] = [ 'separator' => ['#markup' => $options['info'][$column]['separator']], - 'field_output' => ['#markup' => $field_output] + 'field_output' => ['#markup' => $field_output], ]; } else { $column_reference['content'][] = [ - 'field_output' => ['#markup' => $field_output] + 'field_output' => ['#markup' => $field_output], ]; } } @@ -802,7 +811,7 @@ function template_preprocess_views_view_unformatted(&$variables) { * - view: A View object. */ function template_preprocess_views_view_list(&$variables) { - $handler = $variables['view']->style_plugin; + $handler = $variables['view']->style_plugin; // Fetch classes from handler options. if ($handler->options['class']) { @@ -835,7 +844,7 @@ function template_preprocess_views_view_list(&$variables) { * - rows: The raw row data. */ function template_preprocess_views_view_rss(&$variables) { - $view = $variables['view']; + $view = $variables['view']; $items = $variables['rows']; $style = $view->style_plugin; @@ -936,7 +945,7 @@ function template_preprocess_views_view_row_rss(&$variables) { * - rows: The raw row data. */ function template_preprocess_views_view_opml(&$variables) { - $view = $variables['view']; + $view = $variables['view']; $items = $variables['rows']; $config = \Drupal::config('system.site');