diff options
Diffstat (limited to 'client')
9 files changed, 49 insertions, 6 deletions
diff --git a/client/src/app/shared/forms/form-validators/video-validators.service.ts b/client/src/app/shared/forms/form-validators/video-validators.service.ts index 81ed0666f..e3f7a0969 100644 --- a/client/src/app/shared/forms/form-validators/video-validators.service.ts +++ b/client/src/app/shared/forms/form-validators/video-validators.service.ts | |||
@@ -16,6 +16,7 @@ export class VideoValidatorsService { | |||
16 | readonly VIDEO_TAGS: BuildFormValidator | 16 | readonly VIDEO_TAGS: BuildFormValidator |
17 | readonly VIDEO_SUPPORT: BuildFormValidator | 17 | readonly VIDEO_SUPPORT: BuildFormValidator |
18 | readonly VIDEO_SCHEDULE_PUBLICATION_AT: BuildFormValidator | 18 | readonly VIDEO_SCHEDULE_PUBLICATION_AT: BuildFormValidator |
19 | readonly VIDEO_ORIGINALLY_PUBLISHED_AT: BuildFormValidator | ||
19 | 20 | ||
20 | constructor (private i18n: I18n) { | 21 | constructor (private i18n: I18n) { |
21 | 22 | ||
@@ -92,5 +93,10 @@ export class VideoValidatorsService { | |||
92 | 'required': this.i18n('A date is required to schedule video update.') | 93 | 'required': this.i18n('A date is required to schedule video update.') |
93 | } | 94 | } |
94 | } | 95 | } |
96 | |||
97 | this.VIDEO_ORIGINALLY_PUBLISHED_AT = { | ||
98 | VALIDATORS: [ ], | ||
99 | MESSAGES: {} | ||
100 | } | ||
95 | } | 101 | } |
96 | } | 102 | } |
diff --git a/client/src/app/shared/video-import/video-import.service.ts b/client/src/app/shared/video-import/video-import.service.ts index 2163eb905..7ae13154d 100644 --- a/client/src/app/shared/video-import/video-import.service.ts +++ b/client/src/app/shared/video-import/video-import.service.ts | |||
@@ -67,6 +67,7 @@ export class VideoImportService { | |||
67 | const description = video.description || null | 67 | const description = video.description || null |
68 | const support = video.support || null | 68 | const support = video.support || null |
69 | const scheduleUpdate = video.scheduleUpdate || null | 69 | const scheduleUpdate = video.scheduleUpdate || null |
70 | const originallyPublishedAt = video.originallyPublishedAt || null | ||
70 | 71 | ||
71 | return { | 72 | return { |
72 | name: video.name, | 73 | name: video.name, |
@@ -84,7 +85,8 @@ export class VideoImportService { | |||
84 | downloadEnabled: video.downloadEnabled, | 85 | downloadEnabled: video.downloadEnabled, |
85 | thumbnailfile: video.thumbnailfile, | 86 | thumbnailfile: video.thumbnailfile, |
86 | previewfile: video.previewfile, | 87 | previewfile: video.previewfile, |
87 | scheduleUpdate | 88 | scheduleUpdate, |
89 | originallyPublishedAt | ||
88 | } | 90 | } |
89 | } | 91 | } |
90 | 92 | ||
diff --git a/client/src/app/shared/video/video-edit.model.ts b/client/src/app/shared/video/video-edit.model.ts index 18c62a1f9..c5d5bb406 100644 --- a/client/src/app/shared/video/video-edit.model.ts +++ b/client/src/app/shared/video/video-edit.model.ts | |||
@@ -26,6 +26,7 @@ export class VideoEdit implements VideoUpdate { | |||
26 | uuid?: string | 26 | uuid?: string |
27 | id?: number | 27 | id?: number |
28 | scheduleUpdate?: VideoScheduleUpdate | 28 | scheduleUpdate?: VideoScheduleUpdate |
29 | originallyPublishedAt?: Date | string | ||
29 | 30 | ||
30 | constructor ( | 31 | constructor ( |
31 | video?: Video & { | 32 | video?: Video & { |
@@ -56,6 +57,7 @@ export class VideoEdit implements VideoUpdate { | |||
56 | this.previewUrl = video.previewUrl | 57 | this.previewUrl = video.previewUrl |
57 | 58 | ||
58 | this.scheduleUpdate = video.scheduledUpdate | 59 | this.scheduleUpdate = video.scheduledUpdate |
60 | this.originallyPublishedAt = new Date(video.originallyPublishedAt) | ||
59 | } | 61 | } |
60 | } | 62 | } |
61 | 63 | ||
@@ -77,6 +79,12 @@ export class VideoEdit implements VideoUpdate { | |||
77 | } else { | 79 | } else { |
78 | this.scheduleUpdate = null | 80 | this.scheduleUpdate = null |
79 | } | 81 | } |
82 | |||
83 | // Convert originallyPublishedAt to string so that function objectToFormData() works correctly | ||
84 | if (this.originallyPublishedAt) { | ||
85 | const originallyPublishedAt = new Date(values['originallyPublishedAt']) | ||
86 | this.originallyPublishedAt = originallyPublishedAt.toISOString() | ||
87 | } | ||
80 | } | 88 | } |
81 | 89 | ||
82 | toFormPatch () { | 90 | toFormPatch () { |
@@ -93,7 +101,8 @@ export class VideoEdit implements VideoUpdate { | |||
93 | downloadEnabled: this.downloadEnabled, | 101 | downloadEnabled: this.downloadEnabled, |
94 | waitTranscoding: this.waitTranscoding, | 102 | waitTranscoding: this.waitTranscoding, |
95 | channelId: this.channelId, | 103 | channelId: this.channelId, |
96 | privacy: this.privacy | 104 | privacy: this.privacy, |
105 | originallyPublishedAt: this.originallyPublishedAt | ||
97 | } | 106 | } |
98 | 107 | ||
99 | // Special case if we scheduled an update | 108 | // Special case if we scheduled an update |
diff --git a/client/src/app/shared/video/video.model.ts b/client/src/app/shared/video/video.model.ts index 6ea83d13b..460c09258 100644 --- a/client/src/app/shared/video/video.model.ts +++ b/client/src/app/shared/video/video.model.ts | |||
@@ -17,6 +17,7 @@ export class Video implements VideoServerModel { | |||
17 | createdAt: Date | 17 | createdAt: Date |
18 | updatedAt: Date | 18 | updatedAt: Date |
19 | publishedAt: Date | 19 | publishedAt: Date |
20 | originallyPublishedAt: Date | string | ||
20 | category: VideoConstant<number> | 21 | category: VideoConstant<number> |
21 | licence: VideoConstant<number> | 22 | licence: VideoConstant<number> |
22 | language: VideoConstant<string> | 23 | language: VideoConstant<string> |
@@ -116,6 +117,9 @@ export class Video implements VideoServerModel { | |||
116 | this.privacy.label = peertubeTranslate(this.privacy.label, translations) | 117 | this.privacy.label = peertubeTranslate(this.privacy.label, translations) |
117 | 118 | ||
118 | this.scheduledUpdate = hash.scheduledUpdate | 119 | this.scheduledUpdate = hash.scheduledUpdate |
120 | this.originallyPublishedAt = hash.originallyPublishedAt ? | ||
121 | new Date(hash.originallyPublishedAt.toString()) | ||
122 | : null | ||
119 | if (this.state) this.state.label = peertubeTranslate(this.state.label, translations) | 123 | if (this.state) this.state.label = peertubeTranslate(this.state.label, translations) |
120 | 124 | ||
121 | this.blacklisted = hash.blacklisted | 125 | this.blacklisted = hash.blacklisted |
diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index 565aad93b..960846e21 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts | |||
@@ -81,6 +81,7 @@ export class VideoService implements VideosProvider { | |||
81 | const description = video.description || null | 81 | const description = video.description || null |
82 | const support = video.support || null | 82 | const support = video.support || null |
83 | const scheduleUpdate = video.scheduleUpdate || null | 83 | const scheduleUpdate = video.scheduleUpdate || null |
84 | const originallyPublishedAt = video.originallyPublishedAt || null | ||
84 | 85 | ||
85 | const body: VideoUpdate = { | 86 | const body: VideoUpdate = { |
86 | name: video.name, | 87 | name: video.name, |
@@ -98,7 +99,8 @@ export class VideoService implements VideosProvider { | |||
98 | downloadEnabled: video.downloadEnabled, | 99 | downloadEnabled: video.downloadEnabled, |
99 | thumbnailfile: video.thumbnailfile, | 100 | thumbnailfile: video.thumbnailfile, |
100 | previewfile: video.previewfile, | 101 | previewfile: video.previewfile, |
101 | scheduleUpdate | 102 | scheduleUpdate, |
103 | originallyPublishedAt | ||
102 | } | 104 | } |
103 | 105 | ||
104 | const data = objectToFormData(body) | 106 | const data = objectToFormData(body) |
diff --git a/client/src/app/videos/+video-edit/shared/video-edit.component.html b/client/src/app/videos/+video-edit/shared/video-edit.component.html index 59ba15b53..2fb540170 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.component.html +++ b/client/src/app/videos/+video-edit/shared/video-edit.component.html | |||
@@ -114,6 +114,20 @@ | |||
114 | </div> | 114 | </div> |
115 | </div> | 115 | </div> |
116 | 116 | ||
117 | <div class="form-group"> | ||
118 | <label i18n for="originallyPublishedAt">Original publication date</label> | ||
119 | <my-help i18n-preHtml preHtml="This is the date when the content was originally published (e.g. the release date for a film)"></my-help> | ||
120 | <p-calendar | ||
121 | id="originallyPublishedAt" formControlName="originallyPublishedAt" [dateFormat]="calendarDateFormat" | ||
122 | [locale]="calendarLocale" [showTime]="true" [hideOnDateTimeSelect]="true" [monthNavigator]="true" [yearNavigator]="true" [yearRange]="myYearRange" | ||
123 | > | ||
124 | </p-calendar> | ||
125 | |||
126 | <div *ngIf="formErrors.originallyPublishedAt" class="form-error"> | ||
127 | {{ formErrors.originallyPublishedAt }} | ||
128 | </div> | ||
129 | </div> | ||
130 | |||
117 | <my-peertube-checkbox | 131 | <my-peertube-checkbox |
118 | inputName="nsfw" formControlName="nsfw" | 132 | inputName="nsfw" formControlName="nsfw" |
119 | i18n-labelText labelText="This video contains mature or explicit content" | 133 | i18n-labelText labelText="This video contains mature or explicit content" |
diff --git a/client/src/app/videos/+video-edit/shared/video-edit.component.ts b/client/src/app/videos/+video-edit/shared/video-edit.component.ts index 3ed7a4a10..836452948 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.component.ts +++ b/client/src/app/videos/+video-edit/shared/video-edit.component.ts | |||
@@ -45,6 +45,7 @@ export class VideoEditComponent implements OnInit, OnDestroy { | |||
45 | 45 | ||
46 | calendarLocale: any = {} | 46 | calendarLocale: any = {} |
47 | minScheduledDate = new Date() | 47 | minScheduledDate = new Date() |
48 | myYearRange = '1880:' + (new Date()).getFullYear() | ||
48 | 49 | ||
49 | calendarTimezone: string | 50 | calendarTimezone: string |
50 | calendarDateFormat: string | 51 | calendarDateFormat: string |
@@ -101,7 +102,8 @@ export class VideoEditComponent implements OnInit, OnDestroy { | |||
101 | thumbnailfile: null, | 102 | thumbnailfile: null, |
102 | previewfile: null, | 103 | previewfile: null, |
103 | support: this.videoValidatorsService.VIDEO_SUPPORT, | 104 | support: this.videoValidatorsService.VIDEO_SUPPORT, |
104 | schedulePublicationAt: this.videoValidatorsService.VIDEO_SCHEDULE_PUBLICATION_AT | 105 | schedulePublicationAt: this.videoValidatorsService.VIDEO_SCHEDULE_PUBLICATION_AT, |
106 | originallyPublishedAt: this.videoValidatorsService.VIDEO_ORIGINALLY_PUBLISHED_AT | ||
105 | } | 107 | } |
106 | 108 | ||
107 | this.formValidatorService.updateForm( | 109 | this.formValidatorService.updateForm( |
diff --git a/client/src/app/videos/+video-watch/video-watch.component.html b/client/src/app/videos/+video-watch/video-watch.component.html index 1875230d8..6e18ab6a6 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.html +++ b/client/src/app/videos/+video-watch/video-watch.component.html | |||
@@ -33,7 +33,6 @@ | |||
33 | <div> | 33 | <div> |
34 | <div class="d-block d-sm-none"> <!-- only shown on small devices, has its conterpart for larger viewports below --> | 34 | <div class="d-block d-sm-none"> <!-- only shown on small devices, has its conterpart for larger viewports below --> |
35 | <h1 class="video-info-name">{{ video.name }}</h1> | 35 | <h1 class="video-info-name">{{ video.name }}</h1> |
36 | |||
37 | <div i18n class="video-info-date-views"> | 36 | <div i18n class="video-info-date-views"> |
38 | Published {{ video.publishedAt | myFromNow }} - {{ video.views | myNumberFormatter }} views | 37 | Published {{ video.publishedAt | myFromNow }} - {{ video.views | myNumberFormatter }} views |
39 | </div> | 38 | </div> |
@@ -162,6 +161,11 @@ | |||
162 | <span class="video-attribute-value">{{ video.privacy.label }}</span> | 161 | <span class="video-attribute-value">{{ video.privacy.label }}</span> |
163 | </div> | 162 | </div> |
164 | 163 | ||
164 | <div *ngIf="!!video.originallyPublishedAt" class="video-attribute"> | ||
165 | <span i18n class="video-attribute-label">Originally published</span> | ||
166 | <span class="video-attribute-value">{{ video.originallyPublishedAt | date: 'dd MMMM yyyy' }}</span> | ||
167 | </div> | ||
168 | |||
165 | <div class="video-attribute"> | 169 | <div class="video-attribute"> |
166 | <span i18n class="video-attribute-label">Category</span> | 170 | <span i18n class="video-attribute-label">Category</span> |
167 | <span *ngIf="!video.category.id" class="video-attribute-value">{{ video.category.label }}</span> | 171 | <span *ngIf="!video.category.id" class="video-attribute-value">{{ video.category.label }}</span> |
diff --git a/client/src/app/videos/+video-watch/video-watch.component.scss b/client/src/app/videos/+video-watch/video-watch.component.scss index b03ed197d..cfe3533b6 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.scss +++ b/client/src/app/videos/+video-watch/video-watch.component.scss | |||
@@ -286,7 +286,7 @@ $other-videos-width: 260px; | |||
286 | margin-bottom: 12px; | 286 | margin-bottom: 12px; |
287 | 287 | ||
288 | .video-attribute-label { | 288 | .video-attribute-label { |
289 | min-width: 91px; | 289 | min-width: 142px; |
290 | padding-right: 5px; | 290 | padding-right: 5px; |
291 | display: inline-block; | 291 | display: inline-block; |
292 | color: $grey-foreground-color; | 292 | color: $grey-foreground-color; |