>
<span (click)="doSearch()" class="icon icon-search"></span>
-<a class="upload-button" routerLink="/videos/upload">
+<a class="upload-button" (click)="goToUpload()">
<my-global-icon iconName="upload"></my-global-icon>
<span i18n class="upload-button-label">Upload</span>
</a>
@include orange-button;
@include button-with-icon(22px, 3px, -1px);
+ color: var(--mainBackgroundColor) !important;
margin-right: 25px;
@media screen and (max-width: 800px) {
import { Component, OnInit } from '@angular/core'
import { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router'
import { getParameterByName } from '../shared/misc/utils'
-import { AuthService } from '@app/core'
+import { AuthService, ServerService, Notifier } from '@app/core'
import { of } from 'rxjs'
+import { ServerConfig } from '@shared/models'
@Component({
selector: 'my-header',
export class HeaderComponent implements OnInit {
searchValue = ''
+ private serverConfig: ServerConfig
+
constructor (
private router: Router,
private route: ActivatedRoute,
- private auth: AuthService
+ private auth: AuthService,
+ private serverService: ServerService,
+ private authService: AuthService,
+ private notifier: Notifier
) {}
ngOnInit () {
map(() => getParameterByName('search', window.location.href))
)
.subscribe(searchQuery => this.searchValue = searchQuery || '')
+
+ this.serverConfig = this.serverService.getTmpConfig()
+ this.serverService.getConfig().subscribe(
+ config => this.serverConfig = config,
+
+ err => this.notifier.error(err.message)
+ )
}
doSearch () {
o.subscribe(() => this.router.navigate([ '/search' ], { queryParams }))
}
+ isUserLoggedIn () {
+ return this.authService.isLoggedIn()
+ }
+
+ isRegistrationAllowed () {
+ return this.serverConfig.signup.allowed &&
+ this.serverConfig.signup.allowedForCurrentIP
+ }
+
+ goToUpload () {
+ if (this.isUserLoggedIn()) {
+ this.router.navigate([ '/videos/upload' ])
+ } else if (this.isRegistrationAllowed()) {
+ this.router.navigate([ '/signup' ])
+ } else {
+ this.router.navigate([ '/login', { fromUpload: true } ])
+ }
+ }
+
private loadUserLanguagesIfNeeded (queryParams: any) {
if (queryParams && queryParams.languageOneOf) return of(queryParams)
Login
</div>
+ <div class="alert alert-warning" *ngIf="from.upload" role="alert">
+ <h6 class="alert-heading" i18n>
+ If you are looking for an account…
+ </h6>
+ <div i18n>
+ Currently this instance doesn't allow for user registration, but you can find an instance
+ that gives you the possibility to sign up for an account and upload your videos there.
+ Find yours among multiple instances at <a class="alert-link" [href]="instancesIndexUrl" target="_blank" rel="noopener noreferrer">{{ instancesIndexUrl }}</a>
+ , a directory of instances recommended by this instance.
+ </div>
+ </div>
+
<div *ngIf="error" class="alert alert-danger">{{ error }}
<span *ngIf="error === 'User email is not verified.'"> <a i18n routerLink="/verify-account/ask-send-email">Request new verification email.</a></span>
</div>
.create-an-account, .forgot-password-button {
color: var(--mainForegroundColor);
cursor: pointer;
+ transition: opacity cubic-bezier(0.39, 0.575, 0.565, 1);
&:hover {
- text-decoration: underline !important;
+ text-decoration: none !important;
+ opacity: .7 !important;
}
}
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'
-import { Notifier, RedirectService, ServerService } from '@app/core'
+import { Notifier, RedirectService } from '@app/core'
import { UserService } from '@app/shared'
import { AuthService } from '../core'
import { FormReactive } from '../shared'
import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
import { LoginValidatorsService } from '@app/shared/forms/form-validators/login-validators.service'
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
-import { ActivatedRoute, Router } from '@angular/router'
-import { ServerConfig } from '@shared/models'
+import { ActivatedRoute } from '@angular/router'
+import { ServerConfig } from '@shared/models/server/server-config.model'
@Component({
selector: 'my-login',
error: string = null
forgotPasswordEmail = ''
+ from = {
+ upload: false
+ }
private openedForgotPasswordModal: NgbModalRef
private serverConfig: ServerConfig
return this.serverConfig.signup.allowed === true
}
+ get instancesIndexUrl () {
+ return this.serverConfig.followings.instance.autoFollowIndex.indexUrl || 'https://instances.joinpeertube.org'
+ }
+
isEmailDisabled () {
return this.serverConfig.email.enabled === false
}
ngOnInit () {
this.serverConfig = this.route.snapshot.data.serverConfig
+ this.from.upload = Boolean(this.route.snapshot.paramMap.get('fromUpload'))
this.buildForm({
username: this.loginValidatorsService.LOGIN_USERNAME,
private authService: AuthService,
private serverService: ServerService,
private redirectService: RedirectService,
- private themeService: ThemeService,
private hotkeysService: HotkeysService
) {}
.dropdown-divider {
margin: 0.3rem 0;
-}
\ No newline at end of file
+}
+
+ngb-modal-backdrop {
+ z-index: 10000 !important;
+}
},
tracker: {
enabled: CONFIG.TRACKER.ENABLED
+ },
+
+ followings: {
+ instance: {
+ autoFollowIndex: {
+ indexUrl: CONFIG.FOLLOWINGS.INSTANCE.AUTO_FOLLOW_INDEX.INDEX_URL
+ }
+ }
}
}
tracker: {
enabled: boolean
}
+
+ followings: {
+ instance: {
+ autoFollowIndex: {
+ indexUrl: string
+ }
+ }
+ }
}