// ===================================================== // popup.js — Modal Detail Beasiswa // Tutup via: tombol ×, klik overlay, tekan Escape // ===================================================== const overlay = document.getElementById('popup-overlay'); const modal = document.getElementById('popup-modal'); const closeBtn = document.getElementById('popup-close'); const popupBody = document.getElementById('popup-content'); // Format tanggal ke format Indonesia function fmtDate(str) { if (!str) return '—'; const d = new Date(str); if (isNaN(d.getTime())) return str; return d.toLocaleDateString('id-ID', { day: 'numeric', month: 'long', year: 'numeric' }); } /** * Buka popup modal untuk beasiswa dengan ID tertentu * Data diambil dari window.beasiswaData yang diset oleh filter.js */ function openPopup(id) { const data = window.beasiswaData || []; const bsw = data.find(b => b.id === id); if (!bsw) return; const isBuka = bsw.status === 'Buka' || bsw.status === 'Dibuka'; const badgeClass = isBuka ? 'badge-buka' : 'badge-ditutup'; // Bangun list syarat umum const syaratItems = (bsw.syarat_umum || []) .map(s => `
  • ${s}
  • `) .join(''); const syaratHTML = syaratItems ? `` : `

    Syarat belum tersedia. Kunjungi sumber resmi.

    `; const hasUrl = bsw.url_sumber && bsw.url_sumber !== '#'; // Render konten popup popupBody.innerHTML = ` ${bsw.nama} `; // Tampilkan overlay overlay.classList.add('show'); document.body.style.overflow = 'hidden'; // Set focus ke modal untuk aksesibilitas setTimeout(() => modal.focus(), 50); } /** Tutup popup modal */ function closePopup() { overlay.classList.remove('show'); document.body.style.overflow = ''; } // === Event Listeners untuk menutup popup === // 1. Tombol × close closeBtn?.addEventListener('click', closePopup); // 2. Klik di luar area modal (backdrop) document.getElementById('popup-backdrop')?.addEventListener('click', closePopup); // 3. Tekan Escape document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && overlay.classList.contains('show')) { closePopup(); } }); // Expose ke global (dipanggil dari onclick di kartu) window.openPopup = openPopup; window.closePopup = closePopup;