From b1faca5ca881b88cffc5c0b0f084a081092a1df0 Mon Sep 17 00:00:00 2001 From: westonruter Date: Wed, 4 Oct 2017 18:11:08 +0000 Subject: [PATCH] Customize: Improve accessibility of markup for base `WP_Customize_Control` and `WP_Customize_Nav_Menu_Control` with proper use of `label` elements and inclusion of `aria-describedby`. See #33085. Props valendesigns, afercia, westonruter. git-svn-id: https://develop.svn.wordpress.org/trunk@41740 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/customize-controls.css | 10 +- .../class-wp-customize-control.php | 156 +++++++++++------- .../class-wp-customize-nav-menu-control.php | 31 ++-- 3 files changed, 114 insertions(+), 83 deletions(-) diff --git a/src/wp-admin/css/customize-controls.css b/src/wp-admin/css/customize-controls.css index f825c68977..96fc72b22a 100644 --- a/src/wp-admin/css/customize-controls.css +++ b/src/wp-admin/css/customize-controls.css @@ -929,9 +929,7 @@ p.customize-section-description { line-height: 28px; } -.customize-control-radio label, -.customize-control-checkbox label, -.customize-control-nav_menu_auto_add label { +.customize-control .customize-inside-control-row { line-height: 20px; display: block; margin-left: 24px; @@ -2670,9 +2668,9 @@ body.adding-widget .add-new-widget:before, display: inline; } - .customize-control-radio label, - .customize-control-checkbox label, - .customize-control-nav_menu_auto_add label { + .customize-control-radio .customize-inside-control-row, + .customize-control-checkbox .customize-inside-control-row, + .customize-control-nav_menu_auto_add .customize-inside-control-row { margin-left: 32px; } diff --git a/src/wp-includes/class-wp-customize-control.php b/src/wp-includes/class-wp-customize-control.php index 6a6069efe5..15e0262fe3 100644 --- a/src/wp-includes/class-wp-customize-control.php +++ b/src/wp-includes/class-wp-customize-control.php @@ -477,83 +477,104 @@ class WP_Customize_Control { * @since 3.4.0 */ protected function render_content() { - switch( $this->type ) { + $input_id = '_customize-input-' . $this->id; + $description_id = '_customize-description-' . $this->id; + $describedby_attr = ( ! empty( $this->description ) ) ? 'aria-describedby="' . esc_attr( $description_id ) . '"' : ''; + switch ( $this->type ) { case 'checkbox': ?> - + choices ) ) + if ( empty( $this->choices ) ) { return; + } $name = '_customize-radio-' . $this->id; - - if ( ! empty( $this->label ) ) : ?> + ?> + label ) ) : ?> label ); ?> - description ) ) : ?> - description ; ?> - + description ) ) : ?> + description ; ?> + - foreach ( $this->choices as $value => $label ) : - ?> - - choices as $value => $label ) : ?> + + + value="" + name="" + link(); ?> + value(), $value ); ?> + /> + + + + choices ) ) + if ( empty( $this->choices ) ) { return; + } ?> - + - + label ) ) : ?> + + + description ) ) : ?> + description; ?> + + - allow_addition && current_user_can( 'publish_pages' ) && current_user_can( 'edit_theme_options' ) ) : // Currently tied to menus functionality. ?> - + ?> +
- + - + label ) ) : ?> + + + description ) ) : ?> + description; ?> + + + input_attrs(); ?> + value="value() ); ?>" + link(); ?> + /> + <# var elementId; #> @@ -64,21 +65,25 @@ class WP_Customize_Nav_Menu_Control extends WP_Customize_Control { $description ) : ?> -
  • - -
  • + <# elementId = _.uniqueId( 'customize-nav-menu-control-location-' ); #> +
  • + + +
  • - - +