From c219b817ef2ea5f787b08dfa6fd7767500de9a22 Mon Sep 17 00:00:00 2001 From: adpare Date: Wed, 21 Feb 2024 13:06:17 -0500 Subject: [PATCH 01/13] toolbar ui updates --- .../app/datatable/data-table.component.html | 1353 +++++++++-------- .../layer-information.component.ts | 2 +- 2 files changed, 679 insertions(+), 676 deletions(-) diff --git a/nav-app/src/app/datatable/data-table.component.html b/nav-app/src/app/datatable/data-table.component.html index e264caab8..fcd32740a 100755 --- a/nav-app/src/app/datatable/data-table.component.html +++ b/nav-app/src/app/datatable/data-table.component.html @@ -9,47 +9,46 @@
- - - - -
- - + +
diff --git a/nav-app/src/assets/config.json b/nav-app/src/assets/config.json index 64b356cba..527f254c5 100755 --- a/nav-app/src/assets/config.json +++ b/nav-app/src/assets/config.json @@ -62,7 +62,7 @@ {"name": "sorting", "enabled": true, "display_name": "sorting", "description": "Disable to remove the sorting button from the interface."}, {"name": "color_setup", "enabled": true, "display_name": "color setup", "description": "Disable to remove the color setup panel from interface, containing customization controls for scoring gradient and tactic row color."}, {"name": "toggle_hide_disabled", "enabled": true, "display_name": "show/hide disabled", "description": "Disable to remove the hide disabled techniques button from the interface."}, - {"name": "subtechniques", "enabled": true, "display_name": "subtechniques", "description": "Disable to remove all sub-technique features from the interface."} + {"name": "subtechniques", "enabled": true, "display_name": "sub-techniques", "description": "Disable to remove all sub-technique features from the interface."} ]}, {"name": "technique_controls", "enabled": true, "description": "Disable to disable all subfeatures", "subfeatures": [ {"name": "disable_techniques", "enabled": true, "display_name": "toggle state", "description": "Disable to remove the ability to disable techniques."}, diff --git a/nav-app/src/styles.scss b/nav-app/src/styles.scss index fb701077c..3db7a7499 100755 --- a/nav-app/src/styles.scss +++ b/nav-app/src/styles.scss @@ -141,6 +141,12 @@ body { padding: 0; } + .label{ + .control-row-item + .control-row-item{ + margin-right: 6px; + } + } + .control-sections > li { list-style: none; display: inline-block; @@ -192,6 +198,12 @@ body { font-size: 5pt; content: '▼'; } + span{ + vertical-align: middle; + } + .control-label { + padding-right: 5px; + } } // dropdown controls container From 899d7f1799c363f5038fdae222e5916f47b47f73 Mon Sep 17 00:00:00 2001 From: Charissa Miller <48832936+clemiller@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:01:07 -0400 Subject: [PATCH 08/13] update layer settings --- nav-app/src/app/app.module.ts | 4 +- nav-app/src/app/classes/view-model.ts | 2 +- .../app/datatable/data-table.component.html | 2 +- .../app/datatable/data-table.component.scss | 125 ---------- .../src/app/datatable/data-table.component.ts | 9 +- .../layer-settings.component.html | 166 +++++++++++++ .../layer-settings.component.scss | 73 ++++++ .../layer-settings.component.spec.ts | 23 ++ .../layer-settings.component.ts | 24 ++ .../app/list-input/list-input.component.scss | 3 + .../src/app/sidebar/sidebar.component.html | 233 +----------------- .../src/app/sidebar/sidebar.component.scss | 167 +------------ 12 files changed, 303 insertions(+), 528 deletions(-) create mode 100644 nav-app/src/app/layer-settings/layer-settings.component.html create mode 100644 nav-app/src/app/layer-settings/layer-settings.component.scss create mode 100644 nav-app/src/app/layer-settings/layer-settings.component.spec.ts create mode 100644 nav-app/src/app/layer-settings/layer-settings.component.ts diff --git a/nav-app/src/app/app.module.ts b/nav-app/src/app/app.module.ts index e3a79bd79..9664e5a04 100755 --- a/nav-app/src/app/app.module.ts +++ b/nav-app/src/app/app.module.ts @@ -41,6 +41,7 @@ import { MatCardModule } from '@angular/material/card'; import { MatDividerModule } from '@angular/material/divider'; import { MatStepperModule } from '@angular/material/stepper'; import { MatPaginatorModule } from '@angular/material/paginator'; +import { LayerSettingsComponent } from './layer-settings/layer-settings.component'; import { MarkdownModule } from 'ngx-markdown'; import { LayerInformationComponent } from './layer-information/layer-information.component'; @@ -71,6 +72,7 @@ import { ConfigService } from './services/config.service'; LayerInformationComponent, ChangelogComponent, ListInputComponent, + LayerSettingsComponent, ], imports: [ BrowserModule, @@ -97,7 +99,7 @@ import { ConfigService } from './services/config.service'; MatStepperModule, MatPaginatorModule, MarkdownModule.forRoot(), - MatTabsModule + MatTabsModule, ], exports: [MatSelectModule, MatInputModule, MatButtonModule, MatIconModule, MatTooltipModule, MatMenuModule, MatExpansionModule, MatTabsModule], providers: [ diff --git a/nav-app/src/app/classes/view-model.ts b/nav-app/src/app/classes/view-model.ts index fb4c8e12c..da46bc252 100644 --- a/nav-app/src/app/classes/view-model.ts +++ b/nav-app/src/app/classes/view-model.ts @@ -106,7 +106,7 @@ export class ViewModel { this._sidebarOpened = newVal; } - public readonly sidebarContentTypes = ['layerUpgrade', 'search', 'layerInformation']; + public readonly sidebarContentTypes = ['layerUpgrade', 'search', 'layerSettings']; private _sidebarContentType: string; public get sidebarContentType(): string { return this._sidebarContentType; diff --git a/nav-app/src/app/datatable/data-table.component.html b/nav-app/src/app/datatable/data-table.component.html index f2786d51b..fce4e136c 100755 --- a/nav-app/src/app/datatable/data-table.component.html +++ b/nav-app/src/app/datatable/data-table.component.html @@ -136,7 +136,7 @@
{{getControlDisplayName('layer_controls','layer_settings') | titlecase }} diff --git a/nav-app/src/app/datatable/data-table.component.scss b/nav-app/src/app/datatable/data-table.component.scss index c3ec9c247..6efe03354 100755 --- a/nav-app/src/app/datatable/data-table.component.scss +++ b/nav-app/src/app/datatable/data-table.component.scss @@ -35,13 +35,11 @@ $cellSize: 15px; } .matrices-columns { - // white-space: nowrap; display: table; .matrix-column { display: table-cell; white-space: normal; - // display: inline-block; padding: 10px; @media print { padding: 0; @@ -62,10 +60,6 @@ $cellSize: 15px; } } -.multiselect-dropdown { - display: inline-block; -} - .colorpicker { width: ($cellSize + 5 + 2) * 4 !important; //override preset width align-items: center; @@ -114,7 +108,6 @@ $cellSize: 15px; } .display-buttons { - // width: 183px; text-align: center; .squarebutton { @@ -160,7 +153,6 @@ $cellSize: 15px; } &.buttons > div { - // border: 1px solid black; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -181,15 +173,12 @@ $cellSize: 15px; select { width: 80px; } - - // width: 100%; } &.col2 { width: 45px; input[type='number'] { - // background-color: rgb(104, 60, 213); width: 40px; } } @@ -198,15 +187,11 @@ $cellSize: 15px; .minmax { @include adaptive-color('background-color', color(panel-light), color(dark-4)); text-align: center; - // &.top { border-top: 1px solid black; border-bottom: 1px solid black} - // &.bottom { border-top: 1px solid black} } } - // button {background: red;} .addcolor { width: 100%; - // background: red; } } } @@ -216,48 +201,6 @@ $cellSize: 15px; text-align: left; } -.contextMenu-cover { - // covers entire page - position: fixed; - left: 0; - top: 0; - width: 100vw; - height: 100vh; - // background: rgba(0, 0, 0, 0.15); -} - -.contextMenu-box { - position: absolute; - // background: white; - &.left { - right: 0; - } - - border: 1px solid black; - background-color: white; - box-shadow: 10px 10px 5px rgba(0, 0, 0, 0.5); - position: absolute; - z-index: 100; //draw on top of other controls - width: max-content; - - .contextMenu-section { - &:not(:first-child) { - border-top: 1px solid color(panel-dark); - margin-top: 2px; - padding-top: 2px; - } - - .contextMenu-button { - padding: 3px; - cursor: pointer; - - &:hover { - @include adaptive-color('background', color(cell-highlight-color), color(cell-highlight-dark-color)); - } - } - } -} - .control-section-header { display: flex; justify-content: flex-end; @@ -266,11 +209,6 @@ $cellSize: 15px; height: 30px; } - .control-bar-toggle { - @include adaptive-color("color", black, white); - padding: 4px 24px; - } - .control-section-tabs { display: flex; justify-content: flex-end; @@ -343,38 +281,6 @@ $cellSize: 15px; } } -// .tooltip { -// position: absolute; -// z-index: 100; //draw on top of other controls - -// padding: 6px; -// border-radius: 3px; -// background: rgba(80, 80, 80, 0.75); - -// font-size: 8pt; -// color: white; - -// max-width: 150px; -// overflow-x: hidden; - -// .comment { -// max-height: 300px; -// overflow-y: hidden; -// } - -// .comment-overflow-note { -// // color: rgb(255, 199, 190); -// } -// .metadatalist { -// margin: 0; -// margin-top: 1px; -// padding-left: 6px; -// list-style: none; - -// } - -// } - .mat-mdc-select { :focus { color: #63961c; @@ -408,14 +314,12 @@ $cellSize: 15px; } .multiselect { - // padding: 4px; text-align: center; .multiselect-grouping { .multiselect-grouping-label { padding: 4px; font-weight: bold; - // font-size: 14pt; } .multiselect-list { @@ -426,7 +330,6 @@ $cellSize: 15px; overflow-y: scroll; table { - // table-layout:fixed; //fixes width border-collapse: collapse; } @@ -448,7 +351,6 @@ $cellSize: 15px; } .search { - // padding: 4px; text-align: center; .search-list { @@ -460,7 +362,6 @@ $cellSize: 15px; overflow-y: scroll; table { - // table-layout:fixed; //fixes width border-collapse: collapse; width: 325px; } @@ -493,7 +394,6 @@ $cellSize: 15px; border: none; padding: 4px 10px; text-align: center; - //font-size: 16px; margin: 2px 1px; transition: 0.3s; display: inline-block; @@ -578,31 +478,6 @@ $cellSize: 15px; } } -.layer_info { - padding: 0 !important; - box-sizing: border-box !important; - width: 300px !important; - - .name_desc { - padding: 0 10px; - } - - .layer-data { - text-align: left; - margin: 0 10px; - - .mat-divider.layer-div { - margin-bottom: 10px; - @include adaptive-color-dark-only('border-top-color', color(dark-4)); - } - } - - .data-input { - overflow-y: auto; - max-height: 25vh; - } -} - .layout { width: 100px; text-align: left; diff --git a/nav-app/src/app/datatable/data-table.component.ts b/nav-app/src/app/datatable/data-table.component.ts index c02cbebe0..5b3ba708d 100755 --- a/nav-app/src/app/datatable/data-table.component.ts +++ b/nav-app/src/app/datatable/data-table.component.ts @@ -663,8 +663,11 @@ export class DataTableComponent implements AfterViewInit, OnDestroy { } } - public openLayerInfo(): void { - this.viewModel.sidebarOpened = this.viewModel.sidebarContentType !== 'layerInformation' ? true : !this.viewModel.sidebarOpened; - this.viewModel.sidebarContentType = 'layerInformation'; + /** + * Open layer settings in sidebar + */ + public openLayerSettings(): void { + this.viewModel.sidebarOpened = this.viewModel.sidebarContentType !== 'layerSettings' ? true : !this.viewModel.sidebarOpened; + this.viewModel.sidebarContentType = 'layerSettings'; } } diff --git a/nav-app/src/app/layer-settings/layer-settings.component.html b/nav-app/src/app/layer-settings/layer-settings.component.html new file mode 100644 index 000000000..b01316bb6 --- /dev/null +++ b/nav-app/src/app/layer-settings/layer-settings.component.html @@ -0,0 +1,166 @@ +
+ + + + + + + + + +
\ No newline at end of file diff --git a/nav-app/src/app/layer-settings/layer-settings.component.scss b/nav-app/src/app/layer-settings/layer-settings.component.scss new file mode 100644 index 000000000..92f9c0f5a --- /dev/null +++ b/nav-app/src/app/layer-settings/layer-settings.component.scss @@ -0,0 +1,73 @@ +@import '../../colors.scss'; +.layer-settings { + .sidebar-content { + margin: 1rem 0; + } + .info-card { + display: flex; + justify-content: space-between; + } + .info-field { + margin: 1em 0; + .mat-mdc-form-field { + width: 100%; + } + } + .settings .title { + font-size: 14px; + margin: 0; + } + .layer-data { + .mat-divider.layer-div { + margin-bottom: 10px; + @include adaptive-color-dark-only('border-top-color', color(dark-4)); + } + } + .sub-section { + padding-top: 1.5em; + } + .padding-top { + padding-top: 1em; + } + .data-input { + overflow-y: auto; + max-height: 30vh; + } + .button-container { + display: flex; + justify-content: flex-end; + } + .mat-mdc-form-field, .mat-mdc-form-field:hover { + &:not(.mat-form-field-disabled) { + .mat-mdc-floating-label, + .mat-mdc-input-element { + @include adaptive-color-dark-only('color', on-color(dark)); + } + .mdc-line-ripple::before { + @include adaptive-color-dark-only('border-bottom-color', on-color(dark-3)); + } + } + + &.mat-form-field-disabled { + .mat-mdc-floating-label, + .mdc-text-field__input { + @include adaptive-color-dark-only('color', darken(on-color(dark-1), 25%)); + } + .mdc-line-ripple::before { + @include adaptive-color-dark-only('border-bottom-color', darken(on-color(dark-1), 25%)); + } + } + .mat-mdc-form-field-hint { + @include adaptive-color-dark-only('color', on-color(dark)); + } + } + .mat-mdc-card { + width: 100%; + } + .mat-mdc-card-title { + padding: 16px 16px 0 16px; + } + .mat-mdc-card + .mat-mdc-card { + margin-left: 1em; + } +} \ No newline at end of file diff --git a/nav-app/src/app/layer-settings/layer-settings.component.spec.ts b/nav-app/src/app/layer-settings/layer-settings.component.spec.ts new file mode 100644 index 000000000..0a1b66dc6 --- /dev/null +++ b/nav-app/src/app/layer-settings/layer-settings.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LayerSettingsComponent } from './layer-settings.component'; + +describe('LayerSettingsComponent', () => { + let component: LayerSettingsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LayerSettingsComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LayerSettingsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/nav-app/src/app/layer-settings/layer-settings.component.ts b/nav-app/src/app/layer-settings/layer-settings.component.ts new file mode 100644 index 000000000..bf6721a20 --- /dev/null +++ b/nav-app/src/app/layer-settings/layer-settings.component.ts @@ -0,0 +1,24 @@ +import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { ViewModel } from '../classes'; +import { DataService } from '../services/data.service'; +import { ViewModelsService } from '../services/viewmodels.service'; + +@Component({ + selector: 'app-layer-settings', + templateUrl: './layer-settings.component.html', + styleUrls: ['./layer-settings.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class LayerSettingsComponent implements OnInit { + @Input() viewModel: ViewModel; + + constructor( + public dataService: DataService, + ) { + // intentionally left blank + } + + ngOnInit(): void { + console.log(this.dataService.getDomain(this.viewModel.domainVersionID)) + } +} diff --git a/nav-app/src/app/list-input/list-input.component.scss b/nav-app/src/app/list-input/list-input.component.scss index cc47cd9cc..ee288262f 100644 --- a/nav-app/src/app/list-input/list-input.component.scss +++ b/nav-app/src/app/list-input/list-input.component.scss @@ -14,6 +14,9 @@ margin-top: 8px; } } + .mat-mdc-form-field { + width: 100%; + } } .remove-button { margin-top: 8px; diff --git a/nav-app/src/app/sidebar/sidebar.component.html b/nav-app/src/app/sidebar/sidebar.component.html index ddd71dff0..3a63c2a54 100644 --- a/nav-app/src/app/sidebar/sidebar.component.html +++ b/nav-app/src/app/sidebar/sidebar.component.html @@ -8,237 +8,8 @@
-
-
- - - - - - - - - -
+
+
- - - \ No newline at end of file diff --git a/nav-app/src/app/sidebar/sidebar.component.scss b/nav-app/src/app/sidebar/sidebar.component.scss index d2d41a827..5f26b3fa3 100644 --- a/nav-app/src/app/sidebar/sidebar.component.scss +++ b/nav-app/src/app/sidebar/sidebar.component.scss @@ -1,169 +1,4 @@ -@import '../../colors.scss'; .sidebar { width: 38em; padding: 16px; -} - -.layer_info { - padding: 0 !important; - box-sizing: border-box !important; - width: 250px !important; - - .name_desc { - padding: 0 10px; - } - - .layer-data { - text-align: left; - margin: 0 10px; - - .mat-divider.layer-div { - margin-bottom: 10px; - @include adaptive-color-dark-only('border-top-color', color(dark-4)); - } - } - - .data-input { - overflow-y: auto; - max-height: 30vh; - } -} - -.search-and-multiselect { - mat-label { - padding-left: 5px; - } - - .mat-form-field { - @include adaptive-color-dark-only('color', on-color(dark)); - } - - .mat-mdc-input-element, - .mat-mdc-input-element::placeholder { - @include adaptive-color-dark-only('color', on-color(dark)); - } - .mat-mdc-input-element:disabled { - @include adaptive-color-dark-only('color', color(dark-disabled)); - } - - .mat-mdc-floating-label { - @include adaptive-color-dark-only('color', rgba(255, 255, 255, 0.9)); - } - - .mat-form-field-appearance-outline { - width: 100%; - } - - .mat-form-field-outline-start { - width: 20px !important; - } - - .mat-form-field-outline-start, - .mat-form-field-outline-gap, - .mat-form-field-outline-end { - background-color: white; - } - - .sidebar-content { - margin: 1rem 0; - } - - mat-card-content { - margin-bottom: 0; - } - - .mat-content { - display: block; - } - - .settings .title { - font-size: 14px; - margin: 0; - } - - .fields { - text-align: left; - - .field { - display: inline-block; - } - } - - h1 { - font-size: 14px; - background: color(panel-light); - padding: 5px; - margin: 0; - text-align: center; - } - - .allresults-buttons { - display: flex; - justify-content: space-around; - - button { - width: 48.5%; - } - } - - button { - @include adaptive-color-dark-only('background-color', color(dark-4)); - @include adaptive-color-dark-only('color', on-color(dark)); - } - - button:hover { - @include adaptive-color('background', color(cell-highlight-color), color(dark-link)); - } - - .results { - max-height: 150px; - overflow-y: auto; - - table { - border-collapse: collapse; - width: 100%; - - tr + tr { - @include adaptive-color('border-top', 1px solid color(panel-light), 1px solid color(dark-4)); - } - - tr:hover { - @include adaptive-color('background', color(cell-highlight-color), color(cell-highlight-dark-color)); - } - - td:first-of-type { - width: 200px; - } - - td { - text-align: left; - - & + td { - width: 1px; - } - } - } - - .no-results { - padding: 5px; - text-align: center; - } - } - - mat-panel-description { - align-items: center; - } - - .button-container { - display: flex; - justify-content: flex-end; - } -} -.infoCard { - width: 40%; -} - -.layerInfoCard { - display: flex; - justify-content: space-between; -} +} \ No newline at end of file From be6e3617cf695a288aed93c5988bb4f4df265daf Mon Sep 17 00:00:00 2001 From: Charissa Miller <48832936+clemiller@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:06:21 -0400 Subject: [PATCH 09/13] cleanup --- .../src/app/layer-settings/layer-settings.component.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/nav-app/src/app/layer-settings/layer-settings.component.ts b/nav-app/src/app/layer-settings/layer-settings.component.ts index bf6721a20..c8d22da75 100644 --- a/nav-app/src/app/layer-settings/layer-settings.component.ts +++ b/nav-app/src/app/layer-settings/layer-settings.component.ts @@ -1,7 +1,6 @@ -import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { Component, Input, ViewEncapsulation } from '@angular/core'; import { ViewModel } from '../classes'; import { DataService } from '../services/data.service'; -import { ViewModelsService } from '../services/viewmodels.service'; @Component({ selector: 'app-layer-settings', @@ -9,7 +8,7 @@ import { ViewModelsService } from '../services/viewmodels.service'; styleUrls: ['./layer-settings.component.scss'], encapsulation: ViewEncapsulation.None }) -export class LayerSettingsComponent implements OnInit { +export class LayerSettingsComponent { @Input() viewModel: ViewModel; constructor( @@ -17,8 +16,4 @@ export class LayerSettingsComponent implements OnInit { ) { // intentionally left blank } - - ngOnInit(): void { - console.log(this.dataService.getDomain(this.viewModel.domainVersionID)) - } } From 69d0ee5f2d3545e927e9f94670602b6bf9aac345 Mon Sep 17 00:00:00 2001 From: adpare Date: Tue, 30 Jul 2024 17:37:20 -0400 Subject: [PATCH 10/13] sonar cloud fixes 1 --- .../app/datatable/data-table.component.html | 3 ++ .../src/app/datatable/data-table.component.ts | 46 +++++++++++++++---- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/nav-app/src/app/datatable/data-table.component.html b/nav-app/src/app/datatable/data-table.component.html index f2786d51b..98b1449a4 100755 --- a/nav-app/src/app/datatable/data-table.component.html +++ b/nav-app/src/app/datatable/data-table.component.html @@ -107,6 +107,7 @@