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 | |
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')
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 | |||
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)" |
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; |