mirror of https://github.com/Chocobozzz/PeerTube
Fix top sub menu accessibility
parent
8d20c8f391
commit
52319e371f
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
||||
<li *ngIf="menuEntry.routerLink && isDisplayed(menuEntry)">
|
||||
<a
|
||||
*ngIf="menuEntry.routerLink && isDisplayed(menuEntry)" class="sub-menu-entry"
|
||||
[routerLink]="menuEntry.routerLink" routerLinkActive="active" #routerLink
|
||||
(click)="onActiveLinkScrollToTop(routerLink)"
|
||||
>
|
||||
class="sub-menu-entry" [routerLink]="menuEntry.routerLink" routerLinkActive="active"
|
||||
#routerLink (click)="onActiveLinkScrollToTop(routerLink)" ariaCurrentWhenActive="page"
|
||||
>{{ menuEntry.label }}</a>
|
||||
</li>
|
||||
|
||||
<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 }}
|
||||
</a>
|
||||
|
||||
<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>
|
||||
<span class="chevron-down"></span>
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<span
|
||||
*ngIf="!isInSmallView"
|
||||
tabindex=0
|
||||
[ngClass]="{ active: !!suffixLabels[menuEntry.label] }" ngbDropdownAnchor
|
||||
(click)="dropdownAnchorClicked(dropdown)" (keydown.enter)="dropdownAnchorClicked(dropdown)"
|
||||
role="button" class="sub-menu-entry"
|
||||
<!-- 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>
|
||||
|
||||
<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)"
|
||||
>
|
||||
<ng-container i18n>{{ menuEntry.label }}</ng-container>
|
||||
</span>
|
||||
|
||||
<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>
|
||||
|
||||
{{ menuChild.label }}
|
||||
</a>
|
||||
</ng-container>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</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>
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue