Loading core/lib/Drupal/Core/Form/FormHelper.php +5 −5 Original line number Diff line number Diff line Loading @@ -204,11 +204,11 @@ protected static function processStatesArray(array &$conditions, $search, $repla */ public static function processStates(array &$elements) { $elements['#attached']['library'][] = 'core/drupal.states'; // Elements of '#type' => 'item' are not actual form input elements, but we // still want to be able to show/hide them. Since there's no actual HTML // input element available, setting #attributes does not make sense, but a // wrapper is available, so setting #wrapper_attributes makes it work. $key = ($elements['#type'] == 'item') ? '#wrapper_attributes' : '#attributes'; // Elements that are actual form input elements, use '#attributes'. // In cases like 'item' that are not actual form input elements or // those like 'password_confirm' that have child elements, // use #wrapper_attributes. $key = (($elements['#markup'] ?? FALSE) === '' && ($elements['#input'] ?? FALSE) === TRUE) ? '#wrapper_attributes' : '#attributes'; $elements[$key]['data-drupal-states'] = Json::encode($elements['#states']); } Loading core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php +9 −0 Original line number Diff line number Diff line Loading @@ -732,6 +732,15 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#title' => 'Enable textarea', ]; $form['password_confirm'] = [ '#title' => $this->t('Enter password'), '#type' => 'password_confirm', '#states' => [ 'visible' => [ ':input[name="checkbox_trigger"]' => ['checked' => FALSE], ], ], ]; $form['test_select_visible_dependence']['select_visible_1'] = [ '#type' => 'select', '#title' => 'Select visible 1', Loading core/tests/Drupal/FunctionalJavascriptTests/Core/Form/JavascriptStatesTest.php +6 −0 Original line number Diff line number Diff line Loading @@ -187,6 +187,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($radios_some_disabled_value2->hasAttribute('disabled')); // Check if the link is visible. $this->assertTrue($link->isVisible()); // Check enter password is visible. $this->assertSession()->pageTextContains('Enter password'); // Change state: check the checkbox. $trigger->check(); Loading Loading @@ -228,6 +230,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($radios_some_disabled_value2->hasAttribute('disabled')); // The link shouldn't be visible. $this->assertFalse($link->isVisible()); // Check enter password is not visible. $this->assertSession()->pageTextNotContains('Enter password'); // Change state: uncheck the checkbox. $trigger->uncheck(); Loading Loading @@ -263,6 +267,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($radios_some_disabled_value2->hasAttribute('disabled')); // Check if the link is turned back to visible state. $this->assertTrue($link->isVisible()); // Check enter password is visible. $this->assertSession()->pageTextContains('Enter password'); } /** Loading core/tests/Drupal/Tests/Core/Form/FormHelperTest.php +2 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,8 @@ public static function providerElements() { ':input[name="foo"]' => ['value' => 'bar'], ], ], '#markup' => '', '#input' => TRUE, ], '#wrapper_attributes', ], Loading Loading
core/lib/Drupal/Core/Form/FormHelper.php +5 −5 Original line number Diff line number Diff line Loading @@ -204,11 +204,11 @@ protected static function processStatesArray(array &$conditions, $search, $repla */ public static function processStates(array &$elements) { $elements['#attached']['library'][] = 'core/drupal.states'; // Elements of '#type' => 'item' are not actual form input elements, but we // still want to be able to show/hide them. Since there's no actual HTML // input element available, setting #attributes does not make sense, but a // wrapper is available, so setting #wrapper_attributes makes it work. $key = ($elements['#type'] == 'item') ? '#wrapper_attributes' : '#attributes'; // Elements that are actual form input elements, use '#attributes'. // In cases like 'item' that are not actual form input elements or // those like 'password_confirm' that have child elements, // use #wrapper_attributes. $key = (($elements['#markup'] ?? FALSE) === '' && ($elements['#input'] ?? FALSE) === TRUE) ? '#wrapper_attributes' : '#attributes'; $elements[$key]['data-drupal-states'] = Json::encode($elements['#states']); } Loading
core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php +9 −0 Original line number Diff line number Diff line Loading @@ -732,6 +732,15 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#title' => 'Enable textarea', ]; $form['password_confirm'] = [ '#title' => $this->t('Enter password'), '#type' => 'password_confirm', '#states' => [ 'visible' => [ ':input[name="checkbox_trigger"]' => ['checked' => FALSE], ], ], ]; $form['test_select_visible_dependence']['select_visible_1'] = [ '#type' => 'select', '#title' => 'Select visible 1', Loading
core/tests/Drupal/FunctionalJavascriptTests/Core/Form/JavascriptStatesTest.php +6 −0 Original line number Diff line number Diff line Loading @@ -187,6 +187,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($radios_some_disabled_value2->hasAttribute('disabled')); // Check if the link is visible. $this->assertTrue($link->isVisible()); // Check enter password is visible. $this->assertSession()->pageTextContains('Enter password'); // Change state: check the checkbox. $trigger->check(); Loading Loading @@ -228,6 +230,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($radios_some_disabled_value2->hasAttribute('disabled')); // The link shouldn't be visible. $this->assertFalse($link->isVisible()); // Check enter password is not visible. $this->assertSession()->pageTextNotContains('Enter password'); // Change state: uncheck the checkbox. $trigger->uncheck(); Loading Loading @@ -263,6 +267,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($radios_some_disabled_value2->hasAttribute('disabled')); // Check if the link is turned back to visible state. $this->assertTrue($link->isVisible()); // Check enter password is visible. $this->assertSession()->pageTextContains('Enter password'); } /** Loading
core/tests/Drupal/Tests/Core/Form/FormHelperTest.php +2 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,8 @@ public static function providerElements() { ':input[name="foo"]' => ['value' => 'bar'], ], ], '#markup' => '', '#input' => TRUE, ], '#wrapper_attributes', ], Loading