diff -u b/core/lib/Drupal/Core/Render/Element/RenderElement.php b/core/lib/Drupal/Core/Render/Element/RenderElement.php
--- b/core/lib/Drupal/Core/Render/Element/RenderElement.php
+++ b/core/lib/Drupal/Core/Render/Element/RenderElement.php
@@ -197,8 +197,8 @@
elseif (!empty($element['#group_details'])) {
// Intentionally empty to clarify the flow; we simply return $element.
}
- // Otherwise, this element belongs to a group and the group exists, so we
- // do not render it.
+ // Otherwise, this element belongs to a group and the group exists, so we do
+ // not render it.
elseif (Element::children($element['#groups'][$group])) {
$element['#printed'] = TRUE;
}
@@ -206,7 +206,11 @@
// Set attributes to indicate that there is a child with an error.
if (!empty($element['#children_errors'])) {
- $element['#attributes']['class'][] = 'error';
+ $element['#attributes']['class'][] = 'form-wrapper--child-error';
+ if ($element['#type'] === 'details') {
+ $element['#attributes']['class'][] = 'details--child-error';
+ }
+ $element['#attributes']['data-children-errors-count'] = count($element['#children_errors']);
}
return $element;
diff -u b/core/misc/vertical-tabs.es6.js b/core/misc/vertical-tabs.es6.js
--- b/core/misc/vertical-tabs.es6.js
+++ b/core/misc/vertical-tabs.es6.js
@@ -61,7 +61,7 @@
var vertical_tab = new Drupal.verticalTab({
title: $that.find('> summary').text(),
details: $that,
- children_errors: $that.hasClass('error')
+ children_errors: $that.data('children-errors-count')
});
tab_list.append(vertical_tab.item);
$that
@@ -249,7 +249,7 @@
);
if (settings.children_errors) {
- tab.item.addClass('error');
+ tab.item.addClass('vertical-tab__menu-item--child-error');
}
return tab;
diff -u b/core/misc/vertical-tabs.js b/core/misc/vertical-tabs.js
--- b/core/misc/vertical-tabs.js
+++ b/core/misc/vertical-tabs.js
@@ -36,7 +36,7 @@
var vertical_tab = new Drupal.verticalTab({
title: $that.find('> summary').text(),
details: $that,
- children_errors: $that.hasClass('error')
+ children_errors: $that.data('children-errors-count')
});
tab_list.append(vertical_tab.item);
$that.removeClass('collapsed').attr('open', true).addClass('vertical-tabs__pane').data('verticalTab', vertical_tab);
@@ -140,7 +140,7 @@
tab.item = $('
').append(tab.link = $('').append(tab.title = $('').text(settings.title)).append(tab.summary = $('')));
if (settings.children_errors) {
- tab.item.addClass('error');
+ tab.item.addClass('vertical-tab__menu-item--child-error');
}
return tab;
diff -u b/core/modules/node/tests/src/Functional/NodeEditFormTest.php b/core/modules/node/tests/src/Functional/NodeEditFormTest.php
--- b/core/modules/node/tests/src/Functional/NodeEditFormTest.php
+++ b/core/modules/node/tests/src/Functional/NodeEditFormTest.php
@@ -126,7 +126,7 @@
$open_details_elements = count($this->cssSelect('details[open="open"]'));
$this->drupalPostForm(NULL, $edit, t('Save'));
// The node author details must be open.
- $this->assertRaw('');
+ $this->assertRaw('');
// 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.');
reverted:
--- b/core/themes/bartik/css/components/form.css
+++ a/core/themes/bartik/css/components/form.css
@@ -52,9 +52,6 @@
color: #3b3b3b;
text-shadow: 0 1px 0 #fff;
}
-.error > summary {
- background: #fff;
-}
details summary a {
color: #3b3b3b;
}
reverted:
--- b/core/themes/classy/css/components/details.css
+++ a/core/themes/classy/css/components/details.css
@@ -21,30 +21,3 @@
cursor: pointer;
padding: 0.2em 0.5em;
}
-
-/* Errors */
-details.error:not([open]) summary:before {
- content: '';
- display: inline-block;
- height: 14px;
- width: 14px;
- background: url(../../../../misc/icons/e32700/error.svg) no-repeat center;
- background-size: contain;
- float: right; /* LTR */
-}
-[dir="rtl"] details.error:not([open]) summary:before {
- float: left;
-}
-details.error:not([open]) {
- border: 1px solid #e62600;
- box-shadow: inset 7px 0 0 #e62600; /* LTR */
- border-radius: 2px 0 0 2px; /* LTR */
- padding-left: 7px; /* LTR */
- color: #e62600;
-}
-[dir="rtl"] details.error:not([open]) {
- box-shadow: inset -7px 0 0 #e62600;
- border-radius: 0 2px 2px 0;
- padding-left: 0;
- padding-right: 7px;
-}
\ No newline at end of file
diff -u b/core/themes/seven/css/components/details.css b/core/themes/seven/css/components/details.css
--- b/core/themes/seven/css/components/details.css
+++ b/core/themes/seven/css/components/details.css
@@ -9,3 +9,25 @@
-details.error:not([open]) summary:before {
- height: 20px;
-}
\ No newline at end of file
+.details--child-error:not([open]) summary:before {
+ content: '';
+ display: inline-block;
+ height: 16px;
+ width: 14px;
+ background: url(../../../../misc/icons/e32700/error.svg) no-repeat center;
+ background-size: contain;
+ float: right; /* LTR */
+}
+[dir="rtl"] .details--child-error:not([open]) summary:before {
+ float: left;
+}
+.details--child-error:not([open]) {
+ border: 1px solid #e62600;
+ box-shadow: inset 7px 0 0 #e62600; /* LTR */
+ border-radius: 2px 0 0 2px; /* LTR */
+ padding-left: 7px; /* LTR */
+ color: #e62600;
+}
+[dir="rtl"] .details--child-error:not([open]) {
+ box-shadow: inset -7px 0 0 #e62600;
+ border-radius: 0 2px 2px 0;
+ padding-left: 0;
+ padding-right: 7px;
+}
diff -u b/core/themes/seven/css/components/entity-meta.css b/core/themes/seven/css/components/entity-meta.css
--- b/core/themes/seven/css/components/entity-meta.css
+++ b/core/themes/seven/css/components/entity-meta.css
@@ -57,13 +57,13 @@
.entity-meta details .summary {
display: none; /* Hide JS summaries. @todo Rethink summaries. */
}
-.entity-meta details.error:not([open]) {
- padding-left: 7px;
+.entity-meta .details--child-error:not([open]) {
+ padding-left: 6px;
}
-.entity-meta details.error:not([open]) > * {
+.entity-meta .details--child-error:not([open]) > * {
position: relative;
left: -7px;
- margin-right: -11px;
+ margin-right: -12px;
}
[dir="rtl"] .entity-meta details.error:not([open]) {
padding-left: 0;
@@ -77 +77 @@
-}
\ No newline at end of file
+}
diff -u b/core/themes/seven/css/components/vertical-tabs.css b/core/themes/seven/css/components/vertical-tabs.css
--- b/core/themes/seven/css/components/vertical-tabs.css
+++ b/core/themes/seven/css/components/vertical-tabs.css
@@ -37,13 +37,43 @@
.vertical-tabs__menu-item.last {
border-bottom: none;
}
-.vertical-tabs__menu-item.error:not(.is-selected) {
+.vertical-tab__menu-item--child-error.is-selected {
+ padding-top: 1px;
+}
+.vertical-tab__menu-item--child-error:not(.is-selected) {
border: 1px solid #e62600;
- border-bottom: 1px solid #ccc;
border-right: 0;
+ border-bottom-color: #ccc;
+ box-shadow: inset 7px 0 0 #e62600; /* LTR */
+ border-radius: 2px 0 0 2px; /* LTR */
+ padding-left: 7px; /* LTR */
+}
+.vertical-tab__menu-item--child-error:not(.is-selected) a {
+ padding-left: 7px; /* LTR */
+ padding-right: 10px;
+ border-bottom: 1px solid #e62600;
+ color: #e62600;
+}
+[dir="rtl"] .vertical-tab__menu-item--child-error:not(.is-selected) {
+ box-shadow: inset -7px 0 0 #e62600;
+ border-radius: 0 2px 2px 0;
+ padding-left: 0;
+ padding-right: 7px;
}
-.vertical-tabs__menu-item.error:not(.is-selected) .vertical-tabs__menu-item-title:before {
+[dir="rtl"] .vertical-tab__menu-item--child-error:not(.is-selected) a {
+ padding-right: 7px;
+}
+.vertical-tab__menu-item--child-error:not(.is-selected) .vertical-tabs__menu-item-title:before {
+ content: '';
+ display: inline-block;
height: 14px;
+ width: 14px;
+ background: url(../../../../misc/icons/e32700/error.svg) no-repeat center;
+ background-size: contain;
+ float: right;
+}
+[dir="rtl"] .vertical-tab__menu-item--child-error:not(.is-selected) .vertical-tabs__menu-item-title:before {
+ float: left;
}
[dir="rtl"] .vertical-tabs__menu-item.is-selected {
border-left: 1px solid #fcfcfa;
reverted:
--- b/core/themes/stable/css/core/vertical-tabs.css
+++ a/core/themes/stable/css/core/vertical-tabs.css
@@ -38,39 +38,6 @@
border-top: 0;
background: #eee;
}
-.vertical-tabs__menu-item.error:not(.is-selected) {
- border-top: 1px solid #e62600;
- box-shadow: inset 7px 0 0 #e62600; /* LTR */
- border-radius: 2px 0 0 2px; /* LTR */
- padding-left: 7px; /* LTR */
-}
-.vertical-tabs__menu-item.error:not(.is-selected) a {
- padding-left: 7px; /* LTR */
- border-bottom: 1px solid #e62600;
- color: #e62600;
-}
-[dir="rtl"] .vertical-tabs__menu-item.error:not(.is-selected) {
- box-shadow: inset -7px 0 0 #e62600;
- border-radius: 0 2px 2px 0;
- padding-left: 0;
- padding-right: 7px;
-}
-[dir="rtl"] .vertical-tabs__menu-item.error:not(.is-selected) a {
- padding-left: 7px;
- padding-right: 7px;
-}
-.vertical-tabs__menu-item.error:not(.is-selected) .vertical-tabs__menu-item-title:before {
- content: '';
- display: inline-block;
- height: 20px;
- width: 14px;
- background: url(../../../../misc/icons/e32700/error.svg) no-repeat center;
- background-size: contain;
- float: right;
-}
-[dir="rtl"] .vertical-tabs__menu-item.error:not(.is-selected) .vertical-tabs__menu-item-title:before {
- float: left;
-}
.vertical-tabs__menu-item a {
display: block;
padding: 0.5em 0.6em;
only in patch2:
unchanged:
--- a/core/themes/bartik/bartik.libraries.yml
+++ b/core/themes/bartik/bartik.libraries.yml
@@ -10,6 +10,7 @@ global-styling:
css/components/captions.css: {}
css/components/comments.css: {}
css/components/contextual.css: {}
+ css/components/details.css: {}
css/components/demo-block.css: {}
# @see https://www.drupal.org/node/2389735
css/components/dropbutton.component.css: {}
only in patch2:
unchanged:
--- /dev/null
+++ b/core/themes/bartik/css/components/details.css
@@ -0,0 +1,33 @@
+/**
+ * @file
+ * Collapsible details.
+ *
+ * @see collapse.js
+ */
+
+/* Errors */
+.details--child-error:not([open]) summary {
+ background-color: #f1f1f1;
+}
+.details--child-error:not([open]) summary:before {
+ content: '';
+ display: inline-block;
+ height: 20px;
+ width: 14px;
+ background: url(../../../../misc/icons/e32700/error.svg) no-repeat center;
+ background-size: contain;
+ float: right; /* LTR */
+}
+[dir="rtl"] .details--child-error:not([open]) summary:before {
+ float: left;
+}
+.details--child-error:not([open]) {
+ border: 2px solid red;
+ box-shadow: inset 7px 0 0 red; /* LTR */
+ padding-left: 7px; /* LTR */
+}
+[dir="rtl"] .details--child-error:not([open]) {
+ box-shadow: inset -7px 0 0 red;
+ padding-left: 0;
+ padding-right: 7px;
+}
only in patch2:
unchanged:
--- a/core/themes/bartik/css/components/vertical-tabs.component.css
+++ b/core/themes/bartik/css/components/vertical-tabs.component.css
@@ -14,3 +14,40 @@
/* This is required to win specificity over [dir="rtl"] .region-content ul */
padding: 0;
}
+.vertical-tab__menu-item--child-error.is-selected {
+ padding-top: 1px;
+}
+.vertical-tab__menu-item--child-error:not(.is-selected) {
+ border-top: 1px solid red;
+ background-color: #f1f1f1;
+ box-shadow: inset 7px 0 0 red; /* LTR */
+ border-radius: 2px 0 0 2px; /* LTR */
+ padding-left: 7px; /* LTR */
+}
+.vertical-tab__menu-item--child-error:not(.is-selected) a {
+ padding-left: 7px; /* LTR */
+ border-bottom: 1px solid red;
+ color: #e32700;
+}
+[dir="rtl"] .vertical-tab__menu-item--child-error:not(.is-selected) {
+ box-shadow: inset -7px 0 0 red;
+ border-radius: 0 2px 2px 0;
+ padding-left: 0;
+ padding-right: 7px;
+}
+[dir="rtl"] .vertical-tab__menu-item--child-error:not(.is-selected) a {
+ padding-left: 7px;
+ padding-right: 7px;
+}
+.vertical-tab__menu-item--child-error:not(.is-selected) .vertical-tabs__menu-item-title:before {
+ content: '';
+ display: inline-block;
+ height: 20px;
+ width: 14px;
+ background: url(../../../../misc/icons/e32700/error.svg) no-repeat center;
+ background-size: contain;
+ float: right;
+}
+[dir="rtl"] .vertical-tab__menu-item--child-error:not(.is-selected) .vertical-tabs__menu-item-title:before {
+ float: left;
+}
only in patch2:
unchanged:
--- a/core/themes/seven/seven.libraries.yml
+++ b/core/themes/seven/seven.libraries.yml
@@ -12,6 +12,7 @@ global-styling:
css/components/buttons.css: {}
css/components/colors.css: {}
css/components/messages.css: {}
+ css/components/details.css: {}
css/components/dropbutton.component.css: {}
css/components/entity-meta.css: {}
css/components/field-ui.css: {}