You are here

public static function Details::preRenderDetails in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Render/Element/Details.php \Drupal\Core\Render\Element\Details::preRenderDetails()

Adds form element theming to details.

Parameters

$element: An associative array containing the properties and children of the details.

Return value

The modified element.

File

core/lib/Drupal/Core/Render/Element/Details.php, line 72

Class

Details
Provides a render element for a details element, similar to a fieldset.

Namespace

Drupal\Core\Render\Element

Code

public static function preRenderDetails($element) {
  Element::setAttributes($element, [
    'id',
  ]);

  // The .js-form-wrapper class is required for #states to treat details like
  // containers.
  static::setAttributes($element, [
    'js-form-wrapper',
    'form-wrapper',
  ]);

  // Collapsible details.
  $element['#attached']['library'][] = 'core/drupal.collapse';

  // Open the detail if specified or if a child has an error.
  if (!empty($element['#open']) || !empty($element['#children_errors'])) {
    $element['#attributes']['open'] = 'open';
  }

  // Do not render optional details elements if there are no children.
  if (isset($element['#parents'])) {
    $group = implode('][', $element['#parents']);
    if (!empty($element['#optional']) && !Element::getVisibleChildren($element['#groups'][$group])) {
      $element['#printed'] = TRUE;
    }
  }
  return $element;
}