9aba24978b
FlyWithLua auto-install: bridge drops fms-sync/ui-sync/terrain-probe into X-Plane's FlyWithLua Scripts dir on startup and self-updates (content-compare). Graceful when no X-Plane / no FlyWithLua. /api/lua/install + status in health. Desktop app bundles the scripts and passes LUA_SRC_DIR to the sidecar. Smoothing: shared useEased/useEasedAngle hook (api/ease.js) with render-bail on settle. VFR steam gauges now interpolate to 60fps instead of stepping at the ~10Hz value stream. MFD ownship no longer vibrates — position/heading eased in a single rAF loop, follow-pan without animated-panTo pile-up (pauses on range zoom). Airspace overlay: server/airspace.js loads per-region GeoJSON, classifies (B/C/D/TMA/CTR/MOA/Restricted/Prohibited/Danger), bbox query, and downloads regions on demand — FAA (US, key-free) and OpenAIP (Europe, user key). New AIRSPACE softkey draws chart-coloured boundaries (B blue, C magenta, D dashed), non-interactive so map-clicks still drop waypoints. Launcher gains a "Lufträume" section to pick/download regions via the running bridge. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
94 lines
3.6 KiB
HTML
94 lines
3.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>X-Plane Cockpit</title>
|
|
<link rel="stylesheet" href="styles.css" />
|
|
</head>
|
|
<body>
|
|
<div class="panel">
|
|
<header class="hd">
|
|
<div class="brand">G1000<span>·web</span></div>
|
|
<div id="status" class="status off"><span class="dot"></span><span id="statusText">Gestoppt</span></div>
|
|
</header>
|
|
|
|
<main>
|
|
<div id="updateBanner" class="update-banner hidden">
|
|
<div class="ub-text"><b id="ubTitle">Update verfügbar</b><span id="ubNotes"></span></div>
|
|
<div class="ub-actions">
|
|
<button id="ubInstall" class="btn ok sm">Installieren</button>
|
|
<button id="ubDismiss" class="btn ghost sm">Später</button>
|
|
</div>
|
|
</div>
|
|
|
|
<section class="card">
|
|
<label class="lbl">X-Plane 12 Ordner</label>
|
|
<div class="row">
|
|
<input id="xpPath" type="text" placeholder="z.B. /Users/du/X-Plane 12" spellcheck="false" />
|
|
<button id="browse" class="btn ghost">Suchen…</button>
|
|
</div>
|
|
<div id="xpHint" class="hint"></div>
|
|
|
|
<div class="row gap">
|
|
<div class="field">
|
|
<label class="lbl">Port</label>
|
|
<input id="port" type="number" value="8080" min="1024" max="65535" />
|
|
</div>
|
|
<label class="toggle">
|
|
<input id="demo" type="checkbox" />
|
|
<span>Demo-Modus (ohne X-Plane)</span>
|
|
</label>
|
|
</div>
|
|
<div id="portHint" class="hint"></div>
|
|
</section>
|
|
|
|
<button id="startBtn" class="btn primary big">Server starten</button>
|
|
|
|
<section id="liveCard" class="card live hidden">
|
|
<label class="lbl">Auf Tablets / Laptops öffnen</label>
|
|
<div class="url-row">
|
|
<code id="url">—</code>
|
|
<button id="copy" class="btn ghost sm" title="Kopieren">⧉</button>
|
|
</div>
|
|
<div class="quick">
|
|
<button class="btn ghost sm" data-page="pfd">PFD</button>
|
|
<button class="btn ghost sm" data-page="mfd">MFD</button>
|
|
<button class="btn ghost sm" data-page="map">Map</button>
|
|
<button class="btn ghost sm" data-page="fms">FMS</button>
|
|
</div>
|
|
<button id="openBtn" class="btn ok">Cockpit im Browser öffnen</button>
|
|
|
|
<div class="diag">
|
|
<div class="diag-row"><span>X-Plane</span><b id="dXp">—</b></div>
|
|
<div class="diag-row"><span>Verbundene Geräte</span><b id="dClients">—</b></div>
|
|
<div class="diag-row"><span>Navdata</span><b id="dNav">—</b></div>
|
|
<div class="diag-row"><span>Datarefs</span><b id="dRefs">—</b></div>
|
|
</div>
|
|
|
|
<details class="asp-wrap">
|
|
<summary>Lufträume auf der Karte</summary>
|
|
<div class="asp-body">
|
|
<p class="asp-note">Wähle Regionen für die Luftraum-Anzeige (Class B/C/D, Restricted, MOA …). USA ist frei; Europa braucht einen kostenlosen <a href="#" id="aspKeyLink">OpenAIP-API-Key</a>.</p>
|
|
<input id="aspKey" type="password" placeholder="OpenAIP API-Key (für Europa)" spellcheck="false" />
|
|
<div id="aspRegions" class="asp-list"></div>
|
|
<div id="aspHint" class="hint"></div>
|
|
</div>
|
|
</details>
|
|
</section>
|
|
|
|
<details class="log-wrap">
|
|
<summary>Server-Log</summary>
|
|
<pre id="log"></pre>
|
|
</details>
|
|
</main>
|
|
|
|
<footer class="ft">
|
|
<span id="ver">v—</span>
|
|
<button id="updateBtn" class="link">Nach Updates suchen</button>
|
|
</footer>
|
|
</div>
|
|
<script src="main.js"></script>
|
|
</body>
|
|
</html>
|