// Developer: Saksham Pathak (github.com/parthmax2) const emptyState = document.getElementById("emptyState"); const reportContainer = document.getElementById("reportContainer"); const severityBanner = document.getElementById("severityBanner"); const severityPill = document.getElementById("severityPill"); const severityFilename = document.getElementById("severityFilename"); const statDefects = document.getElementById("statDefects"); const statTypes = document.getElementById("statTypes"); const statScore = document.getElementById("statScore"); const findingsEl = document.getElementById("findings"); const outputImage = document.getElementById("outputImage"); const imageMetaEl = document.getElementById("imageMeta"); const detectionsListEl = document.getElementById("detectionsList"); const resultsTableBody = document.querySelector("#resultsTable tbody"); const downloadCsvBtn = document.getElementById("downloadCsv"); const downloadTxtBtn = document.getElementById("downloadTxt"); const scanAnotherBtn = document.getElementById("scanAnotherBtn"); const SEVERITY_CLASS = { "No Damage Detected": "none", "Minor": "minor", "Moderate": "moderate", "Severe": "severe", }; function formatBytes(bytes) { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)} KB`; return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; } function downloadText(filename, text) { const blob = new Blob([text], { type: "text/plain" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = filename; a.click(); URL.revokeObjectURL(url); } function renderSummary(summary) { severityPill.textContent = summary.severity_label; severityPill.className = `severity-pill ${SEVERITY_CLASS[summary.severity_label] || "none"}`; severityBanner.className = `severity-banner glass-card ${SEVERITY_CLASS[summary.severity_label] || "none"}`; statDefects.textContent = summary.total_defects; statTypes.textContent = summary.by_class.length; statScore.textContent = summary.severity_score; if (summary.by_class.length === 0) { findingsEl.innerHTML = `
No damage detected above the current confidence thresholds.
`; return; } findingsEl.innerHTML = summary.by_class.map((c) => `No damage detected above the current confidence thresholds.
`; return; } detectionsListEl.innerHTML = issues.map((d) => { const color = classColorById[d.class_id] || [102, 112, 133]; const pct = Math.round(d.confidence * 100); return `