Skip to content

Commit e8692ba

Browse files
Add ARIA roles to Tippy dropdowns for screen reader support
1 parent f067d46 commit e8692ba

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

core/src/main/resources/lib/layout/breadcrumb.jelly

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ THE SOFTWARE.
8282
</j:otherwise>
8383
</j:choose>
8484
<j:if test="${attrs.hasMenu or attrs.hasChildrenMenu}">
85-
<div aria-label="dropdown menu for ${attrs.title}" data-iscurrent="${isCurrent}" data-href="${attrs.href}" data-base="${baseUrl}" tabindex="0" class="dropdown-indicator" data-model="${attrs.hasMenu}" data-children="${attrs.hasChildrenMenu}" >
85+
<div aria-label="dropdown menu for ${attrs.title}" aria-haspopup="menu" aria-expanded="false" data-iscurrent="${isCurrent}" data-href="${attrs.href}" data-base="${baseUrl}" tabindex="0" class="dropdown-indicator" data-model="${attrs.hasMenu}" data-children="${attrs.hasChildrenMenu}" >
8686
<l:icon class="icon-sm jenkins-!-text-color-secondary" src="symbol-chevron-down" />
8787
</div>
8888
</j:if>

src/main/js/components/dropdowns/templates.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ function menuItem(options) {
8080
const tag = itemOptions.type === "link" ? "a" : "button";
8181

8282
const item = createElementFromHtml(`
83-
<${tag} class="jenkins-dropdown__item ${itemOptions.clazz ? xmlEscape(itemOptions.clazz) : ""}"
83+
<${tag} role="menuitem" class="jenkins-dropdown__item ${itemOptions.clazz ? xmlEscape(itemOptions.clazz) : ""}"
8484
${itemOptions.url ? `href="${xmlEscape(itemOptions.url)}"` : ""} ${itemOptions.id ? `id="${xmlEscape(itemOptions.id)}"` : ""}
8585
${itemOptions.tooltip ? `data-html-tooltip="${xmlEscape(itemOptions.tooltip)}"` : ""}>
8686
${

src/main/js/components/dropdowns/utils.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ function generateDropdown(element, callback, immediate, options = {}) {
8181
function generateDropdownItems(items, compact) {
8282
const menuItems = document.createElement("div");
8383
menuItems.classList.add("jenkins-dropdown");
84+
menuItems.setAttribute("role", "menu");
85+
const menuLabel = items.length > 0 && items[0].label
86+
? `${items[0].label} menu`
87+
: "dropdown menu";
88+
menuItems.setAttribute("aria-label", menuLabel);
89+
8490
if (compact === true) {
8591
menuItems.classList.add("jenkins-dropdown--compact");
8692
}

0 commit comments

Comments
 (0)