()
| 898 | } |
| 899 | |
| 900 | function renderHeader() { |
| 901 | const s = state || {}; |
| 902 | const a = s.assessment || {}; |
| 903 | $("#status").innerHTML = s.status ? statusBadge(s.status) : ""; |
| 904 | $("#repo").textContent = s.repoPath ? s.repoPath.split(/[\\/]/).slice(-2).join("/") : ""; |
| 905 | const chips = $("#chips"); |
| 906 | if (!s.ok) { chips.innerHTML = ""; } |
| 907 | else { |
| 908 | chips.innerHTML = [ |
| 909 | a.buildTool ? '<span class="chip"><b>' + esc(a.buildTool) + "</b></span>" : "", |
| 910 | a.javaVersion ? '<span class="chip">Java <b>' + esc(a.javaVersion) + "</b></span>" : "", |
| 911 | a.springBoot ? '<span class="chip">Spring Boot</span>' : "", |
| 912 | a.hasDockerfile ? '<span class="chip">Docker</span>' : "", |
| 913 | s.git && s.git.branch ? '<span class="chip">⎇ <b>' + esc(s.git.branch) + "</b></span>" : "", |
| 914 | ].join(""); |
| 915 | } |
| 916 | const counts = { |
| 917 | assessment: s.report && s.report.findings ? s.report.findings.length : 0, |
| 918 | plan: s.progress && s.progress.steps.length ? s.progress.steps.length : (s.plan ? s.plan.steps.length : 0), |
| 919 | tasks: (s.tasks ? s.tasks.length : 0) + (s.skills ? s.skills.length : 0), |
| 920 | }; |
| 921 | document.querySelectorAll("nav.tabs button").forEach((b) => { |
| 922 | b.classList.toggle("active", b.dataset.tab === activeTab); |
| 923 | const c = b.querySelector(".count"); |
| 924 | if (!c) return; |
| 925 | if (b.dataset.tab === "readiness") { |
| 926 | const ov = s.doctor && s.doctor.overall; |
| 927 | c.textContent = ov === "blocked" ? "⚠" : ov === "caution" ? "!" : ""; |
| 928 | c.className = "count " + (ov === "blocked" ? "c-red" : ov === "caution" ? "c-amber" : ""); |
| 929 | } else { |
| 930 | c.textContent = counts[b.dataset.tab] ? "(" + counts[b.dataset.tab] + ")" : ""; |
| 931 | } |
| 932 | }); |
| 933 | } |
| 934 | |
| 935 | async function loadState() { |
| 936 | try { |
no test coverage detected