Focus Manager Node Plugin: Accessible TabView
+ ++
+This example illustrates how to create an accessible tabview widget using the +Focus Manager Node Plugin, +Event's delegation support, and +Node's support for the +WAI-ARIA Roles and States. +
+ +Today's News
+-
+
- Top Stories +
- World +
- Entertainment +
- Sports +
- Technology +
Top Stories
+ +World News
+Entertainment News
+ +Sports News
+ +Technology News
+ +Setting Up the HTML
+
+The tabs in the tabview widget will be represented by a list of
+<a> elements whose href attribute is set to
+the id of an <div> element that contains its content.
+Therefore, without JavaScript and CSS, the tabs function as in-page links.
+
+For this example the content of each tab panel is created on the server using +the YQL API to fetch the title and +URL for news stories made available from the various +Yahoo! News RSS feeds. +Here's the PHP: +
+ + +Progressive Enhancement
++The markup above will be transformed into a tabview widget using both CSS and +JavaScript. To account for the scenario where the user has CSS enabled in +their browser but JavaScript is disabled, the CSS used to style the tabview +will be loaded via JavaScript using the +built-in loader of the YUI Global Object. +Additionally, JavaScript will be used to temporarily hide the tabview markup +while the JavaScript and CSS are in the process of loading to prevent the user +from seeing a flash unstyled content. +
+ + +ARIA Support
++Through the use of CSS and JavaScript the HTML for the tabview can be +transformed into something that looks and behaves like a desktop tab control, +but users of screen readers won't perceive it as an atomic widget, but rather +simply as a set of HTML elements. However, through the application +of the +WAI-ARIA Roles and States, it is +possible to improve the semantics of the markup such that users of screen +readers perceive it as a tab control. +
+ + +Keyboard Functionality
+
+The keyboard functionality for the tabview widget will be provided by the
+Focus Manager Node Plugin. The Focus Manager's
+descendants
+attribute is set to a value of ".yui-tab>a", so that only one tab in the tabview
+is in the browser's default tab flow. This allows users navigating via the
+keyboard to use the tab key to quickly move into and out of the tabview. Once
+the tabview has focus, the user can move focus among each tab using the left
+and right arrows keys, as defined by the value of the
+keys
+attribute. Lastly, the
+focusClass
+attribute is used to apply a class of yui-tab-focus to the parent
+<li> of each <a> when it is focused,
+making it easy to style the tab's focused state in each of the
+A-Grade browsers.
+
+
+
+
Accessibility Sugar
++One of the challenges faced by users of screen readers is knowing when you've +left the context of a given control. In the case of this tabview, if it +were adjacent to another ARIA-enabled widget, the user would know they've +left the tabview when the screen reader announces the role of the adjacent +widget. However, if the tabview is sitting alongside standard HTML content, it +would be really difficult for the user to know when they've left the context of +the active panel. +
++One solution to this problem is to add some additional navigation as the last +child of each tab panel that allows the user to move to the previous and next +panel in the tabview. This will not only help alert users of screen readers +that they've reached the end of the tab's panel, but allow all +keyboard users to move more quickly to the next/previous panel. Without this +additionally navigation, keyboard users would typically have to press +shift+tab to navigate back up to the list of tabs to move to the next/previous +tab. +
+ +