Commit b7c29196 authored by Philip Frilling's avatar Philip Frilling Committed by Jacob Rockowitz
Browse files

Issue #3277192 by pfrilling, bhogue, joseph.olstad: `role="radiogroup"` on...

Issue #3277192 by pfrilling, bhogue, joseph.olstad: `role="radiogroup"` on `<fieldset>` element not needed/causing a11y failure
parent d2f24a5d
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -498,21 +498,24 @@ function webform_preprocess_fieldset(&$variables) {
    unset($variables['attributes']['required']);
  }

  // Add role="radiogroup" on fieldsets containing radiobuttons.
  // Add aria-required="true" only on fieldsets containing required
  // radiobuttons.
  //
  // Issue #3240249: Aria-required on fieldset trigger accessibility fails.
  // @see https://www.drupal.org/project/webform/issues/3240249
  // @see https://www.drupal.org/project/webform/issues/3277192
  /** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
  $element_manager = \Drupal::service('plugin.manager.webform.element');
  $element_plugin = $element_manager->getElementInstance($element);
  $is_radios = ($element_plugin instanceof WebformRadios || $element_plugin instanceof WebformEntityRadios);
  if ($is_radios) {
    $variables['attributes']['role'] = 'radiogroup';
    $id = $variables['attributes']['id'] . '-legend';
    $variables['legend']['attributes']['id'] = $id;
    $variables['attributes']['aria-labelledby'] = $id;

    if (isset($variables['attributes']['aria-required'])) {
      // The aria-required is _not_ necessary on a fieldset of radio elements.
      unset($variables['attributes']['aria-required']);
    }
  }
  elseif (isset($variables['attributes']['aria-required'])) {
    unset($variables['attributes']['aria-required']);
+3 −3
Original line number Diff line number Diff line
@@ -119,10 +119,10 @@ webform_element_composite_advanced:
    $this->drupalGet('/webform/test_element_composite_wrapper');

    // Check fieldset wrapper.
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset" id="edit-radios-wrapper-fieldset--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-visible-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" aria-required="true" role="radiogroup" aria-labelledby="edit-radios-wrapper-fieldset--wrapper-legend">');
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset" id="edit-radios-wrapper-fieldset--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-visible-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper">');

    // Check fieldset wrapper with hidden title.
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset-hidden-title" id="edit-radios-wrapper-fieldset-hidden-title--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-hidden-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" aria-required="true" role="radiogroup" aria-labelledby="edit-radios-wrapper-fieldset-hidden-title--wrapper-legend">');
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset-hidden-title" id="edit-radios-wrapper-fieldset-hidden-title--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-hidden-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper">');

    // Check form element wrapper.
    $assert_session->responseContains('<div class="js-form-item form-item js-form-type-radios form-item-radios-wrapper-form-element js-form-item-radios-wrapper-form-element">');
@@ -140,7 +140,7 @@ webform_element_composite_advanced:
    }

    // Check wrapper with #states.
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-states-fieldset" class="js-webform-states-hidden radios--wrapper fieldgroup form-composite webform-composite-visible-title js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" id="edit-states-fieldset--wrapper" data-drupal-states="{&quot;visible&quot;:{&quot;.webform-submission-test-element-composite-wrapper-add-form :input[name=\u0022states_checkbox\u0022]&quot;:{&quot;checked&quot;:true}}}" role="radiogroup" aria-labelledby="edit-states-fieldset--wrapper-legend">');
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-states-fieldset" class="js-webform-states-hidden radios--wrapper fieldgroup form-composite webform-composite-visible-title js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" id="edit-states-fieldset--wrapper" data-drupal-states="{&quot;visible&quot;:{&quot;.webform-submission-test-element-composite-wrapper-add-form :input[name=\u0022states_checkbox\u0022]&quot;:{&quot;checked&quot;:true}}}">');
    $assert_session->responseContains('<div class="js-webform-states-hidden js-form-item form-item js-form-type-radios form-item-states-form-item js-form-item-states-form-item" data-drupal-states="{&quot;visible&quot;:{&quot;.webform-submission-test-element-composite-wrapper-add-form :input[name=\u0022states_checkbox\u0022]&quot;:{&quot;checked&quot;:true}}}">');
    $assert_session->responseContains('<div data-drupal-selector="edit-states-container" class="js-webform-states-hidden radios--wrapper fieldgroup form-composite js-form-wrapper form-wrapper" id="edit-states-container--wrapper" data-drupal-states="{&quot;visible&quot;:{&quot;.webform-submission-test-element-composite-wrapper-add-form :input[name=\u0022states_checkbox\u0022]&quot;:{&quot;checked&quot;:true}}}">');

+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ class WebformStatesHiddenTest extends WebformBrowserTestBase {
    $assert_session->responseContains('<div class="js-webform-states-hidden js-form-item form-item js-form-type-checkbox form-item-dependent-checkbox js-form-item-dependent-checkbox">');

    // Radios.
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-dependent-radios" class="js-webform-states-hidden radios--wrapper fieldgroup form-composite webform-composite-visible-title js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" id="edit-dependent-radios--wrapper" data-drupal-states="{&quot;visible&quot;:{&quot;.webform-submission-test-states-server-hidden-add-form :input[name=\u0022trigger_checkbox\u0022]&quot;:{&quot;checked&quot;:true}}}" role="radiogroup" aria-labelledby="edit-dependent-radios--wrapper-legend">');
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-dependent-radios" class="js-webform-states-hidden radios--wrapper fieldgroup form-composite webform-composite-visible-title js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" id="edit-dependent-radios--wrapper" data-drupal-states="{&quot;visible&quot;:{&quot;.webform-submission-test-states-server-hidden-add-form :input[name=\u0022trigger_checkbox\u0022]&quot;:{&quot;checked&quot;:true}}}">');

    // Select other.
    $assert_session->responseContains('<fieldset data-drupal-selector="edit-dependent-select-other" class="js-webform-select-other webform-select-other js-webform-states-hidden js-form-item webform-select-other--wrapper fieldgroup form-composite webform-composite-visible-title js-webform-type-webform-select-other webform-type-webform-select-other form-item js-form-wrapper form-wrapper" id="edit-dependent-select-other" data-drupal-states="{&quot;visible&quot;:{&quot;.webform-submission-test-states-server-hidden-add-form :input[name=\u0022trigger_checkbox\u0022]&quot;:{&quot;checked&quot;:true}}}">');