aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src
diff options
context:
space:
mode:
authorKim <1877318+kimsible@users.noreply.github.com>2020-07-23 15:09:15 +0200
committerGitHub <noreply@github.com>2020-07-23 15:09:15 +0200
commited5bb517266c80904c44bf44a335f1003f5aa277 (patch)
tree80671a21fb8c13ab47a65f01b64222a3a1e96a47 /client/src
parent345b4a22a8432cfd8c9c9f24634821d58c215b9a (diff)
downloadPeerTube-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')
-rw-r--r--client/src/app/+admin/admin.component.scss5
-rw-r--r--client/src/app/+admin/follows/followers-list/followers-list.component.html5
-rw-r--r--client/src/app/+admin/follows/following-list/following-list.component.html5
-rw-r--r--client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.html5
-rw-r--r--client/src/app/+admin/moderation/abuse-list/abuse-list.component.html5
-rw-r--r--client/src/app/+admin/moderation/video-block-list/video-block-list.component.html5
-rw-r--r--client/src/app/+admin/plugins/plugins.component.html2
-rw-r--r--client/src/app/+admin/plugins/plugins.component.scss5
-rw-r--r--client/src/app/+admin/system/system.component.html2
-rw-r--r--client/src/app/+my-account/+my-account-video-channels/my-account-video-channels.component.html6
-rw-r--r--client/src/app/+my-account/my-account-history/my-account-history.component.html6
-rw-r--r--client/src/app/+my-account/my-account-ownership/my-account-ownership.component.html6
-rw-r--r--client/src/app/+my-account/my-account-subscriptions/my-account-subscriptions.component.html6
-rw-r--r--client/src/app/+my-account/my-account-video-imports/my-account-video-imports.component.html6
-rw-r--r--client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.html8
-rw-r--r--client/src/app/+my-account/my-account-video-playlists/my-account-video-playlists.component.scss4
-rw-r--r--client/src/app/+my-account/my-account-videos/my-account-videos.component.html9
-rw-r--r--client/src/app/+my-account/my-account-videos/my-account-videos.component.scss6
-rw-r--r--client/src/app/+my-account/my-account.component.scss5
-rw-r--r--client/src/app/+videos/+video-edit/video-add.component.scss19
-rw-r--r--client/src/app/shared/shared-main/misc/top-menu-dropdown.component.html16
-rw-r--r--client/src/app/shared/shared-main/misc/top-menu-dropdown.component.scss6
-rw-r--r--client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts23
-rw-r--r--client/src/app/shared/shared-moderation/account-blocklist.component.html5
-rw-r--r--client/src/app/shared/shared-moderation/server-blocklist.component.html5
-rw-r--r--client/src/sass/application.scss31
-rw-r--r--client/src/sass/bootstrap.scss39
-rw-r--r--client/src/sass/include/_mixins.scss20
-rw-r--r--client/src/sass/include/_variables.scss1
29 files changed, 169 insertions, 97 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
1my-top-menu-dropdown { 4my-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)"
diff --git a/client/src/sass/application.scss b/client/src/sass/application.scss
index 5ca3b447a..c76e5db7b 100644
--- a/client/src/sass/application.scss
+++ b/client/src/sass/application.scss
@@ -139,12 +139,13 @@ label {
139 .sub-menu { 139 .sub-menu {
140 background-color: pvar(--submenuColor); 140 background-color: pvar(--submenuColor);
141 width: 100%; 141 width: 100%;
142 height: 81px; 142 height: $sub-menu-height;
143 margin-bottom: $sub-menu-margin-bottom;
144 display: flex; 143 display: flex;
145 align-items: center; 144 align-items: center;
146 padding-left: $not-expanded-horizontal-margins; 145 padding-left: $not-expanded-horizontal-margins;
147 padding-right: $not-expanded-horizontal-margins; 146 padding-right: $not-expanded-horizontal-margins;
147 position: fixed;
148 z-index: 1;
148 } 149 }
149 150
150 // Override some properties if the main content is expanded (no menu on the left) 151 // Override some properties if the main content is expanded (no menu on the left)
@@ -175,6 +176,7 @@ label {
175} 176}
176 177
177.title-page { 178.title-page {
179 opacity: 0.6;
178 color: pvar(--mainForegroundColor); 180 color: pvar(--mainForegroundColor);
179 font-size: 16px; 181 font-size: 16px;
180 display: inline-block; 182 display: inline-block;
@@ -182,14 +184,15 @@ label {
182 font-weight: $font-semibold; 184 font-weight: $font-semibold;
183 @include disable-default-a-behaviour; 185 @include disable-default-a-behaviour;
184 186
185 &.active, &.title-page-single { 187 border-bottom: 2px solid transparent;
188
189 &.title-page-single {
186 margin-top: 30px; 190 margin-top: 30px;
187 margin-bottom: 25px; 191 margin-bottom: 25px;
188 } 192 }
189 193
190 &.active { 194 &.active {
191 font-weight: $font-bold; 195 border-bottom-color: pvar(--mainColor);
192 border-bottom: 2px solid pvar(--mainColor);
193 } 196 }
194 197
195 &.title-page-single { 198 &.title-page-single {
@@ -200,6 +203,11 @@ label {
200 color: pvar(--mainForegroundColor); 203 color: pvar(--mainForegroundColor);
201 } 204 }
202 205
206 &.active, &:hover, &:active, &:focus, &.title-page-single {
207 opacity: 1;
208 outline: 0px hidden !important;
209 }
210
203 @media screen and (max-width: $mobile-view) { 211 @media screen and (max-width: $mobile-view) {
204 margin-right: 15px; 212 margin-right: 15px;
205 } 213 }
@@ -209,11 +217,6 @@ label {
209.title-page-settings { 217.title-page-settings {
210 white-space: nowrap; 218 white-space: nowrap;
211 font-size: 115%; 219 font-size: 115%;
212 font-weight: $font-regular;
213
214 &.active {
215 font-weight: $font-semibold;
216 }
217} 220}
218 221
219.admin-sub-header { 222.admin-sub-header {
@@ -232,11 +235,15 @@ label {
232 color: pvar(--mainForegroundColor); 235 color: pvar(--mainForegroundColor);
233 padding: 5px 15px; 236 padding: 5px 15px;
234 border-radius: 0.25rem; 237 border-radius: 0.25rem;
238 font-weight: $font-semibold;
239 opacity: 0.6;
235 240
236 &.active { 241 &.active {
237 font-weight: $font-semibold;
238 background-color: #f0f0f0; 242 background-color: #f0f0f0;
239 color: #000; 243 }
244
245 &.active, &:hover, &:active, &:focus {
246 opacity: 1;
240 } 247 }
241 } 248 }
242} 249}
diff --git a/client/src/sass/bootstrap.scss b/client/src/sass/bootstrap.scss
index dd5824b7a..897182e53 100644
--- a/client/src/sass/bootstrap.scss
+++ b/client/src/sass/bootstrap.scss
@@ -161,9 +161,14 @@ $icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/';
161 161
162.nav.nav-pills { 162.nav.nav-pills {
163 font-size: 16px !important; 163 font-size: 16px !important;
164 font-weight: $font-semibold !important;
164 165
165 .nav-link.active { 166 .nav-link {
166 font-weight: $font-semibold !important; 167 opacity: 0.6 !important;
168
169 &.active, &:hover, &:active, &:focus {
170 opacity: 1 !important;
171 }
167 } 172 }
168 173
169 a { 174 a {
@@ -173,29 +178,23 @@ $icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/';
173 } 178 }
174} 179}
175 180
176.nav-tabs { 181.nav-tabs .nav-link {
177 182 @include disable-default-a-behaviour;
178 .nav-link {
179 @include disable-default-a-behaviour;
180 183
181 color: pvar(--mainForegroundColor) !important; 184 color: pvar(--mainForegroundColor);
182 } 185 font-weight: $font-semibold;
183} 186 border: none;
187 border-bottom: 2px solid transparent;
188 opacity: 0.6;
184 189
185.nav-tabs .nav-link {
186 &:not(.active) {
187 border-bottom: 3px solid transparent;
188 }
189 &.active { 190 &.active {
190 font-weight: $font-semibold; 191 color: pvar(--mainForegroundColor);
191 background-color: pvar(--mainBackgroundColor) !important; 192 background-color: pvar(--mainBackgroundColor) !important;
192 border: none; 193 border-bottom-color: pvar(--mainColor);
193 border-bottom: 2px solid pvar(--mainColor);
194 } 194 }
195 &:hover { 195
196 border-top-color: transparent; 196 &.active, &:hover, &:active, &:focus {
197 border-left-color: transparent; 197 opacity: 1;
198 border-right-color: transparent;
199 } 198 }
200} 199}
201 200
diff --git a/client/src/sass/include/_mixins.scss b/client/src/sass/include/_mixins.scss
index 2cefaf73d..eec7b4a56 100644
--- a/client/src/sass/include/_mixins.scss
+++ b/client/src/sass/include/_mixins.scss
@@ -929,3 +929,23 @@
929 @content; 929 @content;
930 } 930 }
931} 931}
932
933@mixin sub-menu-h1 {
934 ::ng-deep h1 {
935 font-size: 1.3rem;
936 border-bottom: 2px solid $grey-background-color;
937 padding-bottom: 15px;
938 margin-bottom: $sub-menu-margin-bottom;
939
940 my-global-icon {
941 margin-right: 10px;
942 vertical-align: bottom;
943 width: 24px;
944 height: 24px;
945 }
946
947 .badge {
948 margin-left: 7px;
949 }
950 }
951}
diff --git a/client/src/sass/include/_variables.scss b/client/src/sass/include/_variables.scss
index fc13f6509..7b95bb8cc 100644
--- a/client/src/sass/include/_variables.scss
+++ b/client/src/sass/include/_variables.scss
@@ -49,6 +49,7 @@ $menu-width: 240px;
49$menu-lateral-padding: 26px; 49$menu-lateral-padding: 26px;
50 50
51$sub-menu-color: #F7F7F7; 51$sub-menu-color: #F7F7F7;
52$sub-menu-height: 81px;
52 53
53$footer-height: 30px; 54$footer-height: 30px;
54$footer-margin: 30px; 55$footer-margin: 30px;