133 lines
3.2 KiB
JavaScript
133 lines
3.2 KiB
JavaScript
|
/**
|
||
|
* @package Hathor
|
||
|
* @copyright Copyright (C) 2005 - 2009 Open Source Matters, Inc. All rights reserved.
|
||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Functions
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Set focus to username on the login screen
|
||
|
*/
|
||
|
function setFocus() {
|
||
|
if (document.id("login-page")) {
|
||
|
document.id("form-login").username.select();
|
||
|
document.id("form-login").username.focus();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Change the skip nav target to work with webkit browsers (Safari/Chrome) and
|
||
|
* Opera
|
||
|
*/
|
||
|
function setSkip() {
|
||
|
if (Browser.chrome || Browser.safari || Browser.opera) {
|
||
|
var target = document.id('skiptarget');
|
||
|
target.href = "#skiptarget";
|
||
|
target.innerText = "Start of main content";
|
||
|
target.setAttribute("tabindex", "0");
|
||
|
document.id('skiplink').setAttribute("onclick",
|
||
|
"document.id('skiptarget').focus();");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the Aria Role based on the id
|
||
|
*
|
||
|
* @param id
|
||
|
* @param rolevalue
|
||
|
* @return
|
||
|
*/
|
||
|
function setRoleAttribute(id, rolevalue) {
|
||
|
if (document.id(id)) {
|
||
|
document.id(id).setAttribute("role", rolevalue);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the WAI-ARIA Roles Specify the html id then aria role
|
||
|
*
|
||
|
* @return
|
||
|
*/
|
||
|
function setAriaRoleElementsById() {
|
||
|
setRoleAttribute("header", "banner");
|
||
|
setRoleAttribute("element-box", "main");
|
||
|
setRoleAttribute("footer", "contentinfo");
|
||
|
setRoleAttribute("nav", "navigation");
|
||
|
setRoleAttribute("submenu", "navigation");
|
||
|
setRoleAttribute("system-message", "alert");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This sets the given Aria Property state to true for the given element
|
||
|
*
|
||
|
* @param el
|
||
|
* The element (tag.class)
|
||
|
* @param prop
|
||
|
* The property to set to true
|
||
|
* @return
|
||
|
*/
|
||
|
function setPropertyAttribute(el, prop) {
|
||
|
if (document.getElements(el)) {
|
||
|
document.getElements(el).set(prop, "true");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the WAI-ARIA Properties Specify the tag.class then the aria property to
|
||
|
* set to true If classes are changed on the fly (i.e. aria-invalid) they need
|
||
|
* to be changed there instead of here.
|
||
|
*
|
||
|
* @return
|
||
|
*/
|
||
|
function setAriaProperties() {
|
||
|
setPropertyAttribute("input.required", "aria-required");
|
||
|
setPropertyAttribute("textarea.required", "aria-required");
|
||
|
setPropertyAttribute("input.readonly", "aria-readonly");
|
||
|
setPropertyAttribute("input.invalid", "aria-invalid");
|
||
|
setPropertyAttribute("textarea.invalid", "aria-invalid");
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Process file
|
||
|
*/
|
||
|
|
||
|
/** from accessible suckerfish menu by Matt Carroll,
|
||
|
* mootooled by Bill Tomczak
|
||
|
*/
|
||
|
|
||
|
window.addEvent('domready', function(){
|
||
|
var menu = document.id('menu');
|
||
|
if (menu && !menu.hasClass('disabled')) {
|
||
|
menu.getElements('li').each(function(cel){
|
||
|
cel.addEvent('mouseenter', function(){
|
||
|
this.addClass('sfhover');
|
||
|
});
|
||
|
cel.addEvent('mouseleave', function() {
|
||
|
this.removeClass('sfhover');
|
||
|
});
|
||
|
});
|
||
|
|
||
|
menu.getElements('a').each(function(ael) {
|
||
|
ael.addEvent('focus', function() {
|
||
|
this.addClass('sffocus');
|
||
|
this.getParents('li').addClass('sfhover');
|
||
|
});
|
||
|
ael.addEvent('blur', function() {
|
||
|
this.removeClass('sffocus');
|
||
|
this.getParents('li').removeClass('sfhover');
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
window.addEvent('domready', function() {
|
||
|
setFocus();
|
||
|
setSkip();
|
||
|
setAriaRoleElementsById();
|
||
|
setAriaProperties();
|
||
|
});
|