From bfdfe82ea2f073a2d0e5f05ba315972cfe16a42a Mon Sep 17 00:00:00 2001 From: webchick <drupal@webchick.net> Date: Tue, 31 Jan 2017 13:29:16 -0800 Subject: [PATCH] Issue #2346773 by dmsmidt, lokapujya, klakegg, marcvangend, andrewmacpherson, ptsimard, Getekid, Rade, yoroy, tstoeckler, mgifford, tim.plunkett, estoyausente, xjm, PierreMarcel, hass, SKAUGHT, sukanya.ramakrishnan, flyke, alvar0hurtad0, bojanz, pwolanin, arunkumark, Bojhan, bleen: Details form element should open when there are errors on child elements --- core/lib/Drupal/Core/Render/Element/Details.php | 4 +++- core/modules/node/src/Tests/NodeEditFormTest.php | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/lib/Drupal/Core/Render/Element/Details.php b/core/lib/Drupal/Core/Render/Element/Details.php index ae25d345ace9..2ae6f1d8ef71 100644 --- a/core/lib/Drupal/Core/Render/Element/Details.php +++ b/core/lib/Drupal/Core/Render/Element/Details.php @@ -75,7 +75,9 @@ public static function preRenderDetails($element) { // Collapsible details. $element['#attached']['library'][] = 'core/drupal.collapse'; - if (!empty($element['#open'])) { + + // Open the detail if specified or if a child has an error. + if (!empty($element['#open']) || !empty($element['#children_errors'])) { $element['#attributes']['open'] = 'open'; } diff --git a/core/modules/node/src/Tests/NodeEditFormTest.php b/core/modules/node/src/Tests/NodeEditFormTest.php index 0d6bf45fd258..bef0252cc02d 100644 --- a/core/modules/node/src/Tests/NodeEditFormTest.php +++ b/core/modules/node/src/Tests/NodeEditFormTest.php @@ -115,6 +115,21 @@ public function testNodeEdit() { // Check if the node revision checkbox is rendered on node edit form. $this->drupalGet('node/' . $node->id() . '/edit'); $this->assertFieldById('edit-revision', NULL, 'The revision field is present.'); + + // Check that details form element opens when there are errors on child + // elements. + $this->drupalGet('node/' . $node->id() . '/edit'); + $edit = []; + // This invalid date will trigger an error. + $edit['created[0][value][date]'] = $this->randomMachineName(8); + // Get the current amount of open details elements. + $open_details_elements = count($this->cssSelect('details[open="open"]')); + $this->drupalPostForm(NULL, $edit, t('Save and keep published')); + // The node author details must be open. + $this->assertRaw('<details class="node-form-author js-form-wrapper form-wrapper" data-drupal-selector="edit-author" id="edit-author" open="open">'); + // Only one extra details element should now be open. + $open_details_elements++; + $this->assertEqual(count($this->cssSelect('details[open="open"]')), $open_details_elements, 'Exactly one extra open <details> element found.'); } /** -- GitLab