/* Elevate — Tweaks app
Overrides:
- Day of week label (Mon..Sun, or Auto)
- Season (Spring/Summer/Autumn/Winter, or Auto)
- Coordinates string shown after "Waregem"
Persists via __edit_mode_set_keys (EDITMODE block in this file). */
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"day": "auto",
"season": "auto",
"lat": 50.8956,
"lon": 3.4239,
"coordFormat": "decimal"
}/*EDITMODE-END*/;
const DAYS = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
function autoSeason(d) {
const m = d.getMonth() + 1, day = d.getDate();
if ((m === 3 && day >= 20) || m === 4 || m === 5 || (m === 6 && day < 21)) return 'spring';
if ((m === 6 && day >= 21) || m === 7 || m === 8 || (m === 9 && day < 23)) return 'summer';
if ((m === 9 && day >= 23) || m === 10 || m === 11 || (m === 12 && day < 21)) return 'autumn';
return 'winter';
}
function fmtCoords(lat, lon, format) {
const ns = lat >= 0 ? 'N' : 'S';
const ew = lon >= 0 ? 'E' : 'W';
const aLat = Math.abs(lat), aLon = Math.abs(lon);
if (format === 'dms') {
const toDms = (v) => {
const deg = Math.floor(v);
const minF = (v - deg) * 60;
const min = Math.floor(minF);
const sec = ((minF - min) * 60).toFixed(1);
return `${deg}°${String(min).padStart(2,'0')}′${sec}″`;
};
return `${toDms(aLat)} ${ns}, ${toDms(aLon)} ${ew}`;
}
if (format === 'short') {
return `${aLat.toFixed(2)}° ${ns}, ${aLon.toFixed(2)}° ${ew}`;
}
return `${aLat.toFixed(4)}° ${ns}, ${aLon.toFixed(4)}° ${ew}`;
}
function applyTweaks(t) {
const dayEl = document.querySelector('[data-scene-day]');
const seasonEl = document.querySelector('[data-scene-season]');
const coordsEl = document.querySelector('[data-scene-coords]');
const now = new Date();
if (dayEl) {
dayEl.textContent = t.day === 'auto' ? DAYS[now.getDay()] : DAYS[Number(t.day)];
}
if (seasonEl) {
const season = t.season === 'auto' ? autoSeason(now) : t.season;
seasonEl.textContent = season.charAt(0).toUpperCase() + season.slice(1);
// Notify scene engine if available
if (window.__sceneSetSeason) {
window.__sceneSetSeason(t.season === 'auto' ? null : season);
}
}
if (coordsEl) {
coordsEl.textContent = fmtCoords(t.lat, t.lon, t.coordFormat);
}
}
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
React.useEffect(() => { applyTweaks(t); }, [t]);
return (
setTweak('day', v)}
/>
setTweak('season', v)}
/>
setTweak('lat', v)}
/>
setTweak('lon', v)}
/>
setTweak('coordFormat', v)}
/>
setTweak({ lat: 50.8956, lon: 3.4239, coordFormat: 'decimal' })}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('tweaks-root'));
root.render();
// Apply once on load even before tweaks panel opens, so default values render.
document.addEventListener('DOMContentLoaded', () => applyTweaks(TWEAK_DEFAULTS));