1
0

Update AccessifyHTML5 to support main element.

This commit is contained in:
Matthias Mees
2013-05-11 14:44:10 +02:00
parent 1281376681
commit f37663053e

@ -1,38 +1,96 @@
(function($) {
// https://github.com/yatil/accessifyhtml5.js
var AccessifyHTML5 = function (defaults) {
var fixes = {
'article' : { 'role': 'article' },
'aside' : { 'role': 'complementary' },
'nav' : { 'role': 'navigation' },
'output' : { 'aria-live': 'polite' },
'section' : { 'role': 'region' },
'[required]' : { 'aria-required': 'true' }
};
// Source: https://github.com/yatil/accessifyhtml5.js
var AccessifyHTML5 = function (defaults, more_fixes) {
"use strict";
var fixes = {
'article' : {'role': 'article' },
'aside' : {'role': 'complementary' },
'nav' : {'role': 'navigation' },
'main' : {'role': 'main' },
'output' : {'aria-live': 'polite' },
'section' : {'role': 'region' },
'[required]': {'aria-required': 'true' }
},
fix, elems, attr, value, key, obj, i, mo, by_match, el_label,
ATTR_SECURE = /aria-[a-z]+|role|tabindex|title|alt|data-[\w\-]+|lang|style|maxlength|placeholder|pattern|type/,
ID_PREFIX = "acfy-id-",
n_label = 0,
Doc = document;
if (Doc.querySelectorAll) {
if (defaults) {
if (defaults.header) {
fixes[defaults.header] = {
'role': 'banner'
};
}
if (defaults.footer) {
fixes[defaults.footer] = {
'role': 'contentinfo'
}
}
if (defaults.main) {
fixes[defaults.main] = {
'role': 'main'
}
}
if (defaults.header) {
fixes[defaults.header] = {
'role': 'banner'
};
}
if (defaults.footer) {
fixes[defaults.footer] = {
'role': 'contentinfo'
};
}
if (defaults.main) {
fixes[defaults.main] = {
'role': 'main'
};
fixes.main = {
'role': ''
};
}
}
$.each(fixes,
function(index, item) {
$(index).attr(item);
for (mo in more_fixes) {
fixes[mo] = more_fixes[mo];
}
for (fix in fixes) {
if (fixes.hasOwnProperty(fix)) {
elems = Doc.querySelectorAll(fix);
obj = fixes[fix];
for (i = 0; i < elems.length; i++) {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
attr = key;
value = obj[key];
if (!attr.match(ATTR_SECURE)) {
continue;
}
if (!(typeof value).match(/string|number/)) {
continue;
}
by_match = attr.match(/(describ|label)l?edby/);
if (by_match) {
el_label = Doc.querySelector(value);
if (! el_label) { continue; }
if (! el_label.id) {
el_label.id = ID_PREFIX + n_label;
}
value = el_label.id;
attr = "aria-" + ("label" === by_match[1] ? "labelledby" : "describedby");
n_label++;
}
if (!elems[i].hasAttribute(attr)) {
elems[i].setAttribute(attr, value);
}
}
}
}
);
}
}
}
};
AccessifyHTML5({