<div *ngIf="hasDailyQuota()" class="mt-3">
<div class="progress" i18n-title title="Daily video quota">
- <div class="progress-bar progress-bar-secondary" role="progressbar" [style]="{ width: userVideoQuotaDailyPercentage + '%' }" [attr.aria-valuenow]="userVideoQuotaUsedDaily" aria-valuemin="0" [attr.aria-valuemax]="userVideoQuotaDaily">{{ userVideoQuotaUsedDaily | bytes: 0 }}</div>
+ <div class="progress-bar secondary" role="progressbar" [style]="{ width: userVideoQuotaDailyPercentage + '%' }" [attr.aria-valuenow]="userVideoQuotaUsedDaily" aria-valuemin="0" [attr.aria-valuemax]="userVideoQuotaDaily">{{ userVideoQuotaUsedDaily | bytes: 0 }}</div>
<span class="ml-auto mr-2">{{ userVideoQuotaDaily }}</span>
</div>
</div>
}
.progress {
+ @include progressbar;
width: 500px;
max-width: 100%;
}
@include peertube-button;
@include orange-button;
- display: block;
margin-top: 15px;
}
<img [src]="actor.avatarUrl" alt="Avatar" />
<div class="actor-img-edit-container">
- <div class="actor-img-edit-button" [ngbTooltip]="'(extensions: '+ avatarExtensions +', max size: 100KB)'" placement="right" container="body">
+ <div class="actor-img-edit-button" [ngbTooltip]="'(extensions: '+ avatarExtensions +', '+ maxSizeText +': '+ maxAvatarSizeInBytes +')'" placement="right" container="body">
<my-global-icon iconName="edit"></my-global-icon>
<input #avatarfileInput type="file" title=" " name="avatarfile" id="avatarfile" [accept]="avatarExtensions" (change)="onAvatarChange()"/>
</div>
import { Account } from '@app/shared/account/account.model'
import { Notifier } from '@app/core'
import { ServerConfig } from '@shared/models'
+import { BytesPipe } from 'ngx-pipes'
+import { I18n } from '@ngx-translate/i18n-polyfill'
@Component({
selector: 'my-actor-avatar-info',
@Output() avatarChange = new EventEmitter<FormData>()
+ maxSizeText: string
+
private serverConfig: ServerConfig
+ private bytesPipe: BytesPipe
constructor (
private serverService: ServerService,
- private notifier: Notifier
- ) {}
+ private notifier: Notifier,
+ private i18n: I18n
+ ) {
+ this.bytesPipe = new BytesPipe()
+ this.maxSizeText = this.i18n('max size')
+ }
ngOnInit (): void {
this.serverConfig = this.serverService.getTmpConfig()
return this.serverConfig.avatar.file.size.max
}
+ get maxAvatarSizeInBytes () {
+ return this.bytesPipe.transform(this.maxAvatarSize)
+ }
+
get avatarExtensions () {
return this.serverConfig.avatar.file.extensions.join(', ')
}
}
.button-file {
- @include peertube-button-file(auto);
-
- min-width: 190px;
+ @include peertube-button-file(max-content);
}
.button-file-extension {
</div>
<div *ngIf="isUploadingVideo && !error" class="upload-progress-cancel">
- <p-progressBar
- [value]="videoUploadPercents"
- [ngClass]="{ processing: videoUploadPercents === 100 && videoUploaded === false }"
- ></p-progressBar>
+ <div class="progress" i18n-title title="Total video quota">
+ <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()" />
</div>
margin-top: 25px;
margin-bottom: 40px;
- p-progressBar {
+ .progress {
+ @include progressbar;
flex-grow: 1;
-
- ::ng-deep .ui-progressbar {
- font-size: 15px !important;
- height: 30px !important;
- border-radius: 3px !important;
- background-color: rgba(11, 204, 41, 0.16) !important;
-
- .ui-progressbar-value {
- background-color: #0BCC29 !important;
- }
-
- .ui-progressbar-label {
- text-align: left;
- padding-left: 18px;
- margin-top: 0 !important;
- color: #fff !important;
- line-height: 30px !important;
- }
- }
-
- &.processing {
- ::ng-deep .ui-progressbar-label {
- // Same color as background to hide "100%"
- color: rgba(11, 204, 41, 0.16) !important;
-
- &::before {
- content: 'Processing...';
- color: #fff;
- }
+ height: 30px;
+ font-size: 15px;
+ background-color: rgba(11, 204, 41, 0.16);
+
+ .progress-bar {
+ background-color: $green;
+ line-height: 30px;
+ text-align: left;
+ font-weight: $font-bold;
+
+ span {
+ margin-left: 18px;
}
}
}
import { VideoUploadComponent } from '@app/videos/+video-edit/video-add-components/video-upload.component'
import { VideoImportUrlComponent } from '@app/videos/+video-edit/video-add-components/video-import-url.component'
import { VideoImportTorrentComponent } from '@app/videos/+video-edit/video-add-components/video-import-torrent.component'
-import { ProgressBarModule } from 'primeng/progressbar'
@NgModule({
imports: [
VideoAddRoutingModule,
VideoEditModule,
SharedModule,
- ProgressBarModule
],
declarations: [
VideoAddComponent,
.title-page-about,
.title-page-settings {
+ white-space: nowrap;
font-size: 115%;
font-weight: $font-regular;
background-color: var(--secondaryColor);
}
}
-
-.progress-bar {
- background-color: var(--mainColor);
-}
-.progress-bar-secondary {
- background-color: var(--secondaryColor);
-}
@import '~bootstrap/scss/badge';
//@import '~bootstrap/scss/jumbotron';
@import '~bootstrap/scss/alert';
-@import '~bootstrap/scss/progress';
+//@import '~bootstrap/scss/progress';
//@import '~bootstrap/scss/media';
//@import '~bootstrap/scss/list-group';
@import '~bootstrap/scss/close';
overflow: hidden;
display: inline-block;
width: $width;
+ min-height: 30px;
@include peertube-button;
@include orange-button;
position: absolute;
top: 0;
right: 0;
- min-width: 100%;
- min-height: 100%;
+ width: 100%;
+ height: 100%;
font-size: 100px;
text-align: right;
filter: alpha(opacity=0);
top: -2px;
}
}
+
+@mixin progressbar {
+ background-color: $grey-background-color;
+ display: flex;
+ height: 1rem;
+ overflow: hidden;
+ font-size: 0.75rem;
+ border-radius: 0.25rem;
+
+ .progress-bar {
+ color: var(--mainBackgroundColor);
+ background-color: var(--mainColor);
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ white-space: nowrap;
+ transition: width 0.6s ease;
+
+ &.secondary {
+ background-color: var(--secondaryColor);
+ }
+ }
+}
.ui-toast-close-icon {
font-family: "Glyphicons Halflings";
- opacity: .5;
+ opacity: .3;
&:hover {
- opacity: .8;
+ opacity: .5;
}
&:after {