Make WordPress Core


Ignore:
Timestamp:
05/29/2025 07:51:28 PM (5 months ago)
Author:
joedolson
Message:

Media: Screen reader improvements for upload media errors.

Add a screen reader announcement when a media upload fails. Also add an announcement when dismissing upload errors, and improve the labeling context of the dismiss error button to explicitly identify which error will be dismissed.

Props joedolson, navi161, yogeshbhutkar, rishavdutta.
Fixes #63114.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/async-upload.php

    r59986 r60263  
    113113$id = media_handle_upload( 'async-upload', $post_id );
    114114if ( is_wp_error( $id ) ) {
    115     $button_unique_id = uniqid( 'dismiss-' );
    116     $message          = sprintf(
     115    $button_unique_id     = uniqid( 'dismiss-' );
     116    $error_description_id = uniqid( 'error-description-' );
     117    $message              = sprintf(
    117118        '%s <strong>%s</strong><br />%s',
    118119        sprintf(
    119             '<button type="button" id="%s" class="dismiss button-link">%s</button>',
     120            '<button type="button" id="%1$s" class="dismiss button-link" aria-describedby="%2$s">%3$s</button>',
    120121            esc_attr( $button_unique_id ),
     122            esc_attr( $error_description_id ),
    121123            __( 'Dismiss' )
    122124        ),
     
    128130        esc_html( $id->get_error_message() )
    129131    );
     132
    130133    wp_admin_notice(
    131134        $message,
    132135        array(
     136            'id'                 => $error_description_id,
    133137            'additional_classes' => array( 'error-div', 'error' ),
    134138            'paragraph_wrap'     => false,
    135139        )
    136140    );
    137     echo "<script>jQuery( 'button#{$button_unique_id}' ).on( 'click', function() {jQuery(this).parents('div.media-item').slideUp(200, function(){jQuery(this).remove();})});</script>\n";
     141
     142    $speak_message = sprintf(
     143        /* translators: %s: Name of the file that failed to upload. */
     144        __( '%s has failed to upload.' ),
     145        esc_js( $_FILES['async-upload']['name'] )
     146    );
     147
     148    echo "<script>_.delay(function() {wp.a11y.speak('" . esc_js( $speak_message ) . "');}, 1500);jQuery( 'button#{$button_unique_id}' ).on( 'click', function() {jQuery(this).parents('div.media-item').slideUp(200, function(){jQuery(this).remove();wp.a11y.speak( wp.i18n.__( 'Error dismissed.' ) );jQuery( '#plupload-browse-button' ).trigger( 'focus' );})});</script>\n";
    138149    exit;
    139150}
Note: See TracChangeset for help on using the changeset viewer.