Scan to open attendance
CGCC Logo
CSG
Attendance
For accurate attendance, please allow your browser to access your location when prompted.
// Settings embedded for client-side geofence const GEO_ENABLED = false; const CENTER_LAT = null; const CENTER_LNG = null; const RADIUS_METERS = 100; // Show/hide inline prompt based on whether geofence is enabled (function(){ const el = document.getElementById('locationPrompt'); if (el) el.style.display = GEO_ENABLED ? 'block' : 'none'; })(); // Capture helpers (already present) function fillFormLatLng(formId, lat, lng) { const form = document.getElementById(formId); if (!form) return; const latEl = form.querySelector('input[name="lat"]'); const lngEl = form.querySelector('input[name="lng"]'); if (!latEl || !lngEl || !latEl.value || !lngEl.value) { try { const pos = await getCurrentPositionPromise(); fillFormLatLng(formId, pos.coords.latitude, pos.coords.longitude); latEl = form.querySelector('input[name="lat"]'); lngEl = form.querySelector('input[name="lng"]'); } catch (e) { showClientError(errorId, 'Location permission required. Please allow your browser to access your location and try again.'); return; } } const lat = parseFloat(latEl.value); const lng = parseFloat(lngEl.value); if (Number.isNaN(lat) || Number.isNaN(lng)) { showClientError(errorId, 'Could not read your location. Please try again.'); return; } const dist = distanceMeters(lat, lng, Number(CENTER_LAT), Number(CENTER_LNG)); if (dist > Number(RADIUS_METERS)) { showClientError(errorId, `You appear to be ${Math.round(dist)} meters away. You must be within ${RADIUS_METERS} meters to proceed.`); return; } form.submit(); } // Attach guarded submit for both forms document.getElementById('checkinForm')?.addEventListener('submit', function(e) { e.preventDefault(); handleGeoSubmit('checkinForm', 'checkinClientError'); }); document.getElementById('checkoutForm')?.addEventListener('submit', function(e) { e.preventDefault(); handleGeoSubmit('checkoutForm', 'checkoutClientError'); }); // Try to capture once on load for both forms document.addEventListener('DOMContentLoaded', function() { captureGeoAndFill('checkinForm'); captureGeoAndFill('checkoutForm'); }); // Modal open/close (existing) function openModal(id){ const el=document.getElementById(id); if(!el) return; el.classList.add('show','flex'); // added: request location when opening the modal if (id === 'checkinBackdrop') captureGeoAndFill('checkinForm'); if (id === 'checkoutBackdrop') captureGeoAndFill('checkoutForm'); } function closeModal(id){ const el=document.getElementById(id); if(!el) return; el.classList.remove('show','flex'); } ['checkinBackdrop','checkoutBackdrop'].forEach(id=>{ const el=document.getElementById(id); el.addEventListener('click',(e)=>{ if(e.target.id===id) closeModal(id); }); }); window.addEventListener('keydown',(e)=>{ if(e.key==='Escape'){ closeModal('checkinBackdrop'); closeModal('checkoutBackdrop'); } });