Skip to content

Commit 50d2a1f

Browse files
committed
Merge PR_26172_CHARLIE_repository-compliance-stack
2 parents b97893c + 122e40a commit 50d2a1f

97 files changed

Lines changed: 5506 additions & 253 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

account/user-controls-page.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createControlsToolApiRepository } from "../toolbox/controls/controls-api-client.js";
1+
import { createControlsToolApiRepository } from "../assets/js/shared/controls-api-client.js";
22
import { getSessionCurrent } from "../src/api/session-api-client.js";
33
import InputService from "../src/engine/input/InputService.js";
44
import InputCaptureService from "../src/engine/input/InputCaptureService.js";
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
createServerRepositoryClient,
44
readServerToolConstants,
55
requireServerConstant,
6-
} from "../../src/api/server-api-client.js";
6+
} from "../../../src/api/server-api-client.js";
77

88
const constants = readServerToolConstants("assets");
99

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
createServerRepositoryClient,
33
readServerToolConstants,
44
requireServerConstant,
5-
} from "../../src/api/server-api-client.js";
5+
} from "../../../src/api/server-api-client.js";
66

77
const constants = readServerToolConstants("controls");
88

toolbox/game-journey/game-journey-api-client.js renamed to assets/js/shared/game-journey-api-client.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import {
22
createServerRepositoryClient,
33
readServerToolConstants,
44
requireServerConstant,
5-
} from "../../src/api/server-api-client.js";
5+
} from "../../../src/api/server-api-client.js";
66
export {
77
readGameJourneyCompletionMetrics,
88
updateGameJourneyCompletionMetric,
9-
} from "../../src/api/game-journey-completion-api-client.js";
9+
} from "../../../src/api/game-journey-completion-api-client.js";
1010

1111
const constants = readServerToolConstants("game-journey");
1212

assets/js/shared/status.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
export const STATUS_VALUES = Object.freeze(["PASS", "WARN", "FAIL", "PENDING", "INFO", "SKIP"]);
2+
3+
export function statusText(value, fallback = "not available") {
4+
const text = String(value ?? "").trim();
5+
return text || fallback;
6+
}
7+
8+
export function normalizeStatusValue(value, fallback = "PENDING") {
9+
const normalized = String(value || "").trim().toUpperCase();
10+
return STATUS_VALUES.includes(normalized) ? normalized : fallback;
11+
}
12+
13+
export function formatStatusMessage(status, message, options = {}) {
14+
const normalized = normalizeStatusValue(status, options.fallbackStatus || "PENDING");
15+
const resolvedMessage = Object.hasOwn(options, "fallbackMessage")
16+
? statusText(message, options.fallbackMessage)
17+
: String(message);
18+
return `${normalized}: ${resolvedMessage}`;
19+
}
20+
21+
export function formatStatusReason(status, reason, options = {}) {
22+
const normalized = normalizeStatusValue(status, options.fallbackStatus || "PENDING");
23+
return `${normalized}: ${statusText(reason, options.fallbackReason || "Safe server diagnostics did not provide a reason.")}`;
24+
}
25+
26+
export function applyStatusNode(node, status, options = {}) {
27+
if (!node) {
28+
return "";
29+
}
30+
const normalized = normalizeStatusValue(status, options.fallbackStatus || "PENDING");
31+
node.textContent = normalized;
32+
node.dataset.healthStatus = normalized;
33+
if (normalized === "PASS" && !options.reason) {
34+
node.removeAttribute("title");
35+
node.removeAttribute("aria-label");
36+
return normalized;
37+
}
38+
const reason = statusText(options.reason, options.titleFallback || "Safe server diagnostics returned this non-PASS status.");
39+
node.setAttribute("title", `${options.titlePrefix || "Reason: "}${reason}`);
40+
node.setAttribute("aria-label", formatStatusReason(normalized, options.reason, options));
41+
return normalized;
42+
}

assets/theme-v2/js/admin-invitations.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
readAdminInvites,
44
revokeAdminBetaInvite
55
} from "../../../src/api/admin-invitations-api-client.js";
6+
import { formatStatusMessage } from "../../js/shared/status.js";
67

