1 <div class=
"video-edit" [formGroup]=
"form">
2 <div ngbNav #
nav=
"ngbNav" class=
"nav-tabs">
4 <ng-container ngbNavItem
>
5 <a ngbNavLink i18n
>Basic info
</a>
7 <ng-template ngbNavContent
>
10 <div class=
"form-group">
11 <label i18n
for=
"name">Title
</label>
12 <input type=
"text" id=
"name" class=
"form-control" formControlName=
"name" />
13 <div *
ngIf=
"formErrors.name" class=
"form-error">
18 <div class=
"form-group">
19 <label i18n
class=
"label-tags">Tags
</label>
22 <ng-template ptTemplate=
"customHtml">
24 Tags could be used to suggest relevant recommendations.
<br />
25 There is a maximum of
5 tags.
<br />
26 Press Enter to add a new tag.
32 [validators]=
"tagValidators" [errorMessages]=
"tagValidatorsMessages"
33 i18n-placeholder
placeholder=
"+ Tag" i18n-secondaryPlaceholder
secondaryPlaceholder=
"Enter a new tag"
34 formControlName=
"tags" [maxItems]=
"5" [modelAsStrings]=
"true"
38 <div class=
"form-group">
39 <label i18n
for=
"description">Description
</label>
41 <my-help helpType=
"markdownText">
42 <ng-template ptTemplate=
"preHtml">
44 Video descriptions are truncated by default and require manual action to expand them.
49 <my-markdown-textarea [truncate]=
"250" formControlName=
"description" [markdownVideo]=
"true"></my-markdown-textarea>
51 <div *
ngIf=
"formErrors.description" class=
"form-error">
52 {{ formErrors.description }}
57 <div class=
"col-md-4">
58 <div class=
"form-group">
59 <label i18n
>Channel
</label>
60 <div class=
"peertube-select-container">
61 <select formControlName=
"channelId" class=
"form-control">
62 <option *
ngFor=
"let channel of userVideoChannels" [value]=
"channel.id">{{ channel.label }}
</option>
67 <div class=
"form-group">
68 <label i18n
for=
"category">Category
</label>
69 <div class=
"peertube-select-container">
70 <select id=
"category" formControlName=
"category" class=
"form-control">
72 <option *
ngFor=
"let category of videoCategories" [value]=
"category.id">{{ category.label }}
</option>
76 <div *
ngIf=
"formErrors.category" class=
"form-error">
77 {{ formErrors.category }}
81 <div class=
"form-group">
82 <label i18n
for=
"licence">Licence
</label>
83 <div class=
"peertube-select-container">
84 <select id=
"licence" formControlName=
"licence" class=
"form-control">
86 <option *
ngFor=
"let licence of videoLicences" [value]=
"licence.id">{{ licence.label }}
</option>
90 <div *
ngIf=
"formErrors.licence" class=
"form-error">
91 {{ formErrors.licence }}
95 <div class=
"form-group">
96 <label i18n
for=
"language">Language
</label>
97 <div class=
"peertube-select-container">
98 <select id=
"language" formControlName=
"language" class=
"form-control">
100 <option *
ngFor=
"let language of videoLanguages" [value]=
"language.id">{{ language.label }}
</option>
104 <div *
ngIf=
"formErrors.language" class=
"form-error">
105 {{ formErrors.language }}
109 <div class=
"form-group">
110 <label i18n
for=
"privacy">Privacy
</label>
111 <div class=
"peertube-select-container">
112 <select id=
"privacy" formControlName=
"privacy" class=
"form-control">
114 <option *
ngFor=
"let privacy of videoPrivacies" [value]=
"privacy.id">{{ privacy.label }}
</option>
115 <option *
ngIf=
"schedulePublicationPossible" [value]=
"SPECIAL_SCHEDULED_PRIVACY">Scheduled
</option>
119 <div *
ngIf=
"formErrors.privacy" class=
"form-error">
120 {{ formErrors.privacy }}
124 <div *
ngIf=
"schedulePublicationEnabled" class=
"form-group">
125 <label i18n
for=
"schedulePublicationAt">Schedule publication ({{ calendarTimezone }})
</label>
127 id=
"schedulePublicationAt" formControlName=
"schedulePublicationAt" [dateFormat]=
"calendarDateFormat"
128 [locale]=
"calendarLocale" [minDate]=
"minScheduledDate" [showTime]=
"true" [hideOnDateTimeSelect]=
"true"
132 <div *
ngIf=
"formErrors.schedulePublicationAt" class=
"form-error">
133 {{ formErrors.schedulePublicationAt }}
137 <my-peertube-checkbox inputName=
"nsfw" formControlName=
"nsfw" helpPlacement=
"bottom-right">
138 <ng-template ptTemplate=
"label">
139 <ng-container i18n
>This video contains mature or explicit content
</ng-container>
142 <ng-template ptTemplate=
"help">
143 <ng-container i18n
>Some instances do not list videos containing mature or explicit content by default.
</ng-container>
145 </my-peertube-checkbox>
147 <my-peertube-checkbox *
ngIf=
"waitTranscodingEnabled" inputName=
"waitTranscoding" formControlName=
"waitTranscoding" helpPlacement=
"bottom-right">
148 <ng-template ptTemplate=
"label">
149 <ng-container i18n
>Wait transcoding before publishing the video
</ng-container>
152 <ng-template ptTemplate=
"help">
153 <ng-container i18n
>If you decide not to wait for transcoding before publishing the video, it could be unplayable until transcoding ends.
</ng-container>
155 </my-peertube-checkbox>
162 <ng-container ngbNavItem
>
163 <a ngbNavLink i18n
>Captions
</a>
165 <ng-template ngbNavContent
>
166 <div class=
"captions">
168 <div class=
"captions-header">
169 <a (click)=
"openAddCaptionModal()" class=
"create-caption">
170 <my-global-icon iconName=
"add"></my-global-icon>
171 <ng-container i18n
>Add another caption
</ng-container>
175 <div class=
"form-group" *
ngFor=
"let videoCaption of videoCaptions">
177 <div class=
"caption-entry">
178 <ng-container *
ngIf=
"!videoCaption.action">
180 i18n-title
title=
"See the subtitle file" class=
"caption-entry-label" target=
"_blank" rel=
"noopener noreferrer"
181 [href]=
"videoCaption.captionPath"
182 >{{ videoCaption.language.label }}
</a>
184 <div i18n
class=
"caption-entry-state">Already uploaded
✔</div>
186 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Delete
</span>
189 <ng-container *
ngIf=
"videoCaption.action === 'CREATE'">
190 <span class=
"caption-entry-label">{{ videoCaption.language.label }}
</span>
192 <div i18n
class=
"caption-entry-state caption-entry-state-create">Will be created on update
</div>
194 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Cancel create
</span>
197 <ng-container *
ngIf=
"videoCaption.action === 'REMOVE'">
198 <span class=
"caption-entry-label">{{ videoCaption.language.label }}
</span>
200 <div i18n
class=
"caption-entry-state caption-entry-state-delete">Will be deleted on update
</div>
202 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Cancel deletion
</span>
207 <div i18n
class=
"no-caption" *
ngIf=
"videoCaptions?.length === 0">
215 <ng-container ngbNavItem
>
216 <a ngbNavLink i18n
>Advanced settings
</a>
218 <ng-template ngbNavContent
>
219 <div class=
"row advanced-settings">
220 <div class=
"col-md-12 col-xl-8">
222 <div class=
"form-group">
223 <label i18n
for=
"previewfile">Video preview
</label>
226 i18n-inputLabel
inputLabel=
"Edit" inputName=
"previewfile" formControlName=
"previewfile"
227 previewWidth=
"360px" previewHeight=
"200px"
228 ></my-preview-upload>
231 <div class=
"form-group">
232 <label i18n
for=
"support">Support
</label>
233 <my-help helpType=
"markdownEnhanced" i18n-preHtml
preHtml=
"Short text to tell people how they can support you (membership platform...)."></my-help>
234 <my-markdown-textarea
235 id=
"support" formControlName=
"support" textareaWidth=
"500px" [previewColumn]=
"true" markdownType=
"enhanced"
236 [classes]=
"{ 'input-error': formErrors['support'] }"
237 ></my-markdown-textarea>
238 <div *
ngIf=
"formErrors.support" class=
"form-error">
239 {{ formErrors.support }}
244 <div class=
"col-md-12 col-xl-4">
245 <div class=
"form-group originally-published-at">
246 <label i18n
for=
"originallyPublishedAt">Original publication date
</label>
247 <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>
249 id=
"originallyPublishedAt" formControlName=
"originallyPublishedAt" [dateFormat]=
"calendarDateFormat"
250 [locale]=
"calendarLocale" [showTime]=
"true" [hideOnDateTimeSelect]=
"true" [monthNavigator]=
"true" [yearNavigator]=
"true" [yearRange]=
"myYearRange"
254 <div *
ngIf=
"formErrors.originallyPublishedAt" class=
"form-error">
255 {{ formErrors.originallyPublishedAt }}
259 <my-peertube-checkbox
260 inputName=
"commentsEnabled" formControlName=
"commentsEnabled"
261 i18n-labelText
labelText=
"Enable video comments"
262 ></my-peertube-checkbox>
264 <my-peertube-checkbox
265 inputName=
"downloadEnabled" formControlName=
"downloadEnabled"
266 i18n-labelText
labelText=
"Enable download"
267 ></my-peertube-checkbox>
275 <div [ngbNavOutlet]=
"nav"></div>
278 <my-video-caption-add-modal
279 #videoCaptionAddModal [existingCaptions]=
"existingCaptions" [serverConfig]=
"serverConfig" (captionAdded)=
"onCaptionAdded($event)"
280 ></my-video-caption-add-modal>