Skip to content

Commit 98b6f9e

Browse files
committed
Merge branch 'v4-dev' into v4-cf
2 parents 0e5b989 + f9d4e4f commit 98b6f9e

18 files changed

Lines changed: 517 additions & 47 deletions

src/app/component/teams-groups-editor/teams-groups-editor.component.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
<!-- Main layout for teams/groups editor -->
2-
<div class="editor-header">
3-
<h2>Teams &amp; Groups</h2>
4-
</div>
52
<div class="editor-container">
63
<div class="editor-list-panel">
74
<app-selectable-list
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.mat-display-1 {
2-
padding: 20px 30px;
2+
padding: 20px;
3+
margin: 0;
34
}

src/app/model/activity-store.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,42 @@ import { appendHashElement } from '../util/ArrayHash';
22
import { IgnoreList } from './ignore-list';
33
import { MarkdownText } from './markdown-text';
44

5+
export class ActivityFileMeta {
6+
static DSOMM_PUBLISHER: string =
7+
'https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/';
8+
9+
version: string | null = null;
10+
released: Date | null = null;
11+
publisher: string | null = null;
12+
13+
constructor(meta: any) {
14+
if (meta) {
15+
this.version = meta.version || null;
16+
this.released = meta.released ? new Date(meta.released) : null;
17+
this.publisher = meta.publisher || null;
18+
}
19+
}
20+
21+
getDsommVersion(): string | null {
22+
if (this.publisher && this.publisher.startsWith(ActivityFileMeta.DSOMM_PUBLISHER)) {
23+
return this.version;
24+
}
25+
return null;
26+
}
27+
28+
getDsommReleaseDate(): Date | null {
29+
if (this.publisher && this.publisher.startsWith(ActivityFileMeta.DSOMM_PUBLISHER)) {
30+
return this.released;
31+
}
32+
return null;
33+
}
34+
}
35+
36+
export interface ActivityFile {
37+
meta: ActivityFileMeta | null;
38+
data: Data;
39+
}
40+
541
export type Data = Record<string, Category>;
642
export type Category = Record<string, Dimension>;
743
export type Dimension = Record<string, Activity>;

src/app/model/meta-store.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { YamlService } from '../service/yaml-loader/yaml-loader.service';
2+
import { ActivityFileMeta } from './activity-store';
23
import { ProgressDefinitions, TeamNames, TeamGroups } from './types';
34
import { perfNow } from 'src/app/util/util';
45

@@ -25,6 +26,7 @@ export class MetaStore {
2526
public hasLocalStorage: boolean = false;
2627
private defaultProgressDefinition: ProgressDefinitions = {};
2728

29+
public activityMeta: ActivityFileMeta | null = null;
2830
checkForDsommUpdates: boolean = false;
2931
lang: string = 'en';
3032
strings: Record<string, MetaStrings> = { en: fallbackMetaStrings };

src/app/pages/circular-heatmap/circular-heatmap.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ export class CircularHeatmapComponent implements OnInit, OnDestroy {
655655
relativeTo: this.route,
656656
fragment: activity.uuid,
657657
queryParamsHandling: 'preserve'
658-
});
658+
});
659659
}
660660
/* eslint-enable */
661661
}

src/app/pages/mapping/mapping.component.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
display: flex;
77
align-items: center;
88
gap: 16px;
9-
margin: 24px 20px 0 20px;
9+
margin: 0 20px;
1010
flex-wrap: wrap;
1111
}
1212

@@ -37,6 +37,10 @@
3737
font-weight: 500;
3838
}
3939

40+
.content ::ng-deep .mat-form-field-wrapper {
41+
padding-bottom: 0;
42+
}
43+
4044
.hide{
4145
display: none;
4246
}

src/app/pages/mapping/mapping.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<mat-icon>close</mat-icon>
2626
</button>
2727
</mat-form-field>
28-
<button mat-raised-button color="primary" class="export-btn" (click)="exportToExcel()">
28+
<button mat-raised-button class="export-btn" (click)="exportToExcel()">
2929
<mat-icon>file_download</mat-icon>
3030
Download
3131
</button>

