Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • matefun/Frontend
  • felipe.parodi/Frontend
2 results
Show changes
Showing
with 3135 additions and 2413 deletions
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { Component, OnInit } from "@angular/core";
import { Router } from "@angular/router";
import { TranslateService } from "../../node_modules/@ngx-translate/core";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.scss"],
})
export class AppComponent implements OnInit {
constructor(public router: Router) { }
ngOnInit() {
//this.router.navigate(['/login']);
constructor(public router: Router, public translate: TranslateService) {
this.translate.addLangs(["es", "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']);
}
}
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { AuthGuard } from './shared/guards/auth.guard';
import { SessionService } from './shared/services/session.service';
import { NotificacionService } from './shared/services/notificacion.service';
import {NotificacionModule} from './notificacion/notificacion.module';
import { BrowserModule } from "@angular/platform-browser";
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { HttpClient, HttpClientModule } from "@angular/common/http";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";
import { AuthGuard } from "./shared/guards/auth.guard";
import { SessionService } from "./shared/services/session.service";
import { NotificacionService } from "./shared/services/notificacion.service";
import { NotificacionModule } from "./notificacion/notificacion.module";
import { TranslateHttpLoader } from "@ngx-translate/http-loader";
import { TranslateModule, TranslateLoader } from "@ngx-translate/core";
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(
http,
"./assets/i18n/",
".json?cb=" + new Date().getTime()
);
}
@NgModule({
declarations: [
AppComponent
],
imports: [
NotificacionModule,
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule
],
providers: [AuthGuard, SessionService,NotificacionService],
bootstrap: [AppComponent]
declarations: [AppComponent],
imports: [
NotificacionModule,
BrowserModule,
FormsModule,
HttpClientModule,
AppRoutingModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient],
},
}),
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [AuthGuard, SessionService, NotificacionService],
bootstrap: [AppComponent],
})
export class AppModule { }
export class AppModule {}
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { NgModule } from "@angular/core";
import { Routes, RouterModule } from "@angular/router";
import { ArchivosComponent } from './archivos.component';
import { ArchivosComponent } from "./archivos.component";
const routes: Routes = [
{ path: '', component: ArchivosComponent }
];
const routes: Routes = [{ path: "", component: ArchivosComponent }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class ArchivosRoutingModule { }
\ No newline at end of file
export class ArchivosRoutingModule {}
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { ArchivosComponent } from './archivos.component';
import { CommonModule } from '@angular/common';
import { ArchivosRoutingModule } from './archivos-routing.module';
import { FilterPipe } from '../../shared/pipes/filter.pipe';
import { ConfirmComponent } from '../../shared/modal/confirm.component';
import { NuevoArchivo } from './nuevoArchivo.component';
import { VerCalificacionComponent } from './verCalificacion.component';
import { CompartirArchivoComponent } from './compartirArchivo.component';
import { SeleccionarDirectorioMove } from './seleccionarDirectorio.component';
import { ConfirmarEliminar } from './confirmarEliminar.component';
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 { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { ArchivosComponent } from "./archivos.component";
import { CommonModule } from "@angular/common";
import { ArchivosRoutingModule } from "./archivos-routing.module";
import { FilterPipe } from "../../shared/pipes/filter.pipe";
import { NgbModule } from "@ng-bootstrap/ng-bootstrap";
import { LtCodemirrorModule } from "lt-codemirror";
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],
declarations: [ArchivosComponent, FilterPipe,NuevoArchivo, VerCalificacionComponent, ConfirmComponent, CompartirArchivoComponent,ConfirmarEliminar, SeleccionarDirectorioMove],
entryComponents: [
NuevoArchivo,
VerCalificacionComponent,
ConfirmComponent,
CompartirArchivoComponent,
ConfirmarEliminar,
SeleccionarDirectorioMove
],
exports: [ArchivosComponent]
imports: [
CommonModule,
ArchivosRoutingModule,
FormsModule,
NgbModule,
LtCodemirrorModule,
NotificacionModule,
I18nModule,
TitleCaseModule,
],
declarations: [ArchivosComponent, FilterPipe],
exports: [ArchivosComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class ArchivosModule { }
export class ArchivosModule {}
import { Component } from '@angular/core';
import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
import { Archivo } from '../../shared/objects/archivo';
import { Grupo } from '../../shared/objects/grupo';
export interface ConfirmModel {
archivo: Archivo;
grupos:any;
parent: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 pull-lefth">Compartir &quot;{{archivo.nombre}}&quot; con:</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;">
<div>
<div class="list-group">
<button *ngFor="let g of grupos" type="button" (click)="seleccionarGrupo(g)" style="cursor:pointer" class="list-group-item list-group-item-action" [ngClass]="{'active':grupo!=undefined && g.grado == grupo.grado && g.grupo == grupo.grupo && g.anio == grupo.anio && g.liceoId == grupo.liceoId}">
<i class="fa fa-group" style="margin-right:10px; font-size: 3em; cursor: pointer;" aria-hidden="true" ></i>
{{g.grado+"°"+g.grupo+" - "+g.anio}}
</button>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" (click)="compartir()">Compartir</button>
</div>
</div>
</div>`
})
export class CompartirArchivoComponent extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
archivo: Archivo;
grupos:any;
grupo: Grupo;
parent: any;
constructor(dialogService: DialogService) {
super(dialogService);
}
seleccionarGrupo(grupo){
this.grupo = grupo;
}
compartir(){
if(this.grupo){
this.parent.haskellService.compartirArchivoGrupo(this.grupo, this.archivo.id)
.subscribe(
success => {
this.parent.notifService.success("Archivo compartido");
this.close();
},
error => {
this.parent.notifService.error(error);
});
}else{
this.parent.notifService.error("Seleccione un grupo");
}
}
}
\ 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;
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>
<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>
</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>
</div>
</div>
</div>`
})
export class ConfirmarEliminar extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
nombreArchivo: string;
esDirectorio: boolean;
parentContext: any;
constructor(dialogService: DialogService) {
super(dialogService);
}
confirmarEliminar(){
var that = this.parentContext;
var directorio = this.parentContext.archivoSeleccionado.directorio;
this.parentContext.archivoSeleccionado.eliminado = true;
if(directorio){
delete this.parentContext.archivoSeleccionado['archivos'];
}
this.parentContext.haskellService.eliminarArchivo(this.parentContext.archivoSeleccionado.id)
.subscribe(
archivo => {
console.log("Archivo eliminado");
if(directorio){
var idDirActual = that.directorioActual.padreId;
}else {
var idDirActual = that.directorioActual.id;
}
that.recargarArchivos(idDirActual);
that.archivoSeleccionado = null;
},
error => {
this.parentContext.notifService.error(error);
});
this.close();
}
}
\ No newline at end of file
/**
* This barrel file provides the export for the lazy loaded BlankpageComponent.
*/
export * from './archivos.component';
\ No newline at end of file
export * from "./archivos.component";
import { Component } from '@angular/core';
import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
import { Archivo } from '../../shared/objects/archivo';
export interface ConfirmModel {
nombre:string;
descripcion:string;
parentContext: any;
esDirectorio:boolean;
}
@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">Nueva carpeta</h6>
<h6 class="modal-title" *ngIf="!esDirectorio">Nuevo archivo</h6>
<button type="button" class="close" (click)="close()" style="margin-left:8px;">&times;</button>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="recipient-name" class="form-control-label">Nombre:</label>
<input type="text" class="form-control" id="recipient-name" [(ngModel)]="nombre" [ngModelOptions]="{standalone: true}" >
</div>
<div class="form-group" *ngIf="esDirectorio">
<label for="message-text" class="form-control-label">Descripción:</label>
<textarea class="form-control" id="message-text" [(ngModel)]="descripcion" [ngModelOptions]="{standalone: true}" ></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-success" (click)="confirm()">Crear</button>
</div>
</div>
</div>`
})
export class NuevoArchivo extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
nombre: string;
esDirectorio: boolean;
descripcion: string;
parentContext: any;
constructor(dialogService: DialogService) {
super(dialogService);
}
confirm() {
var nombre = this.nombre;
var desc = this.descripcion;
var archivo : Archivo;
archivo = new Archivo();
archivo.cedulaCreador = this.parentContext.directorioActual.cedulaCreador;
if(this.esDirectorio){
archivo.contenido = desc;
} else {
archivo.contenido = '';
}
archivo.directorio = this.esDirectorio;
archivo.editable = true;
archivo.fechaCreacion = new Date();
archivo.nombre = nombre;
archivo.padreId = this.parentContext.directorioActual.id;
var that = this.parentContext;
var regex = /^[A-Z]/
if(regex.test(nombre)){
this.parentContext.haskellService.crearArchivo(archivo).subscribe(
archivo => {
var id = that.directorioActual.id;
that.recargarArchivos(id);
},
error => {
this.parentContext.notifService.error(error);
});
this.close();
}else{
alert("Nombre de archivo debe iniciar con mayusula.")
}
}
}
\ 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 {
directorio: boolean;
archivos:any;
directorioActual:any;
parent:any;
nombre: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">¿Dónde quieres mover el archivo?</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;">
<div>
<div class="list-group" >
<button *ngFor="let arch of directorioActual.archivos" type="button" (click)="navToDir(arch)" style="cursor:pointer" class="list-group-item list-group-item-action">
<i *ngIf="arch.directorio" class="fa fa-folder" style="margin-right:10px; font-size: 3em; cursor: pointer;" aria-hidden="true" ></i>
<i *ngIf="!arch.directorio" class="fa fa-file-text" style="margin-right:10px;font-size: 3em; cursor: pointer;" aria-hidden="true"></i>
{{arch.nombre}}
</button>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" (click)="navBack()">Atras</button>
<button type="button" class="btn btn-primary" (click)="move()">Mover aquí</button>
</div>
</div>
</div>`
})
export class SeleccionarDirectorioMove extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
directorio: boolean;
archivos:any;
directorioActual:any;
parent:any;
nombre:string;
constructor(dialogService: DialogService) {
super(dialogService);
}
move() {
// we set dialog result as true on click on confirm button,
// then we can get dialog result from caller code
var that = this;
if(this.nombre!==undefined && this.nombre!==""){
this.parent.archivoSeleccionado.padreId = this.directorioActual.id;
if(this.parent.archivoSeleccionado.directorio){
delete this.parent.archivoSeleccionado['archivos'];
}
this.parent.haskellService.editarArchivo(this.parent.archivoSeleccionado.id,this.parent.archivoSeleccionado)
.subscribe(
archivo => {
that.parent.recargarArchivos(this.directorioActual.id);
that.parent.archivoSeleccionado = null;
},
error => {
this.parent.notifService.error(error);
});
}
this.close();
}
navToDir(arch){
if(arch.directorio){
this.directorioActual = arch;
}
}
navBack(){
var idPadre = this.directorioActual.padreId;
var archivosList = this.parent.sessionService.getArchivosList();
var nuevoDirectorioActual = archivosList.filter(function(a){return a.id===idPadre})[0];
this.directorioActual=nuevoDirectorioActual;
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
import { Archivo, Evaluacion } from '../../shared/objects/archivo';
export interface ConfirmModel {
archivo: Archivo;
}
@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">Calificación &quot;{{archivo.nombre}}&quot;:</h6>
<button type="button" class="close" (click)="close()" style="margin-rigth:8px;">&times;</button>
</div>
<div class="modal-body">
<div>
<label><b>Fecha: </b></label>&nbsp; {{archivo.evaluacion.fecha | date}}<br>
<label><b>Nota (1-100): </b></label>&nbsp; {{archivo.evaluacion.nota}}<br>
<label><b>Detalle: </b></label>&nbsp; {{archivo.evaluacion.descripcion}}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" (click)="close()">Cerrar</button>
</div>
</div>
</div>`
})
export class VerCalificacionComponent extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
archivo: Archivo;
constructor(dialogService: DialogService) {
super(dialogService);
}
}
\ No newline at end of file
import { NgModule} from '@angular/core';
import { CommonModule } from '@angular/common'
import { RouterModule } from '@angular/router';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { FormsModule } from '@angular/forms';
import { CanvasComponent } from './canvas.component';
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { RouterModule } from "@angular/router";
import { NgbModule } from "@ng-bootstrap/ng-bootstrap";
import { FormsModule } from "@angular/forms";
import { CanvasComponent } from "./canvas.component";
@NgModule({
imports: [FormsModule, RouterModule, CommonModule, NgbModule],
declarations: [CanvasComponent],
exports: [CanvasComponent]
imports: [FormsModule, RouterModule, CommonModule, NgbModule],
declarations: [CanvasComponent],
exports: [CanvasComponent],
})
export class CanvasModule { }
export class CanvasModule {}
import { Route } from '@angular/router';
import { CanvasComponent } from './index';
import { Route } from "@angular/router";
import { CanvasComponent } from "./index";
export const CanvasRoutes: Route[] = [
{
path: 'canvas',
component: CanvasComponent
}
{
path: "canvas",
component: CanvasComponent,
},
];
/**
* This barrel file provides the export for the lazy loaded BlankpageComponent.
*/
export * from './canvas.component';
export * from "./canvas.component";
export * from './canvas.routes';
export * from "./canvas.routes";
import { Component } from '@angular/core';
import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
import { Archivo, Evaluacion } from '../../shared/objects/archivo';
export interface ConfirmModel {
cedula:string;
archivo: Archivo;
parentContext: any;
}
@Component({
selector: 'confirm',
template: `<div class="modal-dialog" style="margin-top:100px;">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Calificar entrega</h5>
<button type="button" class="close" (click)="close()" style="margin-left:8px;">&times;</button>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="message-text" class="form-control-label">Calificacion (1-100):</label>
<input type="number" class="form-control" [(ngModel)]="nota" min=1 max=100 [ngModelOptions]="{standalone: true}" >
</div>
<div class="form-group">
<label for="message-text" class="form-control-label">Detalle:</label>
<textarea class="form-control" id="message-text" [(ngModel)]="descripcion" [ngModelOptions]="{standalone: true}" ></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" (click)="cancel()">Cancelar</button>
<button type="button" class="btn btn-success" (click)="confirm()">Calificar</button>
</div>
</div>
</div>`
})
export class CalificarEntrega extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
descripcion: string = "";
cedula: string;
archivo: Archivo;
nota: number = 1;
parentContext: any;
constructor(dialogService: DialogService) {
super(dialogService);
}
ngOnInit() {
if(this.archivo.evaluacion){
this.descripcion = this.archivo.evaluacion.descripcion;
this.nota = this.archivo.evaluacion.nota;
}
}
confirm() {
var evaluacion = new Evaluacion();
evaluacion.cedulaDocente = this.cedula;
evaluacion.descripcion = this.descripcion;
evaluacion.nota = this.nota;
if(this.nota>0 && this.nota<100){
this.parentContext.haskellService.calificarArchivo(this.archivo.id,evaluacion )
.subscribe(
evaluacion => {
this.parentContext.notifService.success("Archivo evaluado");
this.archivo.evaluacion = evaluacion;
this.close();
},
error => {
this.parentContext.notifService.error(error);
});
}else{
this.parentContext.notifService.error("Calificacion fuera de rango");
}
}
cancel(){
this.close();
}
}
\ No newline at end of file
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { NgModule } from "@angular/core";
import { Routes, RouterModule } from "@angular/router";
import { GruposComponent } from './grupos.component';
import { GruposComponent } from "./grupos.component";
const routes: Routes = [
{ path: '', component: GruposComponent }
];
const routes: Routes = [{ path: "", component: GruposComponent }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class GruposRoutingModule { }
\ No newline at end of file
export class GruposRoutingModule {}
<notificacion></notificacion>
<notificacion></notificacion>
<div class="container-fluid">
<div class="row">
<div class="col-lg-5">
<label for="search">Nombre del archivo:</label>
<div class="input-group">
<!--[(ngModel)]=filtroNombre-->
<input type="text" class="form-control" id="search" >
<span class="input-group-addon fa fa-search">
</span>
</div>
</div>
<div class="row">
<div class="col-lg-5">
<label for="search">Nombre del archivo:</label>
<div class="input-group">
<!--[(ngModel)]=filtroNombre-->
<input type="text" class="form-control" id="search" />
<span class="input-group-addon fa fa-search"> </span>
</div>
</div>
<div class="row" style="margin-top: 20px">
<div class="col-lg-5">
<div class="card" *ngIf="grupoSeleccionado == undefined">
<div class="card-header">
<div *ngIf="grupoSeleccionado==undefined">Grupos</div>
</div>
<div class="card-block" *ngIf="grupoSeleccionado == undefined">
<div class="row listado-grupos" style="min-height: 100px; overflow-y: scroll;">
<div class="loading" *ngIf="loading">
<div class="loading-bar"></div>
<div class="loading-bar"></div>
<div class="loading-bar"></div>
<div class="loading-bar"></div>
</div>
<div *ngFor="let grupo of grupos" (click)="seleccionarGrupo(grupo)" class="col-sm-3 col-4 " style="text-align: center;">
<i class="fa fa-users" style="font-size: 3em; cursor: pointer;color: #f95e5e;" aria-hidden="true"></i>
<p style="cursor: pointer;">{{grupo.grado + '°' + grupo.grupo+" - "+grupo.anio}}</p>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 20px">
<div class="col-lg-5">
<div class="card" *ngIf="grupoSeleccionado == undefined">
<div class="card-header">
<div *ngIf="grupoSeleccionado == undefined">Grupos</div>
</div>
<div class="card-block" *ngIf="grupoSeleccionado == undefined">
<div
class="row listado-grupos"
style="min-height: 100px; overflow-y: scroll"
>
<div class="loading" *ngIf="loading">
<div class="loading-bar"></div>
<div class="loading-bar"></div>
<div class="loading-bar"></div>
<div class="loading-bar"></div>
</div>
<div
*ngFor="let grupo of grupos"
(click)="seleccionarGrupo(grupo)"
class="col-sm-3 col-4 matefun-group-wrapper"
>
<i class="fa fa-users matefun-fa-user" aria-hidden="true"></i>
<p>
{{ grupo.grado + "°" + grupo.grupo + " - " + grupo.anio }}
</p>
</div>
<ngb-tabset *ngIf="grupoSeleccionado" [destroyOnHide]=false>
<ngb-tab title="Alumnos">
<ng-template ngbTabContent>
<div class="card">
<div>
<button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px; margin-right: 105px;" (click)="desseleccionarGrupo()" ngbPopover="Atras" data-placement="bottom" triggers="mouseenter:mouseleave">
<i class="fa fa-arrow-up"></i>
</button>
<p class="pull-right" style="margin-top: -34px; margin-right: 5px;">{{grupoSeleccionado.grado+ '°' + grupoSeleccionado.grupo+" - "+grupoSeleccionado.anio}}</p>
</div>
<div class="card-block">
<div class="row listado-grupos" style="min-height: 100px; overflow-y: scroll;">
<div *ngFor="let alumno of grupoSeleccionado.alumnos" (click)="seleccionarAlumno(alumno)" class="col-sm-3 " style="text-align: center;">
<i class="fa fa-user" style="font-size: 3em; cursor: pointer;color: #f95e5e;" aria-hidden="true"></i>
<p style="cursor: pointer;">{{alumno.apellido +', ' + alumno.nombre}}</p>
</div>
</div>
</div>
</div>
</ng-template>
</ngb-tab>
<ngb-tab title="Archivos">
<ng-template ngbTabContent>
<div class="card">
<div>
<button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px; margin-right: 105px;" (click)="desseleccionarGrupo()" ngbPopover="Atras" data-placement="bottom" triggers="mouseenter:mouseleave">
<i class="fa fa-arrow-up"></i>
</button>
<p class="pull-right" style="margin-top: -34px; margin-right: 5px;">{{grupoSeleccionado.grado+ '°' + grupoSeleccionado.grupo+" - "+grupoSeleccionado.anio}}</p>
</div>
<div class="card-block">
<div class="row listado-grupos" style="min-height: 100px; overflow-y: scroll;">
<div *ngFor="let archivo of grupoSeleccionado.archivos " (click)="seleccionarArchivo(archivo)" class="col-sm-3 col-4" style="text-align: center;">
<i class="fa fa-file-text" style="font-size: 3em; cursor: pointer;color: #ff8383" aria-hidden="true"></i>
<p style="cursor: pointer;">{{archivo.nombre}}</p>
</div>
</div>
</div>
</div>
</ng-template>
</ngb-tab>
</ngb-tabset>
</div>
</div>
<div class="col-lg-7">
<div class="card" *ngIf="alumnoSeleccionado">
<div class="card-block">
<div class="row listadoEntregasAlumnoGrupos" style="min-height: 100px; overflow-y: scroll;" >
<div *ngFor="let entrega of alumnoSeleccionado.archivos" (click)="seleccionarEntrega(entrega)" class="col-sm-3 col-4" style="text-align: center;">
<i [ngStyle]="" class="fa fa-file-text" style="font-size: 3em; cursor: pointer;" aria-hidden="true"></i>
<p style="cursor: pointer;">{{entrega.nombre}}</p>
</div>
<div *ngIf="alumnoSeleccionado.archivos.length == 0" style="width: 100%; text-align: center;">
<i style="color: rgb(220,220,220); font-size: 10em; padding: 0.1em" class="fa fa-file-text"></i>
<p>No hay entregas del alumno: {{alumnoSeleccionado.nombre +' '+alumnoSeleccionado.apellido }}</p>
</div>
</div>
</div>
<ul
ngbNav
#nav="ngbNav"
class="nav-tabs"
[animation]="false"
[destroyOnHide]="false"
>
<li [ngbNavItem]="1">
<a ngbNavLink>Alumnos</a>
<ng-template ngbNavContent>
<div class="card">
<div>
<button
class="btn btn-sm btn-secondary pull-right"
style="cursor: pointer; margin-top: -35px; margin-right: 1px"
(click)="desseleccionarGrupo()"
ngbPopover="{{
'i18n.action.goBack' | translate | titleCase
}}"
placement="bottom"
triggers="mouseenter:mouseleave"
>
<i class="fa fa-arrow-up"></i>
</button>
<p
class="pull-right"
style="margin-top: -34px; margin-right: 60px"
>
{{
grupoSeleccionado.grado +
"°" +
grupoSeleccionado.grupo +
" - " +
grupoSeleccionado.anio
}}
</p>
</div>
<div class="card-block">
<div
class="row listado-grupos"
style="min-height: 100px; overflow-y: scroll"
>
<div
*ngFor="let alumno of grupoSeleccionado.alumnos"
(click)="seleccionarAlumno(alumno)"
class="col-sm-3 matefun-group-wrapper"
>
<i
class="fa fa-user matefun-fa-user"
aria-hidden="true"
></i>
<p>
{{ alumno.apellido + ", " + alumno.nombre }}
</p>
</div>
</div>
</div>
</div>
<div class="card" *ngIf="alumnoSeleccionado == undefined && archivoSeleccionado == undefined">
<div class="card-block">
<div class="row previewArchivoNoSeleccionadoGrupos" style="min-height: 100px" >
<div style="width: 100%; text-align: center;">
<i style="color: rgb(220,220,220); font-size: 10em; padding: 0.1em" class="fa fa-file-text"></i>
</div>
</div>
</ng-template>
</li>
<li [ngbNavItem]="2">
<a ngbNavLink>Archivos</a>
<ng-template ngbNavContent>
<div class="card">
<div>
<button
class="btn btn-sm btn-secondary pull-right"
style="cursor: pointer; margin-top: -35px; margin-right: 1px"
(click)="desseleccionarGrupo()"
ngbPopover="{{
'i18n.action.goBack' | translate | titleCase
}}"
placement="bottom"
triggers="mouseenter:mouseleave"
>
<i class="fa fa-arrow-up"></i>
</button>
<p
class="pull-right"
style="margin-top: -34px; margin-right: 60px"
>
{{
grupoSeleccionado.grado +
"°" +
grupoSeleccionado.grupo +
" - " +
grupoSeleccionado.anio
}}
</p>
</div>
<div class="card-block">
<div
class="row listado-grupos"
style="min-height: 100px; overflow-y: scroll"
>
<div
*ngFor="let archivo of grupoSeleccionado.archivos"
(click)="seleccionarArchivo(archivo)"
class="col-sm-3 col-4 matefun-group-wrapper"
>
<i
class="fa fa-file-text matefun-fa-file"
aria-hidden="true"
></i>
<p>{{ archivo.nombre }}</p>
</div>
</div>
</div>
</div>
</ng-template>
</li>
</ul>
<div class="card" *ngIf="archivoSeleccionado" >
<div class="card-header">
<button *ngIf="tipoArchivo == 'entrega'" class="btn btn-sm btn-secondary pull-left mr-2" (click)="calificarEntrega()">
Calificar
</button>
<button *ngIf="esArchivoGrupo()" ngbPopover="Cargar/Editar" data-placement="bottom" triggers="mouseenter:mouseleave" class="btn btn-sm btn-secondary pull-left mr-2" (click)="cargarArchivoCompartido()">
<i class="fa fa-pencil"></i>
</button>
<div class="pull-left" >
Nombre: {{archivoSeleccionado?.nombre}} - Creado: {{archivoSeleccionado?.fechaCreacion | date}}
</div>
</div>
<codemirror class="codemirrorGrupos" [(ngModel)]="archivoSeleccionado.contenido" [config]="configCodeMirror" [ngStyle]="{'font-size': configCodeMirror.fontSize+'px'}">
</codemirror>
<div [ngbNavOutlet]="nav" class="mt-2" *ngIf="grupoSeleccionado"></div>
</div>
<div class="col-lg-7">
<div class="card" *ngIf="alumnoSeleccionado">
<div class="card-block">
<div
class="row listadoEntregasAlumnoGrupos"
style="min-height: 100px; overflow-y: scroll"
>
<div
*ngFor="let entrega of alumnoSeleccionado.archivos"
(click)="seleccionarEntrega(entrega)"
class="col-sm-3 col-4 matefun-file-wrapper"
>
<i
class="fa fa-file-text"
style="font-size: 3em"
aria-hidden="true"
></i>
<p>{{ entrega.nombre }}</p>
</div>
<div
*ngIf="alumnoSeleccionado.archivos.length == 0"
style="width: 100%; text-align: center"
>
<i
style="
color: rgb(220, 220, 220);
font-size: 10em;
padding: 0.1em;
"
class="fa fa-file-text"
></i>
<p>
No hay entregas del alumno:
{{
alumnoSeleccionado.nombre + " " + alumnoSeleccionado.apellido
}}
</p>
</div>
</div>
</div>
</div>
<div
class="card"
*ngIf="
alumnoSeleccionado == undefined && archivoSeleccionado == undefined
"
>
<div class="card-block">
<div
class="row previewArchivoNoSeleccionadoGrupos"
style="min-height: 100px"
>
<div style="width: 100%; text-align: center">
<i
style="
color: rgb(220, 220, 220);
font-size: 10em;
padding: 0.1em;
"
class="fa fa-file-text"
></i>
</div>
</div>
</div>
</div>
<div class="card" *ngIf="archivoSeleccionado">
<div class="card-header">
<button
*ngIf="tipoArchivo == 'entrega'"
class="btn btn-sm btn-secondary pull-left mr-2"
(click)="mostrarModalCalificarEntrega()"
>
Calificar
</button>
<button
*ngIf="esArchivoGrupo()"
ngbPopover="Cargar/Editar"
placement="bottom"
triggers="mouseenter:mouseleave"
class="btn btn-sm btn-secondary pull-left mr-2"
(click)="cargarArchivoCompartido()"
>
<i class="fa fa-pencil"></i>
</button>
<div class="pull-left">
Nombre: {{ archivoSeleccionado?.nombre }} - Creado:
{{ archivoSeleccionado?.fechaCreacion | date }}
</div>
</div>
<lt-codemirror
class="codemirrorGrupos"
[(ngModel)]="archivoSeleccionado.contenido"
[config]="configCodeMirror"
[ngStyle]="{ 'font-size': configCodeMirror.fontSize + 'px' }"
>
</lt-codemirror>
</div>
</div>
</div>
</div>
<matefun-modal-calificar-entrega
cancelLabel="{{ 'i18n.action.cancel' | translate | titleCase }}"
confirmLabel="{{ 'i18n.action.qualify' | translate | titleCase }}"
[detail]="archivoSeleccionado.evaluacion?.descripcion"
detailLabel="{{ 'i18n.object.detail' | translate | titleCase }}:"
header="{{ 'i18n.msg.file.qualify' | translate }}"
[opened]="modalQualifyDeliveryOpened"
[posibleStatuses]="posibleStatusesQualifyDelivery"
[score]="archivoSeleccionado.evaluacion?.nota"
scoreLabel="{{ 'i18n.object.score' | translate | titleCase }} (0-100):"
statusLabel="{{ 'i18n.object.state' | translate | titleCase }}:"
(cancelAction)="modalQualifyDeliveryOpened = false"
(close)="modalQualifyDelivery = false"
(confirmFileQualify)="confirmFileQualify($event)"
*ngIf="modalQualifyDelivery"
>
</matefun-modal-calificar-entrega>