Skip to content

Commit 0f15c7c

Browse files
committed
Settings: Display info about the DSOMM Model in use
1 parent d400571 commit 0f15c7c

12 files changed

Lines changed: 460 additions & 84 deletions

File tree

src/app/model/activity-store.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,41 @@ 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 = 'https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/'
7+
8+
version: string | null = null;
9+
released: Date | null = null;
10+
publisher: string | null = null;
11+
12+
constructor(meta: any) {
13+
if (meta) {
14+
this.version = meta.version || null;
15+
this.released = meta.released ? new Date(meta.released) : null;
16+
this.publisher = meta.publisher || null;
17+
}
18+
}
19+
20+
getDsommVersion(): string | null {
21+
if (this.publisher && this.publisher.startsWith(ActivityFileMeta.DSOMM_PUBLISHER)) {
22+
return this.version;
23+
}
24+
return null;
25+
}
26+
27+
getDsommReleaseDate(): Date | null {
28+
if (this.publisher && this.publisher.startsWith(ActivityFileMeta.DSOMM_PUBLISHER)) {
29+
return this.released;
30+
}
31+
return null;
32+
}
33+
};
34+
35+
export interface ActivityFile {
36+
meta: ActivityFileMeta | null;
37+
data: Data;
38+
}
39+
540
export type Data = Record<string, Category>;
641
export type Category = Record<string, Dimension>;
742
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
@@ -637,7 +637,7 @@ export class CircularHeatmapComponent implements OnInit, OnDestroy {
637637
relativeTo: this.route,
638638
fragment: activity.uuid,
639639
queryParamsHandling: 'preserve'
640-
});
640+
});
641641
}
642642
/* eslint-enable */
643643
}

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

Lines changed: 138 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,38 @@
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+
/* Ensure consistent left/right padding so elements align with other pages */
35+
padding: 0 1rem;
336
}
437

538
.mat-slider-horizontal {
@@ -12,7 +45,27 @@
1245
display: flex;
1346
align-items: center;
1447
gap: 0.2em;
15-
width: 25em;
48+
width: auto;
49+
max-width: 40rem;
50+
}
51+
52+
.nowrap {
53+
white-space: nowrap;
54+
}
55+
56+
.date-format-field {
57+
flex: 1;
58+
margin: 0;
59+
}
60+
61+
.max-level-row {
62+
display: flex;
63+
align-items: center;
64+
gap: 1em;
65+
}
66+
67+
.max-slider {
68+
flex: 1;
1669
}
1770

1871

@@ -64,7 +117,8 @@ input.progress-score {
64117
}
65118

66119
.selectable-list {
67-
padding: 16px;
120+
/* remove extra inner padding so content lines up with the page padding */
121+
padding: 0;
68122
}
69123

70124
.selectable-list-header {
@@ -95,6 +149,17 @@ mat-icon.mandatory-icon {
95149
margin-top: 0.5em;
96150
}
97151

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

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

0 commit comments

Comments
 (0)