Browse Source

File name without extension.

pull/587/head
Sebastian 5 years ago
parent
commit
ae48e2afe5
  1. 16
      frontend/app/shared/components/assets/asset.component.html
  2. 12
      frontend/app/shared/components/forms/markdown-editor.component.ts
  3. 10
      frontend/app/shared/components/forms/rich-editor.component.ts
  4. 12
      frontend/app/shared/services/assets.service.ts
  5. 14
      frontend/app/shared/state/assets.forms.ts

16
frontend/app/shared/components/assets/asset.component.html

@ -1,5 +1,10 @@
<ng-container *ngIf="!isListView; else listTemplate"> <ng-container *ngIf="!isListView; else listTemplate">
<div class="card" (click)="select.emit()" [class.selectable]="isSelectable" [class.border-primary]="isSelected" (sqxDropFile)="updateFile($event)" [sqxDropDisabled]="!asset || !asset.canUpload" [sqxDropNoPaste]="true"> <div class="card" (click)="select.emit()"
[class.selectable]="isSelectable"
[class.border-primary]="isSelected"
(sqxDropFile)="updateFile($event)"
[sqxDropDisabled]="!asset || !asset.canUpload"
[sqxDropNoPaste]="true">
<div class="card-body"> <div class="card-body">
<div class="file-preview" *ngIf="asset && progress === 0"> <div class="file-preview" *ngIf="asset && progress === 0">
<span class="file-type" *ngIf="asset.fileType"> <span class="file-type" *ngIf="asset.fileType">
@ -93,7 +98,11 @@
</ng-container> </ng-container>
<ng-template #listTemplate> <ng-template #listTemplate>
<div class="table-items-row" (click)="select.emit()" [class.selectable]="isSelectable" (sqxDropFile)="updateFile($event)" [sqxDropDisabled]="!asset || !asset.canUpload" [sqxDropNoPaste]="true"> <div class="table-items-row" (click)="select.emit()"
[class.selectable]="isSelectable"
(sqxDropFile)="updateFile($event)"
[sqxDropDisabled]="!asset || !asset.canUpload"
[sqxDropNoPaste]="true">
<div class="left-border" [class.hidden]="!isSelectable" [class.selected]="isSelected"></div> <div class="left-border" [class.hidden]="!isSelectable" [class.selected]="isSelected"></div>
<ng-container *ngIf="asset && progress === 0"> <ng-container *ngIf="asset && progress === 0">
@ -166,7 +175,8 @@
<ng-container *ngIf="asset"> <ng-container *ngIf="asset">
<ng-container *sqxModal="editDialog"> <ng-container *sqxModal="editDialog">
<sqx-asset-dialog [allTags]="allTags" [asset]="asset" (changed)="setAsset($event)" (complete)="editDialog.hide()"> <sqx-asset-dialog [allTags]="allTags"
[asset]="asset" (changed)="setAsset($event)" (complete)="editDialog.hide()">
</sqx-asset-dialog> </sqx-asset-dialog>
</ng-container> </ng-container>
</ng-container> </ng-container>

12
frontend/app/shared/components/forms/markdown-editor.component.ts

