/* .modal-content { max-height: 95vh; overflow-y: scroll; } */ // Emergency alert handling JS updated for enhanced alert styling by severity (2025 design) //2.1 try { $(document).ready(function () { $.ajax({ type: "GET", url: "/appdata/site-alerts.json?c=" + Math.random(), jsonp: "callback", jsonpCallback: "jsonCallback", contentType: "application/json", dataType: "jsonp", error: function (e) { console.log(e); console.log(e.message); }, }); }); } catch (err) { console.log(err.message); } function displaySiteAlert(data) { if (typeof notifScope == "undefined") notifScope = "site-wide"; let infoMsgTarget = notifScope == "portal" ? $("#banner") : $("#navbarUsers"); let emergencyText = ""; let allDis = [], allDisTxt = ""; if (data.length > 0) { // Insert updated alert styles based on new design system $("head").append(` `); data.forEach((ann) => { if (ann["scope"] == "site-wide" || notifScope == ann["scope"]) { if (!hasAnnBeenDismissed(ann["id"])) { let svrty = ann["severity"].toLowerCase(); switch (svrty) { case "emergency": case "extreme": emergencyText += renderExtremeModal(ann); break; case "severe": infoMsgTarget.after(renderSevereBanner(ann)); break; case "moderate": infoMsgTarget.after(renderModerateBanner(ann)); break; case "minor": case "unknown": infoMsgTarget.after(renderMinorBanner(ann)); break; case "status alert": if (ann["scope"] == "portal") { $("#navbarUsers").append( `
${ann["title"]} ${ann["fulldescription"]}
Posted:${ann["pubDate"]}
`, ); $("#statusPanel .countNbr").text( $("#navbarUsers>.card").length, ); } break; default: // fallback break; } } else { let svrty = ann["severity"].toLowerCase(); allDis.push(ann); allDisTxt += `
${ann["pubDate"]} - ${ann["title"]}${ann["fulldescription"] ? ":" : ""} ${ann["fulldescription"]}
`; } } }); if (allDis.length > 0) { infoMsgTarget.after(` `); } if (emergencyText != "") { $("body").before( ``, ); $("#emgcyModal").modal(); } } $(".dismiss-alert").click(function () { $(".dismissable", $(this).closest(".alert-site-wide")).each(function () { let alertID = $(this).prop("id"); let arr = getLocalStorageArr("dismissedAlerts"); arr.push(alertID); setLocalStorageArr("dismissedAlerts", arr); }); }); } // Extreme (modal) alert, fully redesigned function renderExtremeModal(ann) { return ` `; } // Severe banner, redesigned function renderSevereBanner(ann) { return ` `; } // Moderate banner, updated for new styles (minor visual changes) #9F2623 function renderModerateBanner(ann) { return ` `; } // Minor/Unknown status, just background color change from Moderate #135C6D function renderMinorBanner(ann) { return ` `; } function hasAnnBeenDismissed(id) { const dismissed = getLocalStorageArr("dismissedAlerts"); return dismissed.includes(id); } function setLocalStorageArr(name, value) { localStorage.setItem(name, JSON.stringify(value)); } function getLocalStorageArr(name) { try { const storedVal = localStorage.getItem(name); if (!storedVal) return []; const parsedArr = JSON.parse(storedVal); return Array.isArray(parsedArr) ? parsedArr : []; } catch (err) { console.log(err.message); return []; } } // getstyles() unused, styles are now inlined above