Add a refresh-interval control to the Map settings popover: Auto (follows the OpenSky plan) or a fixed 15/30/60/120s. The states endpoint now resolves a recommended interval from the resolved plan (anonymous 60s, standard 30s, contributor 15s) and returns it alongside the aircraft, so "Auto" tracks the plan's credit budget and update rate. Polling reschedules live when the effective interval changes; the map caption reflects it. New airTrafficInterval preference (default 'auto', persisted + synced). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
45 lines
1.8 KiB
HTML
45 lines
1.8 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
<script>
|
|
// Apply saved theme + font size before first paint (light is the brand default).
|
|
(function () {
|
|
var GROUND = { light: '#EEF0F3', dark: '#0B1730' }
|
|
var FONT = { sm: 15, md: 16, lg: 18 }
|
|
var html = document.documentElement
|
|
var mode = 'light', prefs = {}
|
|
try {
|
|
mode = localStorage.getItem('pv_theme') || 'light'
|
|
} catch (e) {}
|
|
try {
|
|
prefs = JSON.parse(localStorage.getItem('pv_prefs') || '{}') || {}
|
|
} catch (e) {}
|
|
var t = mode
|
|
if (mode === 'system') {
|
|
t = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
|
|
}
|
|
html.setAttribute('data-theme', t)
|
|
html.style.backgroundColor = GROUND[t] || GROUND.light
|
|
html.style.fontSize = (FONT[prefs.fontSize] || 16) + 'px'
|
|
if (prefs.reduceMotion) html.classList.add('reduce-motion')
|
|
})()
|
|
</script>
|
|
<title>PilotVault — Control Panel</title>
|
|
<script type="module" crossorigin src="./assets/index-BdIdzNiz.js"></script>
|
|
<link rel="stylesheet" crossorigin href="./assets/index-CYeDXsw9.css">
|
|
</head>
|
|
<body>
|
|
<div id="app"></div>
|
|
</body>
|
|
</html>
|