Add account settings new design
This commit is contained in:
parent
2bbb34127f
commit
c30745f342
|
@ -1,14 +1,12 @@
|
||||||
import { Injectable } from '@angular/core'
|
|
||||||
import { HttpClient, HttpParams } from '@angular/common/http'
|
import { HttpClient, HttpParams } from '@angular/common/http'
|
||||||
import { Observable } from 'rxjs/Observable'
|
import { Injectable } from '@angular/core'
|
||||||
|
import { BytesPipe } from 'ngx-pipes'
|
||||||
|
import { SortMeta } from 'primeng/components/common/sortmeta'
|
||||||
import 'rxjs/add/operator/catch'
|
import 'rxjs/add/operator/catch'
|
||||||
import 'rxjs/add/operator/map'
|
import 'rxjs/add/operator/map'
|
||||||
|
import { Observable } from 'rxjs/Observable'
|
||||||
import { SortMeta } from 'primeng/components/common/sortmeta'
|
import { ResultList, UserCreate, UserUpdate } from '../../../../../../shared'
|
||||||
import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'
|
import { RestExtractor, RestPagination, RestService, User } from '../../../shared'
|
||||||
|
|
||||||
import { RestExtractor, User, RestPagination, RestService } from '../../../shared'
|
|
||||||
import { UserCreate, UserUpdate, ResultList } from '../../../../../../shared'
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UserService {
|
export class UserService {
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
<div *ngIf="error" class="alert alert-danger">{{ error }}</div>
|
|
||||||
|
|
||||||
<form role="form" (ngSubmit)="changePassword()" [formGroup]="form">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="new-password">New password</label>
|
|
||||||
<input
|
|
||||||
type="password" class="form-control" id="new-password"
|
|
||||||
formControlName="new-password"
|
|
||||||
>
|
|
||||||
<div *ngIf="formErrors['new-password']" class="alert alert-danger">
|
|
||||||
{{ formErrors['new-password'] }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="name">Confirm new password</label>
|
|
||||||
<input
|
|
||||||
type="password" class="form-control" id="new-confirmed-password"
|
|
||||||
formControlName="new-confirmed-password"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<input type="submit" value="Change password" class="btn btn-default" [disabled]="!form.valid">
|
|
||||||
</form>
|
|
|
@ -1,16 +0,0 @@
|
||||||
<div *ngIf="error" class="alert alert-danger">{{ error }}</div>
|
|
||||||
|
|
||||||
<form role="form" (ngSubmit)="updateDetails()" [formGroup]="form">
|
|
||||||
<div class="form-group">
|
|
||||||
<input
|
|
||||||
type="checkbox" id="displayNSFW"
|
|
||||||
formControlName="displayNSFW"
|
|
||||||
>
|
|
||||||
<label for="displayNSFW">Display videos that contain mature or explicit content</label>
|
|
||||||
<div *ngIf="formErrors['displayNSFW']" class="alert alert-danger">
|
|
||||||
{{ formErrors['displayNSFW'] }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<input type="submit" value="Update" class="btn btn-default" [disabled]="!form.valid">
|
|
||||||
</form>
|
|
|
@ -5,17 +5,33 @@ import { MetaGuard } from '@ngx-meta/core'
|
||||||
|
|
||||||
import { LoginGuard } from '../core'
|
import { LoginGuard } from '../core'
|
||||||
import { AccountComponent } from './account.component'
|
import { AccountComponent } from './account.component'
|
||||||
|
import { AccountSettingsComponent } from './account-settings/account-settings.component'
|
||||||
|
|
||||||
const accountRoutes: Routes = [
|
const accountRoutes: Routes = [
|
||||||
{
|
{
|
||||||
path: 'account',
|
path: 'account',
|
||||||
component: AccountComponent,
|
component: AccountComponent,
|
||||||
canActivate: [ MetaGuard, LoginGuard ],
|
canActivateChild: [ MetaGuard, LoginGuard ],
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'settings',
|
||||||
|
component: AccountSettingsComponent,
|
||||||
data: {
|
data: {
|
||||||
meta: {
|
meta: {
|
||||||
title: 'My account'
|
title: 'Account settings'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// path: 'videos',
|
||||||
|
// component: AccountVideosComponent,
|
||||||
|
// data: {
|
||||||
|
// meta: {
|
||||||
|
// title: 'Account videos'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<div *ngIf="error" class="alert alert-danger">{{ error }}</div>
|
||||||
|
|
||||||
|
<form role="form" (ngSubmit)="changePassword()" [formGroup]="form">
|
||||||
|
<input
|
||||||
|
type="password" class="form-control" id="new-password" placeholder="Old password"
|
||||||
|
formControlName="new-password"
|
||||||
|
>
|
||||||
|
<div *ngIf="formErrors['new-password']" class="alert alert-danger">
|
||||||
|
{{ formErrors['new-password'] }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="password" id="new-confirmed-password" placeholder="New password"
|
||||||
|
formControlName="new-confirmed-password"
|
||||||
|
>
|
||||||
|
|
||||||
|
<input type="submit" value="Change password" [disabled]="!form.valid">
|
||||||
|
</form>
|
|
@ -0,0 +1,9 @@
|
||||||
|
input[type=password] {
|
||||||
|
@include peertube-input-text(340px);
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=submit] {
|
||||||
|
@include peertube-button;
|
||||||
|
}
|
|
@ -1,16 +1,13 @@
|
||||||
import { Component, OnInit } from '@angular/core'
|
import { Component, OnInit } from '@angular/core'
|
||||||
import { FormBuilder, FormGroup } from '@angular/forms'
|
import { FormBuilder, FormGroup } from '@angular/forms'
|
||||||
import { Router } from '@angular/router'
|
|
||||||
|
|
||||||
import { NotificationsService } from 'angular2-notifications'
|
import { NotificationsService } from 'angular2-notifications'
|
||||||
|
import { FormReactive, USER_PASSWORD, UserService } from '../../../shared'
|
||||||
import { FormReactive, UserService, USER_PASSWORD } from '../../shared'
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-account-change-password',
|
selector: 'my-account-change-password',
|
||||||
templateUrl: './account-change-password.component.html'
|
templateUrl: './account-change-password.component.html',
|
||||||
|
styleUrls: [ './account-change-password.component.scss' ]
|
||||||
})
|
})
|
||||||
|
|
||||||
export class AccountChangePasswordComponent extends FormReactive implements OnInit {
|
export class AccountChangePasswordComponent extends FormReactive implements OnInit {
|
||||||
error: string = null
|
error: string = null
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<div *ngIf="error" class="alert alert-danger">{{ error }}</div>
|
||||||
|
|
||||||
|
<form role="form" (ngSubmit)="updateDetails()" [formGroup]="form">
|
||||||
|
<input
|
||||||
|
type="checkbox" id="displayNSFW"
|
||||||
|
formControlName="displayNSFW"
|
||||||
|
>
|
||||||
|
<label for="displayNSFW">Display videos that contain mature or explicit content</label>
|
||||||
|
<div *ngIf="formErrors['displayNSFW']" class="alert alert-danger">
|
||||||
|
{{ formErrors['displayNSFW'] }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" value="Update" [disabled]="!form.valid">
|
||||||
|
</form>
|
|
@ -0,0 +1,11 @@
|
||||||
|
label {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: $font-regular;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=submit] {
|
||||||
|
@include peertube-button;
|
||||||
|
|
||||||
|
display: block;
|
||||||
|
}
|
|
@ -1,21 +1,14 @@
|
||||||
import { Component, OnInit, Input } from '@angular/core'
|
import { Component, Input, OnInit } from '@angular/core'
|
||||||
import { FormBuilder, FormGroup } from '@angular/forms'
|
import { FormBuilder, FormGroup } from '@angular/forms'
|
||||||
import { Router } from '@angular/router'
|
|
||||||
|
|
||||||
import { NotificationsService } from 'angular2-notifications'
|
import { NotificationsService } from 'angular2-notifications'
|
||||||
|
import { UserUpdateMe } from '../../../../../../shared'
|
||||||
import { AuthService } from '../../core'
|
import { AuthService } from '../../../core'
|
||||||
import {
|
import { FormReactive, User, UserService } from '../../../shared'
|
||||||
FormReactive,
|
|
||||||
User,
|
|
||||||
UserService,
|
|
||||||
USER_PASSWORD
|
|
||||||
} from '../../shared'
|
|
||||||
import { UserUpdateMe } from '../../../../../shared'
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-account-details',
|
selector: 'my-account-details',
|
||||||
templateUrl: './account-details.component.html'
|
templateUrl: './account-details.component.html',
|
||||||
|
styleUrls: [ './account-details.component.scss' ]
|
||||||
})
|
})
|
||||||
|
|
||||||
export class AccountDetailsComponent extends FormReactive implements OnInit {
|
export class AccountDetailsComponent extends FormReactive implements OnInit {
|
|
@ -0,0 +1,9 @@
|
||||||
|
<div class="user-info">
|
||||||
|
{{ user.username }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="account-title">Account settings</div>
|
||||||
|
<my-account-change-password></my-account-change-password>
|
||||||
|
|
||||||
|
<div class="account-title">Filtering</div>
|
||||||
|
<my-account-details [user]="user"></my-account-details>
|
|
@ -0,0 +1,13 @@
|
||||||
|
.user-info {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: $font-bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.account-title {
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: $orange-color;
|
||||||
|
font-weight: $font-bold;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-top: 55px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { Component, OnInit } from '@angular/core'
|
||||||
|
import { User } from '../../shared'
|
||||||
|
import { AuthService } from '../../core'
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'my-account-settings',
|
||||||
|
templateUrl: './account-settings.component.html',
|
||||||
|
styleUrls: [ './account-settings.component.scss' ]
|
||||||
|
})
|
||||||
|
export class AccountSettingsComponent implements OnInit {
|
||||||
|
user: User = null
|
||||||
|
|
||||||
|
constructor (private authService: AuthService) {}
|
||||||
|
|
||||||
|
ngOnInit () {
|
||||||
|
this.user = this.authService.getUser()
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +1,11 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="content-padding">
|
<div class="sub-menu">
|
||||||
<h3>Account</h3>
|
<a routerLink="/account/settings" routerLinkActive="active" class="title-page">My account</a>
|
||||||
|
|
||||||
<div class="col-md-6 col-sm-12">
|
<a routerLink="/account/videos" routerLinkActive="active" class="title-page">My videos</a>
|
||||||
<div class="panel panel-default">
|
|
||||||
<div class="panel-heading">Change password</div>
|
|
||||||
|
|
||||||
<div class="panel-body">
|
|
||||||
<my-account-change-password></my-account-change-password>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-6 col-sm-12">
|
<div class="margin-content">
|
||||||
<div class="panel panel-default">
|
<router-outlet></router-outlet>
|
||||||
<div class="panel-heading">Update my informations</div>
|
|
||||||
|
|
||||||
<div class="panel-body">
|
|
||||||
<my-account-details [user]="user"></my-account-details>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
.panel {
|
|
||||||
margin-top: 40px;
|
|
||||||
}
|
|
|
@ -1,28 +1,8 @@
|
||||||
import { Component, OnInit } from '@angular/core'
|
import { Component } from '@angular/core'
|
||||||
import { FormBuilder, FormGroup } from '@angular/forms'
|
|
||||||
import { Router } from '@angular/router'
|
|
||||||
|
|
||||||
import { NotificationsService } from 'angular2-notifications'
|
|
||||||
|
|
||||||
import { AuthService } from '../core'
|
|
||||||
import {
|
|
||||||
FormReactive,
|
|
||||||
User,
|
|
||||||
UserService,
|
|
||||||
USER_PASSWORD
|
|
||||||
} from '../shared'
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-account',
|
selector: 'my-account',
|
||||||
templateUrl: './account.component.html',
|
templateUrl: './account.component.html',
|
||||||
styleUrls: [ './account.component.scss' ]
|
styleUrls: [ './account.component.scss' ]
|
||||||
})
|
})
|
||||||
export class AccountComponent implements OnInit {
|
export class AccountComponent {}
|
||||||
user: User = null
|
|
||||||
|
|
||||||
constructor (private authService: AuthService) {}
|
|
||||||
|
|
||||||
ngOnInit () {
|
|
||||||
this.user = this.authService.getUser()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import { NgModule } from '@angular/core'
|
import { NgModule } from '@angular/core'
|
||||||
|
|
||||||
import { AccountRoutingModule } from './account-routing.module'
|
|
||||||
import { AccountComponent } from './account.component'
|
|
||||||
import { AccountChangePasswordComponent } from './account-change-password'
|
|
||||||
import { AccountDetailsComponent } from './account-details'
|
|
||||||
import { AccountService } from './account.service'
|
|
||||||
import { SharedModule } from '../shared'
|
import { SharedModule } from '../shared'
|
||||||
|
import { AccountRoutingModule } from './account-routing.module'
|
||||||
|
import { AccountChangePasswordComponent } from './account-settings/account-change-password/account-change-password.component'
|
||||||
|
import { AccountDetailsComponent } from './account-settings/account-details/account-details.component'
|
||||||
|
import { AccountSettingsComponent } from './account-settings/account-settings.component'
|
||||||
|
import { AccountComponent } from './account.component'
|
||||||
|
import { AccountService } from './account.service'
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -15,6 +15,7 @@ import { SharedModule } from '../shared'
|
||||||
|
|
||||||
declarations: [
|
declarations: [
|
||||||
AccountComponent,
|
AccountComponent,
|
||||||
|
AccountSettingsComponent,
|
||||||
AccountChangePasswordComponent,
|
AccountChangePasswordComponent,
|
||||||
AccountDetailsComponent
|
AccountDetailsComponent
|
||||||
],
|
],
|
||||||
|
|
|
@ -2,14 +2,6 @@
|
||||||
min-height: calc(100vh - #{$header-height} - #{$footer-height} - #{$footer-margin});
|
min-height: calc(100vh - #{$header-height} - #{$footer-height} - #{$footer-margin});
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-col {
|
|
||||||
margin-left: $menu-width;
|
|
||||||
|
|
||||||
&.expanded {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sub-header-container {
|
.sub-header-container {
|
||||||
margin-top: $header-height;
|
margin-top: $header-height;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<menu>
|
<menu>
|
||||||
<div *ngIf="isLoggedIn" class="logged-in-block">
|
<div *ngIf="isLoggedIn" class="logged-in-block">
|
||||||
<div class="logged-in-info">
|
<div class="logged-in-info">
|
||||||
<div class="logged-in-username">{{ user.username }}</div>
|
<a routerLink="/account/settings" class="logged-in-username">{{ user.username }}</a>
|
||||||
<div class="logged-in-email">{{ user.email }}</div>
|
<div class="logged-in-email">{{ user.email }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,10 @@ menu {
|
||||||
.logged-in-username {
|
.logged-in-username {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: $font-semibold;
|
font-weight: $font-semibold;
|
||||||
|
color: $menu-color;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
@include disable-default-a-behaviour;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logged-in-email {
|
.logged-in-email {
|
||||||
|
@ -57,6 +61,12 @@ menu {
|
||||||
width: 190px;
|
width: 190px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
color: $menu-color;
|
||||||
|
display: block;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
@include disable-default-a-behaviour;
|
||||||
|
|
||||||
&.login-button {
|
&.login-button {
|
||||||
background-color: $orange-color;
|
background-color: $orange-color;
|
||||||
|
@ -82,6 +92,13 @@ menu {
|
||||||
|
|
||||||
a {
|
a {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
color: $menu-color;
|
||||||
|
cursor: pointer;
|
||||||
|
height: 22px;
|
||||||
|
line-height: 22px;
|
||||||
|
font-size: 16px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
@include disable-default-a-behaviour;
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
width: 22px;
|
width: 22px;
|
||||||
|
@ -113,16 +130,4 @@ menu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
|
||||||
color: $menu-color;
|
|
||||||
height: 22px;
|
|
||||||
line-height: 22px;
|
|
||||||
display: block;
|
|
||||||
font-size: 16px;
|
|
||||||
cursor: pointer;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
|
|
||||||
@include disable-default-a-behaviour;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
#search-video {
|
#search-video {
|
||||||
display: inline-block;
|
@include peertube-input-text($search-input-width);
|
||||||
height: $button-height;
|
|
||||||
width: $search-input-width;
|
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
padding-right: 25px; // For the search icon
|
padding-right: 25px; // For the search icon
|
||||||
background: #fff;
|
|
||||||
border: 1px solid #C6C6C6;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding-left: 15px;
|
|
||||||
|
|
||||||
&::placeholder {
|
&::placeholder {
|
||||||
color: #000;
|
color: #000;
|
||||||
|
@ -29,19 +23,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-button {
|
.upload-button {
|
||||||
display: inline-block;
|
@include peertube-button-link;
|
||||||
color: #fff;
|
|
||||||
font-weight: $font-semibold;
|
|
||||||
font-size: 15px;
|
|
||||||
height: $button-height;
|
|
||||||
line-height: $button-height;
|
|
||||||
border-radius: 3px;
|
|
||||||
text-align: center;
|
|
||||||
margin-right: 25px;
|
|
||||||
background-color: $orange-color;
|
|
||||||
padding: 0 17px 0 13px;
|
|
||||||
|
|
||||||
@include disable-default-a-behaviour;
|
margin-right: 25px;
|
||||||
|
|
||||||
.icon.icon-upload {
|
.icon.icon-upload {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
export * from './my-videos.component'
|
|
||||||
export * from './video-recently-added.component'
|
export * from './video-recently-added.component'
|
||||||
export * from './video-trending.component'
|
export * from './video-trending.component'
|
||||||
export * from './shared'
|
export * from './shared'
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
import { Component, OnDestroy, OnInit } from '@angular/core'
|
|
||||||
import { ActivatedRoute, Router } from '@angular/router'
|
|
||||||
|
|
||||||
import { NotificationsService } from 'angular2-notifications'
|
|
||||||
|
|
||||||
import { AbstractVideoList } from './shared'
|
|
||||||
import { VideoService } from '../shared'
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'my-videos',
|
|
||||||
styleUrls: [ './shared/abstract-video-list.scss' ],
|
|
||||||
templateUrl: './shared/abstract-video-list.html'
|
|
||||||
})
|
|
||||||
export class MyVideosComponent extends AbstractVideoList implements OnInit, OnDestroy {
|
|
||||||
|
|
||||||
constructor (
|
|
||||||
protected router: Router,
|
|
||||||
protected route: ActivatedRoute,
|
|
||||||
protected notificationsService: NotificationsService,
|
|
||||||
private videoService: VideoService
|
|
||||||
) {
|
|
||||||
super()
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit () {
|
|
||||||
super.ngOnInit()
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy () {
|
|
||||||
super.ngOnDestroy()
|
|
||||||
}
|
|
||||||
|
|
||||||
getVideosObservable () {
|
|
||||||
return this.videoService.getMyVideos(this.pagination, this.sort)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +1,19 @@
|
||||||
<div class="title-page">
|
<div class="margin-content">
|
||||||
|
<div class="title-page title-page-single">
|
||||||
{{ titlePage }}
|
{{ titlePage }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="videos-miniatures"
|
|
||||||
infiniteScroll
|
infiniteScroll
|
||||||
[infiniteScrollUpDistance]="1.5"
|
[infiniteScrollUpDistance]="1.5"
|
||||||
[infiniteScrollDistance]="0.5"
|
[infiniteScrollDistance]="0.5"
|
||||||
(scrolled)="onNearOfBottom()"
|
(scrolled)="onNearOfBottom()"
|
||||||
(scrolledUp)="onNearOfTop()"
|
(scrolledUp)="onNearOfTop()"
|
||||||
>
|
>
|
||||||
<my-video-miniature
|
<my-video-miniature
|
||||||
class="ng-animate"
|
class="ng-animate"
|
||||||
*ngFor="let video of videos" [video]="video" [user]="user" [currentSort]="sort"
|
*ngFor="let video of videos" [video]="video" [user]="user" [currentSort]="sort"
|
||||||
>
|
>
|
||||||
</my-video-miniature>
|
</my-video-miniature>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
.videos-info {
|
|
||||||
@media screen and (max-width: 400px) {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
border-bottom: 1px solid #f1f1f1;
|
|
||||||
height: 40px;
|
|
||||||
line-height: 40px;
|
|
||||||
|
|
||||||
.videos-total-results {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
my-loader {
|
|
||||||
display: inline-block;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pagination {
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
|
@ -36,8 +36,10 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy () {
|
ngOnDestroy () {
|
||||||
|
if (this.subActivatedRoute) {
|
||||||
this.subActivatedRoute.unsubscribe()
|
this.subActivatedRoute.unsubscribe()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onNearOfTop () {
|
onNearOfTop () {
|
||||||
if (this.pagination.currentPage > 1) {
|
if (this.pagination.currentPage > 1) {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { NgModule } from '@angular/core'
|
import { NgModule } from '@angular/core'
|
||||||
import { RouterModule, Routes } from '@angular/router'
|
import { RouterModule, Routes } from '@angular/router'
|
||||||
import { MetaGuard } from '@ngx-meta/core'
|
import { MetaGuard } from '@ngx-meta/core'
|
||||||
import { MyVideosComponent } from './video-list'
|
|
||||||
import { VideoRecentlyAddedComponent } from './video-list/video-recently-added.component'
|
import { VideoRecentlyAddedComponent } from './video-list/video-recently-added.component'
|
||||||
import { VideoTrendingComponent } from './video-list/video-trending.component'
|
import { VideoTrendingComponent } from './video-list/video-trending.component'
|
||||||
import { VideosComponent } from './videos.component'
|
import { VideosComponent } from './videos.component'
|
||||||
|
@ -17,15 +16,6 @@ const videosRoutes: Routes = [
|
||||||
pathMatch: 'full',
|
pathMatch: 'full',
|
||||||
redirectTo: 'recently-added'
|
redirectTo: 'recently-added'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: 'mine',
|
|
||||||
component: MyVideosComponent,
|
|
||||||
data: {
|
|
||||||
meta: {
|
|
||||||
title: 'My videos'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: 'trending',
|
path: 'trending',
|
||||||
component: VideoTrendingComponent,
|
component: VideoTrendingComponent,
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { NgModule } from '@angular/core'
|
||||||
import { InfiniteScrollModule } from 'ngx-infinite-scroll'
|
import { InfiniteScrollModule } from 'ngx-infinite-scroll'
|
||||||
import { SharedModule } from '../shared'
|
import { SharedModule } from '../shared'
|
||||||
import { VideoService } from './shared'
|
import { VideoService } from './shared'
|
||||||
import { MyVideosComponent, VideoMiniatureComponent } from './video-list'
|
import { VideoMiniatureComponent } from './video-list'
|
||||||
import { VideoRecentlyAddedComponent } from './video-list/video-recently-added.component'
|
import { VideoRecentlyAddedComponent } from './video-list/video-recently-added.component'
|
||||||
import { VideoTrendingComponent } from './video-list/video-trending.component'
|
import { VideoTrendingComponent } from './video-list/video-trending.component'
|
||||||
import { VideosRoutingModule } from './videos-routing.module'
|
import { VideosRoutingModule } from './videos-routing.module'
|
||||||
|
@ -20,7 +20,6 @@ import { VideosComponent } from './videos.component'
|
||||||
|
|
||||||
VideoTrendingComponent,
|
VideoTrendingComponent,
|
||||||
VideoRecentlyAddedComponent,
|
VideoRecentlyAddedComponent,
|
||||||
MyVideosComponent,
|
|
||||||
VideoMiniatureComponent
|
VideoMiniatureComponent
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
@ -4,3 +4,38 @@
|
||||||
outline: none !important;
|
outline: none !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@mixin peertube-input-text($width) {
|
||||||
|
display: inline-block;
|
||||||
|
height: $button-height;
|
||||||
|
width: $width;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #C6C6C6;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding-left: 15px;
|
||||||
|
|
||||||
|
&::placeholder {
|
||||||
|
color: #585858;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin peertube-button {
|
||||||
|
border: none;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: $font-semibold;
|
||||||
|
font-size: 15px;
|
||||||
|
height: $button-height;
|
||||||
|
line-height: $button-height;
|
||||||
|
border-radius: 3px;
|
||||||
|
text-align: center;
|
||||||
|
background-color: $orange-color;
|
||||||
|
padding: 0 17px 0 13px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin peertube-button-link {
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
@include peertube-button;
|
||||||
|
@include disable-default-a-behaviour;
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ $orange-color: #F1680D;
|
||||||
$black-background: #000;
|
$black-background: #000;
|
||||||
$grey-background: #f6f2f2;
|
$grey-background: #f6f2f2;
|
||||||
|
|
||||||
|
$expanded-horizontal-margins: 150px;
|
||||||
|
|
||||||
$button-height: 30px;
|
$button-height: 30px;
|
||||||
|
|
||||||
$header-height: 50px;
|
$header-height: 50px;
|
||||||
|
|
|
@ -33,15 +33,51 @@ input.readonly {
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-col {
|
.main-col {
|
||||||
padding: 30px;
|
margin-left: $menu-width;
|
||||||
|
|
||||||
.title-page {
|
.title-page {
|
||||||
|
color: #000;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: $font-bold;
|
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
margin-right: 55px;
|
||||||
|
font-weight: $font-semibold;
|
||||||
|
@include disable-default-a-behaviour;
|
||||||
|
|
||||||
|
&.active, &.title-page-single {
|
||||||
border-bottom: 2px solid $orange-color;
|
border-bottom: 2px solid $orange-color;
|
||||||
|
font-weight: $font-bold;
|
||||||
|
margin-top: 30px;
|
||||||
margin-bottom: 25px;
|
margin-bottom: 25px;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.margin-content {
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sub-menu {
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
width: 100%;
|
||||||
|
height: 81px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override some properties if the main content is expanded (no menu on the left)
|
||||||
|
&.expanded {
|
||||||
|
margin-left: 0;
|
||||||
|
|
||||||
|
.margin-content {
|
||||||
|
margin-left: $expanded-horizontal-margins;
|
||||||
|
margin-right: $expanded-horizontal-margins;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sub-menu {
|
||||||
|
padding-left: $expanded-horizontal-margins;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// On small screen, menu is absolute and displayed over the page
|
// On small screen, menu is absolute and displayed over the page
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
@import '_variables.scss';
|
@import '_variables.scss';
|
||||||
|
@import '_mixins.scss';
|
||||||
|
|
||||||
$bootstrap-sass-asset-helper: false !default;
|
$bootstrap-sass-asset-helper: false !default;
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue