diff --git a/core/modules/views_ui/templates/views-ui-build-group-filter-form.html.twig b/core/modules/views_ui/templates/views-ui-build-group-filter-form.html.twig new file mode 100644 index 000000000000000..0e05c27cda92e4a --- /dev/null +++ b/core/modules/views_ui/templates/views-ui-build-group-filter-form.html.twig @@ -0,0 +1,57 @@ +{# +/** + * @file + * Default theme implementation for Views UI build group filter form. + * + * Available variables: + * - form: A render element representing the form. Contains the following: + * - form_description: The exposed filter's description. + * - expose_button: The button to toggle the expose filter form. + * - group_button: Toggle options between single and grouped filters. + * - label: A filter label input field. + * - description: A filter description field. + * - value: The filters available values. + * - optional: A checkbox to require this filter or not. + * - remember: A checkbox to remember selected filter value(s) (per user). + * - widget: Radio Buttons to select the filter widget. + * - add_group: A button to add another row to the table. + * - more: A details element for additional field exposed filter fields. + * - table: A rendered table element of the group filter form. + * + * @see template_preprocess_views_ui_build_group_filter_form() + * + * @ingroup themeable + */ +#} +{{ form.form_description }} +{{ form.expose_button }} +{{ form.group_button }} +
+ {{ form.optional }} + {{ form.remember }} +
+
+ {{ form.widget }} + {{ form.label }} + {{ form.description }} +
+{# + Render the rest of the form elements excluding elements that are rendered + elsewhere. +#} +{{ form|without( + 'form_description', + 'expose_button', + 'group_button', + 'optional', + 'remember', + 'widget', + 'label', + 'description', + 'add_group', + 'more' + ) +}} +{{ table }} +{{ form.add_group }} +{{ form.more }} diff --git a/core/modules/views_ui/views_ui.module b/core/modules/views_ui/views_ui.module index 86add677ccb8d9c..5dba4fe32e749ed 100644 --- a/core/modules/views_ui/views_ui.module +++ b/core/modules/views_ui/views_ui.module @@ -8,12 +8,8 @@ use Drupal\Component\Utility\Unicode; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; -use Drupal\views\Views; use Drupal\views\ViewExecutable; -use Drupal\views_ui\ViewUI; use Drupal\views\Analyzer; -use Drupal\Core\Ajax\AjaxResponse; -use Drupal\Core\Ajax\ReplaceCommand; use Drupal\Component\Utility\Xss; /** @@ -97,7 +93,6 @@ function views_ui_theme() { 'views_ui_build_group_filter_form' => array( 'render element' => 'form', 'file' => 'views_ui.theme.inc', - 'function' => 'theme_views_ui_build_group_filter_form', ), // On behalf of a plugin diff --git a/core/modules/views_ui/views_ui.theme.inc b/core/modules/views_ui/views_ui.theme.inc index cd259ca51fae8c0..f9b165a112ade84 100644 --- a/core/modules/views_ui/views_ui.theme.inc +++ b/core/modules/views_ui/views_ui.theme.inc @@ -65,35 +65,18 @@ function template_preprocess_views_ui_display_tab_bucket(&$variables) { } /** - * Theme the build group filter form. + * Prepares variables for Views UI build group filter form templates. * - * @ingroup themeable + * Default template: views-ui-build-group-filter-form.html.twig. + * + * @param array $variables + * An associative array containing: + * - form: A render element representing the form. */ -function theme_views_ui_build_group_filter_form($variables) { +function template_preprocess_views_ui_build_group_filter_form(&$variables) { $form = $variables['form']; - $more = drupal_render($form['more']); - - $output = drupal_render($form['form_description']); - $output .= drupal_render($form['expose_button']); - $output .= drupal_render($form['group_button']); - if (isset($form['required'])) { - $output .= drupal_render($form['required']); - } - - $output .= drupal_render($form['operator']); - $output .= drupal_render($form['value']); - - $output .= '
'; - $output .= drupal_render($form['optional']); - $output .= drupal_render($form['remember']); - $output .= '
'; - - $output .= '
'; - $output .= drupal_render($form['widget']); - $output .= drupal_render($form['label']); - $output .= drupal_render($form['description']); - $output .= '
'; + // Prepare table of options. $header = array( t('Default'), t('Weight'), @@ -103,14 +86,14 @@ function theme_views_ui_build_group_filter_form($variables) { t('Operations'), ); + // Prepare default selectors. $form_state = new FormState(); $form['default_group'] = Element\Radios::processRadios($form['default_group'], $form_state, $form); $form['default_group_multiple'] = Element\Checkboxes::processCheckboxes($form['default_group_multiple'], $form_state, $form); $form['default_group']['All']['#title'] = ''; - hide($form['default_group_multiple']['All']); $rows[] = array( - drupal_render($form['default_group']['All']), + ['data' => $form['default_group']['All']], '', array( 'data' => \Drupal::config('views.settings')->get('ui.exposed_filter_any_label') == 'old_any' ? t('<Any>') : t('- Any -'), @@ -118,6 +101,9 @@ function theme_views_ui_build_group_filter_form($variables) { 'class' => array('class' => 'any-default-radios-row'), ), ); + // Remove the 'All' default_group form element because it's added to the + // table row. + unset($variables['form']['default_group']['All']); foreach (Element::children($form['group_items']) as $group_id) { $form['group_items'][$group_id]['value']['#title'] = ''; @@ -125,6 +111,10 @@ function theme_views_ui_build_group_filter_form($variables) { $form['default_group'][$group_id], $form['default_group_multiple'][$group_id], ]; + // Remove these fields from the form since they are moved into the table. + unset($variables['form']['default_group'][$group_id]); + unset($variables['form']['default_group_multiple'][$group_id]); + $link = [ '#type' => 'link', '#url' => Url::fromRoute('', [], [ @@ -145,15 +135,15 @@ function theme_views_ui_build_group_filter_form($variables) { $remove = [$form['group_items'][$group_id]['remove'], $link]; $data = array( 'default' => ['data' => $default], - 'weight' => drupal_render($form['group_items'][$group_id]['weight']), - 'title' => drupal_render($form['group_items'][$group_id]['title']), - 'operator' => drupal_render($form['group_items'][$group_id]['operator']), - 'value' => drupal_render($form['group_items'][$group_id]['value']), + 'weight' => ['data' => $form['group_items'][$group_id]['weight']], + 'title' => ['data' => $form['group_items'][$group_id]['title']], + 'operator' => ['data' => $form['group_items'][$group_id]['operator']], + 'value' => ['data' => $form['group_items'][$group_id]['value']], 'remove' => ['data' => $remove], ); $rows[] = array('data' => $data, 'id' => 'views-row-' . $group_id, 'class' => array('draggable')); } - $table = array( + $variables['table'] = array( '#type' => 'table', '#header' => $header, '#rows' => $rows, @@ -170,11 +160,8 @@ function theme_views_ui_build_group_filter_form($variables) { ), ); - // Render the "Add another item" button below the table. - $add_another = drupal_render($form['add_group']); - $render_form = drupal_render_children($form); - - return $output . $render_form . drupal_render($table) . $add_another . $more; + // Hide fields used in table. + unset($variables['form']['group_items']); } /**