diff options
author | Kim <1877318+kimsible@users.noreply.github.com> | 2020-07-23 15:09:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-23 15:09:15 +0200 |
commit | ed5bb517266c80904c44bf44a335f1003f5aa277 (patch) | |
tree | 80671a21fb8c13ab47a65f01b64222a3a1e96a47 /client/src/app | |
parent | 345b4a22a8432cfd8c9c9f24634821d58c215b9a (diff) | |
download | PeerTube-ed5bb517266c80904c44bf44a335f1003f5aa277.tar.gz PeerTube-ed5bb517266c80904c44bf44a335f1003f5aa277.tar.zst PeerTube-ed5bb517266c80904c44bf44a335f1003f5aa277.zip |
Improve navigation sub-menu and tabs effects (#2971)
* Improve nav border and colors on active and non-active
* Remove margin-top effect on active nav
* Use opacity / bold instead of color change on nav
* Remove dropdown items label in sub-menu and add a class active
* Position sub-menu to fixed
* Autoclose dropdown sub-menu only on outside click
* Remove open dropdown on hover in sub-menu
* Show reusable h1 for dropdown item in sub-menu
* Put reusable sub-menu h1 styles to mixins
* Add icons to sub-menu dropdown-item h1
* Make all the sub-menu accessible with focus
Co-authored-by: kimsible <kimsible@users.noreply.github.com>
Diffstat (limited to 'client/src/app')
25 files changed, 110 insertions, 65 deletions
diff --git a/client/src/app/+admin/admin.component.scss b/client/src/app/+admin/admin.component.scss index ef8965c3f..61a2744ba 100644 --- a/client/src/app/+admin/admin.component.scss +++ b/client/src/app/+admin/admin.component.scss | |||
@@ -1,3 +1,8 @@ | |||
1 | @import '_variables'; | ||
2 | @import '_mixins'; | ||
3 | |||
1 | my-top-menu-dropdown { | 4 | my-top-menu-dropdown { |
2 | flex-grow: 1; | 5 | flex-grow: 1; |
3 | } | 6 | } |
7 | |||
8 | @include sub-menu-h1; | ||
diff --git a/client/src/app/+admin/follows/followers-list/followers-list.component.html b/client/src/app/+admin/follows/followers-list/followers-list.component.html index ce603459e..f50828bb9 100644 --- a/client/src/app/+admin/follows/followers-list/followers-list.component.html +++ b/client/src/app/+admin/follows/followers-list/followers-list.component.html | |||
@@ -1,3 +1,8 @@ | |||
1 | <h1> | ||
2 | <my-global-icon iconName="follower" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>Instances following you</ng-container> | ||
4 | </h1> | ||
5 | |||
1 | <p-table | 6 | <p-table |
2 | [value]="followers" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" | 7 | [value]="followers" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" |
3 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" | 8 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" |
diff --git a/client/src/app/+admin/follows/following-list/following-list.component.html b/client/src/app/+admin/follows/following-list/following-list.component.html index 500ab13fd..7d1a3d7f3 100644 --- a/client/src/app/+admin/follows/following-list/following-list.component.html +++ b/client/src/app/+admin/follows/following-list/following-list.component.html | |||
@@ -1,3 +1,8 @@ | |||
1 | <h1> | ||
2 | <my-global-icon iconName="following" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>Instances you follow</ng-container> | ||
4 | </h1> | ||
5 | |||
1 | <p-table | 6 | <p-table |
2 | [value]="following" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" | 7 | [value]="following" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" |
3 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" | 8 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" |
diff --git a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.html b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.html index 44586cb67..552c9f02d 100644 --- a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.html +++ b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.html | |||
@@ -1,3 +1,8 @@ | |||
1 | <h1> | ||
2 | <my-global-icon iconName="videos" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>Videos redundancies</ng-container> | ||
4 | </h1> | ||
5 | |||
1 | <div class="admin-sub-header"> | 6 | <div class="admin-sub-header"> |
2 | <div class="select-filter-block"> | 7 | <div class="select-filter-block"> |
3 | <label for="displayType" i18n>Display</label> | 8 | <label for="displayType" i18n>Display</label> |
diff --git a/client/src/app/+admin/moderation/abuse-list/abuse-list.component.html b/client/src/app/+admin/moderation/abuse-list/abuse-list.component.html index 99502304d..48b31b99c 100644 --- a/client/src/app/+admin/moderation/abuse-list/abuse-list.component.html +++ b/client/src/app/+admin/moderation/abuse-list/abuse-list.component.html | |||
@@ -1,3 +1,8 @@ | |||
1 | <h1> | ||
2 | <my-global-icon iconName="flag" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>Reports</ng-container> | ||
4 | </h1> | ||
5 | |||
1 | <p-table | 6 | <p-table |
2 | [value]="abuses" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" | 7 | [value]="abuses" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" |
3 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" dataKey="id" [resizableColumns]="true" [lazyLoadOnInit]="false" | 8 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" dataKey="id" [resizableColumns]="true" [lazyLoadOnInit]="false" |
diff --git a/client/src/app/+admin/moderation/video-block-list/video-block-list.component.html b/client/src/app/+admin/moderation/video-block-list/video-block-list.component.html index ec20e46f1..278e68a96 100644 --- a/client/src/app/+admin/moderation/video-block-list/video-block-list.component.html +++ b/client/src/app/+admin/moderation/video-block-list/video-block-list.component.html | |||
@@ -1,3 +1,8 @@ | |||
1 | <h1> | ||
2 | <my-global-icon iconName="cross" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>Video blocks</ng-container> | ||
4 | </h1> | ||
5 | |||
1 | <p-table | 6 | <p-table |
2 | [value]="blocklist" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" | 7 | [value]="blocklist" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" |
3 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" dataKey="id" | 8 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" dataKey="id" |
diff --git a/client/src/app/+admin/plugins/plugins.component.html b/client/src/app/+admin/plugins/plugins.component.html index e2b927db8..199ae12cf 100644 --- a/client/src/app/+admin/plugins/plugins.component.html +++ b/client/src/app/+admin/plugins/plugins.component.html | |||
@@ -1,6 +1,4 @@ | |||
1 | <div class="admin-sub-header"> | 1 | <div class="admin-sub-header"> |
2 | <h1 i18n class="form-sub-title">Plugins/Themes</h1> | ||
3 | |||
4 | <div class="admin-sub-nav"> | 2 | <div class="admin-sub-nav"> |
5 | <a i18n routerLink="list-installed" routerLinkActive="active">Installed</a> | 3 | <a i18n routerLink="list-installed" routerLinkActive="active">Installed</a> |
6 | 4 | ||
diff --git a/client/src/app/+admin/plugins/plugins.component.scss b/client/src/app/+admin/plugins/plugins.component.scss index 04ca8126a..ce9825f53 100644 --- a/client/src/app/+admin/plugins/plugins.component.scss +++ b/client/src/app/+admin/plugins/plugins.component.scss | |||
@@ -1,11 +1,6 @@ | |||
1 | @import '_variables'; | 1 | @import '_variables'; |
2 | @import '_mixins'; | 2 | @import '_mixins'; |
3 | 3 | ||
4 | .form-sub-title { | ||
5 | flex-grow: 0; | ||
6 | margin-right: 30px; | ||
7 | } | ||
8 | |||
9 | @media screen and (max-width: $small-view) { | 4 | @media screen and (max-width: $small-view) { |
10 | ::ng-deep .plugins .plugin .first-row { | 5 | ::ng-deep .plugins .plugin .first-row { |
11 | flex-wrap: wrap; | 6 | flex-wrap: wrap; |
diff --git a/client/src/app/+admin/system/system.component.html b/client/src/app/+admin/system/system.component.html index 4f9521c0c..5385887b7 100644 --- a/client/src/app/+admin/system/system.component.html +++ b/client/src/app/+admin/system/system.component.html | |||
@@ -1,6 +1,4 @@ | |||
1 | <div class="admin-sub-header"> | 1 | <div class="admin-sub-header"> |
2 | <h1 i18n class="form-sub-title">System</h1> | ||
3 | |||
4 | <div class="admin-sub-nav"> | 2 | <div class="admin-sub-nav"> |
5 | <a *ngIf="hasJobsRight()" i18n routerLink="jobs" routerLinkActive="active">Jobs</a> | 3 | <a *ngIf="hasJobsRight()" i18n routerLink="jobs" routerLinkActive="active">Jobs</a> |
6 | 4 | ||
diff --git a/client/src/app/+my-account/+my-account-video-channels/my-account-video-channels.component.html b/client/src/app/+my-account/+my-account-video-channels/my-account-video-channels.component.html index b2e8210d3..e8d44a45e 100644 --- a/client/src/app/+my-account/+my-account-video-channels/my-account-video-channels.component.html +++ b/client/src/app/+my-account/+my-account-video-channels/my-account-video-channels.component.html | |||
@@ -1,4 +1,8 @@ | |||
1 | <h1 class="sr-only" i18n>My channels</h1> | 1 | <h1> |
2 | <my-global-icon iconName="channel" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>My channels</ng-container> | ||
4 | </h1> | ||
5 | |||
2 | <div class="video-channels-header"> | 6 | <div class="video-channels-header"> |
3 | <a class="create-button" routerLink="create"> | 7 | <a class="create-button" routerLink="create"> |
4 | <my-global-icon iconName="add" aria-hidden="true"></my-global-icon> | 8 | <my-global-icon iconName="add" aria-hidden="true"></my-global-icon> |
diff --git a/client/src/app/+my-account/my-account-history/my-account-history.component.html b/client/src/app/+my-account/my-account-history/my-account-history.component.html index cfa5ca636..cff46a41d 100644 --- a/client/src/app/+my-account/my-account-history/my-account-history.component.html +++ b/client/src/app/+my-account/my-account-history/my-account-history.component.html | |||
@@ -1,4 +1,8 @@ | |||
1 | <h1 class="sr-only" i18n>History</h1> | 1 | <h1> |
2 | <my-global-icon iconName="history" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>My history</ng-container> | ||
4 | </h1> | ||
5 | |||
2 | <div class="top-buttons"> | 6 | <div class="top-buttons"> |
3 | <div class="history-switch"> | 7 | <div class="history-switch"> |
4 | <p-inputSwitch [(ngModel)]="videosHistoryEnabled" (ngModelChange)="onVideosHistoryChange()"></p-inputSwitch> | 8 | <p-inputSwitch [(ngModel)]="videosHistoryEnabled" (ngModelChange)="onVideosHistoryChange()"></p-inputSwitch> |
diff --git a/client/src/app/+my-account/my-account-ownership/my-account-ownership.component.html b/client/src/app/+my-account/my-account-ownership/my-account-ownership.component.html index 090ec7b44..be5d41f3b 100644 --- a/client/src/app/+my-account/my-account-ownership/my-account-ownership.component.html +++ b/client/src/app/+my-account/my-account-ownership/my-account-ownership.component.html | |||
@@ -1,4 +1,8 @@ | |||
1 | <h1 class="sr-only" i18n>Ownership changes</h1> | 1 | <h1> |
2 | <my-global-icon iconName="download" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>My ownership changes</ng-container> | ||
4 | </h1> | ||
5 | |||
2 | <p-table | 6 | <p-table |
3 | [value]="videoChangeOwnerships" | 7 | [value]="videoChangeOwnerships" |
4 | [lazy]="true" | 8 | [lazy]="true" |
diff --git a/client/src/app/+my-account/my-account-subscriptions/my-account-subscriptions.component.html b/client/src/app/+my-account/my-account-subscriptions/my-account-subscriptions.component.html index ce41360bf..3b4c3022e 100644 --- a/client/src/app/+my-account/my-account-subscriptions/my-account-subscriptions.component.html +++ b/client/src/app/+my-account/my-account-subscriptions/my-account-subscriptions.component.html | |||
@@ -1,4 +1,8 @@ | |||
1 | <h1 class="sr-only" i18n>Subscriptions</h1> | 1 | <h1> |
2 | <my-global-icon iconName="subscriptions" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>My subscriptions</ng-container> | ||
4 | </h1> | ||
5 | |||
2 | <div class="no-results" i18n *ngIf="pagination.totalItems === 0">You don't have any subscriptions yet.</div> | 6 | <div class="no-results" i18n *ngIf="pagination.totalItems === 0">You don't have any subscriptions yet.</div> |
3 | 7 | ||
4 | <div class="video-channels" myInfiniteScroller [autoInit]="true" (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()"> | 8 | <div class="video-channels" myInfiniteScroller [autoInit]="true" (nearOfBottom)="onNearOfBottom()" [dataObservable]="onDataSubject.asObservable()"> |
diff --git a/client/src/app/+my-account/my-account-video-imports/my-account-video-imports.component.html b/client/src/app/+my-account/my-account-video-imports/my-account-video-imports.component.html index 4caa076a3..98a2039cc 100644 --- a/client/src/app/+my-account/my-account-video-imports/my-account-video-imports.component.html +++ b/client/src/app/+my-account/my-account-video-imports/my-account-video-imports.component.html | |||
@@ -1,4 +1,8 @@ | |||
1 | <h1 class="sr-only" i18n>Imports</h1> | 1 | <h1> |
2 | <my-global-icon iconName="cloud-download" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>My imports</ng-container> | ||
4 | </h1> | ||
5 | |||
2 | <p-table | 6 | <p-table |
3 | [value]="videoImports" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" | 7 | [value]="videoImports" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" |
4 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" dataKey="id" | 8 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" dataKey="id" |
diff --git a/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.html b/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.html index 1ba2c35ef..8d69c3a5a 100644 --- a/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.html +++ b/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.html | |||
@@ -1,6 +1,10 @@ | |||
1 | <div class="video-playlists-header"> | 1 | <h1> |
2 | <h1 i18n>Playlists <span class="badge badge-secondary">{{ pagination.totalItems }}</span></h1> | 2 | <my-global-icon iconName="playlists" aria-hidden="true"></my-global-icon> |
3 | <ng-container i18n>My playlists</ng-container> <span class="badge badge-secondary">{{ pagination.totalItems }}</span> | ||
4 | </h1> | ||
5 | |||
3 | 6 | ||
7 | <div class="video-playlists-header"> | ||
4 | <input type="text" placeholder="Search your playlists" i18n-placeholder [(ngModel)]="videoPlaylistsSearch" (ngModelChange)="onVideoPlaylistSearchChanged()" /> | 8 | <input type="text" placeholder="Search your playlists" i18n-placeholder [(ngModel)]="videoPlaylistsSearch" (ngModelChange)="onVideoPlaylistSearchChanged()" /> |
5 | 9 | ||
6 | <a class="create-button" routerLink="create"> | 10 | <a class="create-button" routerLink="create"> |
diff --git a/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.scss b/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.scss index 41e7851fd..4381d74b0 100644 --- a/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.scss +++ b/client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.scss | |||
@@ -41,10 +41,6 @@ | |||
41 | input[type=text] { | 41 | input[type=text] { |
42 | @include peertube-input-text(300px); | 42 | @include peertube-input-text(300px); |
43 | } | 43 | } |
44 | |||
45 | h1 { | ||
46 | font-size: 1.5rem; | ||
47 | } | ||
48 | } | 44 | } |
49 | 45 | ||
50 | @media screen and (max-width: $small-view) { | 46 | @media screen and (max-width: $small-view) { |
diff --git a/client/src/app/+my-account/my-account-videos/my-account-videos.component.html b/client/src/app/+my-account/my-account-videos/my-account-videos.component.html index cb149b607..6d098b507 100644 --- a/client/src/app/+my-account/my-account-videos/my-account-videos.component.html +++ b/client/src/app/+my-account/my-account-videos/my-account-videos.component.html | |||
@@ -1,9 +1,10 @@ | |||
1 | <div class="videos-header"> | 1 | <h1> |
2 | <h1 i18n>Videos <span class="badge badge-secondary">{{ pagination.totalItems }}</span></h1> | 2 | <my-global-icon iconName="videos" aria-hidden="true"></my-global-icon> |
3 | <ng-container i18n>My videos</ng-container><span class="badge badge-secondary"> {{ pagination.totalItems }}</span> | ||
4 | </h1> | ||
3 | 5 | ||
6 | <div class="videos-header"> | ||
4 | <input type="text" placeholder="Search your videos" i18n-placeholder [(ngModel)]="videosSearch" (ngModelChange)="onVideosSearchChanged()" /> | 7 | <input type="text" placeholder="Search your videos" i18n-placeholder [(ngModel)]="videosSearch" (ngModelChange)="onVideosSearchChanged()" /> |
5 | |||
6 | <div class="fake-element"></div> | ||
7 | </div> | 8 | </div> |
8 | 9 | ||
9 | <my-videos-selection | 10 | <my-videos-selection |
diff --git a/client/src/app/+my-account/my-account-videos/my-account-videos.component.scss b/client/src/app/+my-account/my-account-videos/my-account-videos.component.scss index 18c1ae288..9225fc5fd 100644 --- a/client/src/app/+my-account/my-account-videos/my-account-videos.component.scss +++ b/client/src/app/+my-account/my-account-videos/my-account-videos.component.scss | |||
@@ -6,12 +6,6 @@ | |||
6 | justify-content: space-between; | 6 | justify-content: space-between; |
7 | margin: 20px 0 50px; | 7 | margin: 20px 0 50px; |
8 | 8 | ||
9 | h1, | ||
10 | .fake-element { | ||
11 | flex: 1; | ||
12 | font-size: 1.5rem; | ||
13 | } | ||
14 | |||
15 | input[type=text] { | 9 | input[type=text] { |
16 | @include peertube-input-text(300px); | 10 | @include peertube-input-text(300px); |
17 | } | 11 | } |
diff --git a/client/src/app/+my-account/my-account.component.scss b/client/src/app/+my-account/my-account.component.scss index fd47aec86..a5bb499b4 100644 --- a/client/src/app/+my-account/my-account.component.scss +++ b/client/src/app/+my-account/my-account.component.scss | |||
@@ -1,3 +1,6 @@ | |||
1 | @import '_variables'; | ||
2 | @import '_mixins'; | ||
3 | |||
1 | .row { | 4 | .row { |
2 | flex-direction: column; | 5 | flex-direction: column; |
3 | width: 100%; | 6 | width: 100%; |
@@ -5,4 +8,6 @@ | |||
5 | & > my-top-menu-dropdown:nth-child(1) { | 8 | & > my-top-menu-dropdown:nth-child(1) { |
6 | flex-grow: 1; | 9 | flex-grow: 1; |
7 | } | 10 | } |
11 | |||
12 | @include sub-menu-h1; | ||
8 | } | 13 | } |
diff --git a/client/src/app/+videos/+video-edit/video-add.component.scss b/client/src/app/+videos/+video-edit/video-add.component.scss index 0ad57d897..b9fef9fce 100644 --- a/client/src/app/+videos/+video-edit/video-add.component.scss +++ b/client/src/app/+videos/+video-edit/video-add.component.scss | |||
@@ -30,16 +30,25 @@ $nav-link-height: 40px; | |||
30 | padding: 0 30px !important; | 30 | padding: 0 30px !important; |
31 | font-size: 15px; | 31 | font-size: 15px; |
32 | 32 | ||
33 | border: $border-width $border-type transparent; | ||
34 | |||
35 | span { | ||
36 | border-bottom: 2px solid transparent; | ||
37 | } | ||
38 | |||
33 | &.active { | 39 | &.active { |
34 | border: $border-width $border-type $border-color; | 40 | border-color: $border-color; |
35 | border-bottom: none; | 41 | border-bottom-color: transparent; |
36 | background-color: pvar(--submenuColor) !important; | 42 | background-color: pvar(--submenuColor) !important; |
37 | 43 | ||
38 | span { | 44 | span { |
39 | border-bottom: 2px solid pvar(--mainColor); | 45 | border-bottom-color: pvar(--mainColor); |
40 | font-weight: $font-bold; | ||
41 | } | 46 | } |
42 | } | 47 | } |
48 | |||
49 | &:hover:not(.active) { | ||
50 | border-color: transparent; | ||
51 | } | ||
43 | } | 52 | } |
44 | } | 53 | } |
45 | 54 | ||
@@ -71,7 +80,7 @@ $nav-link-height: 40px; | |||
71 | 80 | ||
72 | /* Hide active tab style to not have a moving tab effect */ | 81 | /* Hide active tab style to not have a moving tab effect */ |
73 | a.nav-link.active { | 82 | a.nav-link.active { |
74 | border: none; | 83 | border-color: transparent; |
75 | background-color: pvar(--mainBackgroundColor) !important; | 84 | background-color: pvar(--mainBackgroundColor) !important; |
76 | } | 85 | } |
77 | } | 86 | } |
diff --git a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.html b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.html index aeaceb662..c737b40c7 100644 --- a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.html +++ b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.html | |||
@@ -4,26 +4,28 @@ | |||
4 | <a *ngIf="menuEntry.routerLink" [routerLink]="menuEntry.routerLink" routerLinkActive="active" class="title-page title-page-settings">{{ menuEntry.label }}</a> | 4 | <a *ngIf="menuEntry.routerLink" [routerLink]="menuEntry.routerLink" routerLinkActive="active" class="title-page title-page-settings">{{ menuEntry.label }}</a> |
5 | 5 | ||
6 | <div *ngIf="!menuEntry.routerLink" ngbDropdown class="parent-entry" | 6 | <div *ngIf="!menuEntry.routerLink" ngbDropdown class="parent-entry" |
7 | #dropdown="ngbDropdown" (mouseleave)="closeDropdownIfHovered(dropdown)"> | 7 | #dropdown="ngbDropdown" autoClose="outside"> |
8 | <span | 8 | <span |
9 | *ngIf="isInSmallView" | 9 | *ngIf="isInSmallView" |
10 | tabindex=0 | ||
10 | [ngClass]="{ active: !!suffixLabels[menuEntry.label] }" | 11 | [ngClass]="{ active: !!suffixLabels[menuEntry.label] }" |
11 | (click)="openModal(id)" role="button" class="title-page title-page-settings"> | 12 | (click)="openModal(id)" (keydown.enter)="openModal(id)" |
13 | role="button" class="title-page title-page-settings"> | ||
12 | <ng-container i18n>{{ menuEntry.label }}</ng-container> | 14 | <ng-container i18n>{{ menuEntry.label }}</ng-container> |
13 | <ng-container *ngIf="!!suffixLabels[menuEntry.label]"> - {{ suffixLabels[menuEntry.label] }}</ng-container> | ||
14 | </span> | 15 | </span> |
15 | 16 | ||
16 | <span | 17 | <span |
17 | *ngIf="!isInSmallView" | 18 | *ngIf="!isInSmallView" |
18 | (mouseenter)="openDropdownOnHover(dropdown)" [ngClass]="{ active: !!suffixLabels[menuEntry.label] }" ngbDropdownAnchor | 19 | tabindex=0 |
19 | (click)="dropdownAnchorClicked(dropdown)" role="button" class="title-page title-page-settings" | 20 | [ngClass]="{ active: !!suffixLabels[menuEntry.label] }" ngbDropdownAnchor |
21 | (click)="dropdownAnchorClicked(dropdown)" (keydown.enter)="dropdownAnchorClicked(dropdown)" | ||
22 | role="button" class="title-page title-page-settings" | ||
20 | > | 23 | > |
21 | <ng-container i18n>{{ menuEntry.label }}</ng-container> | 24 | <ng-container i18n>{{ menuEntry.label }}</ng-container> |
22 | <ng-container *ngIf="!!suffixLabels[menuEntry.label]"> - {{ suffixLabels[menuEntry.label] }}</ng-container> | ||
23 | </span> | 25 | </span> |
24 | 26 | ||
25 | <div ngbDropdownMenu> | 27 | <div ngbDropdownMenu> |
26 | <a *ngFor="let menuChild of menuEntry.children" class="dropdown-item" [ngClass]="{ icon: hasIcons }" [routerLink]="menuChild.routerLink"> | 28 | <a *ngFor="let menuChild of menuEntry.children" class="dropdown-item" [ngClass]="{ icon: hasIcons, active: suffixLabels[menuEntry.label] === menuChild.label }" [routerLink]="menuChild.routerLink"> |
27 | <my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon> | 29 | <my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName" aria-hidden="true"></my-global-icon> |
28 | 30 | ||
29 | {{ menuChild.label }} | 31 | {{ menuChild.label }} |
diff --git a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.scss b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.scss index 84dd7dce3..655c38489 100644 --- a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.scss +++ b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.scss | |||
@@ -1,6 +1,12 @@ | |||
1 | @import '_variables'; | 1 | @import '_variables'; |
2 | @import '_mixins'; | 2 | @import '_mixins'; |
3 | 3 | ||
4 | :host { | ||
5 | display: block; | ||
6 | height: $sub-menu-height; | ||
7 | margin-bottom: $sub-menu-margin-bottom; | ||
8 | } | ||
9 | |||
4 | .parent-entry { | 10 | .parent-entry { |
5 | span[role=button] { | 11 | span[role=button] { |
6 | cursor: pointer; | 12 | cursor: pointer; |
diff --git a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts index 5909db0b5..66f8f7e55 100644 --- a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts +++ b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts | |||
@@ -33,7 +33,6 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy { | |||
33 | isModalOpened = false | 33 | isModalOpened = false |
34 | currentMenuEntryIndex: number | 34 | currentMenuEntryIndex: number |
35 | 35 | ||
36 | private openedOnHover = false | ||
37 | private routeSub: Subscription | 36 | private routeSub: Subscription |
38 | 37 | ||
39 | constructor ( | 38 | constructor ( |
@@ -68,32 +67,10 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy { | |||
68 | if (this.routeSub) this.routeSub.unsubscribe() | 67 | if (this.routeSub) this.routeSub.unsubscribe() |
69 | } | 68 | } |
70 | 69 | ||
71 | openDropdownOnHover (dropdown: NgbDropdown) { | ||
72 | this.openedOnHover = true | ||
73 | dropdown.open() | ||
74 | |||
75 | // Menu was closed | ||
76 | dropdown.openChange | ||
77 | .pipe(take(1)) | ||
78 | .subscribe(() => this.openedOnHover = false) | ||
79 | } | ||
80 | |||
81 | dropdownAnchorClicked (dropdown: NgbDropdown) { | 70 | dropdownAnchorClicked (dropdown: NgbDropdown) { |
82 | if (this.openedOnHover) { | ||
83 | this.openedOnHover = false | ||
84 | return | ||
85 | } | ||
86 | |||
87 | return dropdown.toggle() | 71 | return dropdown.toggle() |
88 | } | 72 | } |
89 | 73 | ||
90 | closeDropdownIfHovered (dropdown: NgbDropdown) { | ||
91 | if (this.openedOnHover === false) return | ||
92 | |||
93 | dropdown.close() | ||
94 | this.openedOnHover = false | ||
95 | } | ||
96 | |||
97 | openModal (index: number) { | 74 | openModal (index: number) { |
98 | this.currentMenuEntryIndex = index | 75 | this.currentMenuEntryIndex = index |
99 | this.isModalOpened = true | 76 | this.isModalOpened = true |
diff --git a/client/src/app/shared/shared-moderation/account-blocklist.component.html b/client/src/app/shared/shared-moderation/account-blocklist.component.html index 486785f35..df98cf84e 100644 --- a/client/src/app/shared/shared-moderation/account-blocklist.component.html +++ b/client/src/app/shared/shared-moderation/account-blocklist.component.html | |||
@@ -1,3 +1,8 @@ | |||
1 | <h1> | ||
2 | <my-global-icon iconName="user" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>Muted accounts</ng-container> | ||
4 | </h1> | ||
5 | |||
1 | <p-table | 6 | <p-table |
2 | [value]="blockedAccounts" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" | 7 | [value]="blockedAccounts" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" |
3 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" | 8 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" |
diff --git a/client/src/app/shared/shared-moderation/server-blocklist.component.html b/client/src/app/shared/shared-moderation/server-blocklist.component.html index 977e0e141..94efb4b8b 100644 --- a/client/src/app/shared/shared-moderation/server-blocklist.component.html +++ b/client/src/app/shared/shared-moderation/server-blocklist.component.html | |||
@@ -1,3 +1,8 @@ | |||
1 | <h1> | ||
2 | <my-global-icon iconName="server" aria-hidden="true"></my-global-icon> | ||
3 | <ng-container i18n>Muted servers</ng-container> | ||
4 | </h1> | ||
5 | |||
1 | <p-table | 6 | <p-table |
2 | [value]="blockedServers" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" | 7 | [value]="blockedServers" [lazy]="true" [paginator]="totalRecords > 0" [totalRecords]="totalRecords" [rows]="rowsPerPage" [rowsPerPageOptions]="rowsPerPageOptions" |
3 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" | 8 | [sortField]="sort.field" [sortOrder]="sort.order" (onLazyLoad)="loadLazy($event)" (onPage)="onPage($event)" |