summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Pott2015-09-14 22:31:12 +0100
committerAlex Pott2015-09-14 22:31:12 +0100
commit553e77cd998c60526355a8053a03bd9a355857ea (patch)
tree71fd8628ccdc062f8e807c4b130bdff79c88dd8e
parent70d573c16eaeaf6901de5881bc8e53858ac24ca7 (diff)
Issue #2512306 by StryKaizer, bojanz, googletorp, JeroenT, borisson_, tim.plunkett: Inline errors not shown for details elements
-rw-r--r--core/includes/form.inc6
-rw-r--r--core/modules/system/src/Tests/Form/ElementTest.php8
-rw-r--r--core/modules/system/templates/details.html.twig7
-rw-r--r--core/modules/system/tests/modules/form_test/form_test.routing.yml8
-rw-r--r--core/modules/system/tests/modules/form_test/src/Form/FormTestDetailsForm.php51
-rw-r--r--core/themes/classy/templates/form/details.html.twig6
6 files changed, 86 insertions, 0 deletions
diff --git a/core/includes/form.inc b/core/includes/form.inc
index efbac99..aaaeb17 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -257,6 +257,12 @@ function template_preprocess_details(&$variables) {
$variables['description'] = (!empty($element['#description'])) ? $element['#description'] : '';
$variables['children'] = (isset($element['#children'])) ? $element['#children'] : '';
$variables['value'] = (isset($element['#value'])) ? $element['#value'] : '';
+
+ // Display any error messages.
+ $variables['errors'] = NULL;
+ if (!empty($element['#errors']) && empty($element['#error_no_message'])) {
+ $variables['errors'] = $element['#errors'];
+ }
}
/**
diff --git a/core/modules/system/src/Tests/Form/ElementTest.php b/core/modules/system/src/Tests/Form/ElementTest.php
index 6555a4f..b7295ff 100644
--- a/core/modules/system/src/Tests/Form/ElementTest.php
+++ b/core/modules/system/src/Tests/Form/ElementTest.php
@@ -160,4 +160,12 @@ class ElementTest extends WebTestBase {
$this->assertEqual(count($result), 1, 'Ensure that the user does have access to the autocompletion');
}
+ /**
+ * Tests form element error messages.
+ */
+ public function testFormElementErrors() {
+ $this->drupalPostForm('form_test/details-form', [], 'Submit');
+ $this->assertText('I am an error on the details element.');
+ }
+
}
diff --git a/core/modules/system/templates/details.html.twig b/core/modules/system/templates/details.html.twig
index 1c0fd79..cf50eb0 100644
--- a/core/modules/system/templates/details.html.twig
+++ b/core/modules/system/templates/details.html.twig
@@ -5,6 +5,7 @@
*
* Available variables
* - attributes: A list of HTML attributes for the details element.
+ * - errors: (optional) Any errors for this details element, may not be set.
* - title: (optional) The title of the element, may not be set.
* - description: (optional) The description of the element, may not be set.
* - children: (optional) The children of the element, may not be set.
@@ -20,6 +21,12 @@
<summary{{ summary_attributes }}>{{ title }}</summary>
{%- endif -%}
+ {% if errors %}
+ <div>
+ {{ errors }}
+ </div>
+ {% endif %}
+
{{ description }}
{{ children }}
{{ value }}
diff --git a/core/modules/system/tests/modules/form_test/form_test.routing.yml b/core/modules/system/tests/modules/form_test/form_test.routing.yml
index e480404..a37990b 100644
--- a/core/modules/system/tests/modules/form_test/form_test.routing.yml
+++ b/core/modules/system/tests/modules/form_test/form_test.routing.yml
@@ -402,6 +402,14 @@ form_test.button_class:
requirements:
_access: 'TRUE'
+form_test.details_form:
+ path: '/form_test/details-form'
+ defaults:
+ _form: '\Drupal\form_test\Form\FormTestDetailsForm'
+ _title: 'Form details form test'
+ requirements:
+ _access: 'TRUE'
+
form_test.description_display:
path: '/form_test/form-descriptions'
defaults:
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestDetailsForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestDetailsForm.php
new file mode 100644
index 0000000..8944a4c
--- /dev/null
+++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestDetailsForm.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\form_test\Form\FormTestGroupContainerForm.
+ */
+
+namespace Drupal\form_test\Form;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Builds a simple form to test the #group property on #type 'container'.
+ */
+class FormTestDetailsForm extends FormBase {
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFormId() {
+ return 'form_test_details_form';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildForm(array $form, FormStateInterface $form_state) {
+ $form['meta'] = [
+ '#type' => 'details',
+ '#title' => 'Details element',
+ '#open' => TRUE,
+ ];
+ $form['submit'] = ['#type' => 'submit', '#value' => 'Submit'];
+ return $form;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function validateForm(array &$form, FormStateInterface $form_state) {
+ $form_state->setErrorByName('meta', 'I am an error on the details element.');
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function submitForm(array &$form, FormStateInterface $form_state) {
+ }
+
+}
diff --git a/core/themes/classy/templates/form/details.html.twig b/core/themes/classy/templates/form/details.html.twig
index 9b149d7..a4ce6f6 100644
--- a/core/themes/classy/templates/form/details.html.twig
+++ b/core/themes/classy/templates/form/details.html.twig
@@ -5,6 +5,7 @@
*
* Available variables
* - attributes: A list of HTML attributes for the details element.
+ * - errors: (optional) Any errors for this details element, may not be set.
* - title: (optional) The title of the element, may not be set.
* - description: (optional) The description of the element, may not be set.
* - children: (optional) The children of the element, may not be set.
@@ -18,6 +19,11 @@
<summary{{ summary_attributes }}>{{ title }}</summary>
{%- endif -%}
<div class="details-wrapper">
+ {% if errors %}
+ <div class="form-item--error-message">
+ <strong>{{ errors }}</strong>
+ </div>
+ {% endif %}
{%- if description -%}
<div class="details-description">{{ description }}</div>
{%- endif -%}