X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fmenu%2Fmenu.service.ts;h=d865c7da2e7ce2e5f0e75c1370571e6d6ec915b8;hb=2c8380a46f34631e705b1564938343cacfa4b0bc;hp=9c0433bca76fbf18506a3c49d125da2200e48bf1;hpb=1bfc7b737975201645f43e58b485e864b3589bb3;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/core/menu/menu.service.ts b/client/src/app/core/menu/menu.service.ts index 9c0433bca..d865c7da2 100644 --- a/client/src/app/core/menu/menu.service.ts +++ b/client/src/app/core/menu/menu.service.ts @@ -1,13 +1,32 @@ import { fromEvent } from 'rxjs' import { debounceTime } from 'rxjs/operators' import { Injectable } from '@angular/core' +import { GlobalIconName } from '@app/shared/shared-icons' +import { HTMLServerConfig } from '@shared/models/server' import { ScreenService } from '../wrappers' +export type MenuLink = { + icon: GlobalIconName + iconClass?: string + + label: string + // Used by the left menu for example + shortLabel: string + + path: string +} + +export type MenuSection = { + key: string + title: string + links: MenuLink[] +} + @Injectable() export class MenuService { isMenuDisplayed = true isMenuChangedByUser = false - menuWidth = 240 // should be kept equal to $menu-width + menuWidth = 240 // should be kept equal to $menu-width constructor ( private screenService: ScreenService @@ -25,6 +44,10 @@ export class MenuService { this.isMenuChangedByUser = true } + isDisplayed () { + return this.isMenuDisplayed + } + setMenuDisplay (display: boolean) { this.isMenuDisplayed = display @@ -33,7 +56,7 @@ export class MenuService { // On touch screens, lock body scroll and display content overlay when memu is opened if (this.isMenuDisplayed) { document.body.classList.add('menu-open') - this.screenService.onFingerSwipe('left', () => { this.setMenuDisplay(false) }) + this.screenService.onFingerSwipe('left', () => this.setMenuDisplay(false)) return } @@ -44,6 +67,100 @@ export class MenuService { this.isMenuDisplayed = window.innerWidth >= 800 && !this.isMenuChangedByUser } + buildLibraryLinks (userCanSeeVideosLink: boolean): MenuSection { + let links: MenuLink[] = [] + + if (userCanSeeVideosLink) { + links.push({ + path: '/my-library/video-channels', + icon: 'channel' as GlobalIconName, + iconClass: 'channel-icon', + shortLabel: $localize`Channels`, + label: $localize`My channels` + }) + + links.push({ + path: '/my-library/videos', + icon: 'videos' as GlobalIconName, + shortLabel: $localize`Videos`, + label: $localize`My videos` + }) + } + + links = links.concat([ + { + path: '/my-library/video-playlists', + icon: 'playlists' as GlobalIconName, + shortLabel: $localize`Playlists`, + label: $localize`My playlists` + }, + { + path: '/videos/subscriptions', + icon: 'subscriptions' as GlobalIconName, + shortLabel: $localize`Subscriptions`, + label: $localize`My subscriptions` + }, + { + path: '/my-library/history/videos', + icon: 'history' as GlobalIconName, + shortLabel: $localize`History`, + label: $localize`My history` + } + ]) + + return { + key: 'in-my-library', + title: $localize`In my library`, + links + } + } + + buildCommonLinks (config: HTMLServerConfig): MenuSection { + let links: MenuLink[] = [] + + if (config.homepage.enabled) { + links.push({ + icon: 'home' as 'home', + label: $localize`Home`, + shortLabel: $localize`Home`, + path: '/home' + }) + } + + links = links.concat([ + { + icon: 'globe' as 'globe', + label: $localize`Discover videos`, + shortLabel: $localize`Discover`, + path: '/videos/overview' + }, + { + icon: 'trending' as 'trending', + label: $localize`Trending videos`, + shortLabel: $localize`Trending`, + path: '/videos/trending' + }, + { + icon: 'add' as 'add', + label: $localize`Recently added videos`, + shortLabel: $localize`Recently added`, + path: '/videos/recently-added' + }, + { + icon: 'local' as 'local', + label: $localize`Local videos`, + shortLabel: $localize`Local videos`, + path: '/videos/local' + } + ]) + + return { + key: 'on-instance', + title: $localize`ON ${config.instance.name}`, + links + } + } + private handleWindowResize () { // On touch screens, do not handle window resize event since opened menu is handled with a content overlay if (this.screenService.isInTouchScreen()) return