SIMON Master Console Rebuild
True command center for SIMON + WEB360
This rebuild gives you a cleaner production spine: interactive tree, live viewer, guarded editor, dynamic graphics, architecture map, and note storage. It is designed to sit beside your existing
console.php
and become the stronger replacement path.
Dashboard
Tree
Viewer
System Map
File Registry
Notes
Files
15,432
Folders
437
Scanned Size
3.85 GB
PHP Files
996
Editable Text Files
12,680
File viewer
guarded to /htdocs
/si/operations/portal-v15.js
document.addEventListener('DOMContentLoaded',()=>{ const settings=document.getElementById('settings-center'); const settingsLink=document.querySelector('a[href="#settings-center"]'); if(settings&&settingsLink){ const close=document.createElement('button');close.type='button';close.className='settings-close';close.setAttribute('aria-label','Close settings');close.textContent='×';settings.prepend(close); const open=event=>{event?.preventDefault();settings.classList.add('settings-open');document.body.classList.add('settings-lock');history.replaceState(null,'','#settings-center')}; const shut=()=>{settings.classList.remove('settings-open');document.body.classList.remove('settings-lock');if(location.hash==='#settings-center')history.replaceState(null,'',location.pathname+location.search)}; settingsLink.addEventListener('click',open);close.addEventListener('click',shut);document.addEventListener('keydown',e=>{if(e.key==='Escape')shut()});if(location.hash==='#settings-center')open(); } const clock=document.getElementById('liveClock'); const drawClock=()=>{if(clock)clock.textContent=new Intl.DateTimeFormat('en-US',{timeZone:'America/Chicago',weekday:'short',month:'short',day:'numeric',hour:'numeric',minute:'2-digit',timeZoneName:'short'}).format(new Date())};drawClock();setInterval(drawClock,30000); const weatherButton=document.getElementById('loadWeatherTop'),weather=document.getElementById('weatherTopStatus'); const loadWeather=async(lat=32.7767,lon=-96.7970,label='Dallas')=>{if(!weather)return;weather.textContent='Updating…';try{const url=`https://api.open-meteo.com/v1/forecast?latitude=${encodeURIComponent(lat)}&longitude=${encodeURIComponent(lon)}¤t=temperature_2m,apparent_temperature,weather_code&temperature_unit=fahrenheit&timezone=auto`;const data=await fetch(url,{cache:'no-store'}).then(r=>{if(!r.ok)throw new Error('weather');return r.json()});const w=data.current||{};weather.textContent=`${label} · ${w.temperature_2m??'?'}°F · feels ${w.apparent_temperature??'?'}°F`}catch(e){weather.textContent='Weather unavailable'}}; loadWeather(); weatherButton?.addEventListener('click',()=>{if(!navigator.geolocation){loadWeather();return}weather.textContent='Locating…';navigator.geolocation.getCurrentPosition(p=>loadWeather(p.coords.latitude,p.coords.longitude,'Local'),()=>loadWeather(),{timeout:8000,maximumAge:600000})}); document.querySelectorAll('.call-table tbody tr').forEach(row=>{const status=(row.children[3]?.textContent||'').trim().toLowerCase();if(!['ringing','in-progress','answered','completed'].includes(status))row.classList.add('call-pending')}); });
Save file
Quick jump
open a path
Open