@ -208,15 +208,17 @@ export class MarkdownEditorComponent extends StatefulControlComponent<State, str
let content = ''; let content = '';
for (const asset of assets) { for (const asset of assets) {
const name = asset.fileNameWithoutExtension;
switch (asset.type) { switch (asset.type) {
case 'Image': case 'Image':
content += `![${asset.fileName}](${asset.fullUrl(this.apiUrl)} '${asset.fileName}')`; content += `![${name}](${asset.fullUrl(this.apiUrl)} '${name}')`;
break; break;
case 'Video': case 'Video':
content += `[${asset.fileName}](${asset.fullUrl(this.apiUrl)}')`; content += `[${name}](${asset.fullUrl(this.apiUrl)}')`;
break; break;
default: default:
content += `[${asset.fileName}](${asset.fullUrl(this.apiUrl)}')`; content += `[${name}](${asset.fullUrl(this.apiUrl)}')`;
break; break;
} }
} }
@ -265,7 +267,9 @@ export class MarkdownEditorComponent extends StatefulControlComponent<State, str
this.assetUploader.uploadFile(file) this.assetUploader.uploadFile(file)
.subscribe(asset => { .subscribe(asset => {
if (Types.is(asset, AssetDto)) { if (Types.is(asset, AssetDto)) {
replaceText(`![${asset.fileName}](${asset.fullUrl(this.apiUrl)} '${asset.fileName}')`); const name = asset.fileNameWithoutExtension;
replaceText(`![${name}](${asset.fullUrl(this.apiUrl)} '${name}')`);
} }
}, error => { }, error => {
if (!Types.is(error, UploadCanceled)) { if (!Types.is(error, UploadCanceled)) {

10
frontend/app/shared/components/forms/rich-editor.component.ts

@ -221,15 +221,17 @@ export class RichEditorComponent extends StatefulControlComponent<undefined, str
let content = ''; let content = '';
for (const asset of assets) { for (const asset of assets) {
const name = asset.fileNameWithoutExtension;
switch (asset.type) { switch (asset.type) {
case 'Image': case 'Image':
content += `<img src="${asset.fullUrl(this.apiUrl)}" alt="${asset.fileName}" />`; content += `<img src="${asset.fullUrl(this.apiUrl)}" alt="${name}" />`;
break; break;
case 'Video': case 'Video':
content += `<video src="${asset.fullUrl(this.apiUrl)}" />`; content += `<video src="${asset.fullUrl(this.apiUrl)}" />`;
break; break;
default: default:
content += `<a href="${asset.fullUrl(this.apiUrl)}" alt="${asset.fileName}">${asset.fileName}</a>`; content += `<a href="${asset.fullUrl(this.apiUrl)}" alt="${name}">${name}</a>`;
break; break;
} }
} }
@ -261,10 +263,12 @@ export class RichEditorComponent extends StatefulControlComponent<undefined, str
this.assetUploader.uploadFile(file) this.assetUploader.uploadFile(file)
.subscribe(asset => { .subscribe(asset => {
if (Types.is(asset, AssetDto)) { if (Types.is(asset, AssetDto)) {
const name = asset.fileNameWithoutExtension;
if (asset.type === 'Video') { if (asset.type === 'Video') {
replaceText(`<video src="${asset.fullUrl(this.apiUrl)}" />`); replaceText(`<video src="${asset.fullUrl(this.apiUrl)}" />`);
} else { } else {
replaceText(`<img src="${asset.fullUrl(this.apiUrl)}" alt="${asset.fileName}" />`); replaceText(`<img src="${asset.fullUrl(this.apiUrl)}" alt="${name}" />`);
} }
} }
}, error => { }, error => {

12
frontend/app/shared/services/assets.service.ts

@ -34,6 +34,18 @@ export class AssetDto {
public readonly canUpload: boolean; public readonly canUpload: boolean;
public readonly canMove: boolean; public readonly canMove: boolean;
public get fileNameWithoutExtension() {
let fileName = this.fileName;
const index = fileName.lastIndexOf('.');
if (index > 0) {
fileName = fileName.substr(0, index);
}
return fileName;
}
public get isDuplicate() { public get isDuplicate() {
return this._meta && this._meta['isDuplicate'] === 'true'; return this._meta && this._meta['isDuplicate'] === 'true';
} }

14
frontend/app/shared/state/assets.forms.ts

@ -125,19 +125,7 @@ export class AnnotateAssetForm extends Form<FormGroup, AnnotateAssetDto, AssetDt
} }
public transformLoad(value: Partial<AssetDto>) { public transformLoad(value: Partial<AssetDto>) {
const result = { ...value }; const result = { ...value, fileName: value.fileNameWithoutExtension };
let fileName = value.fileName;
if (fileName) {
const index = fileName.lastIndexOf('.');
if (index > 0) {
fileName = fileName.substr(0, index);
}
result.fileName = fileName;
}
if (Types.isObject(value.metadata)) { if (Types.isObject(value.metadata)) {
const length = Object.keys(value.metadata).length; const length = Object.keys(value.metadata).length;

Loading…
Cancel
Save