|
|
@@ -4,7 +4,7 @@ import { filter, first, map, pairwise } from 'rxjs/operators' |
|
|
|
import { DOCUMENT, PlatformLocation, ViewportScroller } from '@angular/common' |
|
|
|
import { AfterViewInit, Component, Inject, LOCALE_ID, OnInit, ViewChild } from '@angular/core' |
|
|
|
import { DomSanitizer, SafeHtml } from '@angular/platform-browser' |
|
|
|
import { Event, GuardsCheckStart, NavigationEnd, Router, Scroll } from '@angular/router' |
|
|
|
import { Event, GuardsCheckStart, NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart, Router, Scroll } from '@angular/router' |
|
|
|
import { AuthService, MarkdownService, RedirectService, ScreenService, ServerService, ThemeService, User } from '@app/core' |
|
|
|
import { HooksService } from '@app/core/plugins/hooks.service' |
|
|
|
import { PluginService } from '@app/core/plugins/plugin.service' |
|
|
@@ -12,6 +12,7 @@ import { CustomModalComponent } from '@app/modal/custom-modal.component' |
|
|
|
import { InstanceConfigWarningModalComponent } from '@app/modal/instance-config-warning-modal.component' |
|
|
|
import { WelcomeModalComponent } from '@app/modal/welcome-modal.component' |
|
|
|
import { NgbConfig, NgbModal } from '@ng-bootstrap/ng-bootstrap' |
|
|
|
import { LoadingBarService } from '@ngx-loading-bar/core' |
|
|
|
import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' |
|
|
|
import { getShortLocale, is18nPath } from '@shared/core-utils/i18n' |
|
|
|
import { BroadcastMessageLevel, ServerConfig, UserRole } from '@shared/models' |
|
|
@@ -55,6 +56,7 @@ export class AppComponent implements OnInit, AfterViewInit { |
|
|
|
private modalService: NgbModal, |
|
|
|
private markdownService: MarkdownService, |
|
|
|
private ngbConfig: NgbConfig, |
|
|
|
private loadingBar: LoadingBarService, |
|
|
|
public menu: MenuService |
|
|
|
) { |
|
|
|
this.ngbConfig.animation = false |
|
|
@@ -126,6 +128,7 @@ export class AppComponent implements OnInit, AfterViewInit { |
|
|
|
|
|
|
|
const scrollEvent = eventsObs.pipe(filter((e: Event): e is Scroll => e instanceof Scroll)) |
|
|
|
|
|
|
|
// Handle anchors/restore position |
|
|
|
scrollEvent.subscribe(e => { |
|
|
|
// scrollToAnchor first to preserve anchor position when using history navigation |
|
|
|
if (e.anchor) { |
|
|
@@ -178,19 +181,31 @@ export class AppComponent implements OnInit, AfterViewInit { |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
// Homepage redirection |
|
|
|
navigationEndEvent.pipe( |
|
|
|
map(() => window.location.pathname), |
|
|
|
filter(pathname => !pathname || pathname === '/' || is18nPath(pathname)) |
|
|
|
).subscribe(() => this.redirectService.redirectToHomepage(true)) |
|
|
|
|
|
|
|
// Plugin hooks |
|
|
|
navigationEndEvent.subscribe(e => { |
|
|
|
this.hooks.runAction('action:router.navigation-end', 'common', { path: e.url }) |
|
|
|
}) |
|
|
|
|
|
|
|
// Automatically hide/display the menu |
|
|
|
eventsObs.pipe( |
|
|
|
filter((e: Event): e is GuardsCheckStart => e instanceof GuardsCheckStart), |
|
|
|
filter(() => this.screenService.isInSmallView() || this.screenService.isInTouchScreen()) |
|
|
|
).subscribe(() => this.menu.setMenuDisplay(false)) // User clicked on a link in the menu, change the page |
|
|
|
|
|
|
|
// Handle lazy loaded module |
|
|
|
eventsObs.pipe( |
|
|
|
filter((e: Event): e is RouteConfigLoadStart => e instanceof RouteConfigLoadStart) |
|
|
|
).subscribe(() => this.loadingBar.useRef().start()) |
|
|
|
|
|
|
|
eventsObs.pipe( |
|
|
|
filter((e: Event): e is RouteConfigLoadEnd => e instanceof RouteConfigLoadEnd) |
|
|
|
).subscribe(() => this.loadingBar.useRef().complete()) |
|
|
|
} |
|
|
|
|
|
|
|
private injectBroadcastMessage () { |
|
|
|