diff options
Diffstat (limited to 'client/src/app/menu/menu.component.ts')
-rw-r--r-- | client/src/app/menu/menu.component.ts | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/client/src/app/menu/menu.component.ts b/client/src/app/menu/menu.component.ts index bdc95127b..50ff0e2b3 100644 --- a/client/src/app/menu/menu.component.ts +++ b/client/src/app/menu/menu.component.ts | |||
@@ -9,6 +9,7 @@ import { AuthService, AuthStatus, AuthUser, MenuService, RedirectService, Screen | |||
9 | import { LanguageChooserComponent } from '@app/menu/language-chooser.component' | 9 | import { LanguageChooserComponent } from '@app/menu/language-chooser.component' |
10 | import { QuickSettingsModalComponent } from '@app/modal/quick-settings-modal.component' | 10 | import { QuickSettingsModalComponent } from '@app/modal/quick-settings-modal.component' |
11 | import { ServerConfig, UserRight, VideoConstant } from '@shared/models' | 11 | import { ServerConfig, UserRight, VideoConstant } from '@shared/models' |
12 | import { NgbDropdown, NgbDropdownConfig } from '@ng-bootstrap/ng-bootstrap' | ||
12 | 13 | ||
13 | const logger = debug('peertube:menu:MenuComponent') | 14 | const logger = debug('peertube:menu:MenuComponent') |
14 | 15 | ||
@@ -20,6 +21,7 @@ const logger = debug('peertube:menu:MenuComponent') | |||
20 | export class MenuComponent implements OnInit { | 21 | export class MenuComponent implements OnInit { |
21 | @ViewChild('languageChooserModal', { static: true }) languageChooserModal: LanguageChooserComponent | 22 | @ViewChild('languageChooserModal', { static: true }) languageChooserModal: LanguageChooserComponent |
22 | @ViewChild('quickSettingsModal', { static: true }) quickSettingsModal: QuickSettingsModalComponent | 23 | @ViewChild('quickSettingsModal', { static: true }) quickSettingsModal: QuickSettingsModalComponent |
24 | @ViewChild('dropdown') dropdown: NgbDropdown | ||
23 | 25 | ||
24 | user: AuthUser | 26 | user: AuthUser |
25 | isLoggedIn: boolean | 27 | isLoggedIn: boolean |
@@ -30,8 +32,6 @@ export class MenuComponent implements OnInit { | |||
30 | videoLanguages: string[] = [] | 32 | videoLanguages: string[] = [] |
31 | nsfwPolicy: string | 33 | nsfwPolicy: string |
32 | 34 | ||
33 | loggedInMorePlacement: string | ||
34 | |||
35 | currentInterfaceLanguage: string | 35 | currentInterfaceLanguage: string |
36 | 36 | ||
37 | private languages: VideoConstant<string>[] = [] | 37 | private languages: VideoConstant<string>[] = [] |
@@ -54,8 +54,27 @@ export class MenuComponent implements OnInit { | |||
54 | private hotkeysService: HotkeysService, | 54 | private hotkeysService: HotkeysService, |
55 | private screenService: ScreenService, | 55 | private screenService: ScreenService, |
56 | private menuService: MenuService, | 56 | private menuService: MenuService, |
57 | private dropdownConfig: NgbDropdownConfig, | ||
57 | private router: Router | 58 | private router: Router |
58 | ) { } | 59 | ) { |
60 | this.dropdownConfig.container = 'body' | ||
61 | } | ||
62 | |||
63 | get isInMobileView () { | ||
64 | return this.screenService.isInMobileView() | ||
65 | } | ||
66 | |||
67 | get dropdownContainer () { | ||
68 | if (this.isInMobileView) { | ||
69 | return null | ||
70 | } else { | ||
71 | return this.dropdownConfig.container | ||
72 | } | ||
73 | } | ||
74 | |||
75 | get language () { | ||
76 | return this.languageChooserModal.getCurrentLanguage() | ||
77 | } | ||
59 | 78 | ||
60 | get instanceName () { | 79 | get instanceName () { |
61 | return this.serverConfig.instance.name | 80 | return this.serverConfig.instance.name |
@@ -76,10 +95,6 @@ export class MenuComponent implements OnInit { | |||
76 | 95 | ||
77 | this.computeAdminAccess() | 96 | this.computeAdminAccess() |
78 | 97 | ||
79 | this.loggedInMorePlacement = this.screenService.isInMobileView() | ||
80 | ? 'left-top auto' | ||
81 | : 'right-top auto' | ||
82 | |||
83 | this.currentInterfaceLanguage = this.languageChooserModal.getCurrentLanguage() | 98 | this.currentInterfaceLanguage = this.languageChooserModal.getCurrentLanguage() |
84 | 99 | ||
85 | this.authService.loginChangedSource.subscribe( | 100 | this.authService.loginChangedSource.subscribe( |
@@ -203,6 +218,29 @@ export class MenuComponent implements OnInit { | |||
203 | } | 218 | } |
204 | } | 219 | } |
205 | 220 | ||
221 | // Lock menu scroll when menu scroll to avoid fleeing / detached dropdown | ||
222 | onMenuScrollEvent () { | ||
223 | document.querySelector('menu').scrollTo(0, 0) | ||
224 | } | ||
225 | |||
226 | onDropdownOpenChange (opened: boolean) { | ||
227 | if (this.screenService.isInMobileView()) return | ||
228 | |||
229 | // Close dropdown when window scroll to avoid dropdown quick jump for re-position | ||
230 | const onWindowScroll = () => { | ||
231 | this.dropdown.close() | ||
232 | window.removeEventListener('scroll', onWindowScroll) | ||
233 | } | ||
234 | |||
235 | if (opened) { | ||
236 | window.addEventListener('scroll', onWindowScroll) | ||
237 | document.querySelector('menu').scrollTo(0, 0) // Reset menu scroll to easy lock | ||
238 | document.querySelector('menu').addEventListener('scroll', this.onMenuScrollEvent) | ||
239 | } else { | ||
240 | document.querySelector('menu').removeEventListener('scroll', this.onMenuScrollEvent) | ||
241 | } | ||
242 | } | ||
243 | |||
206 | private buildUserLanguages () { | 244 | private buildUserLanguages () { |
207 | if (!this.user) { | 245 | if (!this.user) { |
208 | this.videoLanguages = [] | 246 | this.videoLanguages = [] |