Skip to content

Commit fdf3f27

Browse files
committed
GitHub: Make checkable menu items (such as the watch options and issue labels) accessible; i.e. users can now tell whether they're checked or not.
1 parent 887f1ab commit fdf3f27

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

GitHubA11yFixes.user.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ function makeHeading(elem, level) {
1515
elem.setAttribute("aria-level", level);
1616
}
1717

18-
function tweak(target) {
18+
function onSelectMenuItemChanged(target) {
19+
target.setAttribute("aria-checked", target.classList.contains("selected") ? "true" : "false");
20+
}
21+
22+
function onNodeAdded(target) {
1923
var elem;
2024
var res = document.location.href.match(/github.com\/[^\/]+\/[^\/]+\/([^\/]+)(\/?)/);
2125
if (["issues", "pull"].indexOf(res[1]) >= 0 && res[2] == "/") {
@@ -33,6 +37,20 @@ function tweak(target) {
3337
if (elem = target.querySelector(".commit-title"))
3438
makeHeading(elem, 2);
3539
}
40+
41+
// Site-wide stuff.
42+
for (elem of target.querySelectorAll(".select-menu-item")) {
43+
elem.setAttribute("role", "menuitem");
44+
onSelectMenuItemChanged(elem);
45+
}
46+
}
47+
48+
function onClassModified(target) {
49+
var classes = target.classList;
50+
if (!classes)
51+
return;
52+
if (classes.contains("select-menu-item"))
53+
onSelectMenuItemChanged(target);
3654
}
3755

3856
var observer = new MutationObserver(function(mutations) {
@@ -42,15 +60,19 @@ var observer = new MutationObserver(function(mutations) {
4260
for (var node of mutation.addedNodes) {
4361
if (node.nodeType != Node.ELEMENT_NODE)
4462
continue;
45-
tweak(node);
63+
onNodeAdded(node);
4664
}
65+
} else if (mutation.type === "attributes") {
66+
if (mutation.attributeName == "class")
67+
onClassModified(mutation.target);
4768
}
4869
} catch (e) {
4970
// Catch exceptions for individual mutations so other mutations are still handled.
5071
GM_log("Exception while handling mutation: " + e);
5172
}
5273
}
5374
});
54-
observer.observe(document, {childList: true, subtree: true});
75+
observer.observe(document, {childList: true, attributes: true,
76+
subtree: true, attributeFilter: ["class"]});
5577

56-
tweak(document);
78+
onNodeAdded(document);

0 commit comments

Comments
 (0)