diff core/modules/views_ui/views_ui.theme.inc @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/views_ui/views_ui.theme.inc	Thu Jul 05 14:24:15 2018 +0000
@@ -0,0 +1,549 @@
+<?php
+
+/**
+ * @file
+ * Preprocessors and theme functions for the Views UI.
+ */
+
+use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Form\FormState;
+use Drupal\Core\Render\Element;
+use Drupal\Core\Render\Element\Checkboxes;
+use Drupal\Core\Render\Element\Radios;
+use Drupal\Core\Url;
+use Drupal\Core\Template\Attribute;
+
+/**
+ * Prepares variables for Views UI display tab setting templates.
+ *
+ * Default template: views-ui-display-tab-setting.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - link: The setting's primary link.
+ *   - settings_links: An array of links for this setting.
+ *   - defaulted: A boolean indicating the setting is in its default state.
+ *   - overridden: A boolean indicating the setting has been overridden from
+ *     the default.
+ *   - description: The setting's description.
+ *   - description_separator: A boolean indicating a separator colon should be
+ *     appended to the setting's description.
+ */
+function template_preprocess_views_ui_display_tab_setting(&$variables) {
+  // Put the primary link to the left side.
+  array_unshift($variables['settings_links'], $variables['link']);
+
+  if (!empty($variables['overridden'])) {
+    $variables['attributes']['title'][] = t('Overridden');
+  }
+
+  // Append a colon to the description, if requested.
+  if ($variables['description'] && $variables['description_separator']) {
+    $variables['description'] .= t(':');
+  }
+}
+
+/**
+ * Prepares variables for Views UI view listing templates.
+ *
+ * Default template: views-ui-view-listing-table.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - headers: An associative array containing the headers for the view
+ *     listing table.
+ *   - rows: An associative array containing the rows data for the view
+ *     listing table.
+ */
+function template_preprocess_views_ui_views_listing_table(&$variables) {
+  // Convert the attributes to valid attribute objects.
+  foreach ($variables['headers'] as $key => $header) {
+    $variables['headers'][$key]['attributes'] = new Attribute($header['#attributes']);
+  }
+
+  if (!empty($variables['rows'])) {
+    foreach ($variables['rows'] as $key => $row) {
+      $variables['rows'][$key]['attributes'] = new Attribute($row['#attributes']);
+    }
+  }
+}
+
+/**
+ * Prepares variables for Views UI display tab bucket templates.
+ *
+ * Default template: views-ui-display-tab-bucket.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #name, #overridden, #children, #title, #actions.
+ */
+function template_preprocess_views_ui_display_tab_bucket(&$variables) {
+  $element = $variables['element'];
+
+  if (!empty($element['#overridden'])) {
+    $variables['attributes']['title'][] = t('Overridden');
+  }
+
+  $variables['name'] = isset($element['#name']) ? $element['#name'] : NULL;
+  $variables['overridden'] = isset($element['#overridden']) ? $element['#overridden'] : NULL;
+  $variables['content'] = $element['#children'];
+  $variables['title'] = $element['#title'];
+  $variables['actions'] = !empty($element['#actions']) ? $element['#actions'] : [];
+}
+
+/**
+ * Prepares variables for Views UI build group filter form templates.
+ *
+ * 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 template_preprocess_views_ui_build_group_filter_form(&$variables) {
+  $form = $variables['form'];
+
+  // Prepare table of options.
+  $header = [
+    t('Default'),
+    t('Weight'),
+    t('Label'),
+    t('Operator'),
+    t('Value'),
+    t('Operations'),
+  ];
+
+  // Prepare default selectors.
+  $form_state = new FormState();
+  $form['default_group'] = Radios::processRadios($form['default_group'], $form_state, $form);
+  $form['default_group_multiple'] = Checkboxes::processCheckboxes($form['default_group_multiple'], $form_state, $form);
+  $form['default_group']['All']['#title'] = '';
+
+  $rows[] = [
+    ['data' => $form['default_group']['All']],
+    '',
+    [
+      'data' => \Drupal::config('views.settings')->get('ui.exposed_filter_any_label') == 'old_any' ? t('&lt;Any&gt;') : t('- Any -'),
+      'colspan' => 4,
+      'class' => ['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'] = '';
+    $default = [
+      $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('<none>', [], [
+        'attributes' => [
+          'id' => 'views-remove-link-' . $group_id,
+          'class' => [
+            'views-hidden',
+            'views-button-remove',
+            'views-groups-remove-link',
+            'views-remove-link',
+          ],
+          'alt' => t('Remove this item'),
+          'title' => t('Remove this item'),
+        ],
+      ]),
+      '#title' => SafeMarkup::format('<span>@text</span>', ['@text' => t('Remove')]),
+    ];
+    $remove = [$form['group_items'][$group_id]['remove'], $link];
+    $data = [
+      'default' => ['data' => $default],
+      '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[] = ['data' => $data, 'id' => 'views-row-' . $group_id, 'class' => ['draggable']];
+  }
+  $variables['table'] = [
+    '#type' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#attributes' => [
+      'class' => ['views-filter-groups'],
+      'id' => 'views-filter-groups',
+    ],
+    '#tabledrag' => [
+      [
+        'action' => 'order',
+        'relationship' => 'sibling',
+        'group' => 'weight',
+      ]
+    ],
+  ];
+
+  // Hide fields used in table.
+  unset($variables['form']['group_items']);
+}
+
+/**
+ * Prepares variables for Views UI rearrange filter form templates.
+ *
+ * Default template: views-ui-rearrange-filter-form.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - form: A render element representing the form.
+ */
+function template_preprocess_views_ui_rearrange_filter_form(&$variables) {
+  $form = &$variables['form'];
+  $rows = $ungroupable_rows = [];
+  // Enable grouping only if > 1 group.
+  $variables['grouping'] = count(array_keys($form['#group_options'])) > 1;
+
+  foreach ($form['#group_renders'] as $group_id => $contents) {
+    // Header row for the group.
+    if ($group_id !== 'ungroupable') {
+      // Set up tabledrag so that it changes the group dropdown when rows are
+      // dragged between groups.
+      $options = [
+        'table_id' => 'views-rearrange-filters',
+        'action' => 'match',
+        'relationship' => 'sibling',
+        'group' => 'views-group-select',
+        'subgroup' => 'views-group-select-' . $group_id,
+      ];
+      drupal_attach_tabledrag($form['override'], $options);
+
+      // Title row, spanning all columns.
+      $row = [];
+      // Add a cell to the first row, containing the group operator.
+      $row[] = [
+        'class' => ['group', 'group-operator', 'container-inline'],
+        'data' => $form['filter_groups']['groups'][$group_id],
+        'rowspan' => max([2, count($contents) + 1]),
+      ];
+      // Title.
+      $row[] = [
+        'class' => ['group', 'group-title'],
+        'data' => [
+          '#prefix' => '<span>',
+          '#markup' => $form['#group_options'][$group_id],
+          '#suffix' => '</span>',
+        ],
+        'colspan' => 4,
+      ];
+      $rows[] = [
+        'class' => ['views-group-title'],
+        'data' => $row,
+        'id' => 'views-group-title-' . $group_id,
+      ];
+
+      // Row which will only appear if the group has nothing in it.
+      $row = [];
+      $class = 'group-' . (count($contents) ? 'populated' : 'empty');
+      $instructions = '<span>' . t('No filters have been added.') . '</span> <span class="js-only">' . t('Drag to add filters.') . '</span>';
+      // When JavaScript is enabled, the button for removing the group (if it's
+      // present) should be hidden, since it will be replaced by a link on the
+      // client side.
+      if (!empty($form['remove_groups'][$group_id]['#type']) && $form['remove_groups'][$group_id]['#type'] == 'submit') {
+        $form['remove_groups'][$group_id]['#attributes']['class'][] = 'js-hide';
+      }
+      $row[] = [
+        'colspan' => 5,
+        'data' => [
+          ['#markup' => $instructions],
+          $form['remove_groups'][$group_id],
+        ],
+      ];
+      $rows[] = [
+        'class' => [
+          'group-message',
+          'group-' . $group_id . '-message',
+          $class,
+        ],
+        'data' => $row,
+        'id' => 'views-group-' . $group_id,
+      ];
+    }
+
+    foreach ($contents as $id) {
+      if (isset($form['filters'][$id]['name'])) {
+        $row = [];
+        $row[]['data'] = $form['filters'][$id]['name'];
+        $form['filters'][$id]['weight']['#attributes']['class'] = ['weight'];
+        $row[]['data'] = $form['filters'][$id]['weight'];
+        $form['filters'][$id]['group']['#attributes']['class'] = ['views-group-select views-group-select-' . $group_id];
+        $row[]['data'] = $form['filters'][$id]['group'];
+        $form['filters'][$id]['removed']['#attributes']['class'][] = 'js-hide';
+
+        $remove_link = [
+          '#type' => 'link',
+          '#url' => Url::fromRoute('<none>'),
+          '#title' => SafeMarkup::format('<span>@text</span>', ['@text' => t('Remove')]),
+          '#weight' => '1',
+          '#options' => [
+            'attributes' => [
+              'id' => 'views-remove-link-' . $id,
+              'class' => [
+                'views-hidden',
+                'views-button-remove',
+                'views-groups-remove-link',
+                'views-remove-link',
+              ],
+              'alt' => t('Remove this item'),
+              'title' => t('Remove this item'),
+            ],
+          ],
+        ];
+        $row[]['data'] = [
+          $form['filters'][$id]['removed'],
+          $remove_link,
+        ];
+
+        $row = [
+          'data' => $row,
+          'class' => ['draggable'],
+          'id' => 'views-row-' . $id,
+        ];
+
+        if ($group_id !== 'ungroupable') {
+          $rows[] = $row;
+        }
+        else {
+          $ungroupable_rows[] = $row;
+        }
+      }
+    }
+  }
+
+  if (!$variables['grouping']) {
+    $form['filter_groups']['groups'][0]['#title'] = t('Operator');
+  }
+
+  if (!empty($ungroupable_rows)) {
+    $header = [
+      t('Ungroupable filters'),
+      t('Weight'),
+      [
+        'data' => t('Group'),
+        'class' => ['views-hide-label'],
+      ],
+      [
+        'data' => t('Remove'),
+        'class' => ['views-hide-label'],
+      ],
+    ];
+    $variables['ungroupable_table'] = [
+      '#type' => 'table',
+      '#header' => $header,
+      '#rows' => $ungroupable_rows,
+      '#attributes' => [
+        'id' => 'views-rearrange-filters-ungroupable',
+        'class' => ['arrange'],
+      ],
+      '#tabledrag' => [
+        [
+          'action' => 'order',
+          'relationship' => 'sibling',
+          'group' => 'weight',
+        ]
+      ],
+    ];
+  }
+
+  if (empty($rows)) {
+    $rows[] = [['data' => t('No fields available.'), 'colspan' => '2']];
+  }
+
+  // Set up tabledrag so that the weights are changed when rows are dragged.
+  $variables['table'] = [
+    '#type' => 'table',
+    '#rows' => $rows,
+    '#attributes' => [
+      'id' => 'views-rearrange-filters',
+      'class' => ['arrange'],
+    ],
+    '#tabledrag' => [
+      [
+        'action' => 'order',
+        'relationship' => 'sibling',
+        'group' => 'weight',
+      ],
+    ],
+  ];
+
+  // When JavaScript is enabled, the button for adding a new group should be
+  // hidden, since it will be replaced by a link on the client side.
+  $form['actions']['add_group']['#attributes']['class'][] = 'js-hide';
+
+}
+
+/**
+ * Prepares variables for style plugin table templates.
+ *
+ * Default template: views-ui-style-plugin-table.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - form: A render element representing the form.
+ */
+function template_preprocess_views_ui_style_plugin_table(&$variables) {
+  $form = $variables['form'];
+
+  $header = [
+    t('Field'),
+    t('Column'),
+    t('Align'),
+    t('Separator'),
+    [
+      'data' => t('Sortable'),
+      'align' => 'center',
+    ],
+    [
+      'data' => t('Default order'),
+      'align' => 'center',
+    ],
+    [
+      'data' => t('Default sort'),
+      'align' => 'center',
+    ],
+    [
+      'data' => t('Hide empty column'),
+      'align' => 'center',
+    ],
+    [
+      'data' => t('Responsive'),
+      'align' => 'center',
+    ],
+  ];
+  $rows = [];
+  foreach (Element::children($form['columns']) as $id) {
+    $row = [];
+    $row[]['data'] = $form['info'][$id]['name'];
+    $row[]['data'] = $form['columns'][$id];
+    $row[]['data'] = $form['info'][$id]['align'];
+    $row[]['data'] = $form['info'][$id]['separator'];
+
+    if (!empty($form['info'][$id]['sortable'])) {
+      $row[] = [
+        'data' => $form['info'][$id]['sortable'],
+        'align' => 'center',
+      ];
+      $row[] = [
+        'data' => $form['info'][$id]['default_sort_order'],
+        'align' => 'center',
+      ];
+      $row[] = [
+        'data' => $form['default'][$id],
+        'align' => 'center',
+      ];
+    }
+    else {
+      $row[] = '';
+      $row[] = '';
+      $row[] = '';
+    }
+    $row[] = [
+      'data' => $form['info'][$id]['empty_column'],
+      'align' => 'center',
+    ];
+    $row[] = [
+      'data' => $form['info'][$id]['responsive'],
+      'align' => 'center',
+    ];
+    $rows[] = $row;
+  }
+
+  // Add the special 'None' row.
+  $rows[] = [['data' => t('None'), 'colspan' => 6], ['align' => 'center', 'data' => $form['default'][-1]], ['colspan' => 2]];
+
+  // Unset elements from the form array that are used to build the table so that
+  // they are not rendered twice.
+  unset($form['default']);
+  unset($form['info']);
+  unset($form['columns']);
+
+  $variables['table'] = [
+    '#type' => 'table',
+    '#theme' => 'table__views_ui_style_plugin_table',
+    '#header' => $header,
+    '#rows' => $rows,
+  ];
+  $variables['form'] = $form;
+}
+
+/**
+ * Prepares variables for views UI view preview section templates.
+ *
+ * Default template: views-ui-view-preview-section.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - view: The view object.
+ *   - section: The section name of a View (e.g. title, rows or pager).
+ */
+function template_preprocess_views_ui_view_preview_section(&$variables) {
+  switch ($variables['section']) {
+    case 'title':
+      $variables['title'] = t('Title');
+      $links = views_ui_view_preview_section_display_category_links($variables['view'], 'title', $variables['title']);
+      break;
+    case 'header':
+      $variables['title'] = t('Header');
+      $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']);
+      break;
+    case 'empty':
+      $variables['title'] = t('No results behavior');
+      $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']);
+      break;
+    case 'exposed':
+      // @todo Sorts can be exposed too, so we may need a better title.
+      $variables['title'] = t('Exposed Filters');
+      $links = views_ui_view_preview_section_display_category_links($variables['view'], 'exposed_form_options', $variables['title']);
+      break;
+    case 'rows':
+      // @todo The title needs to depend on what is being viewed.
+      $variables['title'] = t('Content');
+      $links = views_ui_view_preview_section_rows_links($variables['view']);
+      break;
+    case 'pager':
+      $variables['title'] = t('Pager');
+      $links = views_ui_view_preview_section_display_category_links($variables['view'], 'pager_options', $variables['title']);
+      break;
+    case 'more':
+      $variables['title'] = t('More');
+      $links = views_ui_view_preview_section_display_category_links($variables['view'], 'use_more', $variables['title']);
+      break;
+    case 'footer':
+      $variables['title'] = t('Footer');
+      $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']);
+      break;
+    case 'attachment_before':
+      // @todo: Add links to the attachment configuration page.
+      $variables['title'] = t('Attachment before');
+      break;
+    case 'attachment_after':
+      // @todo: Add links to the attachment configuration page.
+      $variables['title'] = t('Attachment after');
+      break;
+  }
+
+  if (isset($links)) {
+    $build = [
+      '#theme' => 'links__contextual',
+      '#links' => $links,
+      '#attributes' => ['class' => ['contextual-links']],
+      '#attached' => [
+        'library' => ['contextual/drupal.contextual-links'],
+      ],
+    ];
+    $variables['links'] = $build;
+  }
+}