src/app/pages/matrix/matrix.component.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.content {
22
width: 100%;
3-
/*background-color: gainsboro;*/
43
}
4+
55
.mat-form-field {
66
margin: 20px;
77
margin-bottom: 0;

src/app/pages/settings/settings.component.css

Lines changed: 136 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
1+
.vflex {
2+
display: flex;
3+
flex-direction: column;
4+
gap: 0.5em;
5+
}
6+
7+
.hflex {
8+
display: flex;
9+
align-items: center;
10+
gap: 0.5em;
11+
}
12+
13+
.grid-row-1 {
14+
grid-row: 1;
15+
}
16+
.grid-row-2 {
17+
grid-row: 2;
18+
}
19+
.grid-col-1 {
20+
grid-column: 1;
21+
}
22+
.grid-col-2 {
23+
grid-column: 2;
24+
}
25+
.grid-col-3 {
26+
grid-column: 3;
27+
}
28+
.grid-col-4 {
29+
grid-column: 4;
30+
}
31+
132
.settings-container {
233
margin-top: 1em;
34+
padding: 0 1rem;
335
}
436

537
.mat-slider-horizontal {
@@ -12,7 +44,27 @@
1244
display: flex;
1345
align-items: center;
1446
gap: 0.2em;
15-
width: 25em;
47+
width: auto;
48+
max-width: 40rem;
49+
}
50+
51+
.nowrap {
52+
white-space: nowrap;
53+
}
54+
55+
.date-format-field {
56+
flex: 1;
57+
margin: 0;
58+
}
59+
60+
.max-level-row {
61+
display: flex;
62+
align-items: center;
63+
gap: 1em;
64+
}
65+
66+
.max-slider {
67+
flex: 1;
1668
}
1769

1870

@@ -64,7 +116,7 @@ input.progress-score {
64116
}
65117

66118
.selectable-list {
67-
padding: 16px;
119+
padding: 0;
68120
}
69121

70122
.selectable-list-header {
@@ -95,6 +147,17 @@ mat-icon.mandatory-icon {
95147
margin-top: 0.5em;
96148
}
97149

150+
.version-info-customization {
151+
margin-top: 2rem;
152+
}
153+
154+
.version-info-table {
155+
display: grid;
156+
grid-template-columns: 160px 1fr 1fr 1fr;
157+
gap: 8px;
158+
margin-bottom: 16px;
159+
max-width: 40rem;
160+
}
98161

99162
@media screen and (max-width: 650px) {
100163
.progress-definitions-grid {
@@ -110,3 +173,74 @@ mat-icon.mandatory-icon {
110173
display: none;
111174
}
112175
}
176+
177+
/* About DSOMM styles */
178+
.settings-about-section {
179+
margin-top: 1rem;
180+
}
181+
.settings-about-section .mat-card-header {
182+
padding-bottom: 0.25rem;
183+
}
184+
.settings-about-section .mat-card-title {
185+
font-size: 1.1rem;
186+
}
187+
.settings-about-section .mat-card-subtitle {
188+
color: #666;
189+
font-size: 0.9rem;
190+
}
191+
.settings-about-section .subheader {
192+
font-style: italic;
193+
text-align: center;
194+
margin-bottom: 0.5rem;
195+
}
196+
.settings-about-section .card-content {
197+
/* keep vertical spacing but align left with page container */
198+
padding-top: 0;
199+
padding-right: 1rem;
200+
padding-bottom: 1rem;
201+
padding-left: 0;
202+
}
203+
.settings-about-section .button-container {
204+
display: flex;
205+
align-items: flex-start;
206+
gap: 0.6rem;
207+
margin: 0.5rem 0;
208+
}
209+
.muted {
210+
color: #555;
211+
margin: 0.25rem 0 0.75rem 0;
212+
}
213+
.small {
214+
font-size: 0.85rem;
215+
color: #666;
216+
}
217+
.about-actions {
218+
display: flex;
219+
align-items: center;
220+
gap: 0.75rem;
221+
flex-wrap: wrap;
222+
}
223+
.about-actions .status {
224+
display: flex;
225+
align-items: center;
226+
gap: 0.75rem;
227+
}
228+
.status-icon {
229+
color: var(--accent-color, #1976d2);
230+
}
231+
.update-available {
232+
display: flex;
233+
align-items: center;
234+
gap: 0.5rem;
235+
color: #d84315; /* warm accent for update */
236+
}
237+
.update-none {
238+
display: flex;
239+
align-items: center;
240+
gap: 0.5rem;
241+
color: #2e7d32; /* green for ok */
242+
}
243+
.action-link {
244+
margin-left: 0.5rem;
245+
font-weight: 500;
246+
}

0 commit comments

Comments
 (0)