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">
|
<div class="top-left-block">
|
||||||
<button
|
<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"
|
[ariaExpanded]="menu.isMenuDisplayed" aria-controls="left-menu"
|
||||||
>
|
>
|
||||||
<span class="icon icon-menu"></span>
|
<span class="icon icon-menu"></span>
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
<p>{{ message.detail }}</p>
|
<p>{{ message.detail }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button class="border-0 padding-0">
|
<button class="border-0 p-0">
|
||||||
<my-global-icon [iconName]="getNotificationIcon(message)"></my-global-icon>
|
<my-global-icon [iconName]="getNotificationIcon(message)"></my-global-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,66 +1,64 @@
|
||||||
<div class="sub-menu" [ngClass]="{ 'sub-menu-fixed': !isBroadcastMessageDisplayed, 'no-scroll': isModalOpened }">
|
<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
|
<a
|
||||||
*ngIf="menuEntry.routerLink && isDisplayed(menuEntry)" class="sub-menu-entry"
|
class="sub-menu-entry" [routerLink]="menuEntry.routerLink" routerLinkActive="active"
|
||||||
[routerLink]="menuEntry.routerLink" routerLinkActive="active" #routerLink
|
#routerLink (click)="onActiveLinkScrollToTop(routerLink)" ariaCurrentWhenActive="page"
|
||||||
(click)="onActiveLinkScrollToTop(routerLink)"
|
>{{ 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 }}
|
{{ menuEntry.label }}
|
||||||
</a>
|
|
||||||
|
|
||||||
<div *ngIf="!menuEntry.routerLink && isDisplayed(menuEntry)" ngbDropdown class="parent-entry"
|
<span class="chevron-down"></span>
|
||||||
#dropdown="ngbDropdown" autoClose="true" container="body">
|
</button>
|
||||||
<span
|
</li>
|
||||||
*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
|
<!-- On desktop, use a classic dropdown -->
|
||||||
*ngIf="!isInSmallView"
|
<div *ngIf="!isInSmallView" ngbDropdown #dropdown="ngbDropdown" autoClose="true" container="body">
|
||||||
tabindex=0
|
<li>
|
||||||
[ngClass]="{ active: !!suffixLabels[menuEntry.label] }" ngbDropdownAnchor
|
<button ngbDropdownToggle class="sub-menu-entry" [ngClass]="{ active: !!suffixLabels[menuEntry.label] }">{{ menuEntry.label }}</button>
|
||||||
(click)="dropdownAnchorClicked(dropdown)" (keydown.enter)="dropdownAnchorClicked(dropdown)"
|
</li>
|
||||||
role="button" class="sub-menu-entry"
|
|
||||||
|
<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>
|
<my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon>
|
||||||
|
|
||||||
{{ menuChild.label }}
|
{{ menuChild.label }}
|
||||||
</a>
|
</a>
|
||||||
</ng-container>
|
</li>
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ng-template #modal let-close="close" let-dismiss="dismiss">
|
<ng-template #modal let-close="close" let-dismiss="dismiss">
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<ng-container *ngFor="let menuEntry of menuEntries; index as id">
|
<ng-container *ngFor="let menuEntry of menuEntries; index as id">
|
||||||
|
|
||||||
<div [ngClass]="{ hidden: id !== currentMenuEntryIndex }">
|
<div [ngClass]="{ hidden: id !== currentMenuEntryIndex }">
|
||||||
<ng-container *ngFor="let menuChild of menuEntry.children">
|
<ng-container *ngFor="let menuChild of menuEntry.children">
|
||||||
<a *ngIf="isDisplayed(menuChild)"
|
<a
|
||||||
[ngClass]="{ icon: hasIcons }"
|
*ngIf="isDisplayed(menuChild)" [ngClass]="{ icon: hasIcons }" [routerLink]="menuChild.routerLink" routerLinkActive="active"
|
||||||
[routerLink]="menuChild.routerLink" routerLinkActive="active"
|
#routerLink (click)="dismissOtherModals(); onActiveLinkScrollToTop(routerLink)" ariaCurrentWhenActive="page"
|
||||||
#routerLink (click)="dismissOtherModals(); onActiveLinkScrollToTop(routerLink)">
|
>
|
||||||
<my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon>
|
<my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon>
|
||||||
|
|
||||||
{{ menuChild.label }}
|
{{ menuChild.label }}
|
||||||
</a>
|
</a>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
@use '_variables' as *;
|
@use '_variables' as *;
|
||||||
@use '_mixins' as *;
|
@use '_mixins' as *;
|
||||||
|
|
||||||
.parent-entry {
|
ul {
|
||||||
span[role=button] {
|
list-style: none;
|
||||||
cursor: pointer;
|
margin: 0;
|
||||||
}
|
padding: 0;
|
||||||
|
|
||||||
a {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-menu ::ng-deep .dropdown-toggle::after {
|
.sub-menu ::ng-deep .dropdown-toggle::after {
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
@include disable-default-a-behaviour;
|
@include disable-default-a-behaviour;
|
||||||
@include margin-right(55px);
|
@include margin-right(55px);
|
||||||
|
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
color: pvar(--mainForegroundColor);
|
color: pvar(--mainForegroundColor);
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
Loading…
Reference in New Issue