diff options
Diffstat (limited to 'client/src/app/shared')
4 files changed, 39 insertions, 3 deletions
diff --git a/client/src/app/shared/images/global-icon.component.ts b/client/src/app/shared/images/global-icon.component.ts index 3fa6fea96..d85f269ea 100644 --- a/client/src/app/shared/images/global-icon.component.ts +++ b/client/src/app/shared/images/global-icon.component.ts | |||
@@ -2,6 +2,8 @@ import { Component, ElementRef, Input, OnInit } from '@angular/core' | |||
2 | 2 | ||
3 | const icons = { | 3 | const icons = { |
4 | 'add': require('../../../assets/images/global/add.html'), | 4 | 'add': require('../../../assets/images/global/add.html'), |
5 | 'user': require('../../../assets/images/global/user.html'), | ||
6 | 'sign-out': require('../../../assets/images/global/sign-out.html'), | ||
5 | 'syndication': require('../../../assets/images/global/syndication.html'), | 7 | 'syndication': require('../../../assets/images/global/syndication.html'), |
6 | 'help': require('../../../assets/images/global/help.html'), | 8 | 'help': require('../../../assets/images/global/help.html'), |
7 | 'sparkle': require('../../../assets/images/global/sparkle.html'), | 9 | 'sparkle': require('../../../assets/images/global/sparkle.html'), |
@@ -11,12 +13,15 @@ const icons = { | |||
11 | 'no': require('../../../assets/images/global/no.html'), | 13 | 'no': require('../../../assets/images/global/no.html'), |
12 | 'cloud-download': require('../../../assets/images/global/cloud-download.html'), | 14 | 'cloud-download': require('../../../assets/images/global/cloud-download.html'), |
13 | 'undo': require('../../../assets/images/global/undo.html'), | 15 | 'undo': require('../../../assets/images/global/undo.html'), |
16 | 'history': require('../../../assets/images/global/history.html'), | ||
14 | 'circle-tick': require('../../../assets/images/global/circle-tick.html'), | 17 | 'circle-tick': require('../../../assets/images/global/circle-tick.html'), |
15 | 'cog': require('../../../assets/images/global/cog.html'), | 18 | 'cog': require('../../../assets/images/global/cog.html'), |
16 | 'download': require('../../../assets/images/global/download.html'), | 19 | 'download': require('../../../assets/images/global/download.html'), |
20 | 'go': require('../../../assets/images/menu/go.html'), | ||
17 | 'edit': require('../../../assets/images/global/edit.html'), | 21 | 'edit': require('../../../assets/images/global/edit.html'), |
18 | 'im-with-her': require('../../../assets/images/global/im-with-her.html'), | 22 | 'im-with-her': require('../../../assets/images/global/im-with-her.html'), |
19 | 'delete': require('../../../assets/images/global/delete.html'), | 23 | 'delete': require('../../../assets/images/global/delete.html'), |
24 | 'server': require('../../../assets/images/global/server.html'), | ||
20 | 'cross': require('../../../assets/images/global/cross.html'), | 25 | 'cross': require('../../../assets/images/global/cross.html'), |
21 | 'validate': require('../../../assets/images/global/validate.html'), | 26 | 'validate': require('../../../assets/images/global/validate.html'), |
22 | 'tick': require('../../../assets/images/global/tick.html'), | 27 | 'tick': require('../../../assets/images/global/tick.html'), |
@@ -28,7 +33,17 @@ const icons = { | |||
28 | 'share': require('../../../assets/images/video/share.html'), | 33 | 'share': require('../../../assets/images/video/share.html'), |
29 | 'upload': require('../../../assets/images/video/upload.html'), | 34 | 'upload': require('../../../assets/images/video/upload.html'), |
30 | 'playlist-add': require('../../../assets/images/video/playlist-add.html'), | 35 | 'playlist-add': require('../../../assets/images/video/playlist-add.html'), |
31 | 'play': require('../../../assets/images/global/play.html') | 36 | 'play': require('../../../assets/images/global/play.html'), |
37 | 'playlists': require('../../../assets/images/global/playlists.html'), | ||
38 | 'about': require('../../../assets/images/menu/about.html'), | ||
39 | 'globe': require('../../../assets/images/menu/globe.html'), | ||
40 | 'home': require('../../../assets/images/menu/home.html'), | ||
41 | 'recently-added': require('../../../assets/images/menu/recently-added.html'), | ||
42 | 'trending': require('../../../assets/images/menu/trending.html'), | ||
43 | 'videos': require('../../../assets/images/global/videos.html'), | ||
44 | 'folder': require('../../../assets/images/global/folder.html'), | ||
45 | 'administration': require('../../../assets/images/menu/administration.html'), | ||
46 | 'subscriptions': require('../../../assets/images/menu/subscriptions.html') | ||
32 | } | 47 | } |
33 | 48 | ||
34 | export type GlobalIconName = keyof typeof icons | 49 | export type GlobalIconName = keyof typeof icons |
diff --git a/client/src/app/shared/menu/top-menu-dropdown.component.html b/client/src/app/shared/menu/top-menu-dropdown.component.html index d3c896019..8d58fa1db 100644 --- a/client/src/app/shared/menu/top-menu-dropdown.component.html +++ b/client/src/app/shared/menu/top-menu-dropdown.component.html | |||
@@ -13,7 +13,11 @@ | |||
13 | </span> | 13 | </span> |
14 | 14 | ||
15 | <div ngbDropdownMenu> | 15 | <div ngbDropdownMenu> |
16 | <a *ngFor="let menuChild of menuEntry.children" class="dropdown-item" [routerLink]="menuChild.routerLink">{{ menuChild.label }}</a> | 16 | <a *ngFor="let menuChild of menuEntry.children" class="dropdown-item" [ngClass]="{ icon: hasIcons }" [routerLink]="menuChild.routerLink"> |
17 | <my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName"></my-global-icon> | ||
18 | |||
19 | {{ menuChild.label }} | ||
20 | </a> | ||
17 | </div> | 21 | </div> |
18 | </div> | 22 | </div> |
19 | 23 | ||
diff --git a/client/src/app/shared/menu/top-menu-dropdown.component.scss b/client/src/app/shared/menu/top-menu-dropdown.component.scss index 77159532f..d7c7de957 100644 --- a/client/src/app/shared/menu/top-menu-dropdown.component.scss +++ b/client/src/app/shared/menu/top-menu-dropdown.component.scss | |||
@@ -1,3 +1,6 @@ | |||
1 | @import '_variables'; | ||
2 | @import '_mixins'; | ||
3 | |||
1 | .parent-entry { | 4 | .parent-entry { |
2 | span[role=button] { | 5 | span[role=button] { |
3 | cursor: pointer; | 6 | cursor: pointer; |
@@ -16,3 +19,9 @@ | |||
16 | /deep/ .dropdown-menu { | 19 | /deep/ .dropdown-menu { |
17 | margin-top: 0 !important; | 20 | margin-top: 0 !important; |
18 | } | 21 | } |
22 | |||
23 | .icon { | ||
24 | @include dropdown-with-icon-item; | ||
25 | |||
26 | top: -1px; | ||
27 | } | ||
diff --git a/client/src/app/shared/menu/top-menu-dropdown.component.ts b/client/src/app/shared/menu/top-menu-dropdown.component.ts index e859c30dd..e951ea236 100644 --- a/client/src/app/shared/menu/top-menu-dropdown.component.ts +++ b/client/src/app/shared/menu/top-menu-dropdown.component.ts | |||
@@ -3,6 +3,7 @@ import { filter, take } from 'rxjs/operators' | |||
3 | import { NavigationEnd, Router } from '@angular/router' | 3 | import { NavigationEnd, Router } from '@angular/router' |
4 | import { Subscription } from 'rxjs' | 4 | import { Subscription } from 'rxjs' |
5 | import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap' | 5 | import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap' |
6 | import { GlobalIconName } from '@app/shared/images/global-icon.component' | ||
6 | 7 | ||
7 | export type TopMenuDropdownParam = { | 8 | export type TopMenuDropdownParam = { |
8 | label: string | 9 | label: string |
@@ -11,6 +12,8 @@ export type TopMenuDropdownParam = { | |||
11 | children?: { | 12 | children?: { |
12 | label: string | 13 | label: string |
13 | routerLink: string | 14 | routerLink: string |
15 | |||
16 | iconName?: GlobalIconName | ||
14 | }[] | 17 | }[] |
15 | } | 18 | } |
16 | 19 | ||
@@ -23,6 +26,7 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy { | |||
23 | @Input() menuEntries: TopMenuDropdownParam[] = [] | 26 | @Input() menuEntries: TopMenuDropdownParam[] = [] |
24 | 27 | ||
25 | suffixLabels: { [ parentLabel: string ]: string } | 28 | suffixLabels: { [ parentLabel: string ]: string } |
29 | hasIcons = false | ||
26 | 30 | ||
27 | private openedOnHover = false | 31 | private openedOnHover = false |
28 | private routeSub: Subscription | 32 | private routeSub: Subscription |
@@ -35,6 +39,10 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy { | |||
35 | this.routeSub = this.router.events | 39 | this.routeSub = this.router.events |
36 | .pipe(filter(event => event instanceof NavigationEnd)) | 40 | .pipe(filter(event => event instanceof NavigationEnd)) |
37 | .subscribe(() => this.updateChildLabels(window.location.pathname)) | 41 | .subscribe(() => this.updateChildLabels(window.location.pathname)) |
42 | |||
43 | this.hasIcons = this.menuEntries.some( | ||
44 | e => e.children && e.children.some(c => !!c.iconName) | ||
45 | ) | ||
38 | } | 46 | } |
39 | 47 | ||
40 | ngOnDestroy () { | 48 | ngOnDestroy () { |
@@ -48,7 +56,7 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy { | |||
48 | // Menu was closed | 56 | // Menu was closed |
49 | dropdown.openChange | 57 | dropdown.openChange |
50 | .pipe(take(1)) | 58 | .pipe(take(1)) |
51 | .subscribe(e => this.openedOnHover = false) | 59 | .subscribe(() => this.openedOnHover = false) |
52 | } | 60 | } |
53 | 61 | ||
54 | dropdownAnchorClicked (dropdown: NgbDropdown) { | 62 | dropdownAnchorClicked (dropdown: NgbDropdown) { |