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>
18 <my-help i18n-preHtml
preHtml=
"Tags could be used to suggest relevant recommendations.</br>Press Enter to add a new tag."></my-help>
20 [validators]=
"tagValidators" [errorMessages]=
"tagValidatorsMessages"
21 formControlName=
"tags" maxItems=
"5" modelAsStrings=
"true"
25 <div class=
"form-group">
26 <label i18n
for=
"description">Description
</label>
27 <my-help helpType=
"markdownText" i18n-preHtml
preHtml=
"Video descriptions are truncated by default and require manual action to expand them."></my-help>
28 <my-markdown-textarea truncate=
"250" formControlName=
"description"></my-markdown-textarea>
30 <div *
ngIf=
"formErrors.description" class=
"form-error">
31 {{ formErrors.description }}
36 <div class=
"col-md-4">
37 <div class=
"form-group">
38 <label i18n
>Channel
</label>
39 <div class=
"peertube-select-container">
40 <select formControlName=
"channelId">
41 <option *
ngFor=
"let channel of userVideoChannels" [value]=
"channel.id">{{ channel.label }}
</option>
46 <div class=
"form-group">
47 <label i18n
for=
"category">Category
</label>
48 <div class=
"peertube-select-container">
49 <select id=
"category" formControlName=
"category">
51 <option *
ngFor=
"let category of videoCategories" [value]=
"category.id">{{ category.label }}
</option>
55 <div *
ngIf=
"formErrors.category" class=
"form-error">
56 {{ formErrors.category }}
60 <div class=
"form-group">
61 <label i18n
for=
"licence">Licence
</label>
62 <div class=
"peertube-select-container">
63 <select id=
"licence" formControlName=
"licence">
65 <option *
ngFor=
"let licence of videoLicences" [value]=
"licence.id">{{ licence.label }}
</option>
69 <div *
ngIf=
"formErrors.licence" class=
"form-error">
70 {{ formErrors.licence }}
74 <div class=
"form-group">
75 <label i18n
for=
"language">Language
</label>
76 <div class=
"peertube-select-container">
77 <select id=
"language" formControlName=
"language">
79 <option *
ngFor=
"let language of videoLanguages" [value]=
"language.id">{{ language.label }}
</option>
83 <div *
ngIf=
"formErrors.language" class=
"form-error">
84 {{ formErrors.language }}
88 <div class=
"form-group">
89 <label i18n
for=
"privacy">Privacy
</label>
90 <div class=
"peertube-select-container">
91 <select id=
"privacy" formControlName=
"privacy">
93 <option *
ngFor=
"let privacy of videoPrivacies" [value]=
"privacy.id">{{ privacy.label }}
</option>
94 <option *
ngIf=
"schedulePublicationPossible" [value]=
"SPECIAL_SCHEDULED_PRIVACY">Scheduled
</option>
98 <div *
ngIf=
"formErrors.privacy" class=
"form-error">
99 {{ formErrors.privacy }}
103 <div *
ngIf=
"schedulePublicationEnabled" class=
"form-group">
104 <label i18n
for=
"schedulePublicationAt">Schedule publication ({{ calendarTimezone }})
</label>
106 id=
"schedulePublicationAt" formControlName=
"schedulePublicationAt" [dateFormat]=
"calendarDateFormat"
107 [locale]=
"calendarLocale" [minDate]=
"minScheduledDate" [showTime]=
"true" [hideOnDateTimeSelect]=
"true"
111 <div *
ngIf=
"formErrors.schedulePublicationAt" class=
"form-error">
112 {{ formErrors.schedulePublicationAt }}
116 <my-peertube-checkbox
117 inputName=
"nsfw" formControlName=
"nsfw"
118 i18n-labelText
labelText=
"This video contains mature or explicit content"
119 i18n-helpHtml
helpHtml=
"Some instances do not list videos containing mature or explicit content by default."
120 ></my-peertube-checkbox>
122 <my-peertube-checkbox
123 inputName=
"commentsEnabled" formControlName=
"commentsEnabled"
124 i18n-labelText
labelText=
"Enable video comments"
125 ></my-peertube-checkbox>
127 <my-peertube-checkbox
128 inputName=
"waitTranscoding" formControlName=
"waitTranscoding"
129 i18n-labelText
labelText=
"Wait transcoding before publishing the video"
130 i18n-helpHtml
helpHtml=
"If you decide not to wait for transcoding before publishing the video, it could be unplayable until transcoding ends."
131 ></my-peertube-checkbox>
138 <ngb-tab i18n-title
title=
"Captions">
139 <ng-template ngbTabContent
>
140 <div class=
"captions">
142 <div class=
"captions-header">
143 <a (click)=
"openAddCaptionModal()" class=
"create-caption">
144 <span class=
"icon icon-add"></span>
145 <ng-container i18n
>Add another caption
</ng-container>
149 <div class=
"form-group" *
ngFor=
"let videoCaption of videoCaptions">
151 <div class=
"caption-entry">
152 <ng-container *
ngIf=
"!videoCaption.action">
154 i18n-title
title=
"See the subtitle file" class=
"caption-entry-label" target=
"_blank" rel=
"noopener noreferrer"
155 [href]=
"videoCaption.captionPath"
156 >{{ videoCaption.language.label }}
</a>
158 <div i18n
class=
"caption-entry-state">Already uploaded
✔</div>
160 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Delete
</span>
163 <ng-container *
ngIf=
"videoCaption.action === 'CREATE'">
164 <span class=
"caption-entry-label">{{ videoCaption.language.label }}
</span>
166 <div i18n
class=
"caption-entry-state caption-entry-state-create">Will be created on update
</div>
168 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Cancel create
</span>
171 <ng-container *
ngIf=
"videoCaption.action === 'REMOVE'">
172 <span class=
"caption-entry-label">{{ videoCaption.language.label }}
</span>
174 <div i18n
class=
"caption-entry-state caption-entry-state-delete">Will be deleted on update
</div>
176 <span i18n
class=
"caption-entry-delete" (click)=
"deleteCaption(videoCaption)">Cancel deletion
</span>
181 <div i18n
class=
"no-caption" *
ngIf=
"videoCaptions?.length === 0">
189 <ngb-tab i18n-title
title=
"Advanced settings">
190 <ng-template ngbTabContent
>
191 <div class=
"advanced-settings">
192 <div class=
"form-group">
194 i18n-inputLabel
inputLabel=
"Upload thumbnail" inputName=
"thumbnailfile" formControlName=
"thumbnailfile"
195 previewWidth=
"200px" previewHeight=
"110px"
199 <div class=
"form-group">
201 i18n-inputLabel
inputLabel=
"Upload preview" inputName=
"previewfile" formControlName=
"previewfile"
202 previewWidth=
"360px" previewHeight=
"200px"
206 <div class=
"form-group">
207 <label i18n
for=
"support">Support
</label>
208 <my-help helpType=
"markdownEnhanced" i18n-preHtml
preHtml=
"Short text to tell people how they can support you (membership platform...)."></my-help>
209 <my-markdown-textarea
210 id=
"support" formControlName=
"support" textareaWidth=
"500px" [previewColumn]=
"true" markdownType=
"enhanced"
211 [classes]=
"{ 'input-error': formErrors['support'] }"
212 ></my-markdown-textarea>
213 <div *
ngIf=
"formErrors.support" class=
"form-error">
214 {{ formErrors.support }}
225 <my-video-caption-add-modal
226 #videoCaptionAddModal [existingCaptions]=
"existingCaptions" (captionAdded)=
"onCaptionAdded($event)"
227 ></my-video-caption-add-modal>