From 4e2f631f956a49efde2bc5883e5ce51891621c44 Mon Sep 17 00:00:00 2001 From: Anurag Hazra Date: Thu, 26 May 2022 21:59:51 +0530 Subject: [PATCH] feat: added accessibility label and title in svg (#1787) --- src/cards/stats-card.js | 20 +++++++++++++++++-- src/common/Card.js | 14 +++++++++++++ .../renderWakatimeCard.test.js.snap | 8 ++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/cards/stats-card.js b/src/cards/stats-card.js index 197db71..9db4562 100644 --- a/src/cards/stats-card.js +++ b/src/cards/stats-card.js @@ -46,7 +46,6 @@ const createTextNode = ({ `; }; - /** * @param {Partial} stats * @param {Partial} options @@ -239,9 +238,26 @@ const renderStatsCard = (stats = {}, options = { hide: [] }) => { if (disable_animations) card.disableAnimations(); + // Accessibility Labels + const labels = Object.keys(STATS) + .filter((key) => !hide.includes(key)) + .map((key) => { + if (key === "commits") { + return `${i18n.t("statcard.commits")} ${ + include_all_commits ? "" : `in ${new Date().getFullYear()}` + } : ${totalStars}`; + } + return `${STATS[key].label}: ${STATS[key].value}`; + }) + .join(", "); + + card.setAccessibilityLabel({ + title: `${card.title}, Rank: ${rank.level}`, + desc: labels, + }); + return card.render(` ${rankCircle} - ${flexLayout({ items: statItems, diff --git a/src/common/Card.js b/src/common/Card.js index 569d752..2cc8455 100644 --- a/src/common/Card.js +++ b/src/common/Card.js @@ -42,12 +42,22 @@ class Card { this.paddingY = 35; this.titlePrefixIcon = titlePrefixIcon; this.animations = true; + this.a11yTitle = ""; + this.a11yDesc = ""; } disableAnimations() { this.animations = false; } + /** + * @param {{title: string, desc: string}} prop + */ + setAccessibilityLabel({ title, desc }) { + this.a11yTitle = title; + this.a11yDesc = desc; + } + /** * @param {string} value */ @@ -148,7 +158,11 @@ class Card { viewBox="0 0 ${this.width} ${this.height}" fill="none" xmlns="http://www.w3.org/2000/svg" + role="img" + aria-labelledby="descId" > + ${this.a11yTitle} + ${this.a11yDesc}