βΏ 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
Accessible Modal
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.