Commit 0c2b6b77 authored by Franco Pariani's avatar Franco Pariani
Browse files

Merge remote-tracking branch 'origin/feature/add-in18-frontend' into feature/editor-improvements

parents 8154ecdb d1864c8b
......@@ -21,6 +21,7 @@
"prefix": "app",
"styles": [
"../node_modules/font-awesome/css/font-awesome.css",
"../node_modules/flag-icon-css/css/flag-icon.min.css",
"styles/app.scss",
"styles/console.css",
"styles/hints.css",
......
{
"name": "matefun",
"version": "2.0.1",
"version": "2.0.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
......@@ -3490,6 +3490,11 @@
}
}
},
"flag-icon-css": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-3.2.1.tgz",
"integrity": "sha512-0t7zPm2crM2cBIm3epZQ+EmiHuzgFNTTSMUMkWlrztDDGL+y31D+eY8zaB9zYCzJGAsn4KEMAKY+jCU1mt9jwg=="
},
"flatten": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
......
......@@ -25,6 +25,7 @@
"@ngx-translate/http-loader": "^0.1.0",
"core-js": "^2.4.1",
"d3": "^4.12.2",
"flag-icon-css": "^3.2.1",
"font-awesome": "^4.7.0",
"function-plot": "git://github.com/diego-rey/function-plot.git#feature/integration-multigraf-shape",
"graph3D": "git://github.com/ifagian/graph3D#master",
......
<div>
<router-outlet></router-outlet>
<span class="translate">{{ "HELLO" | translate }}</span>
</div>
<router-outlet></router-outlet>
......@@ -10,8 +10,13 @@ import { TranslateService } from '../../node_modules/@ngx-translate/core';
export class AppComponent implements OnInit {
constructor(public router: Router, public translate: TranslateService) {
this.translate.addLangs(['es', 'en']);
this.translate.setDefaultLang('es');
//this.translate.use('en');
let currentSession = sessionStorage.getItem("currentUser");
let language = currentSession ? JSON.parse(currentSession).language : 'es';
if (language) {
this.translate.setDefaultLang(language);
} else {
this.translate.setDefaultLang('es');
}
}
ngOnInit() {
//this.router.navigate(['/login']);
......
......@@ -2,7 +2,7 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-5">
<label for="search">Nombre del archivo:</label>
<label for="search">{{ "i18n.msg.file.fileName" | translate }}:</label>
<div class="input-group">
<input type="text" class="form-control" id="search" [(ngModel)]=filtroNombre>
<span class="input-group-addon fa fa-search">
......@@ -15,42 +15,66 @@
<div class="row" style="margin-top: 20px">
<div class="col-lg-5">
<ngb-tabset [destroyOnHide]=false>
<ngb-tab title="Mis archivos">
<ngb-tab title='{{ "i18n.msg.file.myFiles" | translate }}'>
<ng-template ngbTabContent>
<div class="card">
<div>
<div class="btn-group pull-right" style="cursor: pointer; margin-top: -9px;">
<button ngbPopover="Atras" triggers="mouseenter:mouseleave" data-placement="bottom" class="btn btn-sm btn-secondary pull-right" *ngIf="directorioActual.padreId!=-1" style="cursor: pointer; margin-top: -33.5px; margin-right: 73px; height: 30px;"(click)="navBack()">
<button ngbPopover='{{ "i18n.action.goBack" | translate | titleCase }}' triggers="mouseenter:mouseleave" data-placement="bottom" class="btn btn-sm btn-secondary pull-right" *ngIf="directorioActual.padreId!=-1" style="cursor: pointer; margin-top: -33.5px; margin-right: 73px; height: 30px;"(click)="navBack()">
<i class="fa fa-arrow-up"></i>
</button>
</div>
<!-- <button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px;" >
<i class="fa fa-plus"></i>
</buton> -->
<div class="btn-group pull-right" style="cursor: pointer; margin-top: -42px; height: 30px; width: 29px;">
<button ngbPopover="Nuevo" triggers="mouseenter:mouseleave" data-placement="bottom" style="cursor: pointer;border-radius: 3px;" type="button" class="btn btn-sm btn-secondary" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="btn-group pull-right" style="cursor: pointer; margin-top: -42px; height: 30px; width: 29px;">
<button
ngbPopover='{{ "i18n.action.new" | translate | titleCase }}'
triggers="mouseenter:mouseleave"
data-placement="bottom"
style="cursor: pointer;border-radius: 3px;"
type="button"
class="btn btn-sm btn-secondary"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">
<i class="fa fa-plus"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item"(click)="mkFile()" >Archivo</a>
<a class="dropdown-item"(click)="mkFile()">
{{ "i18n.object.file" | translate | titleCase }}
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" (click)="mkdir()">Carpeta</a>
<a class="dropdown-item" (click)="mkdir()">
{{ "i18n.object.folder" | translate | titleCase }}
</a>
</div>
</div>
<div class="btn-group pull-right" style="cursor: pointer; margin-top: -42px; height: 30px; width: 29px; margin-right: 36px;">
<button ngbPopover="Ordenar" triggers="mouseenter:mouseleave" data-placement="bottom" style="cursor: pointer;border-radius: 3px;width: 36px;" type="button" class="btn btn-sm btn-secondary" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="btn-group pull-right" style="cursor: pointer; margin-top: -42px; height: 30px; width: 29px; margin-right: 36px;">
<button
ngbPopover='{{ "i18n.action.order" | translate | titleCase }}'
triggers="mouseenter:mouseleave"
data-placement="bottom"
style="cursor: pointer;border-radius: 3px;width: 36px;"
type="button"
class="btn btn-sm btn-secondary"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">
<i class="fa fa-sort"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item"(click)="ordenarPorTipo()" >Carpetas primero</a>
<a class="dropdown-item"(click)="ordenarPorTipo()">
{{ "i18n.msg.order.kind" | translate }}
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" (click)="ordenarPorFecha()">Fecha de creación</a>
<a class="dropdown-item" (click)="ordenarPorFecha()">
{{ "i18n.msg.order.date" | translate }}
</a>
</div>
</div>
</div>
<div class="card-block">
<div class="row listado-archivos" style="min-height: 100px; overflow-y: scroll;">
......@@ -71,7 +95,7 @@
</ng-template>
</ngb-tab>
<ngb-tab title="Compartidos">
<ngb-tab title='{{ "i18n.action.shared" | translate | titleCase }}'>
<ng-template ngbTabContent>
<div class="card" *ngIf="esAlumno">
......@@ -98,38 +122,79 @@
<div class="col-lg-7">
<div class="card">
<div class="card-header">
<button ngbPopover="Cargar/Editar" data-placement="bottom" triggers="mouseenter:mouseleave" class="btn btn-sm btn-secondary pull-left mr-2" (click)="cargarArchivo()">
<button
ngbPopover='{{ "i18n.action.load" | translate | titleCase }}/{{ "i18n.action.edit" | translate | titleCase }}'
data-placement="bottom"
triggers="mouseenter:mouseleave"
class="btn btn-sm btn-secondary pull-left mr-2"
(click)="cargarArchivo()">
<i class="fa fa-pencil"></i>
</button>
<button ngbPopover="Eliminar" data-placement="bottom" triggers="mouseenter:mouseleave" class="btn btn-sm btn-secondary pull-left mr-2" (click)="mostrarEliminarDialogo()">
<button
ngbPopover='{{ "i18n.action.delete" | translate | titleCase }}'
data-placement="bottom"
triggers="mouseenter:mouseleave"
class="btn btn-sm btn-secondary pull-left mr-2"
(click)="mostrarEliminarDialogo()">
<i class="fa fa-remove"></i>
</button>
<button ngbPopover="Mover Archivo"data-placement="bottom" triggers="mouseenter:mouseleave" class="btn btn-sm btn-secondary pull-left mr-2" (click)="seleccionarDirectorioAMover()">
<button
ngbPopover='{{ "i18n.action.move" | translate | titleCase }} {{ "i18n.object.file" | translate | titleCase }}'
data-placement="bottom"
triggers="mouseenter:mouseleave"
class="btn btn-sm btn-secondary pull-left mr-2"
(click)="seleccionarDirectorioAMover()">
<i class="fa fa-cut"></i>
</button>
<button class="btn btn-sm btn-secondary pull-left mr-2" *ngIf="esAlumno && archivoSeleccionado && hayArchivoOriginal()" (click)="seleccionarArchivoOriginal()">Ver original</button>
<button class="btn btn-sm btn-secondary pull-left mr-2" *ngIf="esAlumno && archivoSeleccionado && hayArchivoMio()" (click)="seleccionarArchivoMio()">Ver mio</button>
<button class="btn btn-sm btn-secondary pull-left mr-4" *ngIf="esAlumno && archivoSeleccionado && !archivoSeleccionado.directorio && archivoSeleccionado.archivoOrigenId != -1 && (archivoSeleccionado.estado == 'Edicion' || archivoSeleccionado.estado == 'Devuelto')" (click)="confirmarEntrega()">Entregar</button>
<button
class="btn btn-sm btn-secondary pull-left mr-2"
*ngIf="esAlumno && archivoSeleccionado && hayArchivoOriginal()"
(click)="seleccionarArchivoOriginal()">
{{ "i18n.msg.file.seeOriginal" | translate }}
</button>
<button
class="btn btn-sm btn-secondary pull-left mr-2"
*ngIf="esAlumno && archivoSeleccionado && hayArchivoMio()"
(click)="seleccionarArchivoMio()">
{{ "i18n.msg.file.seeMine" | translate }}
</button>
<button
class="btn btn-sm btn-secondary pull-left mr-4"
*ngIf="esAlumno && archivoSeleccionado && !archivoSeleccionado.directorio && archivoSeleccionado.archivoOrigenId != -1 && (archivoSeleccionado.estado == 'Edicion' || archivoSeleccionado.estado == 'Devuelto')"
(click)="confirmarEntrega()">
{{ "i18n.action.send" | translate }}
</button>
<div class="pull-left mr-2" *ngIf="esAlumno && (archivoSeleccionado?.estado == 'Entregado')">{{archivoSeleccionado.estado}} - </div>
<button *ngIf="esAlumno && archivoSeleccionado?.estado == 'Corregido'" class="btn btn-sm btn-secondary pull-left mr-2" (click)="verCalificacion()">Ver calificacion</button>
<div
class="pull-left mr-2"
*ngIf="esAlumno && (archivoSeleccionado?.estado == 'Entregado')">
{{archivoSeleccionado.estado}} - </div>
<button
*ngIf="esAlumno && archivoSeleccionado?.estado == 'Corregido'"
class="btn btn-sm btn-secondary pull-left mr-2"
(click)="verCalificacion()">
{{ "i18n.msg.file.viewCalification" | translate }}
</button>
<button *ngIf="!esAlumno" class="btn btn-sm btn-secondary pull-left mr-2" (click)="compartirArchivo()">Compartir</button>
<button *ngIf="!esAlumno" class="btn btn-sm btn-secondary pull-left mr-2" (click)="compartirArchivo()">
{{ "i18n.action.share" | translate | titleCase }}
</button>
<div class="pull-left" *ngIf="archivoSeleccionado">
Nombre: {{archivoSeleccionado?.nombre}} - Creado: {{archivoSeleccionado?.fechaCreacion | date}}
{{ "i18n.object.name" | translate | titleCase }}:
{{archivoSeleccionado?.nombre}}
&nbsp;-&nbsp;
{{ "i18n.action.created" | translate | titleCase }}:
{{archivoSeleccionado?.fechaCreacion | date}}
</div>
<div class="pull-left" *ngIf="!archivoSeleccionado">Seleccione un archivo para previsualizarlo</div>
<div class="pull-left" *ngIf="!archivoSeleccionado">{{ "i18n.msg.file.preview" | translate }}</div>
<div class="pull-right" *ngIf="archivoSeleccionado">
<label class="custom-control custom-checkbox" *ngIf="!esAlumno">
<input type="checkbox" *ngIf="archivoSeleccionado.editable" (click)="setSoloLectura()" class="custom-control-input">
<input type="checkbox" *ngIf="!archivoSeleccionado.editable" checked (click)="setSoloLectura()" class="custom-control-input">
<span class="custom-control-indicator"></span>
<span class="custom-control-description">Solo lectura</span>
<span class="custom-control-description">{{ "i18n.msg.file.readOnly" | translate }}</span>
</label>
</div>
</div>
......@@ -138,8 +203,13 @@
<i style="color: rgb(220,220,220); font-size: 10em; padding: 0.1em" class="fa fa-file-text"></i>
</div>
</div>
<codemirror class="codemirrorArchivo" *ngIf="archivoSeleccionado" [(ngModel)]="preview" [config]="configCodeMirror" [ngStyle]="{'font-size': configCodeMirror.fontSize+'px'}">
</codemirror>
<codemirror
class="codemirrorArchivo"
*ngIf="archivoSeleccionado"
[(ngModel)]="preview"
[config]="configCodeMirror"
[ngStyle]="{'font-size': configCodeMirror.fontSize+'px'}">
</codemirror>
</div>
</div>
......
......@@ -14,6 +14,8 @@ import { ConfirmComponent } from '../../shared/modal/confirm.component';
import { SeleccionarDirectorioMove } from './seleccionarDirectorio.component';
import { CodemirrorComponent } from 'ng2-codemirror';
import { NgbPopoverConfig, NgbPopover} from '@ng-bootstrap/ng-bootstrap';
import { TranslateService } from '@ngx-translate/core';
import { TitleCasePipe } from '../../shared/pipes/titlecase.pipe';
import 'codemirror/mode/haskell/haskell';
import 'codemirror/addon/display/panel';
......@@ -28,6 +30,8 @@ import 'codemirror/mode/markdown/markdown';
})
export class ArchivosComponent {
translateService : any;
titlecasePipe: any;
archivos : Archivo[] = [];
archivosCompartidos: Archivo[] = [];
archivosCompartidosSinDuplicados: Archivo [] = [];
......@@ -49,8 +53,12 @@ export class ArchivosComponent {
private authService: AuthenticationService,
private haskellService: HaskellService,
private sessionService: SessionService,
private dialogService:DialogService
private dialogService:DialogService,
public translate: TranslateService
){
this.translateService = translate;
this.titlecasePipe = new TitleCasePipe();
this.esAlumno = JSON.parse(sessionStorage.getItem("currentUser")).tipo ==="alumno";
this.directorioActual = {};
this.directorioActual.archivos = [];
......@@ -182,23 +190,21 @@ export class ArchivosComponent {
if(this.archivos.some(arch => arch.id == this.archivoSeleccionado.id)){
var that = this;
let disposable = this.dialogService.addDialog(ConfirmarEliminar, {
nombreArchivo:that.archivoSeleccionado.nombre,
esDirectorio:that.archivoSeleccionado.directorio,
parentContext :that})
nombreArchivo : {fileName: that.archivoSeleccionado.nombre},
esDirectorio : that.archivoSeleccionado.directorio,
parentContext : that})
.subscribe((isConfirmed)=>{
if(isConfirmed) {
//codeMirrorRef.options.readOnly = false;
//componentRef.editDialogFired = true;
}
});
console.log(disposable);
}else{
this.notifService.warning("Sin permisos para eliminar el archivo");
this.notifService.warning(this.translateService.get('i18n.warning.file.noPermissionRemove').value);
}
}else{
this.notifService.warning("Archivo no seleccionado");
this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
}
}
seleccionarDirectorioAMover(){
......@@ -221,10 +227,10 @@ export class ArchivosComponent {
}
});
}else{
this.notifService.warning("Sin permisos para mover el archivo");
this.notifService.warning(this.translateService.get('i18n.warning.file.noPermissionMove').value);
}
}else{
this.notifService.warning("Archivo no seleccionado");
this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
}
}
......@@ -259,7 +265,7 @@ export class ArchivosComponent {
this.haskellService.editarArchivo(this.archivoSeleccionado.id,this.archivoSeleccionado)
.subscribe(
archivo => {
console.log("Archivo modificado");
console.log(this.translateService.get('i18n.msg.file.modified').value);
},
error => {
......@@ -271,7 +277,7 @@ export class ArchivosComponent {
cargarArchivo(){
if(this.archivoSeleccionado){
if(this.archivoSeleccionado.directorio){
this.notifService.warning('No se seleccionó ningún archivo',false);
this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value, false);
}else{
//Si el archivo es compartido con el grupo, editabe y no lo he editado, lo voy a buscar al servidor.
if(this.archivosCompartidos.some(arch => arch.id == this.archivoSeleccionado.id) && this.archivoSeleccionado.editable && this.archivoSeleccionado.archivoOrigenId == -1){
......@@ -296,16 +302,23 @@ export class ArchivosComponent {
}
}
}else{
this.notifService.warning("Archivo no seleccionado");
this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
}
}
confirmarEntrega(){
var title = this.titlecasePipe.transform(this.translateService.get('i18n.action.send').value) + " " +
this.titlecasePipe.transform(this.translateService.get('i18n.object.file').value);
var msg = '';
this.translateService.get('i18n.msg.file.toSend', {fileName: this.archivoSeleccionado.nombre}).subscribe((res: string) => {
msg = res + '\n' + this.translateService.get('i18n.msg.file.toSendInfo').value;
});
let disposable = this.dialogService.addDialog(ConfirmComponent, {
title:'Entregar archivo',
message:'¿Desea entregar el archivo "'+this.archivoSeleccionado.nombre+'"?\nNo se podrá editar luego de la entrega.',
confirmText: 'Entregar',
cancelText: 'Cancelar'
title: title,
message: msg,
confirmText: this.titlecasePipe.transform(this.translateService.get('i18n.action.send')),
cancelText: this.titlecasePipe.transform(this.translateService.get('i18n.action.cancel')),
})
.subscribe((isConfirmed)=>{
if(isConfirmed) {
......@@ -315,7 +328,7 @@ export class ArchivosComponent {
}
entregarArchivo(){
this.archivoSeleccionado.estado = 'Entregado';
this.archivoSeleccionado.estado = this.titlecasePipe.transform(this.translateService.get('i18n.action.sent'));
this.haskellService.editarArchivo(this.archivoSeleccionado.id, this.archivoSeleccionado)
.subscribe(
archivo => {
......@@ -470,6 +483,7 @@ export class ArchivosComponent {
this.dialogService.addDialog(CompartirArchivoComponent, {
grupos:gruposRest,
archivo:this.archivoSeleccionado,
nombreArchivo: {'fileName': this.archivoSeleccionado.nombre },
parent:this
})
.subscribe((isConfirmed)=>{
......@@ -487,6 +501,7 @@ export class ArchivosComponent {
this.dialogService.addDialog(CompartirArchivoComponent, {
grupos:grupos,
archivo:this.archivoSeleccionado,
nombreArchivo: {'fileName': this.archivoSeleccionado.nombre },
parent:this
})
.subscribe((isConfirmed)=>{
......@@ -496,7 +511,7 @@ export class ArchivosComponent {
});
}
}else{
this.notifService.warning("Archivo no seleccionado");
this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
}
}
......@@ -528,8 +543,4 @@ export class ArchivosComponent {
}
});
}
}
......@@ -14,10 +14,22 @@ import { DialogService } from "ng2-bootstrap-modal";
import { BootstrapModalModule } from 'ng2-bootstrap-modal';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { CodemirrorModule } from 'ng2-codemirror';
import { NotificacionModule } from '../../notificacion/notificacion.module';
import { NotificacionModule } from '../../notificacion/notificacion.module';
import { I18nModule } from '../../shared/modules/translate/i18n.module';
import { TitleCaseModule } from '../../shared/modules/titlecase.module';
@NgModule({
imports: [CommonModule, ArchivosRoutingModule, FormsModule,BootstrapModalModule, NgbModule, CodemirrorModule,NotificacionModule],
imports: [
CommonModule,
ArchivosRoutingModule,
FormsModule,
BootstrapModalModule,
NgbModule,
CodemirrorModule,
NotificacionModule,
I18nModule,
TitleCaseModule
],
declarations: [ArchivosComponent, FilterPipe,NuevoArchivo, VerCalificacionComponent, ConfirmComponent, CompartirArchivoComponent,ConfirmarEliminar, SeleccionarDirectorioMove],
entryComponents: [
NuevoArchivo,
......
......@@ -2,18 +2,22 @@ import { Component } from '@angular/core';
import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
import { Archivo } from '../../shared/objects/archivo';
import { Grupo } from '../../shared/objects/grupo';
import { TranslateService } from '@ngx-translate/core';
export interface ConfirmModel {
archivo: Archivo;
grupos:any;
parent:any;
nombreArchivo: { 'fileName' : string };
}
@Component({
selector: 'confirm',
template: `<div class="modal-dialog" style="margin-top:100px;">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title pull-lefth">Compartir &quot;{{archivo.nombre}}&quot; con:</h6>
<h6 class="modal-title pull-lefth">
{{ "i18n.msg.file.share" | translate:nombreArchivo }}
</h6>
<button type="button" class="close" (click)="close()" style="margin-rigth:8px;">&times;</button>
</div>
<div class="modal-body" style="height:350px;overflow-y: scroll;">
......@@ -27,7 +31,9 @@ export interface ConfirmModel {
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" (click)="compartir()">Compartir</button>
<button type="button" class="btn btn-primary" (click)="compartir()">
{{ "i18n.action.share" | translate | titleCase }}
</button>
</div>
</div>
</div>`
......@@ -37,9 +43,12 @@ export class CompartirArchivoComponent extends DialogComponent<ConfirmModel, boo
grupos:any;
grupo: Grupo;
parent: any;
nombreArchivo: { 'fileName' : string };
translateService: any;
constructor(dialogService: DialogService) {
constructor(dialogService: DialogService, public translate: TranslateService) {
super(dialogService);
this.translateService = translate;
}
seleccionarGrupo(grupo){
......@@ -47,18 +56,19 @@ export class CompartirArchivoComponent extends DialogComponent<ConfirmModel, boo
}
compartir(){
this.nombreArchivo = {'fileName' : this.archivo.nombre};
if(this.grupo){
this.parent.haskellService.compartirArchivoGrupo(this.grupo, this.archivo.id)
.subscribe(
success => {
this.parent.notifService.success("Archivo compartido");
this.parent.notifService.success(this.translateService.get('i18n.msg.file.shared').value);
this.close();
},
error => {
this.parent.notifService.error(error);
});
}else{
this.parent.notifService.error("Seleccione un grupo");
this.parent.notifService.error(this.translateService.get('i18n.warning.group.select').value);
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
import { Archivo } from '../../shared/objects/archivo';
export interface ConfirmModel {
nombreArchivo:string;
nombreArchivo: { fileName: string };
esDirectorio:boolean;
parentContext: any;
}
@Component({
selector: 'confirm',
template: `<div class="modal-dialog" style="margin-top:100px;">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title" *ngIf="!esDirectorio">Eliminar archivo</h6>
<h6 class="modal-title" *ngIf="esDirectorio">Eliminar carpeta</h6>
<h6 class="modal-title" *ngIf="!esDirectorio">
{{ "i18n.action.delete" | translate | titleCase }}
{{ "i18n.object.file" | translate | titleCase }}
</h6>
<h6 class="modal-title" *ngIf="esDirectorio">
{{ "i18n.action.delete" | translate | titleCase }}
{{ "i18n.object.folder" | translate | titleCase }}
</h6>
<button type="button" class="close" (click)="close()" style="margin-left:8px;">&times;</button>
</div>
<div class="modal-body">
<p *ngIf="!esDirectorio">¿Está seguro que desea eliminar el archivo {{nombreArchivo}}?</p>
<p *ngIf="esDirectorio">¿Está seguro que desea eliminar la carpeta {{nombreArchivo}}?</p>
<p *ngIf="!esDirectorio">
{{ "i18n.msg.file.delete" | translate:nombreArchivo }}
</p>
<p *ngIf="esDirectorio">
{{ "i18n.msg.file.delete" | translate:nombreArchivo }}
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" (click)="close()">Cancelar</button>
<button type="button" class="btn btn-success" (click)="confirmarEliminar()">Eliminar</button>
<button type="button" class="btn btn-default" (click)="close()">
{{ "i18n.action.cancel" | translate | titleCase }}
</button>
<button type="button" class="btn btn-success" (click)="confirmarEliminar()">
{{ "i18n.action.delete" | translate | titleCase }}
</button>
</div>
</div>
</div>`
})
export class ConfirmarEliminar extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {