Loading core/misc/states.js +10 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,16 @@ } }); $document.on('state:readonly', (e) => { if (e.trigger) { $(e.target) .closest('.js-form-item, .js-form-submit, .js-form-wrapper') .toggleClass('form-readonly', e.value) .find('input, textarea') .prop('readonly', e.value); } }); $document.on('state:required', (e) => { if (e.trigger) { if (e.value) { Loading core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php +18 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,24 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ], ]; $form['textfield_readonly_when_checkbox_trigger_checked'] = [ '#type' => 'textfield', '#title' => 'Textfield readonly when checkbox trigger checked', '#states' => [ 'readonly' => [ ':input[name="checkbox_trigger"]' => ['checked' => TRUE], ], ], ]; $form['textarea_readonly_when_checkbox_trigger_checked'] = [ '#type' => 'textarea', '#title' => 'Textarea readonly when checkbox trigger checked', '#states' => [ 'readonly' => [ ':input[name="checkbox_trigger"]' => ['checked' => TRUE], ], ], ]; $form['details_expanded_when_checkbox_trigger_checked'] = [ '#type' => 'details', '#title' => 'Details expanded when checkbox trigger checked', Loading core/tests/Drupal/FunctionalJavascriptTests/Core/Form/JavascriptStatesTest.php +10 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,10 @@ protected function doCheckboxTriggerTests() { $this->assertNotEmpty($textfield_invisible_element); $textfield_required_element = $page->findField('textfield_required_when_checkbox_trigger_checked'); $this->assertNotEmpty($textfield_required_element); $textfield_readonly_element = $page->findField('textfield_readonly_when_checkbox_trigger_checked'); $this->assertNotEmpty($textfield_readonly_element); $textarea_readonly_element = $page->findField('textarea_readonly_when_checkbox_trigger_checked'); $this->assertNotEmpty($textarea_readonly_element); $details = $this->assertSession()->elementExists('css', '#edit-details-expanded-when-checkbox-trigger-checked'); $textfield_in_details = $details->findField('textfield_in_details'); $this->assertNotEmpty($textfield_in_details); Loading Loading @@ -151,6 +155,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($details->hasAttribute('open')); $this->assertFalse($textfield_in_details->isVisible()); $this->assertFalse($textfield_required_element->hasAttribute('required')); $this->assertFalse($textfield_readonly_element->hasAttribute('readonly')); $this->assertFalse($textarea_readonly_element->hasAttribute('readonly')); $this->assertFalse($checkbox_checked_element->isChecked()); $this->assertTrue($checkbox_unchecked_element->isChecked()); $this->assertFalse($checkbox_visible_element->isVisible()); Loading Loading @@ -180,6 +186,8 @@ protected function doCheckboxTriggerTests() { // Verify triggered state. $this->assertFalse($textfield_invisible_element->isVisible()); $this->assertEquals('required', $textfield_required_element->getAttribute('required')); $this->assertTrue($textfield_readonly_element->hasAttribute('readonly')); $this->assertTrue($textarea_readonly_element->hasAttribute('readonly')); $this->assertTrue($details->hasAttribute('open')); $this->assertTrue($textfield_in_details->isVisible()); $this->assertTrue($checkbox_checked_element->isChecked()); Loading Loading @@ -219,6 +227,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($details->hasAttribute('open')); $this->assertFalse($textfield_in_details->isVisible()); $this->assertFalse($textfield_required_element->hasAttribute('required')); $this->assertFalse($textfield_readonly_element->hasAttribute('readonly')); $this->assertFalse($textarea_readonly_element->hasAttribute('readonly')); $this->assertFalse($checkbox_checked_element->isChecked()); $this->assertTrue($checkbox_unchecked_element->isChecked()); $this->assertFalse($checkbox_visible_element->isVisible()); Loading Loading
core/misc/states.js +10 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,16 @@ } }); $document.on('state:readonly', (e) => { if (e.trigger) { $(e.target) .closest('.js-form-item, .js-form-submit, .js-form-wrapper') .toggleClass('form-readonly', e.value) .find('input, textarea') .prop('readonly', e.value); } }); $document.on('state:required', (e) => { if (e.trigger) { if (e.value) { Loading
core/modules/system/tests/modules/form_test/src/Form/JavascriptStatesForm.php +18 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,24 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ], ]; $form['textfield_readonly_when_checkbox_trigger_checked'] = [ '#type' => 'textfield', '#title' => 'Textfield readonly when checkbox trigger checked', '#states' => [ 'readonly' => [ ':input[name="checkbox_trigger"]' => ['checked' => TRUE], ], ], ]; $form['textarea_readonly_when_checkbox_trigger_checked'] = [ '#type' => 'textarea', '#title' => 'Textarea readonly when checkbox trigger checked', '#states' => [ 'readonly' => [ ':input[name="checkbox_trigger"]' => ['checked' => TRUE], ], ], ]; $form['details_expanded_when_checkbox_trigger_checked'] = [ '#type' => 'details', '#title' => 'Details expanded when checkbox trigger checked', Loading
core/tests/Drupal/FunctionalJavascriptTests/Core/Form/JavascriptStatesTest.php +10 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,10 @@ protected function doCheckboxTriggerTests() { $this->assertNotEmpty($textfield_invisible_element); $textfield_required_element = $page->findField('textfield_required_when_checkbox_trigger_checked'); $this->assertNotEmpty($textfield_required_element); $textfield_readonly_element = $page->findField('textfield_readonly_when_checkbox_trigger_checked'); $this->assertNotEmpty($textfield_readonly_element); $textarea_readonly_element = $page->findField('textarea_readonly_when_checkbox_trigger_checked'); $this->assertNotEmpty($textarea_readonly_element); $details = $this->assertSession()->elementExists('css', '#edit-details-expanded-when-checkbox-trigger-checked'); $textfield_in_details = $details->findField('textfield_in_details'); $this->assertNotEmpty($textfield_in_details); Loading Loading @@ -151,6 +155,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($details->hasAttribute('open')); $this->assertFalse($textfield_in_details->isVisible()); $this->assertFalse($textfield_required_element->hasAttribute('required')); $this->assertFalse($textfield_readonly_element->hasAttribute('readonly')); $this->assertFalse($textarea_readonly_element->hasAttribute('readonly')); $this->assertFalse($checkbox_checked_element->isChecked()); $this->assertTrue($checkbox_unchecked_element->isChecked()); $this->assertFalse($checkbox_visible_element->isVisible()); Loading Loading @@ -180,6 +186,8 @@ protected function doCheckboxTriggerTests() { // Verify triggered state. $this->assertFalse($textfield_invisible_element->isVisible()); $this->assertEquals('required', $textfield_required_element->getAttribute('required')); $this->assertTrue($textfield_readonly_element->hasAttribute('readonly')); $this->assertTrue($textarea_readonly_element->hasAttribute('readonly')); $this->assertTrue($details->hasAttribute('open')); $this->assertTrue($textfield_in_details->isVisible()); $this->assertTrue($checkbox_checked_element->isChecked()); Loading Loading @@ -219,6 +227,8 @@ protected function doCheckboxTriggerTests() { $this->assertFalse($details->hasAttribute('open')); $this->assertFalse($textfield_in_details->isVisible()); $this->assertFalse($textfield_required_element->hasAttribute('required')); $this->assertFalse($textfield_readonly_element->hasAttribute('readonly')); $this->assertFalse($textarea_readonly_element->hasAttribute('readonly')); $this->assertFalse($checkbox_checked_element->isChecked()); $this->assertTrue($checkbox_unchecked_element->isChecked()); $this->assertFalse($checkbox_visible_element->isVisible()); Loading