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