diff --git a/layouts/joomla/form/renderlabel.php b/layouts/joomla/form/renderlabel.php index 011c18e3547bf..04833b2973464 100644 --- a/layouts/joomla/form/renderlabel.php +++ b/layouts/joomla/form/renderlabel.php @@ -24,15 +24,22 @@ $classes = array_filter((array) $classes); $id = $for . '-lbl'; +$isGroupedField = isset($field) && ( + $field instanceof \Joomla\CMS\Form\Field\RadioField + || $field instanceof \Joomla\CMS\Form\Field\CheckboxesField +); + +$tag = $isGroupedField ? 'span' : 'label'; + if ($required) { $classes[] = 'required'; } ?> - +> diff --git a/media_source/system/js/fields/joomla-field-subform.w-c.es6.js b/media_source/system/js/fields/joomla-field-subform.w-c.es6.js index 80878570122c7..e437f665f333a 100644 --- a/media_source/system/js/fields/joomla-field-subform.w-c.es6.js +++ b/media_source/system/js/fields/joomla-field-subform.w-c.es6.js @@ -296,10 +296,12 @@ class JoomlaFieldSubform extends HTMLElement { const oldSetId = fieldset.id; fieldset.id = idNew; - const groupLbl = row.querySelector(`label[for="${oldSetId}"]`); + const groupLbl = row.querySelector(`label[for="${oldSetId}"], [id="${oldSetId}-lbl"]`); if (groupLbl) { - groupLbl.setAttribute('for', idNew); + if (groupLbl.matches('label')) { + groupLbl.setAttribute('for', idNew); + } if (groupLbl.id) { groupLbl.setAttribute('id', `${idNew}-lbl`); @@ -329,10 +331,12 @@ class JoomlaFieldSubform extends HTMLElement { const oldSetId = fieldset.id; fieldset.id = idNew; - const groupLbl = row.querySelector(`label[for="${oldSetId}"]`); + const groupLbl = row.querySelector(`label[for="${oldSetId}"], [id="${oldSetId}-lbl"]`); if (groupLbl) { - groupLbl.setAttribute('for', idNew); + if (groupLbl.matches('label')) { + groupLbl.setAttribute('for', idNew); + } if (groupLbl.id) { groupLbl.setAttribute('id', `${idNew}-lbl`); diff --git a/media_source/system/js/fields/validate.es6.js b/media_source/system/js/fields/validate.es6.js index 0493c84aa8ca0..827434ecc0c13 100644 --- a/media_source/system/js/fields/validate.es6.js +++ b/media_source/system/js/fields/validate.es6.js @@ -61,7 +61,8 @@ class JFormValidator { markValid(element) { // Get a label - const label = element.form.querySelector(`label[for="${element.id}"]`); + const label = element.form.querySelector(`label[for="${element.id}"]`) + || document.getElementById(`${element.id}-lbl`); let message; if (element.classList.contains('required') || element.getAttribute('required')) { @@ -89,7 +90,8 @@ class JFormValidator { markInvalid(element, empty) { // Get a label - const label = element.form.querySelector(`label[for="${element.id}"]`); + const label = element.form.querySelector(`label[for="${element.id}"]`) + || document.getElementById(`${element.id}-lbl`); element.classList.remove('form-control-success', 'valid'); element.classList.add('form-control-danger', 'invalid'); @@ -130,7 +132,8 @@ class JFormValidator { removeMarking(element) { // Get the associated label let message; - const label = element.form.querySelector(`label[for="${element.id}"]`); + const label = element.form.querySelector(`label[for="${element.id}"]`) + || document.getElementById(`${element.id}-lbl`); if (label) { message = label.querySelector('span.form-control-feedback'); diff --git a/media_source/templates/administrator/atum/scss/blocks/_form.scss b/media_source/templates/administrator/atum/scss/blocks/_form.scss index aa65e32b7c493..b9915f636621a 100644 --- a/media_source/templates/administrator/atum/scss/blocks/_form.scss +++ b/media_source/templates/administrator/atum/scss/blocks/_form.scss @@ -63,6 +63,10 @@ .control-label { inline-size: 240px; padding: .3rem 1rem .3rem 0; + + > span:not(.invalid):not(.valid) { + color: var(--login-label-color); + } } .controls { @@ -120,6 +124,7 @@ td .form-control { border-color: var(--danger); } +.control-group .control-label .invalid, label.invalid { color: var(--danger-text); } @@ -128,6 +133,7 @@ label.invalid { border-color: var(--success); } +.control-group .control-label .valid, label.valid { color: var(--success-text); }