function Details::preRenderDetails

Same name in other branches
  1. 9 core/lib/Drupal/Core/Render/Element/Details.php \Drupal\Core\Render\Element\Details::preRenderDetails()
  2. 8.9.x core/lib/Drupal/Core/Render/Element/Details.php \Drupal\Core\Render\Element\Details::preRenderDetails()
  3. 11.x 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

array 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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.