-<div *ngIf="!isUploadingVideo" class="upload-video-container" dragDrop (fileDropped)="setVideoFile($event)">
+<div *ngIf="!isUploadingVideo" class="upload-video-container" myDragDrop (fileDropped)="onFileDropped($event)">
<div class="first-step-block">
<my-global-icon class="upload-icon" iconName="upload" aria-hidden="true"></my-global-icon>
<div class="button-file form-control" [ngbTooltip]="'(extensions: ' + videoExtensions + ')'">
<span i18n>Select the file to upload</span>
- <input #videofileInput type="file" name="videofile" id="videofile" [accept]="videoExtensions" (change)="fileChange()" autofocus />
+ <input
+ aria-label="Select the file to upload"
+ i18n-aria-label
+ #videofileInput
+ [accept]="videoExtensions"
+ (change)="onFileChange($event)"
+ id="videofile"
+ type="file"
+ />
</div>
<div class="form-group form-group-channel">
<label i18n for="first-step-channel">Channel</label>
- <div class="peertube-select-container">
- <select id="first-step-channel" [(ngModel)]="firstStepChannelId" class="form-control">
- <option *ngFor="let channel of userVideoChannels" [value]="channel.id">{{ channel.label }}</option>
- </select>
- </div>
+ <my-select-channel
+ labelForId="first-step-channel" [items]="userVideoChannels" [(ngModel)]="firstStepChannelId"
+ ></my-select-channel>
</div>
<div class="form-group">
<label i18n for="first-step-privacy">Privacy</label>
- <div class="peertube-select-container">
- <select id="first-step-privacy" [(ngModel)]="firstStepPrivacyId" class="form-control">
- <option *ngFor="let privacy of videoPrivacies" [value]="privacy.id">{{ privacy.label }}</option>
- <option i18n [value]="SPECIAL_SCHEDULED_PRIVACY">Scheduled</option>
- </select>
- </div>
+ <my-select-options
+ labelForId="first-step-privacy" [items]="videoPrivacies" [(ngModel)]="firstStepPrivacyId"
+ ></my-select-options>
</div>
<ng-container *ngIf="isUploadingAudioFile">
</div>
<div class="form-group upload-audio-button">
- <my-button className="orange-button" i18n-label [label]="getAudioUploadLabel()" icon="upload" (click)="uploadFirstStep(true)"></my-button>
+ <my-button
+ className="orange-button"
+ [label]="getAudioUploadLabel()"
+ icon="upload"
+ (click)="uploadAudio()"
+ >
+ </my-button>
</div>
</ng-container>
</div>
</div>
+<!-- Upload progress/cancel/error/success header -->
<div *ngIf="isUploadingVideo && !error" class="upload-progress-cancel">
- <div class="progress" i18n-title title="Total video quota">
+ <div class="progress" i18n-title title="Total video uploaded">
<div class="progress-bar" role="progressbar" [style]="{ width: videoUploadPercents + '%' }" [attr.aria-valuenow]="videoUploadPercents" aria-valuemin="0" [attr.aria-valuemax]="100">
<span *ngIf="videoUploadPercents === 100 && videoUploaded === false" i18n>Processing…</span>
<span *ngIf="videoUploadPercents !== 100 || videoUploaded">{{ videoUploadPercents }}%</span>
</div>
</div>
- <input *ngIf="videoUploaded === false" type="button" value="Cancel" (click)="cancelUpload()" />
+ <input *ngIf="videoUploaded === false" type="button" i18n-value="Cancel ongoing upload of a video" value="Cancel" (click)="cancelUpload()" />
</div>
-<div *ngIf="error" class="alert alert-danger">
+<div *ngIf="error && enableRetryAfterError" class="upload-progress-retry">
+ <div class="progress">
+ <div class="progress-bar red" role="progressbar" [style]="{ width: '100%' }" [attr.aria-valuenow]="100" aria-valuemin="0" [attr.aria-valuemax]="100">
+ <span>{{ error }}</span>
+ </div>
+ </div>
+
+ <div class="btn-group" role="group">
+ <input type="button" class="btn" i18n-value="Retry failed upload of a video" value="Retry" (click)="retryUpload()" />
+ <input type="button" class="btn" i18n-value="Cancel ongoing upload of a video" value="Cancel" (click)="cancelUpload()" />
+ </div>
+</div>
+
+<div *ngIf="error && !enableRetryAfterError" class="alert alert-danger">
<div i18n>Sorry, but something went wrong</div>
{{ error }}
</div>
-<div *ngIf="videoUploaded && !error" class="alert alert-info" i18n>
+<div *ngIf="videoUploaded && !error" class="alert pt-alert-primary" i18n>
Congratulations! Your video is now available in your private library.
</div>
<my-video-edit
[form]="form" [formErrors]="formErrors" [videoCaptions]="videoCaptions"
[validationMessages]="validationMessages" [userVideoChannels]="userVideoChannels"
- [waitTranscodingEnabled]="waitTranscodingEnabled"
+ [waitTranscodingEnabled]="true" [forbidScheduledPublication]="false"
+ type="upload"
></my-video-edit>
<div class="submit-container">
<div i18n *ngIf="videoUploaded === false" class="message-submit">Publish will be available when upload is finished</div>
- <div class="submit-button"
- (click)="updateSecondStep()"
- [ngClass]="{ disabled: isPublishingButtonDisabled() }"
- >
- <my-global-icon iconName="validate" aria-hidden="true"></my-global-icon>
- <input [disabled]="isPublishingButtonDisabled()" type="button" i18n-value value="Publish" />
- </div>
+ <my-button className="orange-button" i18n-label label="Publish" icon="circle-tick"
+ (click)="updateSecondStep()" (keydown.enter)="updateSecondStep()"
+ [disabled]="isPublishingButtonDisabled()"
+ ></my-button>
</div>
</form>