webgui/www/extras/yui/examples/menu/menuwaiaria_source.html
2008-03-25 16:13:25 +00:00

231 lines
5.4 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Using ARIA Roles and States with YUI Menu</title>
<!-- Standard reset and fonts -->
<link rel="stylesheet" type="text/css" href="../../build/reset/reset.css">
<link rel="stylesheet" type="text/css" href="../../build/fonts/fonts.css">
<!-- CSS for Menu -->
<link rel="stylesheet" type="text/css" href="../../build/menu/assets/skins/sam/menu.css">
<!-- Dependency source files -->
<script type="text/javascript" src="../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../build/container/container_core.js"></script>
<!-- Menu source file -->
<script type="text/javascript" src="../../build/menu/menu.js"></script>
<script type="text/javascript">
/*
Initialize and render the MenuBar when the page's DOM is ready
to be scripted.
*/
YAHOO.util.Event.onDOMReady(function () {
/*
Define an array of object literals, each containing
the data necessary to create the items for a MenuBar.
*/
var aItemData = [
{ text: "File", submenu: { id: "filemenu", itemdata: [
{ text: "New File", helptext: "Ctrl + N" },
"New Folder",
{ text: "Open", helptext: "Ctrl + O" },
{ text: "Open With...", submenu: { id: "applications", itemdata: [
"Application 1",
"Application 2",
"Application 3",
"Application 4"
] }
},
{ text: "Print", helptext: "Ctrl + P" }
] }
},
{ text: "Edit", submenu: { id: "editmenu", itemdata: [
[
{ text: "Undo", helptext: "Ctrl + Z" },
{ text: "Redo", helptext: "Ctrl + Y" }
],
[
{ text: "Cut", helptext: "Ctrl + X" },
{ text: "Copy", helptext: "Ctrl + C" },
{ text: "Paste", helptext: "Ctrl + V" },
{ text: "Delete", helptext: "Del" }
],
[ { text: "Select All", helptext: "Ctrl + A" } ],
[
{ text: "Find", helptext: "Ctrl + F" },
{ text: "Find Again", helptext: "Ctrl + G" }
]
] }
}
];
/*
Instantiate a MenuBar: The first argument passed to the constructor is the id
of the HTML to be created that will represent the MenuBar; the second is an
object literal of configuration properties.
*/
var oMenuBar = new YAHOO.widget.MenuBar("mymenubar", {
lazyload: true,
itemdata: aItemData
});
/*
Add a "show" event listener that keeps the left-most
submenu against the left edge of the browser viewport.
*/
function onSubmenuShow() {
if (this.id == "yahoo") {
this.cfg.setProperty("x", 0);
}
}
// Subscribe to the "show" event for each submenu
oMenuBar.subscribe("show", onSubmenuShow);
/*
Add the WAI-ARIA Roles and States to the MenuBar's DOM elements once it
is rendered.
*/
oMenuBar.subscribe("render", function () {
/*
Apply the "role" attribute of "menu" or "menubar" depending on the type of
the Menu control being rendered.
*/
this.element.setAttribute("role",
(this instanceof YAHOO.widget.MenuBar ? "menubar" : "menu"));
/*
Apply the appropriate "role" and "aria-[state]" attributes to the label of
each MenuItem instance.
*/
var aMenuItems = this.getItems(),
i = aMenuItems.length - 1,
oMenuItem,
oMenuItemLabel;
do {
oMenuItem = aMenuItems[i];
/*
Retrieve a reference to the anchor element that serves as the label for
each MenuItem.
*/
oMenuItemLabel = oMenuItem.element.firstChild;
// Set the "role" attribute of the label to "menuitem"
oMenuItemLabel.setAttribute("role", "menuitem");
// Remove the label from the browser's default tab order
oMenuItemLabel.setAttribute("tabindex", -1);
/*
Optional: JAWS announces the value of each anchor element's "href"
attribute when it recieves focus. If the MenuItem instance's "url"
attribute is set to the default, remove the attribute so that JAWS
does announce its value.
*/
if (oMenuItem.cfg.getProperty("url") == "#") {
oMenuItemLabel.removeAttribute("href");
}
/*
If the MenuItem has a submenu, set the "aria-haspopup" attribute to
true so that the screen reader can announce
*/
if (oMenuItem.cfg.getProperty("submenu")) {
oMenuItemLabel.setAttribute("aria-haspopup", true);
}
}
while (i--);
/*
Set the "tabindex" of the first MenuItem's label to 0 so the user can
easily tab into and out of the control.
*/
if (this.getRoot() == this) {
this.getItem(0).element.firstChild.setAttribute("tabindex", 0);
}
});
/*
Since this MenuBar instance is built completely from
script, call the "render" method passing in a node
reference for the DOM element that its should be
appended to.
*/
oMenuBar.render(document.body);
});
</script>
</head>
<body class="yui-skin-sam">
</body>
</html>