aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/angular.json7
-rw-r--r--frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.css3
-rw-r--r--frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.html12
-rw-r--r--frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.spec.ts25
-rw-r--r--frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.ts65
-rw-r--r--frontend/src/app/_elements/graph/graph.component.html2
-rw-r--r--frontend/src/app/_elements/navbar/navbar.component.html30
-rw-r--r--frontend/src/app/_elements/notifications/notifications.component.ts1
-rw-r--r--frontend/src/app/_elements/playlist/playlist.component.css57
-rw-r--r--frontend/src/app/_elements/playlist/playlist.component.html19
-rw-r--r--frontend/src/app/_elements/playlist/playlist.component.spec.ts25
-rw-r--r--frontend/src/app/_elements/playlist/playlist.component.ts49
-rw-r--r--frontend/src/app/_elements/select-item-list/select-item-list.component.css0
-rw-r--r--frontend/src/app/_elements/select-item-list/select-item-list.component.html1
-rw-r--r--frontend/src/app/_elements/select-item-list/select-item-list.component.spec.ts25
-rw-r--r--frontend/src/app/_elements/select-item-list/select-item-list.component.ts15
-rw-r--r--frontend/src/app/_pages/home/home.component.html46
-rw-r--r--frontend/src/app/app.module.ts8
-rw-r--r--frontend/src/app/training/training.component.html17
-rw-r--r--frontend/src/assets/images/add_model_background.jpgbin56906 -> 0 bytes
-rw-r--r--frontend/src/assets/images/logo_igrannonica_temp - Copy.pngbin0 -> 16336 bytes
-rw-r--r--frontend/src/assets/images/logo_igrannonica_temp.pngbin0 -> 29448 bytes
-rw-r--r--frontend/src/styles.css94
23 files changed, 441 insertions, 60 deletions
diff --git a/frontend/angular.json b/frontend/angular.json
index 6653e4b1..d1983d31 100644
--- a/frontend/angular.json
+++ b/frontend/angular.json
@@ -108,5 +108,10 @@
}
}
},
- "defaultProject": "frontend"
+ "defaultProject": "frontend",
+ "cli": {
+ "warnings": {
+ "versionMismatch": false
+ }
+ }
} \ No newline at end of file
diff --git a/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.css b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.css
new file mode 100644
index 00000000..3d4a2432
--- /dev/null
+++ b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.css
@@ -0,0 +1,3 @@
+.carousel {
+ overscroll-behavior: contain;
+} \ No newline at end of file
diff --git a/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.html b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.html
new file mode 100644
index 00000000..f52aee12
--- /dev/null
+++ b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.html
@@ -0,0 +1,12 @@
+<h1>
+ {{scroll}}
+</h1>
+<div #wrapper class="carousel position-relative" style="overflow-y: scroll;" [style]="'height:'+ shownElements * height+'rem;'">
+ <div class="my-2" *ngFor="let item of itemsToShow; let i = index;" [style]="'height:'+ height+'rem; width: 90%; margin: auto;'">
+ <div class="position-absolute text-dark bg-white" [style]="calcStyle(i)">
+ <a class="stretched-link" (click)="clickItem">
+ <p class="title">{{item.name}}</p>
+ </a>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.spec.ts b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.spec.ts
new file mode 100644
index 00000000..0c736e90
--- /dev/null
+++ b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CarouselVerticalComponent } from './carousel-vertical.component';
+
+describe('CarouselVerticalComponent', () => {
+ let component: CarouselVerticalComponent;
+ let fixture: ComponentFixture<CarouselVerticalComponent>;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ CarouselVerticalComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(CarouselVerticalComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.ts b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.ts
new file mode 100644
index 00000000..d8849ea6
--- /dev/null
+++ b/frontend/src/app/_elements/carousel-vertical/carousel-vertical.component.ts
@@ -0,0 +1,65 @@
+import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';
+
+@Component({
+ selector: 'app-carousel-vertical',
+ templateUrl: './carousel-vertical.component.html',
+ styleUrls: ['./carousel-vertical.component.css']
+})
+export class CarouselVerticalComponent implements OnInit, AfterViewInit {
+
+ @ViewChild('wrapper') wrapper!: ElementRef;
+
+ @Input() items!: any[];
+
+ itemsToShow: any[] = [];
+
+ @Input() type: string = "Object";
+
+ scroll = 0;
+ height = 9; //rem
+
+ currentIndex = 0;
+
+ @Input() shownElements: number = 5;
+
+ constructor() {
+ }
+
+ ngOnInit(): void {
+ this.itemsToShow = [...this.items.slice(0, this.shownElements)];
+ console.log('0', this.itemsToShow);
+ }
+
+ ngAfterViewInit(): void {
+ const container = this.wrapper.nativeElement
+
+ container.addEventListener('scroll', (event: Event) => {
+ this.scroll = (container.scrollTop / (container.scrollHeight - container.clientHeight));
+ if (this.scroll == 1.0) {
+ //console.log('removed', this.itemsToShow.splice(0, 1)[0].name);
+ const itemToAdd = this.items[(this.currentIndex + this.shownElements) % (this.items.length - 1)];
+ this.itemsToShow.push(itemToAdd);
+ //console.log('added', itemToAdd.name);
+ this.currentIndex = (this.currentIndex + 1);
+ container.scrollTop = (container.scrollHeight - container.clientHeight) / 2;
+ }
+ });
+ }
+
+ clickItem(index: number) {
+ }
+
+ calcVisibility(i: number) {
+ //return ((Math.sin((((i) / this.shownElements) - this.scroll) * Math.PI) + 1) / 2)
+ const iPercent = (i + 1 - this.scroll) / this.shownElements;
+ return iPercent;
+ }
+
+ calcStyle(i: number) {
+ const a = this.calcVisibility(i)
+ const v = (Math.sin(a * Math.PI) + 1) / 2;
+ return `transform: translateY(${v * 100}%) scale(${v}) perspective(${v * 200}em) rotateX(${(1 - a) * 180 - 90}deg);
+ opacity: ${v};
+ height: ${this.height}rem;`;
+ }
+}
diff --git a/frontend/src/app/_elements/graph/graph.component.html b/frontend/src/app/_elements/graph/graph.component.html
index 1c21fb6c..92e9df38 100644
--- a/frontend/src/app/_elements/graph/graph.component.html
+++ b/frontend/src/app/_elements/graph/graph.component.html
@@ -1,3 +1,3 @@
<div #graphWrapper class="w-100" style="height: 16rem;">
- <canvas #graphCanvas class="border"></canvas>
+ <canvas #graphCanvas></canvas>
</div> \ No newline at end of file
diff --git a/frontend/src/app/_elements/navbar/navbar.component.html b/frontend/src/app/_elements/navbar/navbar.component.html
index 7d0c4cd8..41105405 100644
--- a/frontend/src/app/_elements/navbar/navbar.component.html
+++ b/frontend/src/app/_elements/navbar/navbar.component.html
@@ -2,32 +2,24 @@
<div class="container">
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
<a routerLink="" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none">
- <img src="../../../assets/svg/logo_no_text.svg" class="bi me-2" width="64" height="40">
+ <img src="../../../assets/images/logo_igrannonica_temp.png" class="bi me-2" width="64" height="64">
</a>
<ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
- <li><a routerLink="" class="nav-link px-2"
- [class]="(currentUrl === '') ? 'text-secondary' : 'text-white'">Početna</a></li>
- <li><a routerLink="experiment" class="nav-link px-2"
- [class]="(currentUrl === '/experiment') ? 'text-secondary' : 'text-white'">Napravi eksperiment</a>
+ <li><a routerLink="" class="nav-link px-2" [class]="(currentUrl === '') ? 'text-secondary' : 'text-white'">Početna</a></li>
+ <li><a routerLink="experiment" class="nav-link px-2" [class]="(currentUrl === '/experiment') ? 'text-secondary' : 'text-white'">Napravi eksperiment</a>
</li>
- <li><a routerLink="training" class="nav-link px-2"
- [class]="(currentUrl === '/training') ? 'text-secondary' : 'text-white'">Treniraj model</a>
+ <li><a routerLink="training" class="nav-link px-2" [class]="(currentUrl === '/training') ? 'text-secondary' : 'text-white'">Treniraj model</a>
</li>
- <li><a routerLink="my-predictors" class="nav-link px-2"
- [class]="(currentUrl === '/my-predictors') ? 'text-secondary' : 'text-white' + (shared.loggedIn) ? '' : 'disabled'">Predvidi</a>
+ <li><a routerLink="my-predictors" class="nav-link px-2" [class]="(currentUrl === '/my-predictors') ? 'text-secondary' : 'text-white' + (shared.loggedIn) ? '' : 'disabled'">Predvidi</a>
</li>
</ul>
<div *ngIf="shared.loggedIn" class="dropdown text-end">
- <a href="#" class="d-block link-light text-decoration-none dropdown-toggle" id="dropdownUser1"
- data-bs-toggle="dropdown" aria-expanded="false">
- <img [src]="'/assets/profilePictures/'+ shared.photoId +'.png'" alt="mdo" width="32" height="32"
- class="rounded-circle">
+ <a href="#" class="d-block link-light text-decoration-none dropdown-toggle" id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false">
+ <img [src]="'/assets/profilePictures/'+ shared.photoId +'.png'" alt="mdo" width="32" height="32" class="rounded-circle">
</a>
- <ul class="dropdown-menu text-small" aria-labelledby="dropdownUser1"
- style="position: absolute; inset: 0px 0px auto auto; margin: 0px; transform: translate(0px, 34px);"
- data-popper-placement="bottom-end">
+ <ul class="dropdown-menu text-small" aria-labelledby="dropdownUser1" style="position: absolute; inset: 0px 0px auto auto; margin: 0px; transform: translate(0px, 34px);" data-popper-placement="bottom-end">
<li><a class="dropdown-item" routerLink="add-model">Nov model...</a></li>
<li><a class="dropdown-item" routerLink="settings">Podešavanja</a></li>
<li><a class="dropdown-item" routerLink="profile">Moj profil</a></li>
@@ -38,12 +30,10 @@
</ul>
</div>
<div *ngIf="!shared.loggedIn" class="dropdown text-end">
- <button type="button" mat-raised-button color="primary" class="mx-2" data-bs-toggle="modal"
- data-bs-target="#modalForLogin">
+ <button type="button" mat-raised-button color="primary" class="mx-2" data-bs-toggle="modal" data-bs-target="#modalForLogin">
Prijavi se
</button>
- <button type="button" mat-raised-button color="primary" data-bs-toggle="modal"
- data-bs-target="#modalForRegister">
+ <button type="button" mat-raised-button color="primary" data-bs-toggle="modal" data-bs-target="#modalForRegister">
Registruj se
</button>
</div>
diff --git a/frontend/src/app/_elements/notifications/notifications.component.ts b/frontend/src/app/_elements/notifications/notifications.component.ts
index 9b460240..d64530b9 100644
--- a/frontend/src/app/_elements/notifications/notifications.component.ts
+++ b/frontend/src/app/_elements/notifications/notifications.component.ts
@@ -25,6 +25,7 @@ export class NotificationsComponent implements OnInit {
const existingNotification = this.notifications.find(x => x.id === mId)
const progress = ((currentEpoch + 1) / totalEpochs);
console.log("Ukupno epoha", totalEpochs, "Trenutna epoha:", currentEpoch);
+ console.log("stat:", stat);
if (!existingNotification)
this.notifications.push(new Notification(`Treniranje modela: ${mName}`, mId, progress, true));
else {
diff --git a/frontend/src/app/_elements/playlist/playlist.component.css b/frontend/src/app/_elements/playlist/playlist.component.css
new file mode 100644
index 00000000..7ce320d9
--- /dev/null
+++ b/frontend/src/app/_elements/playlist/playlist.component.css
@@ -0,0 +1,57 @@
+.ns-wrapper {
+ width: 100%;
+ max-width: 800px;
+ max-height: 600px;
+ height: 100%;
+ transform-style: preserve-3d;
+ display: flex;
+ justify-content: center;
+ flex-direction: column;
+ align-items: center;
+}
+
+.ns-cards {
+ position: relative;
+ width: 300%;
+ height: 36rem;
+ margin-bottom: 20px;
+}
+
+.ns-card {
+ position: absolute;
+ width: 60%;
+ height: 100%;
+ left: 0;
+ right: 0;
+ margin: auto;
+ transition: transform 0.4s ease;
+ cursor: pointer;
+}
+
+input[type=radio] {
+ display: none;
+}
+
+#item-1:checked~.ns-cards #view-item-3,
+#item-2:checked~.ns-cards #view-item-1,
+#item-3:checked~.ns-cards #view-item-2 {
+ transform: translatex(-40%) scale(0.8);
+ opacity: 0.4;
+ z-index: 0;
+}
+
+#item-1:checked~.ns-cards #view-item-2,
+#item-2:checked~.ns-cards #view-item-3,
+#item-3:checked~.ns-cards #view-item-1 {
+ transform: translatex(40%) scale(0.8);
+ opacity: 0.4;
+ z-index: 0;
+}
+
+#item-1:checked~.ns-cards #view-item-1,
+#item-2:checked~.ns-cards #view-item-2,
+#item-3:checked~.ns-cards #view-item-3 {
+ transform: translatex(0) scale(1);
+ opacity: 1;
+ z-index: 1;
+} \ No newline at end of file
diff --git a/frontend/src/app/_elements/playlist/playlist.component.html b/frontend/src/app/_elements/playlist/playlist.component.html
new file mode 100644
index 00000000..fdb426ed
--- /dev/null
+++ b/frontend/src/app/_elements/playlist/playlist.component.html
@@ -0,0 +1,19 @@
+<div class="ns-wrapper" *ngIf="tableDatas && tableDatas.length==3">
+ <input type="radio" name="slider" id="item-1" value="0" [(ngModel)]="selectedId">
+ <input type="radio" name="slider" id="item-2" value="1" [(ngModel)]="selectedId">
+ <input type="radio" name="slider" id="item-3" value="2" [(ngModel)]="selectedId">
+ <div class="ns-cards">
+ <label class="ns-card bg-light overflow-auto" for="item-1" id="view-item-1">
+ <app-datatable [tableData]="tableDatas[0]"></app-datatable>
+ </label>
+ <label class="ns-card bg-light overflow-auto" for="item-2" id="view-item-2">
+ <app-datatable [tableData]="tableDatas[1]"></app-datatable>
+ </label>
+ <label class="ns-card bg-light overflow-auto" for="item-3" id="view-item-3">
+ <app-datatable [tableData]="tableDatas[2]"></app-datatable>
+ </label>
+ </div>
+ <div class="ns-infobox">
+ <app-item-dataset [dataset]="datasets[getIndex(selectedId)]"></app-item-dataset>
+ </div>
+</div> \ No newline at end of file
diff --git a/frontend/src/app/_elements/playlist/playlist.component.spec.ts b/frontend/src/app/_elements/playlist/playlist.component.spec.ts
new file mode 100644
index 00000000..0afe8041
--- /dev/null
+++ b/frontend/src/app/_elements/playlist/playlist.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PlaylistComponent } from './playlist.component';
+
+describe('PlaylistComponent', () => {
+ let component: PlaylistComponent;
+ let fixture: ComponentFixture<PlaylistComponent>;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ PlaylistComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PlaylistComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/frontend/src/app/_elements/playlist/playlist.component.ts b/frontend/src/app/_elements/playlist/playlist.component.ts
new file mode 100644
index 00000000..74527b39
--- /dev/null
+++ b/frontend/src/app/_elements/playlist/playlist.component.ts
@@ -0,0 +1,49 @@
+import { Component, Input, OnInit } from '@angular/core';
+import Dataset from 'src/app/_data/Dataset';
+import { TableData } from 'src/app/_elements/datatable/datatable.component';
+import { CsvParseService } from 'src/app/_services/csv-parse.service';
+import { DatasetsService } from 'src/app/_services/datasets.service';
+
+@Component({
+ selector: 'app-playlist',
+ templateUrl: './playlist.component.html',
+ styleUrls: ['./playlist.component.css']
+})
+export class PlaylistComponent implements OnInit {
+
+ selectedId: string = "0";
+
+ @Input() datasets!: Dataset[];
+
+ tableDatas?: TableData[];
+
+ constructor(private datasetService: DatasetsService, private csv: CsvParseService) {
+
+ }
+
+ getIndex(str: string) {
+ return parseInt(str);
+ }
+
+ ngOnInit(): void {
+ this.tableDatas = [];
+
+ this.datasets.forEach((dataset, index) => {
+ if (index < 3) {
+ this.datasetService.getDatasetFile(dataset.fileId).subscribe((file: string | undefined) => {
+ if (file) {
+ const tableData = new TableData();
+ tableData.hasInput = true;
+ tableData.loaded = true;
+ tableData.numRows = dataset.rowCount;
+ tableData.numCols = dataset.columnInfo.length;
+ tableData.data = this.csv.csvToArray(file, (dataset.delimiter == "razmak") ? " " : (dataset.delimiter == "") ? "," : dataset.delimiter);
+ this.tableDatas!.push(tableData);
+ }
+ });
+ }
+ });
+
+ console.log(this.tableDatas);
+ }
+}
diff --git a/frontend/src/app/_elements/select-item-list/select-item-list.component.css b/frontend/src/app/_elements/select-item-list/select-item-list.component.css
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/frontend/src/app/_elements/select-item-list/select-item-list.component.css
diff --git a/frontend/src/app/_elements/select-item-list/select-item-list.component.html b/frontend/src/app/_elements/select-item-list/select-item-list.component.html
new file mode 100644
index 00000000..b92b7adb
--- /dev/null
+++ b/frontend/src/app/_elements/select-item-list/select-item-list.component.html
@@ -0,0 +1 @@
+<p>select-item-list works!</p>
diff --git a/frontend/src/app/_elements/select-item-list/select-item-list.component.spec.ts b/frontend/src/app/_elements/select-item-list/select-item-list.component.spec.ts
new file mode 100644
index 00000000..0abc7ab5
--- /dev/null
+++ b/frontend/src/app/_elements/select-item-list/select-item-list.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SelectItemListComponent } from './select-item-list.component';
+
+describe('SelectItemListComponent', () => {
+ let component: SelectItemListComponent;
+ let fixture: ComponentFixture<SelectItemListComponent>;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ SelectItemListComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SelectItemListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/frontend/src/app/_elements/select-item-list/select-item-list.component.ts b/frontend/src/app/_elements/select-item-list/select-item-list.component.ts
new file mode 100644
index 00000000..f6aae7a0
--- /dev/null
+++ b/frontend/src/app/_elements/select-item-list/select-item-list.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-select-item-list',
+ templateUrl: './select-item-list.component.html',
+ styleUrls: ['./select-item-list.component.css']
+})
+export class SelectItemListComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit(): void {
+ }
+
+}
diff --git a/frontend/src/app/_pages/home/home.component.html b/frontend/src/app/_pages/home/home.component.html
index 8294a73b..b673d074 100644
--- a/frontend/src/app/_pages/home/home.component.html
+++ b/frontend/src/app/_pages/home/home.component.html
@@ -1,5 +1,8 @@
<div class="d-flex flex-column align-items-center">
- <img src="../../../assets/svg/logo.svg" class="bi me-2" width="256" height="256" role="img">
+ <div class="ann-logo">
+ <img src="../../../assets/images/logo_igrannonica_temp.png" class="bi me-2" width="256" height="256" role="img">
+ </div>
+
<div *ngIf="shared.loggedIn" class="d-flex flex-column align-items-center">
<div class="rounded-pill bg-light px-4 m-4 shadow-accent position-relative">
@@ -11,7 +14,7 @@
</div>
<div id="cards" class="row align-items-view align-items-stretch justify-content-center">
- <div class="card shadowed col-3 m-3" style="width: 18rem;">
+ <div class="card shadowed bg-light text-light col-3 m-3" style="width: 18rem;">
<div class="card-body">
<mat-icon width="48px" height="48px" style="font-size: 48px; margin-left: 50%; transform: translateX(-100%);">storage</mat-icon>
<h3 class="card-title my-2">Moji izvori podataka</h3>
@@ -20,7 +23,7 @@
</p>
</div>
</div>
- <div class="card shadowed col-3 m-3" style="width: 18rem;">
+ <div class="card shadowed bg-light text-light col-3 m-3" style="width: 18rem;">
<div class="card-body">
<mat-icon width="48px" height="48px" style="font-size: 48px; margin-left: 50%; transform: translateX(-100%);">model_training
</mat-icon>
@@ -30,7 +33,7 @@
</p>
</div>
</div>
- <div class="card shadowed col-3 m-3" style="width: 18rem;">
+ <div class="card shadowed bg-light text-light col-3 m-3" style="width: 18rem;">
<div class="card-body">
<mat-icon width="48px" height="48px" style="font-size: 48px; margin-left: 50%; transform: translateX(-100%);">batch_prediction
</mat-icon>
@@ -44,23 +47,28 @@
</div>
- <div class="rounded-pill bg-light px-4 m-2 mt-5">
- <h2 class="my-2">Pogledajte javne izvore podataka!</h2>
- </div>
- <app-carousel [items]="publicDatasets" [type]="'Dataset'">
- </app-carousel>
+ <div *ngIf="publicDatasets.length > 0" class="my-5">
+ <!--<div class="rounded-pill bg-light px-4 m-2 mt-5 text-center">
+ <h2 class="my-2">Pogledajte javne izvore podataka!</h2>
+ </div>
+ <app-carousel [items]="publicDatasets" [type]="'Dataset'">
+ </app-carousel>-->
+ <app-playlist [datasets]="publicDatasets"></app-playlist>
- <div class="rounded-pill bg-light p-4 m-2 text-center position-relative">
- <a routerLink="browse-datasets" class="stretched-link">Pogledaj sve javne izvore podataka...</a>
+ <div class="rounded-pill bg-light p-4 m-2 text-center position-relative">
+ <a routerLink="browse-datasets" class="stretched-link">Pogledaj sve javne izvore podataka...</a>
+ </div>
</div>
- <div class="rounded-pill bg-light px-4 m-2 mt-5">
- <h2 class="my-2">Iskoristite već trenirane modele!</h2>
- </div>
- <app-carousel [items]="publicPredictors" [type]="'Predictor'">
- </app-carousel>
+ <!--<div *ngIf="publicPredictors.length > 0">
+ <div class="rounded-pill bg-light px-4 m-2 mt-5 text-center">
+ <h2 class="my-2">Iskoristite već trenirane modele!</h2>
+ </div>
+ <app-carousel [items]="publicPredictors" [type]="'Predictor'">
+ </app-carousel>
- <div class="rounded-pill bg-light p-4 m-2 text-center position-relative">
- <a routerLink="browse-predictors" class="stretched-link">Pogledaj sve javne trenirane modele...</a>
- </div>
+ <div class="rounded-pill bg-light p-4 m-2 text-center position-relative">
+ <a routerLink="browse-predictors" class="stretched-link">Pogledaj sve javne trenirane modele...</a>
+ </div>
+ </div>-->
</div> \ No newline at end of file
diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts
index 26417373..7862c872 100644
--- a/frontend/src/app/app.module.ts
+++ b/frontend/src/app/app.module.ts
@@ -50,6 +50,9 @@ import { YesNoDialogComponent } from './_modals/yes-no-dialog/yes-no-dialog.comp
import { Configuration } from './configuration.service';
import { PlaygroundComponent } from './_pages/playground/playground.component';
import { GradientBackgroundComponent } from './_elements/gradient-background/gradient-background.component';
+import { CarouselVerticalComponent } from './_elements/carousel-vertical/carousel-vertical.component';
+import { SelectItemListComponent } from './_elements/select-item-list/select-item-list.component';
+import { PlaylistComponent } from './_elements/playlist/playlist.component';
export function initializeApp(appConfig: Configuration) {
return () => appConfig.load();
@@ -91,7 +94,10 @@ export function initializeApp(appConfig: Configuration) {
ItemExperimentComponent,
YesNoDialogComponent,
PlaygroundComponent,
- GradientBackgroundComponent
+ GradientBackgroundComponent,
+ CarouselVerticalComponent,
+ SelectItemListComponent,
+ PlaylistComponent
],
imports: [
BrowserModule,
diff --git a/frontend/src/app/training/training.component.html b/frontend/src/app/training/training.component.html
index 0ce4cc89..9f2481a2 100644
--- a/frontend/src/app/training/training.component.html
+++ b/frontend/src/app/training/training.component.html
@@ -2,36 +2,33 @@
<h1>Trenirajte veštačku neuronsku mrežu</h1>
</div>
<div id="wrapper" class="mb-4">
- <div id="container" class="container p-5 row" style="background-color: white; min-height: 100%;">
+ <div id="container" class="container p-5 row text-light">
<div class="col"></div>
<div class="col-10">
<h2>1. Izaberite eksperiment iz kolekcije</h2>
<div class="px-5 mt-5 mb-3">
- <input type="text" class="form-control" placeholder="Pretraga"
- [(ngModel)]="term">
+ <input type="text" class="form-control" placeholder="Pretraga" [(ngModel)]="term">
</div>
<div class="overflow-auto px-5" style="max-height: 500px;">
<ul class="list-group">
- <li class="list-group-item p-3" *ngFor="let experiment of myExperiments|filter:term"
- [ngClass]="{'selectedExperimentClass': this.selectedExperiment == experiment}">
- <app-item-experiment [experiment]="experiment"
- (click)="selectThisExperiment(experiment);"></app-item-experiment>
+ <li class="list-group-item p-3" *ngFor="let experiment of myExperiments|filter:term" [ngClass]="{'selectedExperimentClass': this.selectedExperiment == experiment}">
+ <app-item-experiment [experiment]="experiment" (click)="selectThisExperiment(experiment);"></app-item-experiment>
</li>
</ul>
</div>
-
+
<h2 class="mt-5 mb-2">2. Izaberite model</h2>
<app-model-load (selectedModelChangeEvent)="selectModel($event)"></app-model-load>
-
+
<h2 class="my-5">3. Treniranje modela</h2>
<div class="d-flex flex-row justify-content-center align-items-center my-3">
<button class="btn btn-lg col-4" style="background-color:#003459; color:white;" (click)="trainModel();">Treniraj
model</button>
</div>
-
+
<h2 class="mt-5">Rezultati treniranja</h2>
<div class="m-3" *ngIf="trainingResult">
<h2 class="my-2">Rezultati treniranja:</h2>
diff --git a/frontend/src/assets/images/add_model_background.jpg b/frontend/src/assets/images/add_model_background.jpg
deleted file mode 100644
index d86f0566..00000000
--- a/frontend/src/assets/images/add_model_background.jpg
+++ /dev/null
Binary files differ
diff --git a/frontend/src/assets/images/logo_igrannonica_temp - Copy.png b/frontend/src/assets/images/logo_igrannonica_temp - Copy.png
new file mode 100644
index 00000000..a9d7d396
--- /dev/null
+++ b/frontend/src/assets/images/logo_igrannonica_temp - Copy.png
Binary files differ
diff --git a/frontend/src/assets/images/logo_igrannonica_temp.png b/frontend/src/assets/images/logo_igrannonica_temp.png
new file mode 100644
index 00000000..9e8e8855
--- /dev/null
+++ b/frontend/src/assets/images/logo_igrannonica_temp.png
Binary files differ
diff --git a/frontend/src/styles.css b/frontend/src/styles.css
index b6555f43..5e59e735 100644
--- a/frontend/src/styles.css
+++ b/frontend/src/styles.css
@@ -4,18 +4,96 @@ body {
background-color: #003459;
}
-.shadowed {
- box-shadow: rgba(240, 46, 170, 0.4) 0px 5px, rgba(240, 46, 170, 0.3) 0px 10px, rgba(240, 46, 170, 0.2) 0px 15px, rgba(240, 46, 170, 0.1) 0px 20px, rgba(240, 46, 170, 0.05) 0px 25px;
+.shadowed:hover {
+ box-shadow: rgba(0, 152, 189, 0.4) 0px 5px, rgba(0, 152, 189, 0.3) 0px 10px, rgba(0, 152, 189, 0.2) 0px 15px, rgba(0, 152, 189, 0.1) 0px 20px, rgba(0, 152, 189, 0.05) 0px 25px;
}
-.shadowed:last-child {
- box-shadow: rgba(240, 46, 170, 0.4) -5px 5px, rgba(240, 46, 170, 0.3) -10px 10px, rgba(240, 46, 170, 0.2) -15px 15px, rgba(240, 46, 170, 0.1) -20px 20px, rgba(240, 46, 170, 0.05) -25px 25px;
+.shadowed:first-child:hover {
+ box-shadow: rgba(0, 152, 189, 0.4) -5px 5px, rgba(0, 152, 189, 0.3) -10px 10px, rgba(0, 152, 189, 0.2) -15px 15px, rgba(0, 152, 189, 0.1) -20px 20px, rgba(0, 152, 189, 0.05) -25px 25px;
}
-.shadowed:first-child {
- box-shadow: rgba(240, 46, 170, 0.4) 5px 5px, rgba(240, 46, 170, 0.3) 10px 10px, rgba(240, 46, 170, 0.2) 15px 15px, rgba(240, 46, 170, 0.1) 20px 20px, rgba(240, 46, 170, 0.05) 25px 25px;
+.shadowed:last-child:hover {
+ box-shadow: rgba(0, 152, 189, 0.4) 5px 5px, rgba(0, 152, 189, 0.3) 10px 10px, rgba(0, 152, 189, 0.2) 15px 15px, rgba(0, 152, 189, 0.1) 20px 20px, rgba(0, 152, 189, 0.05) 25px 25px;
}
-.shadow-accent {
- box-shadow: rgba(240, 46, 170, 0.4) 0px 5px, rgba(240, 46, 170, 0.3) 0px 10px, rgba(240, 46, 170, 0.2) 0px 15px, rgba(240, 46, 170, 0.1) 0px 20px, rgba(240, 46, 170, 0.05) 0px 25px;
+.shadow-accent:hover {
+ box-shadow: rgba(0, 152, 189, 0.4) 0px 5px, rgba(0, 152, 189, 0.3) 0px 10px, rgba(0, 152, 189, 0.2) 0px 15px, rgba(0, 152, 189, 0.1) 0px 20px, rgba(0, 152, 189, 0.05) 0px 25px;
+ animation-name: holo-hover;
+ animation-duration: 300ms;
+ transform: perspective(100em) rotateX(10deg);
+}
+
+
+/*Mora da se ispravi za media kada je ekran premali pa se poredjaju u kolonu*/
+
+.align-items-view>*:first-child {
+ transform: perspective(100em) rotateY(25deg) translateZ(1em);
+}
+
+.align-items-view>* {
+ transform: perspective(100em) translateZ(-2em);
+}
+
+.align-items-view>*:last-child {
+ transform: perspective(100em) rotateY(-25deg) translateZ(1em);
+}
+
+.bg-light {
+ background-color: rgba(0, 152, 189, 0.3) !important;
+}
+
+a {
+ color: #00a8e8 !important;
+}
+
+@keyframes holo-hover {
+ to {
+ transform: perspective(100em) rotateX(10deg);
+ }
+}
+
+@keyframes logo-animation {
+ from {
+ transform: perspective(100em) rotateX(50deg) rotateZ(0deg);
+ }
+ to {
+ transform: perspective(100em) rotateX(50deg) rotateZ(360deg);
+ }
+}
+
+.ann-logo {
+ animation-name: logo-animation;
+ animation-duration: 3140ms;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+}
+
+
+/* width */
+
+::-webkit-scrollbar {
+ width: 10px;
+ height: 10px;
+}
+
+
+/* Track */
+
+::-webkit-scrollbar-track {
+ background: rgba(0, 0, 0, 0);
+}
+
+
+/* Handle */
+
+::-webkit-scrollbar-thumb {
+ background: rgba(0, 188, 252, 0.6);
+ border-radius: 25px;
+}
+
+
+/* Handle on hover */
+
+::-webkit-scrollbar-thumb:hover {
+ background: rgba(0, 188, 252, 0.8);
} \ No newline at end of file