carbon-components-angular
Version:
Next generation components
89 lines • 10.1 kB
JavaScript
function findSiblingElem(target, direction) {
if (target[direction]) {
if (target[direction].classList.contains("disabled")) {
return findSiblingElem(target[direction], direction);
}
return target[direction];
}
}
export function findNextElem(target) {
return findSiblingElem(target, "nextElementSibling");
}
export function findPrevElem(target) {
return findSiblingElem(target, "previousElementSibling");
}
// check for Hight contrast mode
export function HcModeChecker() {
let colorTest = "rgb(255, 0, 0)";
let htmlChecker = document.createElement("div");
htmlChecker.classList.add("hc-checker");
document.body.appendChild(htmlChecker);
if (window.getComputedStyle(htmlChecker).backgroundColor.toString() !== colorTest) {
document.body.classList.add("a11y");
}
document.body.removeChild(htmlChecker);
}
export function focusNextTree(elem, rootElem = null) {
if (elem) {
let focusable = elem.querySelector("[tabindex='0']");
if (focusable) {
focusable.focus();
}
else {
focusNextElem(elem, rootElem);
}
}
}
export function focusNextElem(elem, rootElem = null) {
if (elem) {
let nextElem = elem.nextElementSibling;
if (nextElem) {
let focusableElem = nextElem.querySelector("[tabindex='0']");
if (focusableElem) {
focusableElem.focus();
}
else {
focusNextElem(nextElem, rootElem);
}
}
else {
if (rootElem) {
let nextRootElem = rootElem.nextElementSibling;
if (nextRootElem) {
focusNextTree(nextRootElem, rootElem);
}
}
}
}
}
export function focusPrevElem(elem, parentRef = null) {
if (elem) {
let prevElem = elem.previousElementSibling;
if (prevElem) {
let focusableElem = prevElem.querySelector("[tabindex='0']");
if (focusableElem) {
if (focusableElem.getAttribute("aria-expanded") === "true") {
let lastFocElms = prevElem.querySelectorAll("[tabindex='0']");
let arrLen = lastFocElms.length - 1;
for (let i = arrLen; i >= 0; i--) {
if (!!(lastFocElms[i].offsetWidth || lastFocElms[i].offsetHeight ||
lastFocElms[i].getClientRects().length)) {
focusableElem = lastFocElms[i];
break;
}
}
}
focusableElem.focus();
}
else {
focusPrevElem(prevElem, parentRef);
}
}
else {
if (parentRef) {
parentRef.querySelector("[tabindex='0']").focus();
}
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYTExeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9hMTF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxTQUEwRDtJQUMxRixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN0QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3JELE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNyRDtRQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3pCO0FBQ0YsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBTTtJQUNsQyxPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFNO0lBQ2xDLE9BQU8sZUFBZSxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxnQ0FBZ0M7QUFDaEMsTUFBTSxVQUFVLGFBQWE7SUFDNUIsSUFBSSxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7SUFDakMsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV2QyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssU0FBUyxFQUFFO1FBQ2xGLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNwQztJQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEdBQUcsSUFBSTtJQUNsRCxJQUFJLElBQUksRUFBRTtRQUNULElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVyRCxJQUFJLFNBQVMsRUFBRTtZQUNkLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNsQjthQUFNO1lBQ04sYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM5QjtLQUNEO0FBQ0YsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQ2xELElBQUksSUFBSSxFQUFFO1FBQ1QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBRXZDLElBQUksUUFBUSxFQUFFO1lBQ2IsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTdELElBQUksYUFBYSxFQUFFO2dCQUNsQixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEI7aUJBQU07Z0JBQ04sYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNsQztTQUNEO2FBQU07WUFDTixJQUFJLFFBQVEsRUFBRTtnQkFDYixJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBRS9DLElBQUksWUFBWSxFQUFFO29CQUNqQixhQUFhLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUN0QzthQUNEO1NBQ0Q7S0FDRDtBQUNGLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEdBQUcsSUFBSTtJQUNuRCxJQUFJLElBQUksRUFBRTtRQUNULElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUUzQyxJQUFJLFFBQVEsRUFBRTtZQUNiLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RCxJQUFJLGFBQWEsRUFBRTtnQkFFbEIsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLE1BQU0sRUFBRTtvQkFDM0QsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQzlELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7NEJBQy9ELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRTs0QkFDekMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDL0IsTUFBTTt5QkFDTjtxQkFDRDtpQkFDRDtnQkFDRCxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEI7aUJBQU07Z0JBQ04sYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNuQztTQUNEO2FBQU07WUFDTixJQUFJLFNBQVMsRUFBRTtnQkFDZCxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDbEQ7U0FDRDtLQUNEO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGZpbmRTaWJsaW5nRWxlbSh0YXJnZXQsIGRpcmVjdGlvbjogXCJuZXh0RWxlbWVudFNpYmxpbmdcIiB8IFwicHJldmlvdXNFbGVtZW50U2libGluZ1wiKSB7XG5cdGlmICh0YXJnZXRbZGlyZWN0aW9uXSkge1xuXHRcdGlmICh0YXJnZXRbZGlyZWN0aW9uXS5jbGFzc0xpc3QuY29udGFpbnMoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0cmV0dXJuIGZpbmRTaWJsaW5nRWxlbSh0YXJnZXRbZGlyZWN0aW9uXSwgZGlyZWN0aW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldFtkaXJlY3Rpb25dO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmV4dEVsZW0odGFyZ2V0KSB7XG5cdHJldHVybiBmaW5kU2libGluZ0VsZW0odGFyZ2V0LCBcIm5leHRFbGVtZW50U2libGluZ1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQcmV2RWxlbSh0YXJnZXQpIHtcblx0cmV0dXJuIGZpbmRTaWJsaW5nRWxlbSh0YXJnZXQsIFwicHJldmlvdXNFbGVtZW50U2libGluZ1wiKTtcbn1cblxuLy8gY2hlY2sgZm9yIEhpZ2h0IGNvbnRyYXN0IG1vZGVcbmV4cG9ydCBmdW5jdGlvbiBIY01vZGVDaGVja2VyKCkge1xuXHRsZXQgY29sb3JUZXN0ID0gXCJyZ2IoMjU1LCAwLCAwKVwiO1xuXHRsZXQgaHRtbENoZWNrZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG5cdGh0bWxDaGVja2VyLmNsYXNzTGlzdC5hZGQoXCJoYy1jaGVja2VyXCIpO1xuXHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGh0bWxDaGVja2VyKTtcblxuXHRpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoaHRtbENoZWNrZXIpLmJhY2tncm91bmRDb2xvci50b1N0cmluZygpICE9PSBjb2xvclRlc3QpIHtcblx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJhMTF5XCIpO1xuXHR9XG5cdGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaHRtbENoZWNrZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNOZXh0VHJlZShlbGVtLCByb290RWxlbSA9IG51bGwpIHtcblx0aWYgKGVsZW0pIHtcblx0XHRsZXQgZm9jdXNhYmxlID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiW3RhYmluZGV4PScwJ11cIik7XG5cblx0XHRpZiAoZm9jdXNhYmxlKSB7XG5cdFx0XHRmb2N1c2FibGUuZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9jdXNOZXh0RWxlbShlbGVtLCByb290RWxlbSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c05leHRFbGVtKGVsZW0sIHJvb3RFbGVtID0gbnVsbCkge1xuXHRpZiAoZWxlbSkge1xuXHRcdGxldCBuZXh0RWxlbSA9IGVsZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXG5cdFx0aWYgKG5leHRFbGVtKSB7XG5cdFx0XHRsZXQgZm9jdXNhYmxlRWxlbSA9IG5leHRFbGVtLnF1ZXJ5U2VsZWN0b3IoXCJbdGFiaW5kZXg9JzAnXVwiKTtcblxuXHRcdFx0aWYgKGZvY3VzYWJsZUVsZW0pIHtcblx0XHRcdFx0Zm9jdXNhYmxlRWxlbS5mb2N1cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9jdXNOZXh0RWxlbShuZXh0RWxlbSwgcm9vdEVsZW0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAocm9vdEVsZW0pIHtcblx0XHRcdFx0bGV0IG5leHRSb290RWxlbSA9IHJvb3RFbGVtLm5leHRFbGVtZW50U2libGluZztcblxuXHRcdFx0XHRpZiAobmV4dFJvb3RFbGVtKSB7XG5cdFx0XHRcdFx0Zm9jdXNOZXh0VHJlZShuZXh0Um9vdEVsZW0sIHJvb3RFbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNQcmV2RWxlbShlbGVtLCBwYXJlbnRSZWYgPSBudWxsKSB7XG5cdGlmIChlbGVtKSB7XG5cdFx0bGV0IHByZXZFbGVtID0gZWxlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXG5cdFx0aWYgKHByZXZFbGVtKSB7XG5cdFx0XHRsZXQgZm9jdXNhYmxlRWxlbSA9IHByZXZFbGVtLnF1ZXJ5U2VsZWN0b3IoXCJbdGFiaW5kZXg9JzAnXVwiKTtcblx0XHRcdGlmIChmb2N1c2FibGVFbGVtKSB7XG5cblx0XHRcdFx0aWYgKGZvY3VzYWJsZUVsZW0uZ2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRsZXQgbGFzdEZvY0VsbXMgPSBwcmV2RWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiW3RhYmluZGV4PScwJ11cIik7XG5cdFx0XHRcdFx0bGV0IGFyckxlbiA9IGxhc3RGb2NFbG1zLmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGFyckxlbjsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHRcdGlmICghIShsYXN0Rm9jRWxtc1tpXS5vZmZzZXRXaWR0aCB8fCBsYXN0Rm9jRWxtc1tpXS5vZmZzZXRIZWlnaHQgfHxcblx0XHRcdFx0XHRcdFx0bGFzdEZvY0VsbXNbaV0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpKSB7XG5cdFx0XHRcdFx0XHRcdGZvY3VzYWJsZUVsZW0gPSBsYXN0Rm9jRWxtc1tpXTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvY3VzYWJsZUVsZW0uZm9jdXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvY3VzUHJldkVsZW0ocHJldkVsZW0sIHBhcmVudFJlZik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChwYXJlbnRSZWYpIHtcblx0XHRcdFx0cGFyZW50UmVmLnF1ZXJ5U2VsZWN0b3IoXCJbdGFiaW5kZXg9JzAnXVwiKS5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl19