diff options
author | Chocobozzz <florian.bigard@gmail.com> | 2017-12-08 08:39:15 +0100 |
---|---|---|
committer | Chocobozzz <florian.bigard@gmail.com> | 2017-12-08 09:57:29 +0100 |
commit | cadb46d832724ea1a17b085b992142aa32e212be (patch) | |
tree | df1972470ab022e95ff5dc7866c78174c36bfa37 /client/src/app/videos/+video-edit/shared | |
parent | c182778e26b8478fae9d7dd0bf0687baf7b72fd1 (diff) | |
download | PeerTube-cadb46d832724ea1a17b085b992142aa32e212be.tar.gz PeerTube-cadb46d832724ea1a17b085b992142aa32e212be.tar.zst PeerTube-cadb46d832724ea1a17b085b992142aa32e212be.zip |
Design second video upload step
Diffstat (limited to 'client/src/app/videos/+video-edit/shared')
5 files changed, 127 insertions, 1 deletions
diff --git a/client/src/app/videos/+video-edit/shared/video-description.component.html b/client/src/app/videos/+video-edit/shared/video-description.component.html new file mode 100644 index 000000000..da66a9753 --- /dev/null +++ b/client/src/app/videos/+video-edit/shared/video-description.component.html | |||
@@ -0,0 +1,9 @@ | |||
1 | <textarea | ||
2 | [(ngModel)]="description" (ngModelChange)="onModelChange()" | ||
3 | id="description" placeholder="My super video"> | ||
4 | </textarea> | ||
5 | |||
6 | <tabset #staticTabs class="previews"> | ||
7 | <tab heading="Truncated description preview" [innerHTML]="truncatedDescriptionHTML"></tab> | ||
8 | <tab heading="Complete description preview" [innerHTML]="descriptionHTML"></tab> | ||
9 | </tabset> | ||
diff --git a/client/src/app/videos/+video-edit/shared/video-description.component.scss b/client/src/app/videos/+video-edit/shared/video-description.component.scss new file mode 100644 index 000000000..38506bb46 --- /dev/null +++ b/client/src/app/videos/+video-edit/shared/video-description.component.scss | |||
@@ -0,0 +1,41 @@ | |||
1 | textarea { | ||
2 | @include peertube-input-text(100%); | ||
3 | |||
4 | padding: 5px 15px; | ||
5 | font-size: 15px; | ||
6 | height: 150px; | ||
7 | } | ||
8 | |||
9 | .previews /deep/ { | ||
10 | font-size: 15px !important; | ||
11 | |||
12 | .nav { | ||
13 | margin-top: 10px; | ||
14 | font-size: 16px !important; | ||
15 | border: none !important; | ||
16 | |||
17 | .nav-item .nav-link { | ||
18 | color: #000 !important; | ||
19 | height: 30px !important; | ||
20 | margin-right: 30px; | ||
21 | padding: 0 15px; | ||
22 | display: flex; | ||
23 | align-items: center; | ||
24 | border-radius: 3px; | ||
25 | border: none !important; | ||
26 | |||
27 | &.active, &:hover { | ||
28 | background-color: #F0F0F0; | ||
29 | } | ||
30 | |||
31 | &.active { | ||
32 | font-weight: $font-semibold !important; | ||
33 | } | ||
34 | } | ||
35 | } | ||
36 | |||
37 | .tab-content { | ||
38 | min-height: 75px; | ||
39 | padding: 15px; | ||
40 | } | ||
41 | } | ||
diff --git a/client/src/app/videos/+video-edit/shared/video-description.component.ts b/client/src/app/videos/+video-edit/shared/video-description.component.ts new file mode 100644 index 000000000..8dfb74b2a --- /dev/null +++ b/client/src/app/videos/+video-edit/shared/video-description.component.ts | |||
@@ -0,0 +1,66 @@ | |||
1 | import { Component, forwardRef, Input, OnInit } from '@angular/core' | ||
2 | import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' | ||
3 | import { truncate } from 'lodash' | ||
4 | import 'rxjs/add/operator/debounceTime' | ||
5 | import 'rxjs/add/operator/distinctUntilChanged' | ||
6 | import { Subject } from 'rxjs/Subject' | ||
7 | import { MarkdownService } from '../../shared' | ||
8 | |||
9 | @Component({ | ||
10 | selector: 'my-video-description', | ||
11 | templateUrl: './video-description.component.html', | ||
12 | styleUrls: [ './video-description.component.scss' ], | ||
13 | providers: [ | ||
14 | { | ||
15 | provide: NG_VALUE_ACCESSOR, | ||
16 | useExisting: forwardRef(() => VideoDescriptionComponent), | ||
17 | multi: true | ||
18 | } | ||
19 | ] | ||
20 | }) | ||
21 | |||
22 | export class VideoDescriptionComponent implements ControlValueAccessor, OnInit { | ||
23 | @Input() description = '' | ||
24 | truncatedDescriptionHTML = '' | ||
25 | descriptionHTML = '' | ||
26 | |||
27 | private descriptionChanged = new Subject<string>() | ||
28 | |||
29 | constructor (private markdownService: MarkdownService) {} | ||
30 | |||
31 | ngOnInit () { | ||
32 | this.descriptionChanged | ||
33 | .debounceTime(150) | ||
34 | .distinctUntilChanged() | ||
35 | .subscribe(() => this.updateDescriptionPreviews()) | ||
36 | |||
37 | this.descriptionChanged.next(this.description) | ||
38 | } | ||
39 | |||
40 | propagateChange = (_: any) => { /* empty */ } | ||
41 | |||
42 | writeValue (description: string) { | ||
43 | this.description = description | ||
44 | |||
45 | this.descriptionChanged.next(this.description) | ||
46 | } | ||
47 | |||
48 | registerOnChange (fn: (_: any) => void) { | ||
49 | this.propagateChange = fn | ||
50 | } | ||
51 | |||
52 | registerOnTouched () { | ||
53 | // Unused | ||
54 | } | ||
55 | |||
56 | onModelChange () { | ||
57 | this.propagateChange(this.description) | ||
58 | |||
59 | this.descriptionChanged.next(this.description) | ||
60 | } | ||
61 | |||
62 | private updateDescriptionPreviews () { | ||
63 | this.truncatedDescriptionHTML = this.markdownService.markdownToHTML(truncate(this.description, { length: 250 })) | ||
64 | this.descriptionHTML = this.markdownService.markdownToHTML(this.description) | ||
65 | } | ||
66 | } | ||
diff --git a/client/src/app/videos/+video-edit/shared/video-edit.component.scss b/client/src/app/videos/+video-edit/shared/video-edit.component.scss index 2d0bfc36e..d363499ce 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.component.scss +++ b/client/src/app/videos/+video-edit/shared/video-edit.component.scss | |||
@@ -43,6 +43,14 @@ | |||
43 | position: relative; | 43 | position: relative; |
44 | bottom: $button-height; | 44 | bottom: $button-height; |
45 | 45 | ||
46 | .message-submit { | ||
47 | display: inline-block; | ||
48 | margin-right: 25px; | ||
49 | |||
50 | color: #585858; | ||
51 | font-size: 15px; | ||
52 | } | ||
53 | |||
46 | .submit-button { | 54 | .submit-button { |
47 | @include peertube-button; | 55 | @include peertube-button; |
48 | @include orange-button; | 56 | @include orange-button; |
@@ -54,6 +62,7 @@ | |||
54 | background-color: inherit; | 62 | background-color: inherit; |
55 | border: none; | 63 | border: none; |
56 | padding: 0; | 64 | padding: 0; |
65 | outline: 0; | ||
57 | } | 66 | } |
58 | 67 | ||
59 | .icon.icon-validate { | 68 | .icon.icon-validate { |
diff --git a/client/src/app/videos/+video-edit/shared/video-edit.module.ts b/client/src/app/videos/+video-edit/shared/video-edit.module.ts index c7ed8c351..ce106d82f 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.module.ts +++ b/client/src/app/videos/+video-edit/shared/video-edit.module.ts | |||
@@ -3,8 +3,9 @@ import { NgModule } from '@angular/core' | |||
3 | import { TagInputModule } from 'ngx-chips' | 3 | import { TagInputModule } from 'ngx-chips' |
4 | import { TabsModule } from 'ngx-bootstrap/tabs' | 4 | import { TabsModule } from 'ngx-bootstrap/tabs' |
5 | 5 | ||
6 | import { MarkdownService, VideoDescriptionComponent } from '../../shared' | 6 | import { MarkdownService } from '../../shared' |
7 | import { SharedModule } from '../../../shared' | 7 | import { SharedModule } from '../../../shared' |
8 | import { VideoDescriptionComponent } from './video-description.component' | ||
8 | import { VideoEditComponent } from './video-edit.component' | 9 | import { VideoEditComponent } from './video-edit.component' |
9 | 10 | ||
10 | @NgModule({ | 11 | @NgModule({ |