v1.0.0

β™Ώ Accessibility (A11y)

OnigiriJS provides built-in accessibility helpers to ensure your UI works seamlessly with keyboards, screen readers, and assistive technologies β€” without requiring a SPA framework.

Quick Start

<script src="onigiri-core.js"></script>
<script src="onigiri-a11y.js"></script>

<script>
// Accessibility module initializes automatically
// No configuration required
</script>
  • Visible keyboard focus indicators
  • Screen reader announcements
  • Focus trapping for modals
  • ARIA attribute helpers
  • Reduced motion & high contrast support

Screen Reader Announcements

API Usage

// Polite announcement (default)
Onigiri.a11y.announce('Profile saved successfully');

// Assertive announcement
Onigiri.a11y.announce('Error saving profile', 'assertive');

// Using Onigiri prototype
O('#save').announce('Saving changes');

Live Example

Try it

Use a screen reader or inspect #onigiri-announcer.

Focus Management

Programmatic Focus

// Focus by selector
Onigiri.a11y.focus('#main-content');

// Using Onigiri selection
O('#title').focus();

Live Example

Use Tab to see focus styles.

Focus Trapping (Modals)

API Usage

const trap = Onigiri.a11y.trapFocus('#modal', {
    initialFocus: '.close',
    returnFocus: true,
    escapeDeactivates: true
});

// Release
Onigiri.a11y.releaseFocusTrap(trap);

Live Example

Use Tab, Shift + Tab, Esc.


ARIA Attribute Helpers

// Set attributes
Onigiri.a11y.aria.set('#menu', 'expanded', true);
Onigiri.a11y.aria.toggle('#like', 'pressed');

// Using Onigiri selection
O('#tab-1').aria('selected', true);

Skip Links

// Create skip-to-content link
Onigiri.a11y.createSkipLink('#main-content');

Live Example

Main Content

This is the skip link target.


Motion & Contrast Preferences

if (Onigiri.a11y.prefersReducedMotion()) {
    console.log('Reduced motion enabled');
}

if (Onigiri.a11y.prefersHighContrast()) {
    console.log('High contrast enabled');
}

Accessibility Validation

const result = Onigiri.a11y.validate('#form');

if (!result.valid) {
    console.error(result.errors);
    console.warn(result.warnings);
}

Live Example



πŸ™ Accessibility Best Practices:
  • Always test with keyboard-only navigation
  • Trap focus in dialogs and modals
  • Announce dynamic content changes
  • Prefer semantic HTML
  • Respect reduced motion preferences

Accessibility Checklist

  • All interactive elements are keyboard accessible
  • Focus indicators are visible
  • Modals trap focus correctly
  • Forms have labels or aria-labels
  • Images include alt text
  • Dynamic updates are announced
  • Reduced motion is respected

βœ… Development Roadmap

Track the progress of OnigiriJS modules. Tasks are marked complete by the development team.

OnigiriJS Module Roadmap

Implementation progress of planned modules

6 / 21 completed (29%)
onigiri-state
Shared global & scoped state management
onigiri-directives
Declarative DOM bindings (o-show, o-model, etc.)
onigiri-resource
REST-style data models over AJAX
onigiri-observe
Intersection & Mutation observer helpers
onigiri-humhub-ui
Standard HumHub UI abstractions (modal, notify, confirm)
onigiri-lifecycle
Component lifecycle hooks
onigiri-guard
Debounce, throttle, single-run guards
onigiri-scroll
Scroll save/restore & helpers (PJAX-friendly)
onigiri-permission
Client-side permission awareness
onigiri-portal
DOM teleport / overlay mounting
onigiri-router
Micro router (non-SPA, PJAX-first)
onigiri-sanitize
HTML & input sanitization
onigiri-shortcut
Keyboard shortcut manager
onigiri-queue
Sequential async task runner
onigiri-gesture
Touch & swipe helpers
onigiri-devtools
Debugging & inspection helpers
onigiri-plugin
Plugin registration system
onigiri-time
Relative time & timezone utilities
onigiri-emojis
Emoji Picker and Manager
onigiri-tasks
Task Management
onigiri-polls
Polls creation and management
Note: Task completion is managed by the OnigiriJS development team.