Back

Learn with passion to live with purpose.

Neque convallis a cras semper auctor. Libero id faucibus nisl tincidunt egetnvallis a cras semper auctonvallis a cras semper aucto.

94532
Foreign Followers
11223
Classes Complete
25678
Students Enrolled
2678
Certified Teachers

What Make Us Spcecial?

Lorem ipsum dolor sit amet, consectetur adipisc ing elit.

react course 17
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Read more
react course 16
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Read more
react course 13
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Read more

Cras tristique turpis justo, eu consequat sem adipiscing ut. Donec posuere bibendum metus.

Tony Nguyen, Co-Founder

Meet Our Team

Plugins your themes with even more features.

team 7
Owen Christ
After working as a software developer and...
team 5
Namrata Parmar
I came to Eduma ten years ago
team 1
George Clinton
After working as a software developer and...
team 8
George Richards
After working as a software developer and...
team 3
Betty Milner
After working as a software developer and...

A Great Place to Grow

(function() { document.addEventListener('DOMContentLoaded', function() { // Add lang="en" to if missing (WCAG 3.1.1) if (!document.documentElement.getAttribute('lang')) { document.documentElement.setAttribute('lang', 'en'); } // Add if empty (WCAG 2.4.2) var titleElement = document.querySelector('title'); if (!titleElement || titleElement.textContent.trim() === '') { document.title = 'Default Title'; // Set a default title } // Add skip navigation link before first focusable element (WCAG 2.4.1) var firstFocusable = document.querySelector('a, area, button, input, select, textarea, [tabindex]:not([tabindex="-1"])'); if (firstFocusable) { var skipLink = document.createElement('a'); skipLink.href = '#main'; // Assuming the main content has an ID of "main" skipLink.textContent = 'Skip to main content'; skipLink.style.position = 'absolute'; skipLink.style.left = '-9999px'; // Hide link visually document.body.insertBefore(skipLink, firstFocusable); } // Add alt="" to decorative images (WCAG 1.1.1) var decorativeImages = document.querySelectorAll('img:not([alt]):not([role="presentation"]), [role="img"]:not([alt])'); decorativeImages.forEach(function(img) { img.setAttribute('alt', ''); }); // Add aria-label to icon-only buttons with no text (WCAG 4.1.2) var iconButtons = document.querySelectorAll('button:not(:empty):not([aria-label]), [role="button"]:not(:empty):not([aria-label])'); iconButtons.forEach(function(btn) { var ariaLabel = btn.querySelector('span, img') ? btn.querySelector('span, img').alt || btn.querySelector('span, img').getAttribute('aria-label') : 'Icon button'; btn.setAttribute('aria-label', ariaLabel); }); // Add role="main" to main content area if missing (WCAG 1.3.1) var mainElement = document.querySelector('main'); if (mainElement && !mainElement.getAttribute('role')) { mainElement.setAttribute('role', 'main'); } // Ensure focus is visible (inject CSS for :focus outline if missing) (WCAG 2.4.7) var style = document.createElement('style'); style.textContent = 'button:focus, a:focus, input:focus { outline: 2px solid blue; }'; document.head.appendChild(style); // Add aria-required="true" to required form fields (WCAG 3.3.2) var requiredFields = document.querySelectorAll('input[required], select[required], textarea[required]'); requiredFields.forEach(function(field) { field.setAttribute('aria-required', 'true'); }); // Add autocomplete attributes to common form fields (name, email, tel) (WCAG 3.3.2) var autocompleteFields = document.querySelectorAll('input[type="text"], input[type="email"], input[type="tel"]'); autocompleteFields.forEach(function(field) { if (field.type === 'email') { field.setAttribute('autocomplete', 'email'); } else if (field.type === 'tel') { field.setAttribute('autocomplete', 'tel'); } else { field.setAttribute('autocomplete', 'name'); } }); // Add aria-hidden="true" to decorative SVGs (WCAG 1.1.1) var decorativeSVGs = document.querySelectorAll('svg:not([aria-hidden]):not([role="img"])'); decorativeSVGs.forEach(function(svg) { svg.setAttribute('aria-hidden', 'true'); }); // Ensure all form inputs have associated labels via aria-labelledby or for/id (WCAG 2.5.3) var formInputs = document.querySelectorAll('input, select, textarea'); formInputs.forEach(function(input) { var label = document.querySelector('label[for="' + input.id + '"]'); if (label) { input.setAttribute('aria-labelledby', label.id); } }); // Add role="navigation" and aria-label to nav elements (WCAG 1.3.1) var navElements = document.querySelectorAll('nav:not([role])'); navElements.forEach(function(nav) { nav.setAttribute('role', 'navigation'); if (!nav.getAttribute('aria-label')) { nav.setAttribute('aria-label', 'Main navigation'); // Default label } }); // Fix empty link text with aria-label (WCAG 2.4.4) var emptyLinks = document.querySelectorAll('a:not(:empty):not([aria-label])'); emptyLinks.forEach(function(link) { link.setAttribute('aria-label', 'Link to ' + link.href); // Sets description based on link URL }); console.log('Accessibility fixes applied:'); console.log('1. lang attribute added to html'); console.log('2. Title added if empty'); console.log('3. Skip navigation link added'); console.log('4. alt="" added to decorative images'); console.log('5. aria-label added to icon-only buttons'); console.log('6. role="main" added to main element'); console.log('7. Focus visibility ensured'); console.log('8. aria-required added to required fields'); console.log('9. Autocomplete attributes added'); console.log('10. aria-hidden added to decorative SVGs'); console.log('11. aria-labelledby added to form inputs'); console.log('12. role="navigation" and aria-label added to navs'); console.log('13. aria-label fixed for empty link text'); }); })(); </body> </html> <!-- Page cached by LiteSpeed Cache 7.8.0.1 on 2026-03-30 00:21:08 -->