Skip to content

Commit fd35843

Browse files
Added accessibility for charts (#11801)
* Added accessibility for charts and graphts * Tiny adjustments * Function description fix * Improved labeling for critical products metrics section * Added missing aria-labelledby * More required labels added
1 parent 96ae5ed commit fd35843

File tree

6 files changed

+1296
-136
lines changed

6 files changed

+1296
-136
lines changed

dojo/static/dojo/js/metrics.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,75 @@ function accepted_per_week_2(critical, high, medium, low) {
738738
options);
739739
}
740740

741+
742+
// This function is valid besides metrics.html also for the dashboard-metrics.html,
743+
// dashboard.html, and product-metrics.html
744+
function updatePunchcardTable(punchcardData, ticks) {
745+
let tableBody = $("#punchcard-table tbody");
746+
747+
const daysMap = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
748+
let formattedData = {};
749+
750+
// No table processing in case of no data
751+
if (punchcardData.length === 0 || ticks.length === 0) return;
752+
753+
// Removing html elements from the ticks dates
754+
let ticksMap = {};
755+
ticks.forEach(entry => {
756+
let weekIndex = String(entry[0]);
757+
let rawHtml = entry[1];
758+
759+
// Goodbye <span> + space instead of <br/>
760+
let cleanDate = rawHtml.replace(/<\/?span[^>]*>/g, "").replace(/<br\s*\/?>/g, " ");
761+
cleanDate = cleanDate.trim();
762+
ticksMap[weekIndex] = cleanDate;
763+
});
764+
765+
let minWeekOffset = ticks[0][0];
766+
let maxWeekOffset = ticks[ticks.length - 1][0];
767+
768+
for (let weekOffset = minWeekOffset; weekOffset <= maxWeekOffset; weekOffset++) {
769+
let formattedDate = ticksMap[String(weekOffset)] || "Unknown Date";
770+
let formattedWeek = `Week ${weekOffset - minWeekOffset + 1}, starting on ${formattedDate}`;
771+
772+
formattedData[formattedWeek] = {
773+
"Monday": 0, "Tuesday": 0, "Wednesday": 0,
774+
"Thursday": 0, "Friday": 0, "Saturday": 0, "Sunday": 0
775+
};
776+
}
777+
778+
// Populating week data
779+
punchcardData.forEach(entry => {
780+
let weekOffset = entry[0];
781+
let day = daysMap[entry[1]];
782+
let value = entry[3] || 0;
783+
784+
let formattedDate = ticksMap[String(weekOffset)] || "Unknown Date";
785+
let formattedWeek = `Week ${weekOffset - minWeekOffset + 1}, starting on ${formattedDate}`;
786+
787+
if (formattedData[formattedWeek]) {
788+
formattedData[formattedWeek][day] = value;
789+
}
790+
});
791+
792+
// Rendering accessibility table body
793+
Object.entries(formattedData).forEach(([week, values]) => {
794+
let newRow = `
795+
<tr>
796+
<td scope="row">${week}</td>
797+
<td>${values.Monday || '0'}</td>
798+
<td>${values.Tuesday || '0'}</td>
799+
<td>${values.Wednesday || '0'}</td>
800+
<td>${values.Thursday || '0'}</td>
801+
<td>${values.Friday || '0'}</td>
802+
<td>${values.Saturday || '0'}</td>
803+
<td>${values.Sunday || '0'}</td>
804+
</tr>
805+
`;
806+
tableBody.append(newRow);
807+
});
808+
}
809+
741810
/*
742811
product_metrics.html
743812
*/

0 commit comments

Comments
 (0)