Fix top sub menu accessibility

pull/6000/head
Chocobozzz 2023-10-06 14:44:44 +02:00
parent 8d20c8f391
commit 52319e371f
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 49 additions and 53 deletions

View File

@ -10,7 +10,7 @@
<div class="top-left-block">
<button
class="border-0 padding-0" [title]="getToggleTitle()" (click)="menu.toggleMenu()" (keyup.enter)="menu.toggleMenu()"
class="border-0 p-0" [title]="getToggleTitle()" (click)="menu.toggleMenu()" (keyup.enter)="menu.toggleMenu()"
[ariaExpanded]="menu.isMenuDisplayed" aria-controls="left-menu"
>
<span class="icon icon-menu"></span>
@ -61,7 +61,7 @@
<p>{{ message.detail }}</p>
</div>
<button class="border-0 padding-0">
<button class="border-0 p-0">
<my-global-icon [iconName]="getNotificationIcon(message)"></my-global-icon>
</button>
</div>

View File

@ -1,66 +1,64 @@
<div class="sub-menu" [ngClass]="{ 'sub-menu-fixed': !isBroadcastMessageDisplayed, 'no-scroll': isModalOpened }">
<ng-container *ngFor="let menuEntry of menuEntries; index as id">
<ul *ngFor="let menuEntry of menuEntries; index as id">
<a
*ngIf="menuEntry.routerLink && isDisplayed(menuEntry)" class="sub-menu-entry"
[routerLink]="menuEntry.routerLink" routerLinkActive="active" #routerLink
(click)="onActiveLinkScrollToTop(routerLink)"
>
{{ menuEntry.label }}
</a>
<li *ngIf="menuEntry.routerLink && isDisplayed(menuEntry)">
<a
class="sub-menu-entry" [routerLink]="menuEntry.routerLink" routerLinkActive="active"
#routerLink (click)="onActiveLinkScrollToTop(routerLink)" ariaCurrentWhenActive="page"
>{{ menuEntry.label }}</a>
</li>
<div *ngIf="!menuEntry.routerLink && isDisplayed(menuEntry)" ngbDropdown class="parent-entry"
#dropdown="ngbDropdown" autoClose="true" container="body">
<span
*ngIf="isInSmallView"
tabindex=0
[ngClass]="{ active: !!suffixLabels[menuEntry.label] }"
(click)="openModal(id)" (keydown.enter)="openModal(id)"
role="button" class="sub-menu-entry">
<ng-container i18n>{{ menuEntry.label }}</ng-container>
</span>
<ng-container *ngIf="!menuEntry.routerLink && isDisplayed(menuEntry)">
<!-- On mobile, use a modal to display sub menu items -->
<li *ngIf="isInSmallView">
<button class="sub-menu-entry" [ngClass]="{ active: !!suffixLabels[menuEntry.label] }" (click)="openModal(id)">
{{ menuEntry.label }}
<span
*ngIf="!isInSmallView"
tabindex=0
[ngClass]="{ active: !!suffixLabels[menuEntry.label] }" ngbDropdownAnchor
(click)="dropdownAnchorClicked(dropdown)" (keydown.enter)="dropdownAnchorClicked(dropdown)"
role="button" class="sub-menu-entry"
>
<ng-container i18n>{{ menuEntry.label }}</ng-container>
</span>
<span class="chevron-down"></span>
</button>
</li>
<div ngbDropdownMenu>
<ng-container *ngFor="let menuChild of menuEntry.children">
<a *ngIf="isDisplayed(menuChild)" class="dropdown-item"
[ngClass]="{ icon: hasIcons }"
[routerLink]="menuChild.routerLink"
#routerLink (click)="onActiveLinkScrollToTop(routerLink)">
<my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon>
<!-- On desktop, use a classic dropdown -->
<div *ngIf="!isInSmallView" ngbDropdown #dropdown="ngbDropdown" autoClose="true" container="body">
<li>
<button ngbDropdownToggle class="sub-menu-entry" [ngClass]="{ active: !!suffixLabels[menuEntry.label] }">{{ menuEntry.label }}</button>
</li>
{{ menuChild.label }}
</a>
</ng-container>
<ul ngbDropdownMenu>
<li *ngFor="let menuChild of menuEntry.children">
<a
*ngIf="isDisplayed(menuChild)" ngbDropdownItem
[ngClass]="{ icon: hasIcons }" routerLinkActive="active" ariaCurrentWhenActive="page"
[routerLink]="menuChild.routerLink" #routerLink (click)="onActiveLinkScrollToTop(routerLink)"
>
<my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon>
{{ menuChild.label }}
</a>
</li>
</ul>
</div>
</div>
</ng-container>
</ng-container>
</ul>
</div>
<ng-template #modal let-close="close" let-dismiss="dismiss">
<div class="modal-body">
<ng-container *ngFor="let menuEntry of menuEntries; index as id">
<div [ngClass]="{ hidden: id !== currentMenuEntryIndex }">
<ng-container *ngFor="let menuChild of menuEntry.children">
<a *ngIf="isDisplayed(menuChild)"
[ngClass]="{ icon: hasIcons }"
[routerLink]="menuChild.routerLink" routerLinkActive="active"
#routerLink (click)="dismissOtherModals(); onActiveLinkScrollToTop(routerLink)">
<a
*ngIf="isDisplayed(menuChild)" [ngClass]="{ icon: hasIcons }" [routerLink]="menuChild.routerLink" routerLinkActive="active"
#routerLink (click)="dismissOtherModals(); onActiveLinkScrollToTop(routerLink)" ariaCurrentWhenActive="page"
>
<my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon>
{{ menuChild.label }}
</a>
</ng-container>
</div>
</ng-container>
</div>
</ng-template>

View File

@ -1,14 +1,10 @@
@use '_variables' as *;
@use '_mixins' as *;
.parent-entry {
span[role=button] {
cursor: pointer;
}
a {
display: block;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
.sub-menu ::ng-deep .dropdown-toggle::after {

View File

@ -5,6 +5,8 @@
@include disable-default-a-behaviour;
@include margin-right(55px);
border: 0;
padding: 0;
opacity: 0.7;
color: pvar(--mainForegroundColor);
display: inline-block;