aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/app/_pages
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/app/_pages')
-rw-r--r--frontend/src/app/_pages/add-model/add-model.component.css0
-rw-r--r--frontend/src/app/_pages/add-model/add-model.component.html189
-rw-r--r--frontend/src/app/_pages/add-model/add-model.component.spec.ts25
-rw-r--r--frontend/src/app/_pages/add-model/add-model.component.ts32
-rw-r--r--frontend/src/app/_pages/login-page/login-page.component.html38
-rw-r--r--frontend/src/app/_pages/login-page/login-page.component.ts55
-rw-r--r--frontend/src/app/_pages/register-page/register-page.component.ts16
7 files changed, 319 insertions, 36 deletions
diff --git a/frontend/src/app/_pages/add-model/add-model.component.css b/frontend/src/app/_pages/add-model/add-model.component.css
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/frontend/src/app/_pages/add-model/add-model.component.css
diff --git a/frontend/src/app/_pages/add-model/add-model.component.html b/frontend/src/app/_pages/add-model/add-model.component.html
new file mode 100644
index 00000000..bc292bb9
--- /dev/null
+++ b/frontend/src/app/_pages/add-model/add-model.component.html
@@ -0,0 +1,189 @@
+<div class="container p-3" style="background-color: rgb(249, 251, 253); min-height: 100%;">
+
+ <h2 class="my-4 text-primary"> Nov model: </h2>
+ <div class="form-group row align-items-center">
+ <label for="name" class="col-sm-2 col-form-label col-form-label-lg">Naziv</label>
+ <div class="col-sm-7">
+ <input type="text" class="form-control form-control-lg" name="name" placeholder="Naziv..."
+ [(ngModel)]="newModel.name">
+ </div>
+
+ <div class="col-sm-3">
+ <input type="text" class="form-control-plaintext text-center" id="dateCreated" placeholder="--/--/--"
+ value="{{newModel.dateCreated | date: 'dd/MM/yyyy'}}" readonly>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="desc" class="col-sm-2 col-form-label">Opis</label>
+ <div class="col-sm-10">
+ <textarea class="form-control" name="desc" rows="3" [(ngModel)]="newModel.description"></textarea>
+ </div>
+ </div>
+
+ <!--<div class="form-group row">
+ <label for="value" class="col-4">Vrednost</label>
+ <div class="input-group">
+ <input type="number" min="0" class="form-control" name="value" placeholder="Vrednost..."
+ [(ngModel)]="newModel.value">
+ <div class="input-group-prepend">
+ <span class="input-group-text">#</span>
+ </div>
+ <input type="number" min="1" class="form-control" name="count" placeholder="Br." [(ngModel)]="newModel.count">
+ <input type="text" class="form-control" name="sum" placeholder="Suma"
+ value="=({{newModel.value * newModel.count}})" readonly>
+ </div>
+ </div>-->
+
+ <div class="my-4">
+ <label for="dataset">Izvor podataka:</label>
+ <app-dataset-load id="dataset"></app-dataset-load>
+ </div>
+
+ <div class="form-group row my-2">
+ <div class="col-sm-2 col-form-label">
+ <label for="type" class="form-check-label">Podela test skupa:
+ <input class="mx-3 form-check-input" type="checkbox" [checked]="newModel.randomTestSet"
+ (change)="newModel.randomTestSet = !newModel.randomTestSet">
+ </label>
+
+ </div>
+ <div>
+ <input type="range" min="0.1" max="0.9" step="0.1" class="form-control" name="randomTestSetDistribution"
+ [disabled]="!newModel.randomTestSet" [(ngModel)]="newModel.randomTestSetDistribution">
+ </div>
+ </div>
+
+ <h3> Parametri treniranja </h3>
+
+ <div class="form-group row my-2">
+ <label for="type" class="col-sm-2 col-form-label">Tip mreže: </label>
+ <div class="col-sm-10">
+ <select id=typeOptions class="form-control" name="type" [(ngModel)]="newModel.type">
+ <option *ngFor="let option of Object.keys(ANNType); let optionName of Object.values(ANNType)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="encoding" class="col-sm-2 col-form-label">Enkoding: </label>
+ <div class="col-sm-10">
+ <select id=encodingOptions class="form-control" name="encoding" [(ngModel)]="newModel.encoding">
+ <option *ngFor="let option of Object.keys(Encoding); let optionName of Object.values(Encoding)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="optimizer" class="col-sm-2 col-form-label">Optimizacija: </label>
+ <div class="col-sm-10">
+ <select id=optimizerOptions class="form-control" name="optimizer" [(ngModel)]="newModel.optimizer">
+ <option *ngFor="let option of Object.keys(Optimizer); let optionName of Object.values(Optimizer)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="lossFunction" class="col-sm-2 col-form-label">Funkcija obrade gubitka: </label>
+ <div class="col-sm-10">
+ <select id=lossFunctionOptions class="form-control" name="lossFunction" [(ngModel)]="newModel.lossFunction">
+ <option *ngFor="let option of Object.keys(LossFunction); let optionName of Object.values(LossFunction)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="inputNeurons" class="col-sm-2 col-form-label">Broj ulaznih neurona: </label>
+ <div class="col-sm-10">
+ <input type="number" min="1" class="form-control" name="inputNeurons" [(ngModel)]="newModel.inputNeurons">
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="inputLayerActivationFunction" class="col-sm-2 col-form-label">Funkcija aktivacije ulaznog sloja:
+ </label>
+ <div class="col-sm-10">
+ <select id=inputLayerActivationFunctionOptions class="form-control" name="inputLayerActivationFunction"
+ [(ngModel)]="newModel.inputLayerActivationFunction">
+ <option
+ *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="hiddenLayerNeurons" class="col-sm-2 col-form-label">Broj neurona skrivenih slojeva: </label>
+ <div class="col-sm-10">
+ <input type="number" min="1" class="form-control" name="hiddenLayerNeurons"
+ [(ngModel)]="newModel.hiddenLayerNeurons">
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="hiddenLayerActivationFunction" class="col-sm-2 col-form-label">Funkcija aktivacije skrivenih
+ slojeva:
+ </label>
+ <div class="col-sm-10">
+ <select id=hiddenLayerActivationFunctionOptions class="form-control" name="hiddenLayerActivationFunction"
+ [(ngModel)]="newModel.hiddenLayerActivationFunction">
+ <option
+ *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="hiddenLayers" class="col-sm-2 col-form-label">Broj skrivenih slojeva: </label>
+ <div class="col-sm-10">
+ <input type="number" min="1" class="form-control" name="hiddenLayers" [(ngModel)]="newModel.hiddenLayers">
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="outputLayerActivationFunction" class="col-sm-2 col-form-label">Funkcija aktivacije izlaznog
+ sloja:
+ </label>
+ <div class="col-sm-10">
+ <select id=outputLayerActivationFunctionOptions class="form-control" name="outputLayerActivationFunction"
+ [(ngModel)]="newModel.outputLayerActivationFunction">
+ <option
+ *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group row my-2">
+ <label for="batchSize" class="col-sm-2 col-form-label">Broj uzorka po iteraciji: </label>
+ <div class="col-sm-10">
+ <input type="number" min="1" class="form-control" name="batchSize" [(ngModel)]="newModel.batchSize">
+ </div>
+ </div>
+
+ <div class=" form-group row my-4">
+ <div class="col-4"></div>
+ <button class="btn btn-lg btn-primary col-4" (click)="addModel();">Dodaj</button>
+ <div class="col-4"></div>
+ </div>
+
+</div> \ No newline at end of file
diff --git a/frontend/src/app/_pages/add-model/add-model.component.spec.ts b/frontend/src/app/_pages/add-model/add-model.component.spec.ts
new file mode 100644
index 00000000..2926e1c4
--- /dev/null
+++ b/frontend/src/app/_pages/add-model/add-model.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { AddModelComponent } from './add-model.component';
+
+describe('AddModelComponent', () => {
+ let component: AddModelComponent;
+ let fixture: ComponentFixture<AddModelComponent>;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ AddModelComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(AddModelComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/frontend/src/app/_pages/add-model/add-model.component.ts b/frontend/src/app/_pages/add-model/add-model.component.ts
new file mode 100644
index 00000000..3cb47d61
--- /dev/null
+++ b/frontend/src/app/_pages/add-model/add-model.component.ts
@@ -0,0 +1,32 @@
+import { Component, OnInit } from '@angular/core';
+import Model from 'src/app/_data/Model';
+import { ANNType, Encoding, ActivationFunction, LossFunction, Optimizer } from 'src/app/_data/Model';
+
+@Component({
+ selector: 'app-add-model',
+ templateUrl: './add-model.component.html',
+ styleUrls: ['./add-model.component.css']
+})
+export class AddModelComponent implements OnInit {
+
+ newModel: Model
+
+ ANNType = ANNType;
+ Encoding = Encoding;
+ ActivationFunction = ActivationFunction;
+ LossFunction = LossFunction;
+ Optimizer = Optimizer;
+ Object = Object;
+
+ constructor() {
+ this.newModel = new Model();
+ }
+
+ ngOnInit(): void {
+ }
+
+ addModel() {
+ //TODO
+ }
+
+}
diff --git a/frontend/src/app/_pages/login-page/login-page.component.html b/frontend/src/app/_pages/login-page/login-page.component.html
index 906eaba6..8deb5290 100644
--- a/frontend/src/app/_pages/login-page/login-page.component.html
+++ b/frontend/src/app/_pages/login-page/login-page.component.html
@@ -1,18 +1,33 @@
+<!--<script>
+ $(document).ready(function(){
+ $(".btn").click(function(){
+ $("#exampleModal").modal('show');
+ });
+
+ $('#exampleModal').modal({
+     backdrop: 'static',
+     keyboard: false
+ });
+ });
+</script>-->
+
+<!-- Button trigger modal -->
+<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#modalForLogin" (click)="openModal()">
+ Open Modal
+ </button>
+
+<!--
<div style="min-height: 100vh; position: relative;">
- <!-- TODO : <app-navbar [activeNav]="'login'"></app-navbar>-->
-
<div class="container p-5 rounded-3 shadow-sm border" style="max-width: 50em; margin-top: 50px;">
<h3 class="text-center pb-5">Prijavite se</h3>
<form>
- <!-- Email input -->
<div class="form-outline mb-4">
- <label class="form-label" for="email">Email adresa</label>
- <input [(ngModel)]="email" name="email" type="email" id="email" class="form-control form-control-lg"
- placeholder="Unesite email adresu..." />
+ <label class="form-label" for="username">Korisničko ime</label>
+ <input [(ngModel)]="username" name="username" type="text" id="username"
+ class="form-control form-control-lg" placeholder="Unesite korisničko ime..." />
</div>
- <!-- Password input -->
<div class="form-outline mb-3">
<label class="form-label" for="password">Lozinka</label>
<input [(ngModel)]="password" name="password" type="password" id="password"
@@ -20,17 +35,15 @@
</div>
<div class="text-center text-lg-start mt-4 pt-2">
- <!-- Pogresna lozinka -->
<p *ngIf="wrongCreds" class="small fw-bold mt-2 pt-1 mb-0 text-danger">Lozinka ili e-mail su pogrešni
</p>
- <!-- Nepotvrdjena registracija
- <p *ngIf="notApproved" class="small fw-bold mt-2 pt-1 mb-0 text-danger">Vaša registracija još uvek nije potvrđena</p>-->
<br>
<button type="button" class="btn btn-primary btn-lg"
style="padding-left: 2.5rem; padding-right: 2.5rem;" (click)="onSubmit()">Prijava
</button>
+ <br>
<p class="small fw-bold mt-2 pt-1 mb-0">Još uvek nemate nalog?
<a routerLink="/register" class="link-danger">Registrujte se</a>
</p>
@@ -38,6 +51,5 @@
</form>
</div>
- <!-- TODO: <app-footer></app-footer>-->
-
-</div> \ No newline at end of file
+</div>
+--> \ No newline at end of file
diff --git a/frontend/src/app/_pages/login-page/login-page.component.ts b/frontend/src/app/_pages/login-page/login-page.component.ts
index f8b429e3..e5366283 100644
--- a/frontend/src/app/_pages/login-page/login-page.component.ts
+++ b/frontend/src/app/_pages/login-page/login-page.component.ts
@@ -1,40 +1,63 @@
import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
import { CookieService } from 'ngx-cookie-service';
import { AuthService } from 'src/app/_services/auth.service';
+import { LoginModalComponent } from 'src/app/_modals/login-modal/login-modal.component';
+import { MDBModalRef, MDBModalService } from 'ng-uikit-pro-standard';
+
+
+declare var window: any;
+
@Component({
selector: 'app-login-page',
templateUrl: './login-page.component.html',
- styleUrls: ['./login-page.component.css']
+ styleUrls: ['./login-page.component.css'],
+
})
-export class LoginPageComponent implements OnInit {
- email: string = '';
+export class LoginPageComponent{
+
+ modalRef?: MDBModalRef;
+
+ //email: string = '';
+ username: string = '';
password: string = '';
public wrongCreds: boolean = false; //RAZMOTRITI
//public notApproved: boolean = false; //RAZMOTRITI
- pattEmail: RegExp = /^[a-zA-Z0-9]+([\.\-\+][a-zA-Z0-9]+)*\@([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}$/;
+ formModal: any;
constructor(
private authService: AuthService,
- private cookie: CookieService
+ private cookie: CookieService,
+ private router: Router,
+ private modalService: MDBModalService
) { }
+ openModal() {
+ //this.modalRef = this.modalService.show(LoginModalComponent);
+ }
+ /*
ngOnInit(): void {
+ this.formModal = new window.bootstrap.Modal(
+ document.getElementById("exampleModal")
+ );
}
- onSubmit() {
- if (!this.pattEmail.test(this.email)) {
- console.warn('Bad email!');
- return;
- }
- else {
- this.authService.login(this.email, this.password).subscribe((response) => {
- console.log(response);
- this.cookie.set('token', response);
- })
- }
+ openModal() {
+ this.formModal.show();
+ //console.log("ok");
+ //(<HTMLInputElement>document.getElementById("exampleModal")).style.display = "block";
}
+ onSubmit() {
+
+ this.authService.login(this.username, this.password).subscribe((response) => {
+ console.log(response);
+ this.cookie.set('token', response);
+ this.router.navigate(['add-model']);
+ });
+ }
+*/
}
diff --git a/frontend/src/app/_pages/register-page/register-page.component.ts b/frontend/src/app/_pages/register-page/register-page.component.ts
index e8d4c036..712fc55e 100644
--- a/frontend/src/app/_pages/register-page/register-page.component.ts
+++ b/frontend/src/app/_pages/register-page/register-page.component.ts
@@ -104,7 +104,7 @@ export class RegisterPageComponent implements OnInit {
this.firstNameValidation();
this.lastNameValidation();
- this.nickNameValidation();
+ //this.nickNameValidation();
this.emailValidation();
this.passwordValidation();
@@ -114,19 +114,21 @@ export class RegisterPageComponent implements OnInit {
let user = {
firstName: this.firstName,
lastName: this.lastName,
- nickName: this.nickName,
- email: this.email,
- password: this.pass1
+ username: this.nickName,
+ password: this.pass1,
+ email: this.email
}
this.authService.register(user)
.subscribe(
(response) => {
console.log(response);
- /*if ()
+ if (response === 'User added')
this.router.navigate(['/login']); //registracija uspesna, idi na login
- else if ()
- alert('Nalog sa unetim email-om već postoji!');*/
+ else if (response === 'Email Already Exists')
+ alert('Nalog sa unetim email-om već postoji!');
+ else if (response === 'Username Already Exists')
+ alert('Nalog sa unetim korisnićkim imenom već postoji!');
}
);
}