🪐 portal: the orrery gets a door — 🪐 SOLARGOD button deep-links at GODSIGH's scrubbed moment
Reciprocal to SOLARGOD's Earth-card link into GODSIGH. A subtle HUD pill (above the footer, styled to the mode-button family) opens the orrery in a new tab. The href is rebuilt fresh at click time from viewer.clock.currentTime via the shared `#t=@<unixMs>` convention, so scrubbing GODSIGH's clock carries straight through to SOLARGOD's sim time. - index.html: <a#solargod-link.portal-link> between #layers and footer - css: .portal-link (matches .modes button; accent on hover) - ui.js: wireSolargodLink(getMs) — rebuilds href on pointerdown+click (covers ⌘/middle-click new-tab); Cesium stays out of the DOM module - main.js: wire it with a getMs closure over viewer.clock Verified in-browser: button renders, zero console errors, all layers boot; live click → href tracks the clock; scrub -3h → href exactly 3h behind now + chip flips SCRUBBED + live layers pause; opening the link launches SOLARGOD in SCRUBBED state at the passed epoch (its hash echoes the exact ms). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
66d6df2689
commit
d06ebf07cb
@ -111,6 +111,24 @@ html, body {
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---- portal to SOLARGOD (sibling orrery) ---- */
|
||||||
|
.portal-link {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
padding: 6px 8px;
|
||||||
|
font-size: 11px;
|
||||||
|
color: var(--dim);
|
||||||
|
text-decoration: none;
|
||||||
|
background: rgba(255, 255, 255, 0.03);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: 8px;
|
||||||
|
transition: all 0.15s;
|
||||||
|
}
|
||||||
|
.portal-link:hover {
|
||||||
|
color: var(--accent);
|
||||||
|
border-color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
/* ---- layer rows ---- */
|
/* ---- layer rows ---- */
|
||||||
#layers {
|
#layers {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@ -23,6 +23,8 @@
|
|||||||
<button id="mode-photo" type="button">Photo</button>
|
<button id="mode-photo" type="button">Photo</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="layers"></div>
|
<div id="layers"></div>
|
||||||
|
<a id="solargod-link" class="portal-link" href="http://127.0.0.1:8147/"
|
||||||
|
target="_blank" rel="noopener" title="Open SOLARGOD at this moment">🪐 SOLARGOD</a>
|
||||||
<footer>
|
<footer>
|
||||||
<div>Public OSINT feeds · Celestrak · OpenSky · EOX Sentinel-2 · CARTO/OSM</div>
|
<div>Public OSINT feeds · Celestrak · OpenSky · EOX Sentinel-2 · CARTO/OSM</div>
|
||||||
<div class="demo">Ships & events are <b>[DEMO]</b> data</div>
|
<div class="demo">Ships & events are <b>[DEMO]</b> data</div>
|
||||||
|
|||||||
@ -74,6 +74,11 @@ function setMode(mode) {
|
|||||||
document.getElementById('mode-data').addEventListener('click', () => setMode('data'));
|
document.getElementById('mode-data').addEventListener('click', () => setMode('data'));
|
||||||
document.getElementById('mode-photo').addEventListener('click', () => setMode('photo'));
|
document.getElementById('mode-photo').addEventListener('click', () => setMode('photo'));
|
||||||
|
|
||||||
|
// ---- portal to SOLARGOD (sibling orrery) ----
|
||||||
|
// Deep-links to the solar-system app at GODSIGH's current sim moment via its
|
||||||
|
// shared `#t=@<unixMs>` convention; the href is rebuilt fresh at click time.
|
||||||
|
ui.wireSolargodLink(() => Cesium.JulianDate.toDate(viewer.clock.currentTime).getTime());
|
||||||
|
|
||||||
// ---- clock configuration ----
|
// ---- clock configuration ----
|
||||||
viewer.clock.startTime = start.clone();
|
viewer.clock.startTime = start.clone();
|
||||||
viewer.clock.stopTime = stop.clone();
|
viewer.clock.stopTime = stop.clone();
|
||||||
|
|||||||
13
js/ui.js
13
js/ui.js
@ -111,6 +111,19 @@ export function setLiveChip(isLive) {
|
|||||||
chip.dataset.state = isLive ? 'live' : 'scrub';
|
chip.dataset.state = isLive ? 'live' : 'scrub';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Portal to SOLARGOD (sibling orrery). `getMs` returns GODSIGH's current sim
|
||||||
|
// time as unix ms; we rebuild the deep-link href fresh at click time so the
|
||||||
|
// orrery opens at whatever moment the clock is scrubbed to, via the shared
|
||||||
|
// `#t=@<unixMs>` hash convention. pointerdown fires before navigation, so this
|
||||||
|
// also covers ⌘/ctrl-click and middle-click new-tab opens.
|
||||||
|
export function wireSolargodLink(getMs) {
|
||||||
|
const a = document.getElementById('solargod-link');
|
||||||
|
if (!a) return;
|
||||||
|
const sync = () => { a.href = `http://127.0.0.1:8147/#t=@${getMs()}`; };
|
||||||
|
a.addEventListener('pointerdown', sync);
|
||||||
|
a.addEventListener('click', sync);
|
||||||
|
}
|
||||||
|
|
||||||
// Small fixed overlay for primitive picks (aircraft), which have no Cesium InfoBox.
|
// Small fixed overlay for primitive picks (aircraft), which have no Cesium InfoBox.
|
||||||
export function showPickOverlay(title, rowPairs) {
|
export function showPickOverlay(title, rowPairs) {
|
||||||
const el = document.getElementById('pick-overlay');
|
const el = document.getElementById('pick-overlay');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user