let _pendingResult = false; export function initCompare(countries) { const opts = Object.entries(countries) .sort((a, b) => a[1].country.localeCompare(b[1].country)) .map(([key, val]) => ``) .join(""); document.getElementById("compare-select-1").innerHTML = opts; document.getElementById("compare-select-2").innerHTML = opts; document.getElementById("compare-go-btn").addEventListener("click", () => { const k1 = document.getElementById("compare-select-1").value; const k2 = document.getElementById("compare-select-2").value; if (k1 === k2) { document.getElementById("compare-alert").innerHTML = "
Please select two different countries.
"; return; } document.getElementById("compare-alert").innerHTML = ""; _prepareResult(countries[k1], countries[k2]); _pendingResult = true; const cm = document.getElementById("compareModal"); (bootstrap.Modal.getInstance(cm) || new bootstrap.Modal(cm)).hide(); }); // Show result modal only after compareModal finishes hiding document.getElementById("compareModal").addEventListener("hidden.bs.modal", () => { if (_pendingResult) { _pendingResult = false; const rm = document.getElementById("compareResultModal"); (bootstrap.Modal.getInstance(rm) || new bootstrap.Modal(rm)).show(); } }); } function _prepareResult(c1, c2) { document.getElementById("compare-result-c1").textContent = c1.country; document.getElementById("compare-result-c2").textContent = c2.country; const rows = [ ["Prison Population", _fmt(c1.pop, "pop"), _fmt(c2.pop, "pop")], ["Rate per 100,000", _fmt(c1.rate, "rate"), _fmt(c2.rate, "rate")], ["Females", _fmt(c1.females, "pct"), _fmt(c2.females, "pct")], ["Juveniles", _fmt(c1.juveniles, "pct"), _fmt(c2.juveniles, "pct")], ["Occupancy", _fmt(c1.occupancy, "pct"), _fmt(c2.occupancy, "pct")], ["Government", _fmtGov(c1.government), _fmtGov(c2.government)], ]; document.getElementById("compare-result-body").innerHTML = rows .map(([label, v1, v2]) => `${label}${v1}${v2}` ) .join(""); } function _fmt(val, type) { if (val === "--" || val === null || val === undefined || (typeof val === "number" && isNaN(val))) { return "N/A"; } if (type === "pop") return Number(val).toLocaleString("en"); if (type === "rate") return String(val); if (type === "pct") return (val * 100).toFixed(2) + " %"; return String(val); } function _fmtGov(val) { return (!val || val === "--") ? "N/A" : val; }