1 <div class=
"video-edit" [formGroup]=
"form">
2 <ngb-tabset class=
"root-tabset bootstrap">
4 <ngb-tab i18n-title
title=
"Basic info">
5 <ng-template ngbTabContent
>
8 <div class=
"form-group">
9 <label i18n
for=
"name">Title
</label>
10 <input type=
"text" id=
"name" formControlName=
"name" />
11 <div *
ngIf=
"formErrors.name" class=
"form-error">
16 <div class=
"form-group">
17 <label i18n
class=
"label-tags">Tags
</label>
20 <ng-template ptTemplate=
"customHtml">
22 Tags could be used to suggest relevant recommendations.
<br />
23 Press Enter to add a new tag.
29 [validators]=
"tagValidators" [errorMessages]=
"tagValidatorsMessages"
30 i18n-placeholder
placeholder=
"+ Tag" i18n-secondaryPlaceholder
secondaryPlaceholder=
"Enter a new tag"
31 formControlName=
"tags" maxItems=
"5" modelAsStrings=
"true"
35 <div class=
"form-group">
36 <label i18n
for=
"description">Description
</label>
38 <my-help helpType=
"markdownText">
39 <ng-template ptTemplate=
"preHtml">
41 Video descriptions are truncated by default and require manual action to expand them.
46 <my-markdown-textarea truncate=
"250" formControlName=
"description"></my-markdown-textarea>
48 <div *
ngIf=
"formErrors.description" class=
"form-error">
49 {{ formErrors.description }}
54 <div class=
"col-md-4">
55 <div class=
"form-group">
56 <label i18n
>Channel
</label>
57 <div class=
"peertube-select-container">
58 <select formControlName=
"channelId">
59 <option *
ngFor=
"let channel of userVideoChannels" [value]=
"channel.id">{{ channel.label }}
</option>
64 <div class=
"form-group">
65 <label i18n
for=
"category">Category
</label>
66 <div class=
"peertube-select-container">
67 <select id=
"category" formControlName=
"category">
69 <option *
ngFor=
"let category of videoCategories" [value]=
"category.id">{{ category.label }}
</option>
73 <div *
ngIf=
"formErrors.category" class=
"form-error">
74 {{ formErrors.category }}
78 <div class=
"form-group">
79 <label i18n
for=
"licence">Licence
</label>
80 <div class=
"peertube-select-container">
81 <select id=
"licence" formControlName=
"licence">
83 <option *
ngFor=
"let licence of videoLicences" [value]=
"licence.id">{{ licence.label }}
</option>
87 <div *
ngIf=
"formErrors.licence" class=
"form-error">
88 {{ formErrors.licence }}
92 <div class=
"form-group">
93 <label i18n
for=
"language">Language
</label>
94 <div class=
"peertube-select-container">
95 <select id=
"language" formControlName=
"language">
97 <option *
ngFor=
"let language of videoLanguages" [value]=
"language.id">{{ language.label }}
</option>
101 <div *
ngIf=
"formErrors.language" class=
"form-error">
102 {{ formErrors.language }}
106 <div class=
"form-group">
107 <label i18n
for=
"privacy">Privacy
</label>
108 <div class=
"peertube-select-container">
109 <select id=
"privacy" formControlName=
"privacy">
111 <option *
ngFor=
"let privacy of videoPrivacies" [value]=
"privacy.id">{{ privacy.label }}
</option>
112 <option *
ngIf=
"schedulePublicationPossible" [value]=
"SPECIAL_SCHEDULED_PRIVACY">Scheduled
</option>
116 <div *
ngIf=
"formErrors.privacy" class=
"form-error">
117 {{ formErrors.privacy }}
121 <div *
ngIf=
"schedulePublicationEnabled" class=
"form-group">
122 <label i18n
for=
"schedulePublicationAt">Schedule publication ({{ calendarTimezone }})
</label>
124 id=
"schedulePublicationAt" formControlName=
"schedulePublicationAt" [dateFormat]=
"calendarDateFormat"
125 [locale]=
"calendarLocale" [minDate]=
"minScheduledDate" [showTime]=
"true" [hideOnDateTimeSelect]=
"true"
129 <div *
ngIf=
"formErrors.schedulePublicationAt" class=
"form-error">
130 {{ formErrors.schedulePublicationAt }}
134 <my-peertube-checkbox inputName=
"nsfw" formControlName=
"nsfw" helpPlacement=
"bottom-right">
135 <ng-template ptTemplate=
"label">
136 <ng-container i18n
>This video contains mature or explicit content
</ng-container>
139 <ng-template ptTemplate=
"help">
140 <ng-container i18n
>Some instances do not list videos containing mature or explicit content by default.
</ng-container>
142 </my-peertube-checkbox>
144 <my-peertube-checkbox *
ngIf=
"waitTranscodingEnabled" inputName=
"waitTranscoding" formControlName=
"waitTranscoding" helpPlacement=
"bottom-right">
145 <ng-template ptTemplate=
"label">
146 <ng-container i18n
>Wait transcoding before publishing the video
</ng-container>
149 <ng-template ptTemplate=
"help">
150 <ng-container i18n
>If you decide not to wait for transcoding before publishing the video, it could be unplayable until transcoding ends.
</ng-container>
152 </my-peertube-checkbox>
159 <ngb-tab i18n-title
title=
"Captions">
160 <ng-template ngbTabContent
>
161 <div class=
"captions">
163 <div class=
"captions-header">
164 <a (click)=
"openAddCaptionModal()" class=
"create-caption">
165 <my-global-icon iconName=
"add"></my-global-icon>
166 <ng-container i18n
>Add another caption
</ng-container>
170 <div class=
"form-group" *
ngFor=
"let videoCaption of videoCaptions">
172 <div class=
"caption-entry">
173 <ng-container *
ngIf=
"!videoCaption.action">
175 i18n-title
title=
"See the subtitle file" class=
"caption-entry-label" target=
"_blank" rel=
"noopener noreferrer"
176 [href]=
"videoCaption.captionPath"
177 >{{ videoCaption.language.label }}
</a>
179 <div i18n
class=
"caption-entry-state">Already uploaded
✔</div>
181 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Delete
</span>
184 <ng-container *
ngIf=
"videoCaption.action === 'CREATE'">
185 <span class=
"caption-entry-label">{{ videoCaption.language.label }}
</span>
187 <div i18n
class=
"caption-entry-state caption-entry-state-create">Will be created on update
</div>
189 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Cancel create
</span>
192 <ng-container *
ngIf=
"videoCaption.action === 'REMOVE'">
193 <span class=
"caption-entry-label">{{ videoCaption.language.label }}
</span>
195 <div i18n
class=
"caption-entry-state caption-entry-state-delete">Will be deleted on update
</div>
197 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Cancel deletion
</span>
202 <div i18n
class=
"no-caption" *
ngIf=
"videoCaptions?.length === 0">
210 <ngb-tab i18n-title
title=
"Advanced settings">
211 <ng-template ngbTabContent
>
212 <div class=
"row advanced-settings">
213 <div class=
"col-md-12 col-xl-8">
215 <div class=
"form-group">
216 <label i18n
for=
"previewfile">Video preview
</label>
219 i18n-inputLabel
inputLabel=
"Edit" inputName=
"previewfile" formControlName=
"previewfile"
220 previewWidth=
"360px" previewHeight=
"200px"
221 ></my-preview-upload>
224 <div class=
"form-group">
225 <label i18n
for=
"support">Support
</label>
226 <my-help helpType=
"markdownEnhanced" i18n-preHtml
preHtml=
"Short text to tell people how they can support you (membership platform...)."></my-help>
227 <my-markdown-textarea
228 id=
"support" formControlName=
"support" textareaWidth=
"500px" [previewColumn]=
"true" markdownType=
"enhanced"
229 [classes]=
"{ 'input-error': formErrors['support'] }"
230 ></my-markdown-textarea>
231 <div *
ngIf=
"formErrors.support" class=
"form-error">
232 {{ formErrors.support }}
237 <div class=
"col-md-12 col-xl-4">
238 <div class=
"form-group originally-published-at">
239 <label i18n
for=
"originallyPublishedAt">Original publication date
</label>
240 <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>
242 id=
"originallyPublishedAt" formControlName=
"originallyPublishedAt" [dateFormat]=
"calendarDateFormat"
243 [locale]=
"calendarLocale" [showTime]=
"true" [hideOnDateTimeSelect]=
"true" [monthNavigator]=
"true" [yearNavigator]=
"true" [yearRange]=
"myYearRange"
247 <div *
ngIf=
"formErrors.originallyPublishedAt" class=
"form-error">
248 {{ formErrors.originallyPublishedAt }}
252 <my-peertube-checkbox
253 inputName=
"commentsEnabled" formControlName=
"commentsEnabled"
254 i18n-labelText
labelText=
"Enable video comments"
255 ></my-peertube-checkbox>
257 <my-peertube-checkbox
258 inputName=
"downloadEnabled" formControlName=
"downloadEnabled"
259 i18n-labelText
labelText=
"Enable download"
260 ></my-peertube-checkbox>
270 <my-video-caption-add-modal
271 #videoCaptionAddModal [existingCaptions]=
"existingCaptions" (captionAdded)=
"onCaptionAdded($event)"
272 ></my-video-caption-add-modal>