From d9c3a0cbbdcdb6ff218ad86f1716bc05d32fbc91 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 19 Mar 2024 16:33:47 +0100
Subject: [PATCH 1/5] fix(accessibility) : add labels and roles to header links
 and button

---
 src/app/header/header.component.html          | 164 +++++++++++++++---
 .../components/button/button.component.html   |   8 +-
 .../components/button/button.component.ts     |   3 +
 3 files changed, 153 insertions(+), 22 deletions(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index d61179a6e..ebd385184 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -3,6 +3,7 @@
     <app-svg-icon
       class="clickable"
       tabindex="0"
+      aria-label="Ouvrir le menu"
       [folder]="'ico'"
       [icon]="'menu'"
       [iconClass]="'icon-32'"
@@ -10,7 +11,7 @@
       (keyup.enter)="openMenu()"
     />
   </div>
-  <div class="logo clickable" routerLink="/home" tabindex="0">
+  <div class="logo clickable" aria-label="Retour accueil" role="button" routerLink="/home" tabindex="0">
     <img
       *ngIf="displayLogo(); else customTitle"
       class="logo-grand-lyon"
@@ -24,6 +25,7 @@
     <app-svg-icon
       class="clickable"
       tabindex="0"
+      [attr.aria-label]="isLoggedIn ? 'Ouvrir le menu de profil' : 'Se connecter'"
       [folder]="'ico'"
       [icon]="'profile'"
       [iconClass]="'icon-32'"
@@ -31,21 +33,49 @@
       (keyup.enter)="isLoggedIn ? openProfileMenu() : goToLoginPage()"
     />
   </div>
-  <div class="rightHeader">
-    <a routerLink="/news" [routerLinkActive]="'active'" i18n [attr.aria-current]="isActive('/news')">Actualités</a>
-    <a routerLink="/acteurs" [routerLinkActive]="'active'" i18n [attr.aria-current]="isActive('/acteurs')">
+  <div class="rightHeader" role="menu">
+    <a routerLink="/news" role="menuitem" i18n [routerLinkActive]="'active'" [attr.aria-current]="isActive('/news')"
+      >Actualités</a
+    >
+    <a
+      routerLink="/acteurs"
+      role="menuitem"
+      [routerLinkActive]="'active'"
+      i18n
+      [attr.aria-current]="isActive('/acteurs')"
+    >
       Cartographie
     </a>
-    <a routerLink="/orientation" [routerLinkActive]="'active'" i18n [attr.aria-current]="isActive('/orientation')">
+    <a
+      routerLink="/orientation"
+      role="menuitem"
+      [routerLinkActive]="'active'"
+      i18n
+      [attr.aria-current]="isActive('/orientation')"
+    >
       Orienter un bénéficiaire
     </a>
-    <a routerLink="/annuaire" [routerLinkActive]="'active'" i18n [attr.aria-current]="isActive('/annuaire')">
+    <a
+      routerLink="/annuaire"
+      role="menuitem"
+      [routerLinkActive]="'active'"
+      i18n
+      [attr.aria-current]="isActive('/annuaire')"
+    >
       Annuaire
     </a>
-    <a *ngIf="isAdmin" routerLink="/admin" [routerLinkActive]="'active'">Administration</a>
+    <a
+      *ngIf="isAdmin"
+      routerLink="/admin"
+      role="menuitem"
+      [routerLinkActive]="'active'"
+      [attr.aria-current]="isActive('/admin')"
+      >Administration</a
+    >
     <app-button
       *ngIf="isLoggedIn"
       class="connected"
+      ariaLabel="Ouvrir le menu de profil"
       [variant]="'primary'"
       [label]="displayName"
       [size]="'small'"
@@ -53,6 +83,7 @@
     />
     <app-button
       *ngIf="!isLoggedIn"
+      aria-label="Se connecter"
       [variant]="'primaryBlack'"
       [label]="'Se connecter'"
       [size]="'small'"
@@ -61,31 +92,122 @@
   </div>
 </header>
 
-<div *ngIf="showMenu" class="mobileMenu" [@slideInOut]>
+<div *ngIf="showMenu" role="menu" class="mobileMenu" [@slideInOut]>
   <div class="menuContent">
     <div class="title">
       <span>Menu</span>
-      <div class="ico-close-details" tabindex="0" (click)="closeMenu()" (keyup.enter)="closeMenu()"></div>
+      <div
+        class="ico-close-details"
+        tabindex="0"
+        aria-label="Fermer le menu"
+        role="button"
+        (click)="closeMenu()"
+        (keyup.enter)="closeMenu()"
+      ></div>
     </div>
     <div class="links">
-      <a routerLink="/news" [routerLinkActive]="'active'" (click)="closeMenu()" i18n>Actualités</a>
-      <a routerLink="/acteurs" [routerLinkActive]="'active'" (click)="closeMenu()" i18n>Cartographie</a>
-      <a routerLink="/orientation" [routerLinkActive]="'active'" (click)="closeMenu()" i18n>Orienter un bénéficiaire</a>
-      <a routerLink="/annuaire" [routerLinkActive]="'active'" i18n (click)="closeMenu()">Annuaire</a>
-      <a routerLink="/page/qui-sommes-nous" [routerLinkActive]="'active'" (click)="closeMenu()" i18n
+      <a
+        routerLink="/news"
+        role="menuitem"
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/news')"
+        (click)="closeMenu()"
+        i18n
+        >Actualités</a
+      >
+      <a
+        routerLink="/acteurs"
+        role="menuitem"
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/acteurs')"
+        (click)="closeMenu()"
+        i18n
+        >Cartographie</a
+      >
+      <a
+        routerLink="/orientation"
+        role="menuitem"
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/orientation')"
+        (click)="closeMenu()"
+        i18n
+        >Orienter un bénéficiaire</a
+      >
+      <a
+        routerLink="/annuaire"
+        role="menuitem"
+        [routerLinkActive]="'active'"
+        i18n
+        [attr.aria-current]="isActive('/annuaire')"
+        (click)="closeMenu()"
+        >Annuaire</a
+      >
+      <a
+        routerLink="/page/qui-sommes-nous"
+        role="menuitem"
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/page/qui-sommes-nous')"
+        i18n
+        (click)="closeMenu()"
         >Qui sommes-nous ?</a
       >
-      <a *ngIf="isAdmin" routerLink="/admin" [routerLinkActive]="'active'" (click)="closeMenu()">Administration</a>
-      <a routerLink="/legal-notice" i18n [routerLinkActive]="'active'" (click)="closeMenu()">Mentions légales</a>
-      <a routerLink="/newsletter" i18n [routerLinkActive]="'active'" (click)="closeMenu()">Newsletter</a>
-      <a routerLink="/contact" i18n [routerLinkActive]="'active'" (click)="closeMenu()">Contact</a>
+      <a
+        *ngIf="isAdmin"
+        routerLink="/admin"
+        role="menuitem"
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/admin')"
+        (click)="closeMenu()"
+        >Administration</a
+      >
+      <a
+        routerLink="/legal-notice"
+        role="menuitem"
+        i18n
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/legal-notice')"
+        (click)="closeMenu()"
+        >Mentions légales</a
+      >
+      <a
+        routerLink="/newsletter"
+        role="menuitem"
+        i18n
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/newsletter')"
+        (click)="closeMenu()"
+        >Newsletter</a
+      >
+      <a
+        routerLink="/contact"
+        role="menuitem"
+        i18n
+        [routerLinkActive]="'active'"
+        [attr.aria-current]="isActive('/contact')"
+        (click)="closeMenu()"
+        >Contact</a
+      >
     </div>
   </div>
-  <div class="outside" tabindex="0" (click)="closeMenu()" (keyup.enter)="closeMenu()"></div>
+  <div
+    class="outside"
+    tabindex="0"
+    aria-label="Fermer le menu"
+    role="button"
+    (click)="closeMenu()"
+    (keyup.enter)="closeMenu()"
+  ></div>
 </div>
 
-<div *ngIf="showProfileMenu && isLoggedIn" class="profileModal" [@toggle]>
-  <div class="overlay" tabindex="0" (click)="closeProfileMenu()" (keyup.enter)="closeProfileMenu()">
+<div *ngIf="showProfileMenu && isLoggedIn" class="profileModal" role="menu" [@toggle]>
+  <div
+    class="overlay"
+    tabindex="0"
+    role="button"
+    aria-label="Fermer le menu de profil"
+    (click)="closeProfileMenu()"
+    (keyup.enter)="closeProfileMenu()"
+  >
     <div class="overlay-header"></div>
     <div class="overlay-content" [@fadeInOut]></div>
   </div>
diff --git a/src/app/shared/components/button/button.component.html b/src/app/shared/components/button/button.component.html
index a73644d7c..b2d4e1c31 100644
--- a/src/app/shared/components/button/button.component.html
+++ b/src/app/shared/components/button/button.component.html
@@ -1,4 +1,10 @@
-<button [type]="type" [ngClass]="classes" [disabled]="disabled" (click)="action.emit($event)">
+<button
+  [attr.aria-label]="ariaLabel ? ariaLabel : null"
+  [type]="type"
+  [ngClass]="classes"
+  [disabled]="disabled"
+  (click)="action.emit($event)"
+>
   <app-svg-icon
     *ngIf="iconName && iconPosition === 'left'"
     [folder]="iconFolder"
diff --git a/src/app/shared/components/button/button.component.ts b/src/app/shared/components/button/button.component.ts
index 7b2438ca3..a05c25bce 100644
--- a/src/app/shared/components/button/button.component.ts
+++ b/src/app/shared/components/button/button.component.ts
@@ -48,6 +48,9 @@ export class ButtonComponent {
   /** Icon color, defaults to none as the svg-icon does */
   @Input() iconColor = 'none';
 
+  /** Button aria-label */
+  @Input() ariaLabel?: string;
+
   /** Click handler */
   @Output() action = new EventEmitter<Event>();
 
-- 
GitLab


From c45d4377fe09580b8906479afd2a73f18367739d Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 19 Mar 2024 16:40:09 +0100
Subject: [PATCH 2/5] fix(accessibility) : add labels and roles to header links
 and button

---
 src/app/shared/components/button/button.component.html | 2 +-
 src/app/shared/components/button/button.component.ts   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/app/shared/components/button/button.component.html b/src/app/shared/components/button/button.component.html
index b2d4e1c31..98ac1d017 100644
--- a/src/app/shared/components/button/button.component.html
+++ b/src/app/shared/components/button/button.component.html
@@ -1,5 +1,5 @@
 <button
-  [attr.aria-label]="ariaLabel ? ariaLabel : null"
+  [attr.aria-label]="ariaLabel"
   [type]="type"
   [ngClass]="classes"
   [disabled]="disabled"
diff --git a/src/app/shared/components/button/button.component.ts b/src/app/shared/components/button/button.component.ts
index a05c25bce..b9da4f71b 100644
--- a/src/app/shared/components/button/button.component.ts
+++ b/src/app/shared/components/button/button.component.ts
@@ -49,7 +49,7 @@ export class ButtonComponent {
   @Input() iconColor = 'none';
 
   /** Button aria-label */
-  @Input() ariaLabel?: string;
+  @Input() ariaLabel?: string = null;
 
   /** Click handler */
   @Output() action = new EventEmitter<Event>();
-- 
GitLab


From 322eb74c56d7a084b7d26b0e93a784b718385804 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 19 Mar 2024 16:50:08 +0100
Subject: [PATCH 3/5] minor change (wording)

---
 src/app/header/header.component.html | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index ebd385184..cebd674ea 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -25,7 +25,7 @@
     <app-svg-icon
       class="clickable"
       tabindex="0"
-      [attr.aria-label]="isLoggedIn ? 'Ouvrir le menu de profil' : 'Se connecter'"
+      [attr.aria-label]="isLoggedIn ? 'Ouvrir le menu Mon compte' : 'Se connecter'"
       [folder]="'ico'"
       [icon]="'profile'"
       [iconClass]="'icon-32'"
@@ -75,7 +75,7 @@
     <app-button
       *ngIf="isLoggedIn"
       class="connected"
-      ariaLabel="Ouvrir le menu de profil"
+      ariaLabel="Ouvrir le menu Mon compte"
       [variant]="'primary'"
       [label]="displayName"
       [size]="'small'"
@@ -204,7 +204,7 @@
     class="overlay"
     tabindex="0"
     role="button"
-    aria-label="Fermer le menu de profil"
+    aria-label="Fermer le menu Mon compte"
     (click)="closeProfileMenu()"
     (keyup.enter)="closeProfileMenu()"
   >
-- 
GitLab


From 9d8870c45437cf4cb4ab10b7617aff3c009e0136 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 26 Mar 2024 15:52:07 +0100
Subject: [PATCH 4/5] add role to svg with aria-label + action

---
 src/app/header/header.component.html | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index cebd674ea..13dd02e4c 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -3,6 +3,7 @@
     <app-svg-icon
       class="clickable"
       tabindex="0"
+      role="button"
       aria-label="Ouvrir le menu"
       [folder]="'ico'"
       [icon]="'menu'"
@@ -25,6 +26,7 @@
     <app-svg-icon
       class="clickable"
       tabindex="0"
+      role="button"
       [attr.aria-label]="isLoggedIn ? 'Ouvrir le menu Mon compte' : 'Se connecter'"
       [folder]="'ico'"
       [icon]="'profile'"
-- 
GitLab


From 159737782a6c6e686306fbcbf782951204b1472d Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 27 Mar 2024 09:58:17 +0100
Subject: [PATCH 5/5] fix typo

---
 src/app/header/header.component.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index 13dd02e4c..abf1a45d7 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -85,7 +85,7 @@
     />
     <app-button
       *ngIf="!isLoggedIn"
-      aria-label="Se connecter"
+      ariaLabel="Se connecter"
       [variant]="'primaryBlack'"
       [label]="'Se connecter'"
       [size]="'small'"
-- 
GitLab