]>
Commit | Line | Data |
---|---|---|
4cc66133 | 1 | <div class="video-edit row" [formGroup]="form"> |
6de36768 C |
2 | <tabset class="root-tabset bootstrap"> |
3 | ||
0975cd5c | 4 | <tab i18n-heading heading="Basic info"> |
6de36768 C |
5 | <div class="col-md-8"> |
6 | <div class="form-group"> | |
b1d40cff | 7 | <label i18n for="name">Title</label> |
6de36768 C |
8 | <input type="text" id="name" formControlName="name" /> |
9 | <div *ngIf="formErrors.name" class="form-error"> | |
10 | {{ formErrors.name }} | |
11 | </div> | |
12 | </div> | |
13 | ||
14 | <div class="form-group"> | |
b1d40cff | 15 | <label i18n class="label-tags">Tags</label> <span i18n>(press Enter to add)</span> |
6de36768 | 16 | <tag-input |
e998cf3c | 17 | [validators]="tagValidators" [errorMessages]="tagValidatorsMessages" |
6de36768 C |
18 | formControlName="tags" maxItems="5" modelAsStrings="true" |
19 | ></tag-input> | |
20 | </div> | |
21 | ||
22 | <div class="form-group"> | |
b1d40cff C |
23 | <label i18n for="description">Description</label> |
24 | <my-help helpType="markdownText" i18n-preHtml preHtml="Video descriptions are truncated by default and require manual action to expand them."></my-help> | |
6de36768 C |
25 | <my-markdown-textarea truncate="250" formControlName="description"></my-markdown-textarea> |
26 | ||
27 | <div *ngIf="formErrors.description" class="form-error"> | |
28 | {{ formErrors.description }} | |
29 | </div> | |
30 | </div> | |
15a7387d | 31 | </div> |
ff249f49 | 32 | |
6de36768 C |
33 | <div class="col-md-4"> |
34 | <div class="form-group"> | |
b1d40cff | 35 | <label i18n>Channel</label> |
0f320037 | 36 | <div class="peertube-select-container"> |
6de36768 C |
37 | <select formControlName="channelId"> |
38 | <option *ngFor="let channel of userVideoChannels" [value]="channel.id">{{ channel.label }}</option> | |
39 | </select> | |
40 | </div> | |
41 | </div> | |
42 | ||
43 | <div class="form-group"> | |
b1d40cff | 44 | <label i18n for="category">Category</label> |
6de36768 C |
45 | <div class="peertube-select-container"> |
46 | <select id="category" formControlName="category"> | |
47 | <option></option> | |
48 | <option *ngFor="let category of videoCategories" [value]="category.id">{{ category.label }}</option> | |
49 | </select> | |
50 | </div> | |
51 | ||
52 | <div *ngIf="formErrors.category" class="form-error"> | |
53 | {{ formErrors.category }} | |
54 | </div> | |
55 | </div> | |
56 | ||
57 | <div class="form-group"> | |
b1d40cff | 58 | <label i18n for="licence">Licence</label> |
6de36768 C |
59 | <div class="peertube-select-container"> |
60 | <select id="licence" formControlName="licence"> | |
61 | <option></option> | |
62 | <option *ngFor="let licence of videoLicences" [value]="licence.id">{{ licence.label }}</option> | |
63 | </select> | |
64 | </div> | |
65 | ||
66 | <div *ngIf="formErrors.licence" class="form-error"> | |
67 | {{ formErrors.licence }} | |
68 | </div> | |
69 | </div> | |
70 | ||
71 | <div class="form-group"> | |
b1d40cff | 72 | <label i18n for="language">Language</label> |
6de36768 C |
73 | <div class="peertube-select-container"> |
74 | <select id="language" formControlName="language"> | |
75 | <option></option> | |
76 | <option *ngFor="let language of videoLanguages" [value]="language.id">{{ language.label }}</option> | |
77 | </select> | |
78 | </div> | |
79 | ||
80 | <div *ngIf="formErrors.language" class="form-error"> | |
81 | {{ formErrors.language }} | |
82 | </div> | |
83 | </div> | |
84 | ||
85 | <div class="form-group"> | |
b1d40cff | 86 | <label i18n for="privacy">Privacy</label> |
6de36768 C |
87 | <div class="peertube-select-container"> |
88 | <select id="privacy" formControlName="privacy"> | |
89 | <option></option> | |
90 | <option *ngFor="let privacy of videoPrivacies" [value]="privacy.id">{{ privacy.label }}</option> | |
bbe0f064 | 91 | <option *ngIf="schedulePublicationPossible" [value]="SPECIAL_SCHEDULED_PRIVACY">Scheduled</option> |
6de36768 C |
92 | </select> |
93 | </div> | |
94 | ||
95 | <div *ngIf="formErrors.privacy" class="form-error"> | |
96 | {{ formErrors.privacy }} | |
97 | </div> | |
98 | </div> | |
99 | ||
bbe0f064 C |
100 | <div *ngIf="schedulePublicationEnabled" class="form-group"> |
101 | <label i18n for="schedulePublicationAt">Schedule publication ({{ calendarTimezone }})</label> | |
102 | <p-calendar | |
103 | id="schedulePublicationAt" formControlName="schedulePublicationAt" [dateFormat]="calendarDateFormat" | |
104 | [locale]="calendarLocale" [minDate]="minScheduledDate" [showTime]="true" [hideOnDateTimeSelect]="true" | |
105 | > | |
106 | </p-calendar> | |
107 | ||
108 | <div *ngIf="formErrors.schedulePublicationAt" class="form-error"> | |
109 | {{ formErrors.schedulePublicationAt }} | |
110 | </div> | |
111 | </div> | |
112 | ||
0f7fedc3 C |
113 | <my-peertube-checkbox |
114 | inputName="nsfw" formControlName="nsfw" | |
115 | i18n-labelText labelText="This video contains mature or explicit content" | |
116 | i18n-helpHtml helpHtml="Some instances do not list videos containing mature or explicit content by default." | |
117 | ></my-peertube-checkbox> | |
118 | ||
119 | <my-peertube-checkbox | |
120 | inputName="commentsEnabled" formControlName="commentsEnabled" | |
121 | i18n-labelText labelText="Enable video comments" | |
122 | ></my-peertube-checkbox> | |
123 | ||
124 | <my-peertube-checkbox | |
125 | inputName="waitTranscoding" formControlName="waitTranscoding" | |
126 | i18n-labelText labelText="Wait transcoding before publishing the video" | |
127 | i18n-helpHtml helpHtml="If you decide not to wait for transcoding before publishing the video, it could be unplayable until transcoding ends." | |
128 | ></my-peertube-checkbox> | |
2186386c | 129 | |
4cc66133 | 130 | </div> |
6de36768 C |
131 | </tab> |
132 | ||
40e87e9e C |
133 | <tab i18n-heading heading="Captions"> |
134 | <div class="col-md-12 captions"> | |
135 | ||
136 | <div class="captions-header"> | |
137 | <a (click)="openAddCaptionModal()" class="create-caption"> | |
138 | <span class="icon icon-add"></span> | |
139 | <ng-container i18n>Add another caption</ng-container> | |
140 | </a> | |
141 | </div> | |
142 | ||
143 | <div class="form-group" *ngFor="let videoCaption of videoCaptions"> | |
144 | ||
772d5642 C |
145 | <div class="caption-entry"> |
146 | <ng-container *ngIf="!videoCaption.action"> | |
147 | <a | |
148 | i18n-title title="See the subtitle file" class="caption-entry-label" target="_blank" rel="noopener noreferrer" | |
149 | [href]="videoCaption.captionPath" | |
150 | >{{ videoCaption.language.label }}</a> | |
40e87e9e | 151 | |
772d5642 C |
152 | <div class="caption-entry-state">Already uploaded ✔</div> |
153 | ||
154 | <span i18n class="caption-entry-delete" (click)="deleteCaption(videoCaption)">Delete</span> | |
155 | </ng-container> | |
156 | ||
157 | <ng-container *ngIf="videoCaption.action === 'CREATE'"> | |
158 | <span class="caption-entry-label">{{ videoCaption.language.label }}</span> | |
159 | ||
160 | <div class="caption-entry-state caption-entry-state-create">Will be created on update</div> | |
161 | ||
162 | <span i18n class="caption-entry-delete" (click)="deleteCaption(videoCaption)">Cancel create</span> | |
163 | </ng-container> | |
164 | ||
165 | <ng-container *ngIf="videoCaption.action === 'REMOVE'"> | |
166 | <span class="caption-entry-label">{{ videoCaption.language.label }}</span> | |
167 | ||
168 | <div class="caption-entry-state caption-entry-state-delete">Will be deleted on update</div> | |
169 | ||
170 | <span i18n class="caption-entry-delete" (click)="deleteCaption(videoCaption)">Cancel deletion</span> | |
171 | </ng-container> | |
40e87e9e C |
172 | </div> |
173 | </div> | |
174 | ||
175 | <div class="no-caption" *ngIf="videoCaptions?.length === 0"> | |
176 | No captions for now. | |
177 | </div> | |
178 | ||
179 | </div> | |
180 | </tab> | |
181 | ||
0975cd5c | 182 | <tab i18n-heading heading="Advanced settings"> |
07fa4c97 | 183 | <div class="col-md-12 advanced-settings"> |
6de36768 C |
184 | <div class="form-group"> |
185 | <my-video-image | |
b1d40cff | 186 | i18n-inputLabel inputLabel="Upload thumbnail" inputName="thumbnailfile" formControlName="thumbnailfile" |
6de36768 C |
187 | previewWidth="200px" previewHeight="110px" |
188 | ></my-video-image> | |
189 | </div> | |
190 | ||
191 | <div class="form-group"> | |
192 | <my-video-image | |
b1d40cff | 193 | i18n-inputLabel inputLabel="Upload preview" inputName="previewfile" formControlName="previewfile" |
6de36768 C |
194 | previewWidth="360px" previewHeight="200px" |
195 | ></my-video-image> | |
196 | </div> | |
07fa4c97 C |
197 | |
198 | <div class="form-group"> | |
b1d40cff C |
199 | <label i18n for="support">Support</label> |
200 | <my-help helpType="markdownEnhanced" i18n-preHtml preHtml="Short text to tell people how they can support you (membership platform...)."></my-help> | |
07fa4c97 | 201 | <my-markdown-textarea |
b1d40cff C |
202 | id="support" formControlName="support" textareaWidth="500px" [previewColumn]="true" markdownType="enhanced" |
203 | [classes]="{ 'input-error': formErrors['support'] }" | |
07fa4c97 C |
204 | ></my-markdown-textarea> |
205 | <div *ngIf="formErrors.support" class="form-error"> | |
206 | {{ formErrors.support }} | |
207 | </div> | |
208 | </div> | |
15a7387d | 209 | </div> |
6de36768 | 210 | </tab> |
ff249f49 | 211 | |
6de36768 | 212 | </tabset> |
47564bbe | 213 | |
ff249f49 | 214 | </div> |
40e87e9e C |
215 | |
216 | <my-video-caption-add-modal | |
f4001cf4 | 217 | #videoCaptionAddModal [existingCaptions]="existingCaptions" (captionAdded)="onCaptionAdded($event)" |
40e87e9e | 218 | ></my-video-caption-add-modal> |