white-space: nowrap;
}
-@include ng2-tags
+@include ng2-tags;
<div class="root">
<div class="preview-container">
<my-reactive-file
- [inputName]="inputName" [inputLabel]="inputLabel" [extensions]="videoImageExtensions" [maxFileSize]="maxVideoImageSize"
- icon="edit" (fileChanged)="onFileChanged($event)"
+ [inputName]="inputName" [inputLabel]="inputLabel" [extensions]="videoImageExtensions" [maxFileSize]="maxVideoImageSize" placement="right"
+ icon="edit" (fileChanged)="onFileChanged($event)" [ngbTooltip]="'(extensions: '+ videoImageExtensions +', '+ maxSizeText +': '+ maxVideoImageSizeInBytes +')'"
></my-reactive-file>
<img *ngIf="imageSrc" [ngStyle]="{ width: previewWidth, height: previewHeight }" [src]="imageSrc" class="preview" />
<div *ngIf="!imageSrc" [ngStyle]="{ width: previewWidth, height: previewHeight }" class="preview no-image"></div>
</div>
-
- <div i18n class="file-constraints">(extensions: {{ allowedExtensionsMessage }}, max size: {{ maxVideoImageSize | bytes }})</div>
</div>
}
.preview {
- border: 2px solid grey;
+ object-fit: cover;
border-radius: 4px;
+ max-width: 100%;
&.no-image {
- background-color: #ececec;
+ border: 2px solid grey;
+ background-color: var(--mainBackgroundColor);
}
}
}
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'
import { ServerService } from '@app/core'
import { ServerConfig } from '@shared/models'
+import { BytesPipe } from 'ngx-pipes'
+import { I18n } from '@ngx-translate/i18n-polyfill'
@Component({
selector: 'my-preview-upload',
imageSrc: SafeResourceUrl
allowedExtensionsMessage = ''
+ maxSizeText: string
private serverConfig: ServerConfig
+ private bytesPipe: BytesPipe
private file: Blob
constructor (
private sanitizer: DomSanitizer,
- private serverService: ServerService
- ) {}
+ private serverService: ServerService,
+ private i18n: I18n
+ ) {
+ this.bytesPipe = new BytesPipe()
+ this.maxSizeText = this.i18n('max size')
+ }
get videoImageExtensions () {
return this.serverConfig.video.image.extensions
return this.serverConfig.video.image.size.max
}
+ get maxVideoImageSizeInBytes () {
+ return this.bytesPipe.transform(this.maxVideoImageSize)
+ }
+
ngOnInit () {
this.serverConfig = this.serverService.getTmpConfig()
this.serverService.getConfig()
<ng-template ngbNavContent>
<div class="row">
- <div class="col-md-8">
+ <div class="col-video-edit">
<div class="form-group">
<label i18n for="name">Title</label>
<input type="text" id="name" class="form-control" formControlName="name" />
</div>
</div>
- <div class="col-md-4">
+ <div class="col-video-edit">
<div class="form-group">
<label i18n>Channel</label>
<div class="peertube-select-container">
-@import '_variables';
-@import '_mixins';
+// Bootstrap grid utilities require functions, variables and mixins
+@import 'node_modules/bootstrap/scss/functions';
+@import 'node_modules/bootstrap/scss/variables';
+@import 'node_modules/bootstrap/scss/mixins';
+@import 'node_modules/bootstrap/scss/grid';
+
+@import 'variables';
+@import 'mixins';
label {
font-weight: $font-regular;
.captions-header {
text-align: right;
+ margin-bottom: 1rem;
.create-caption {
@include create-button;
a.caption-entry-label {
@include disable-default-a-behaviour;
+ flex-grow: 1;
color: #000;
&:hover {
}
}
-@include ng2-tags
+::ng-deep my-markdown-textarea {
+ .root {
+ @include media-breakpoint-down(xl) {
+ flex-direction: column !important;
+ }
+
+ textarea {
+ max-width: 100%;
+ }
+ }
+}
+
+@include ng2-tags;
+
+// columns for the video
+.col-video-edit {
+ @include make-col-ready();
+
+ @include media-breakpoint-up(md) {
+ @include make-col(7);
+
+ & + .col-video-edit {
+ @include make-col(5);
+ }
+ }
+
+ @include media-breakpoint-up(xl) {
+ @include make-col(8);
+
+ & + .col-video-edit {
+ @include make-col(4);
+ }
+ }
+}
+
+:host-context(.expanded) {
+ .col-video-edit {
+ @include media-breakpoint-up(md) {
+ @include make-col(8);
+
+ & + .col-video-edit {
+ @include make-col(4);
+ }
+ }
+ }
+}
.button-file {
@include peertube-button-file(max-content);
}
-
- .button-file-extension {
- display: block;
- font-size: 12px;
- margin-top: 5px;
- }
}
<div class="first-step-block">
<my-global-icon class="upload-icon" iconName="upload"></my-global-icon>
- <div class="button-file form-control">
+ <div class="button-file form-control" [ngbTooltip]="'(extensions: ' + videoExtensions + ')'" container="body">
<span i18n>Select the file to upload</span>
<input #videofileInput type="file" name="videofile" id="videofile" [accept]="videoExtensions" (change)="fileChange()" autofocus />
</div>
- <span class="button-file-extension">({{ videoExtensions }})</span>
<div class="form-group form-group-channel">
<label i18n for="first-step-channel">Channel</label>