save();
return $html;
}
// Name: Form elements do not have associated labels
function easywpstuff_assesplus_check_input_labels( $html ) {
return wya11y_process_html_with_dom(
$html,
function( $dom ) {
$inputs = $dom->find( 'input' );
foreach ( $inputs as $input ) {
$parent = $input->parent();
$previousSibling = $input->previousSibling();
$nextSibling = $input->nextSibling();
// Check if label is a sibling and has the 'for' attribute matching input's 'id'
if (
( $previousSibling && $previousSibling->tag === 'label' && $previousSibling->getAttribute( 'for' ) === $input->getAttribute( 'id' ) ) ||
( $nextSibling && $nextSibling->tag === 'label' && $nextSibling->getAttribute( 'for' ) === $input->getAttribute( 'id' ) ) ||
( $parent && $parent->tag === 'label' && $parent->getAttribute( 'for' ) === $input->getAttribute( 'id' ) )
) {
continue; // Skip if label with 'for' attribute is found
}
// Check if no descriptive attributes and not in a labeled context
if ( ! $input->getAttribute( 'placeholder' ) || ! $input->getAttribute( 'aria-label' ) || ! $input->getAttribute( 'aria-labelledby' ) ) {
$inputType = $input->getAttribute( 'type' );
// Check if input type is not hidden, button, or submit
if ( $inputType && ! in_array( $inputType, array( 'hidden', 'button', 'submit' ) ) ) {
$input->setAttribute( 'aria-label', $inputType );
}
}
}
}
);
}
function wya11y_has_non_empty_text_content( $element ) {
$textContent = $element->plaintext;
return $textContent !== '' && trim( $textContent ) !== ''; // Check if it's not empty or consists only of whitespace
}
// Links do not have a discernible name
function easywpstuff_assesplus_add_aria_labels_to_links( $html ) {
$html = str_replace( '', '', $html );
$html = str_replace( '', '', $html );
return wya11y_process_html_with_dom(
$html,
function( $dom ) {
$links = $dom->find( 'a' );
foreach ( $links as $link ) {
$hasTextContent = false;
$hasImageWithNonBlankAlt = false;
// Check if link or its child elements have text content
if ( wya11y_has_non_empty_text_content( $link ) ) {
$hasTextContent = true;
} else {
foreach ( $link->find( '*' ) as $element ) {
if ( wya11y_has_non_empty_text_content( $element ) ) {
$hasTextContent = true;
break;
}
}
}
// Check if link lacks text content or child with text content, and aria-label attributes
if ( ! $hasTextContent && ! $link->getAttribute( 'aria-label' ) && ! $link->getAttribute( 'aria-labelledby' ) ) {
foreach ( $link->find( 'img' ) as $imgElement ) {
if ( trim( $imgElement->getAttribute( 'alt' ) ) ) {
$hasImageWithNonBlankAlt = true;
break;
}
}
// Exclude links with image children having non-blank alt attribute
if ( ! $hasImageWithNonBlankAlt ) {
$link->setAttribute( 'aria-label', 'link' );
}
}
}
}
);
}
//Buttons do not have an accessible name
function easywpstuff_assesplus_add_aria_labels_to_buttons( $html ) {
return wya11y_process_html_with_dom(
$html,
function( $dom ) {
$buttons = $dom->find( 'button' );
foreach ( $buttons as $button ) {
if ( ! trim( $button->plaintext ) && ! $button->getattribute( 'aria-label' ) ) {
$child_elements = $button->find( '*' );
if ( empty( $child_elements ) ) {
$button->setattribute( 'aria-label', 'button' );
} else {
$button->setattribute( 'aria-label', 'button' );
}
}
if ( ! $button->getattribute( 'aria-label' ) ) {
$svg = $button->find( 'svg', 0 );
$path = $button->find( 'path', 0 );
$span = $button->find( 'span', 0 );
if ( $svg && $path ) {
$button->setattribute( 'aria-label', 'button' );
} elseif ( $span ) {
$span_text = trim( $span->plaintext );
if ( $span_text ) {
$button->setattribute( 'aria-label', $span_text );
}
}
}
}
}
);
}
//[user-scalable="no"] is used in the element or the [maximum-scale] attribute is less than 5.
function easywpstuff_assesplus_modify_viewport_meta_tag( $html ) {
return wya11y_process_html_with_dom(
$html,
function( $dom ) {
$viewport_meta_tag = $dom->find( 'meta[name=viewport]', 0 );
if ( $viewport_meta_tag ) {
$content = $viewport_meta_tag->getAttribute( 'content' );
$content = preg_replace( '/,\s*user-scalable=(?:no|0)/', '', $content );
if ( preg_match( '/maximum-scale=([^,\s]*)/', $content, $matches ) ) {
$maximum_scale = (float) $matches[1];
if ( $maximum_scale < 2 ) {
$content = preg_replace( '/maximum-scale=[^,\s]*/', 'maximum-scale=2', $content );
}
} else {
$content .= ', maximum-scale=2';
}
$viewport_meta_tag->setAttribute( 'content', $content );
}
}
);
}
function easywpstuff_assesplus_add_aria_labels_to_headers( $html ) {
return wya11y_process_html_with_dom(
$html,
function( $dom ) {
foreach ( $dom->find( 'div' ) as $div ) {
// Check if the div or its children have no plain text
if ( empty( trim( $div->plaintext ) ) ) {
if ( $div->role == 'link' && ! $div->hasAttribute( 'aria-label' ) ) {
$div->setAttribute( 'aria-label', 'link' );
}
if ( $div->role == 'button' && ! $div->hasAttribute( 'aria-label' ) ) {
$div->setAttribute( 'aria-label', 'button' );
}
if ( $div->role == 'menuitem' && ! $div->hasAttribute( 'aria-label' ) ) {
$div->setAttribute( 'aria-label', 'menuitem' );
}
}
}
}
);
}
// or