aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanijel Anđelković <adanijel99@gmail.com>2022-05-26 22:12:45 +0200
committerDanijel Anđelković <adanijel99@gmail.com>2022-05-26 22:12:45 +0200
commit6060950ed1d6ba890ca44ae557aaa17632b9c350 (patch)
tree69957b29afcbb754ac3b52b88c6356954c78ad02
parent305dac6f0e327a2582dc4f93e83794b5169d7c8f (diff)
parent0b64e5c30cf77d8ff25cf2f8359234f6a4a501fd (diff)
Merge branch 'redesign' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into redesign
# Conflicts: # frontend/src/app/_elements/folder/folder.component.ts
-rw-r--r--frontend/src/app/_elements/column-table/column-table.component.html41
-rw-r--r--frontend/src/app/_elements/column-table/column-table.component.ts11
-rw-r--r--frontend/src/app/_elements/folder/folder.component.css17
-rw-r--r--frontend/src/app/_elements/folder/folder.component.html6
-rw-r--r--frontend/src/app/_elements/folder/folder.component.ts15
-rw-r--r--frontend/src/app/_pages/experiment/experiment.component.ts4
-rw-r--r--frontend/src/favicon.icobin948 -> 6614 bytes
7 files changed, 67 insertions, 27 deletions
diff --git a/frontend/src/app/_elements/column-table/column-table.component.html b/frontend/src/app/_elements/column-table/column-table.component.html
index 26770c41..d5273d59 100644
--- a/frontend/src/app/_elements/column-table/column-table.component.html
+++ b/frontend/src/app/_elements/column-table/column-table.component.html
@@ -27,7 +27,9 @@
<th>#</th>
<th class="columnNames" *ngFor="let colInfo of dataset.columnInfo; let i = index" [ngClass]="{'header-disabled' : !columnsChecked[i]}">
<div class="cell-align">
- #{{i + 1}}&nbsp;&nbsp;{{colInfo.columnName}}
+ <div class="text-overflow">
+ #{{i + 1}}&nbsp;&nbsp;{{colInfo.columnName}}
+ </div>
<mat-checkbox color="primary" [(ngModel)]="columnsChecked[i]" (change)="changeInputColumns($event, colInfo.columnName)"></mat-checkbox>
</div>
</th>
@@ -63,7 +65,9 @@
<th>Kolona</th>
<th class="columnNames" *ngFor="let colInfo of dataset.columnInfo; let i = index" [ngClass]="{'header-disabled' : !columnsChecked[i]}">
<div class="cell-align">
- #{{i + 1}}&nbsp;&nbsp;{{colInfo.columnName}}
+ <div class="text-overflow">
+ #{{i + 1}}&nbsp;&nbsp;{{colInfo.columnName}}
+ </div>
<mat-checkbox color="primary" [(ngModel)]="columnsChecked[i]" (change)="changeInputColumns($event, colInfo.columnName)"></mat-checkbox>
</div>
</th>
@@ -72,7 +76,7 @@
<tbody>
<tr *ngFor="let row of dataset.cMatrix; let i = index">
<th [ngClass]="{'header-disabled col-disabled' : !columnsChecked[i]}">
- <div class="text-left">
+ <div class="text-left text-overflow">
{{dataset.columnInfo[i].columnName}}
</div>
</th>
@@ -97,7 +101,9 @@
<th>Naziv</th>
<th class="columnNames" *ngFor="let colInfo of dataset.columnInfo; let i = index" [ngClass]="{'header-disabled' : !columnsChecked[i]}">
<div class="cell-align">
- #{{i + 1}}&nbsp;&nbsp;{{colInfo.columnName}}
+ <div class="text-overflow">
+ #{{i + 1}}&nbsp;&nbsp;{{colInfo.columnName}}
+ </div>
<mat-checkbox color="primary" [(ngModel)]="columnsChecked[i]" (change)="changeInputColumns($event, colInfo.columnName)"></mat-checkbox>
</div>
</th>
@@ -109,7 +115,7 @@
<td *ngFor="let colInfo of dataset.columnInfo; let i = index" class="pad-fix" [ngClass]="{'text-disabled' : !columnsChecked[i]}">
<p class="verticalAlign text-left" style="font-size:13px;" *ngIf="!colInfo.isNumber">Kategorijski</p>
<mat-form-field *ngIf="colInfo.isNumber">
- <mat-select matNativeControl [(value)]="this.experiment.columnTypes[i]" [disabled]="!columnsChecked[i]" (selectionChange)="columnTypeChanged(colInfo.columnName);">
+ <mat-select matNativeControl [(value)]="this.experiment.columnTypes[i]" [disabled]="!columnsChecked[i]" (selectionChange)="columnTypeChanged(colInfo.columnName, i);">
<mat-option [value]="ColumnType.categorical">Kategorijski</mat-option>
<mat-option [value]="ColumnType.numerical">Numerički</mat-option>
</mat-select>
@@ -168,11 +174,13 @@
<div *ngIf="colInfo.numNulls > 0">
<button class="w-100" mat-raised-button [ngClass]="{ 'menu-disabled' : !columnsChecked[i]}" [matMenuTriggerFor]="menu" id="main_{{colInfo.columnName}}" #nullValMenu>
- <div class="cell-align">
- {{nullValOption[i]}}
- <mat-icon>arrow_drop_down</mat-icon>
- </div>
- </button>
+ <div class="cell-align">
+ <div [ngClass]="{'text-overflow' : experiment.nullValuesReplacers[i].option == NullValueOptions.Replace}">
+ {{nullValOption[i]}}
+ </div>
+ <mat-icon>arrow_drop_down</mat-icon>
+ </div>
+ </button>
<mat-menu #menu="matMenu">
<!--<button mat-menu-item (click)="MissValsDeleteClicked($event, NullValueOptions.DeleteColumns, i)" value={{colInfo.columnName}}>Obriši kolonu</button>-->
<button mat-menu-item (click)="MissValsDeleteClicked($event, NullValueOptions.DeleteRows, i)" value={{colInfo.columnName}}>Obriši redove ({{colInfo.numNulls}})</button>
@@ -180,12 +188,12 @@
</mat-menu>
<mat-menu #fillWith="matMenu">
- <button *ngIf="colInfo.isNumber" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.mean}}>Mean ({{colInfo.mean}})</button>
- <button *ngIf="colInfo.isNumber" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.median}}>Median ({{colInfo.median}})</button>
- <button *ngIf="colInfo.isNumber" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.max}}>Max ({{colInfo.max}})</button>
- <button *ngIf="colInfo.isNumber" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.min}}>Min ({{colInfo.min}})</button>
+ <button *ngIf="experiment.columnTypes[i] == ColumnType.numerical" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.mean}}>Mean ({{colInfo.mean}})</button>
+ <button *ngIf="experiment.columnTypes[i] == ColumnType.numerical" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.median}}>Median ({{colInfo.median}})</button>
+ <button *ngIf="experiment.columnTypes[i] == ColumnType.numerical" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.max}}>Max ({{colInfo.max}})</button>
+ <button *ngIf="experiment.columnTypes[i] == ColumnType.numerical" mat-menu-item (click)="MissValsReplaceClicked($event, colInfo.columnName, i)" value={{colInfo.min}}>Min ({{colInfo.min}})</button>
- <button *ngIf="!colInfo.isNumber" mat-menu-item [matMenuTriggerFor]="uniques">Najčešće vrednosti</button>
+ <button *ngIf="experiment.columnTypes[i] == ColumnType.categorical" mat-menu-item [matMenuTriggerFor]="uniques">Najčešće vrednosti</button>
<button mat-menu-item [matMenuTriggerFor]="replaceWith">Unesi vrednost...</button>
</mat-menu>
@@ -195,7 +203,8 @@
</mat-menu>
<mat-menu #replaceWith="matMenu">
- <input type="text" id={{colInfo.columnName}} mat-menu-item placeholder="Unesi vrednost..." [value] #enterAValue>
+ <input *ngIf="experiment.columnTypes[i] == ColumnType.categorical" type="text" id={{colInfo.columnName}} mat-menu-item placeholder="Unesi vrednost..." [value] #enterAValue>
+ <input *ngIf="experiment.columnTypes[i] == ColumnType.numerical" type="number" id={{colInfo.columnName}} mat-menu-item placeholder="Unesi vrednost..." [value] #enterAValue>
<button [disabled]="getValue(colInfo.columnName) == ''" mat-menu-item value={{getValue(colInfo.columnName)}} (click)="MissValsReplaceClicked($event, colInfo.columnName, i)">Potvrdi unos</button>
</mat-menu>
</div>
diff --git a/frontend/src/app/_elements/column-table/column-table.component.ts b/frontend/src/app/_elements/column-table/column-table.component.ts
index 8398f7ef..8d2875a5 100644
--- a/frontend/src/app/_elements/column-table/column-table.component.ts
+++ b/frontend/src/app/_elements/column-table/column-table.component.ts
@@ -7,7 +7,7 @@ import { MatDialog } from '@angular/material/dialog';
import { MissingvaluesDialogComponent } from 'src/app/_modals/missingvalues-dialog/missingvalues-dialog.component';
import { MatCheckboxChange } from '@angular/material/checkbox';
import { CsvParseService } from 'src/app/_services/csv-parse.service';
-import { ProblemType } from 'src/app/_data/Model';
+import { NullValReplacer, ProblemType } from 'src/app/_data/Model';
import { ExperimentsService } from 'src/app/_services/experiments.service';
import { SaveExperimentDialogComponent } from 'src/app/_modals/save-experiment-dialog/save-experiment-dialog.component';
import { AlertDialogComponent } from 'src/app/_modals/alert-dialog/alert-dialog.component';
@@ -181,8 +181,13 @@ export class ColumnTableComponent implements AfterViewInit {
this.columnTableChanged.emit();
}
- columnTypeChanged(columnName: string) {
- if (this.experiment.outputColumn == columnName)
+ columnTypeChanged(columnName: string, colIndex: number) {
+
+ this.experiment.nullValuesReplacers[colIndex].option = NullValueOptions.DeleteRows;
+ this.experiment.nullValuesReplacers[colIndex].value = "";
+ this.nullValOption[colIndex] = "Obriši redove (" + this.dataset?.columnInfo[colIndex].numNulls + ")";
+
+ if (this.experiment.outputColumn == columnName)
this.changeProblemType();
else
this.columnTableChangeDetected();
diff --git a/frontend/src/app/_elements/folder/folder.component.css b/frontend/src/app/_elements/folder/folder.component.css
index 810ad05d..fe21e7b1 100644
--- a/frontend/src/app/_elements/folder/folder.component.css
+++ b/frontend/src/app/_elements/folder/folder.component.css
@@ -1,6 +1,5 @@
#folder {
width: 100%;
-
}
#tabs {
@@ -186,10 +185,10 @@
.file-bottom-buttons {
position: relative;
position: relative;
- top:-36px
-
+ top: -36px
}
-.file-bottom-buttons-helper{
+
+.file-bottom-buttons-helper {
position: relative;
display: flex;
flex-direction: row-reverse;
@@ -226,4 +225,14 @@
.highlight-exp {
/*font-size: 16px;*/
font-weight: 700;
+}
+
+.text-overflow {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.selected-file-tab {
+ max-width: 230px !important;
} \ No newline at end of file
diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html
index ebee92d2..17ed02f8 100644
--- a/frontend/src/app/_elements/folder/folder.component.html
+++ b/frontend/src/app/_elements/folder/folder.component.html
@@ -13,8 +13,8 @@
<a class="m-1 stretched-link tab-link" (click)="selectTab(tab)" (mouseenter)="hoverOverTab(tab)" (mouseleave)="hoverOverTab(TabType.None)">{{tabTitles[tab]}}</a>
</div>
- <div class="folder-tab p-1 rounded-top" *ngIf="selectedFile" [style]="'z-index:' + (selectedTab == TabType.File ? 11 : (tabsToShow.length)) + ' ;'" [ngClass]="{'selected-tab' : selectedTab == TabType.File, 'hover-tab' : hoverTab == TabType.File}">
- <a class="m-1 stretched-link tab-link" (click)="selectTab(TabType.File)" (mouseenter)="hoverOverTab(TabType.File)" (mouseleave)="hoverOverTab(TabType.None)">{{selectedFile.name}}</a>
+ <div class="folder-tab p-1 rounded-top selected-file-tab" *ngIf="selectedFile" [style]="'z-index:' + (selectedTab == TabType.File ? 11 : (tabsToShow.length)) + ' ;'" [ngClass]="{'selected-tab' : selectedTab == TabType.File, 'hover-tab' : hoverTab == TabType.File}">
+ <a class="m-1 stretched-link tab-link text-overflow" (click)="selectTab(TabType.File)" (mouseenter)="hoverOverTab(TabType.File)" (mouseleave)="hoverOverTab(TabType.None)">{{selectedFile.name}}</a>
</div>
</div>
<div id="selected-content" class="rounded-bottom text-offwhite">
@@ -120,7 +120,7 @@
</div>
</div>
<div id="footer" [ngSwitch]="newFileSelected" *ngIf="!listView">
- <button mat-button (click)="saveNewFile()" class="bottom-button text-offwhite rounded-bottom" *ngSwitchCase="true">
+ <button mat-button (click)="saveNewFile()" class="bottom-button text-offwhite rounded-bottom" [disabled]="saveDisabled" *ngSwitchCase="true">
<div class="f-row">
<div>Sačuvaj</div>
<div class="pt-1">
diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts
index de1dfae9..451f16ef 100644
--- a/frontend/src/app/_elements/folder/folder.component.ts
+++ b/frontend/src/app/_elements/folder/folder.component.ts
@@ -42,6 +42,7 @@ export class FolderComponent implements AfterViewInit {
selectedFileIndex: number = -1;
selectedFile?: FolderFile;
hoveringOverFileIndex: number = -1;
+ saveDisabled: boolean = false;
@Output() selectedFileChanged: EventEmitter<FolderFile> = new EventEmitter();
@Output() fileFromRoute: EventEmitter<FolderFile> = new EventEmitter();
@@ -183,7 +184,9 @@ export class FolderComponent implements AfterViewInit {
if (!this._initialized) {
this.files = this.folders[this.startingTab];
this.filteredFiles = [];
- setTimeout(() => this.selectTab(this.startingTab));
+ setTimeout(() => {
+ this.selectTab(this.startingTab);
+ });
this._initialized = true;
}
}
@@ -240,12 +243,15 @@ export class FolderComponent implements AfterViewInit {
})
/* ------------------------------------------------ */
this.searchTermsChanged();
+ if (this.selectedTab == TabType.MyExperiments)
+ this.selectTab(TabType.MyExperiments);
})
});
});
}
saveNewFile() {
+ this.saveDisabled = true;
this.loadingAction = true;
switch (this.type) {
case FolderType.Dataset:
@@ -272,6 +278,7 @@ export class FolderComponent implements AfterViewInit {
});
break;
}
+ this.saveDisabled = false;
}
predictorsForExp: { [expId: string]: Predictor[] } = {}
@@ -380,6 +387,9 @@ export class FolderComponent implements AfterViewInit {
this.selectTab(TabType.MyDatasets);
});
}
+ if (this.archive) {
+ this.refreshExperiments();
+ }
});
})
@@ -401,6 +411,9 @@ export class FolderComponent implements AfterViewInit {
this.selectTab(TabType.MyModels);
});
}
+ if (this.archive) {
+ this.refreshExperiments();
+ }
});
})
diff --git a/frontend/src/app/_pages/experiment/experiment.component.ts b/frontend/src/app/_pages/experiment/experiment.component.ts
index ec4275fa..cbe2dcbe 100644
--- a/frontend/src/app/_pages/experiment/experiment.component.ts
+++ b/frontend/src/app/_pages/experiment/experiment.component.ts
@@ -215,6 +215,10 @@ export class ExperimentComponent implements AfterViewInit {
setTimeout(() => {
this.columnTable.loadDataset(d);
});
+
+ this.folderModel.selectFile(undefined);
+ this.folderModel.selectTab(TabType.NewFile);
+ // REFRESH GRAFIKA (4. KORAKA) URADITI
}
modelToTrain?: Model;
diff --git a/frontend/src/favicon.ico b/frontend/src/favicon.ico
index 997406ad..2dbb9ef6 100644
--- a/frontend/src/favicon.ico
+++ b/frontend/src/favicon.ico
Binary files differ