78
function text(value) {
89
if (value === undefined || value === null || value === "") {
@@ -53,7 +54,7 @@ class AdminInvitesController {
5354
}
5455

5556
setStatus(status, message) {
56-
this.status.textContent = `${status}: ${message}`;
57+
this.status.textContent = formatStatusMessage(status, message);
5758
}
5859

5960
setSummary(payload = {}) {

assets/theme-v2/js/admin-operations.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
readAdminOperationsStatus,
33
runAdminOperationAction
44
} from "../../../src/api/admin-operations-api-client.js";
5+
import { formatStatusMessage } from "../../js/shared/status.js";
56

67
class AdminOperationsController {
78
constructor(root) {
@@ -25,7 +26,7 @@ class AdminOperationsController {
2526
}
2627

2728
setStatus(status, message) {
28-
this.status.textContent = `${status}: ${message}`;
29+
this.status.textContent = formatStatusMessage(status, message);
2930
}
3031

3132
createLabeledControl(labelText, control) {

assets/theme-v2/js/admin-setup-actions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { readAdminSetupStatus } from "../../../src/api/admin-setup-api-client.js";
2+
import { formatStatusMessage } from "../../js/shared/status.js";
23

34
const refreshButtons = Array.from(document.querySelectorAll("[data-admin-setup-refresh]"));
45
const statusFields = Array.from(document.querySelectorAll("[data-admin-setup-status]"));
56
const statusRows = Array.from(document.querySelectorAll("[data-admin-setup-status-rows]"));
67

78
function setStatus(message, status = "PASS") {
8-
const text = `${status}: ${message}`;
9+
const text = formatStatusMessage(status, message);
910
statusFields.forEach((field) => {
1011
field.textContent = text;
1112
});

assets/theme-v2/js/admin-system-health.js

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import {
22
readAdminSystemHealthStatus,
33
runAdminSystemHealthStorageConnectivityAction,
44
} from "../../../src/api/admin-system-health-api-client.js";
5+
import {
6+
applyStatusNode,
7+
normalizeStatusValue,
8+
statusText,
9+
} from "../../js/shared/status.js";
510

6-
const STATUS_VALUES = Object.freeze(["PASS", "WARN", "FAIL", "PENDING", "INFO", "SKIP"]);
711
const STORAGE_DIAGNOSTIC_ACTIONS = Object.freeze([
812
Object.freeze({ actionId: "storage-list", key: "list" }),
913
Object.freeze({ actionId: "storage-write-test-object", key: "write" }),
@@ -12,18 +16,7 @@ const STORAGE_DIAGNOSTIC_ACTIONS = Object.freeze([
1216
]);
1317

1418
function asText(value, fallback = "not available") {
15-
const text = String(value ?? "").trim();
16-
return text || fallback;
17-
}
18-
19-
function statusValue(value, fallback = "PENDING") {
20-
const normalized = String(value || "").trim().toUpperCase();
21-
return STATUS_VALUES.includes(normalized) ? normalized : fallback;
22-
}
23-
24-
function reasonText(status, reason) {
25-
const message = asText(reason, "Safe server diagnostics did not provide a reason.");
26-
return `${status}: ${message}`;
19+
return statusText(value, fallback);
2720
}
2821

2922
class AdminSystemHealthController {
@@ -80,20 +73,7 @@ class AdminSystemHealthController {
8073
}
8174

8275
setStatusNode(node, status, reason = "") {
83-
if (!node) {
84-
return;
85-
}
86-
const normalized = statusValue(status);
87-
node.textContent = normalized;
88-
node.dataset.healthStatus = normalized;
89-
if (normalized === "PASS" && !reason) {
90-
node.removeAttribute("title");
91-
node.removeAttribute("aria-label");
92-
return;
93-
}
94-
const resolvedReason = reasonText(normalized, reason);
95-
node.setAttribute("title", `Reason: ${asText(reason, "Safe server diagnostics returned this non-PASS status.")}`);
96-
node.setAttribute("aria-label", resolvedReason);
76+
applyStatusNode(node, status, { reason });
9777
}
9878

9979
renderPending(reason) {
@@ -176,7 +156,7 @@ class AdminSystemHealthController {
176156

177157
createStatusCell(status, reason) {
178158
const cell = document.createElement("td");
179-
cell.dataset.healthStatus = statusValue(status);
159+
cell.dataset.healthStatus = normalizeStatusValue(status);
180160
this.setStatusNode(cell, status, reason);
181161
return cell;
182162
}
File renamed without changes.

0 commit comments

Comments
 (0)