mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-15 07:42:23 +00:00
The main timeline is the only time control; the Weather panel shows its frame time
The Weather panel kept a second time transport of its own: a slider, step buttons, Latest and Play, backed by a replay in the weather clock that stepped the observed frames every two seconds and went round from the last to the first. The weather clock also attached itself to the world clock as a driver, so the timeline's Play became that replay whenever weather was on. The panel now shows the frame time only: the newest frame and its age while live, the timeline time alone at a past time. The weather clock no longer has setTarget, step, latest, play, pause or togglePlay, its state no longer has playing, and it no longer drives the world clock. It still follows the world time, registers each product's frames as marks the timeline's arrow keys step to, holds its products, and gates the world's continuous play at each next frame until it loads. weatherClock.world names the world clock it follows. A weather row's play, latest and step params move the world clock as the timeline does: play toggles continuous play (from the start of the covered time when live), latest goes live, and step goes to the previous or next mark. The rail timeline component, which only the panel used, is removed, along with its unused messages in every locale.
This commit is contained in:
1 parent
bce737bf32
commit
3cfd414e70
35 files changed
+328
-1033
No files matched your search
+4
-1
@@ -187,7 +187,10 @@ instances. Configure sources with `application/sources` before registration or
|
||||
state restoration, and release them after the consumers stop. The catalog
|
||||
constructor (`application/layers`) also requires `wind`, `weather` and
|
||||
`cyclones` sources with `getSnapshot` for the Weather layers, and owns the
|
||||
observed-history clock those layers share for the catalog's lifetime.
|
||||
observed-history clock those layers share for the catalog's lifetime. That
|
||||
clock, the catalog's `weatherClock`, follows the world clock (`gods-eye-view/time`)
|
||||
and has no time controls of its own: move time with the world clock's `seek`,
|
||||
`play`, `pause` and `goLive` (`weatherClock.world` is the one it follows).
|
||||
A `weather` source may also supply decoded frames: an optional
|
||||
`getFrameImage({ product, time, size, bbox, signal })` returns a whole-extent or
|
||||
detail image and an optional `getFrameTile({ product, time, z, x, y, size,
|
||||
|
||||
@@ -293,9 +293,9 @@ the user's later collapse choice, including body remounts. Mark the body
|
||||
`max-height` and puts the scroll offset back afterwards. Panel bodies only
|
||||
scroll on an open-card change, with one write, never on a refresh.
|
||||
|
||||
Compose `createRailCards({ container, document, onParams, onOpen })` and
|
||||
`createRailTimeline({ container, document, onCommit, onPreview, onStep,
|
||||
onLatest, onPlay })`. Cards reconcile `{ id, title, badge, open, compact,
|
||||
Compose `createRailCards({ container, document, onParams, onOpen })`. Rails
|
||||
have no time controls of their own; the world timeline moves time. Cards
|
||||
reconcile `{ id, title, badge, open, compact,
|
||||
compactStatus, blocks }` in place. Their full-width native button headers expose
|
||||
`aria-expanded` and `aria-controls`; articles expose `data-open`. The feature
|
||||
adapter owns accordion state. Generic cards do not select data or enable layers.
|
||||
@@ -330,10 +330,9 @@ consumers. They expose `summary.settings`, `summary.actions` and optional
|
||||
subscriptions still refresh the cards. Cards own configuration and readings.
|
||||
|
||||
Weather orders cyclones, wind, then a bordered Observed history group containing
|
||||
the timeline and active radar, satellite and lightning cards. The group heading
|
||||
and scope name its active products. The timeline stays visible whenever any
|
||||
observed product is enabled; fewer than two ticks disables transport. Pass
|
||||
`heading: false` to the timeline when the containing group owns the heading.
|
||||
the frame time and active radar, satellite and lightning cards. The group
|
||||
heading and scope name its active products. The frame time shows whenever any
|
||||
observed product is enabled and has a frame; the world timeline moves time.
|
||||
Exactly one active card is open. Header clicks and newly enabled ids choose it
|
||||
(the last new entry wins a batch); refreshes and clock ticks retain it. First
|
||||
appearance uses cyclones with storms, otherwise the first card. Disabling the
|
||||
@@ -341,7 +340,7 @@ open layer falls back to the first remaining card. A WeakMap per document keeps
|
||||
explicit choices through body remounts without adding share state. Card opening,
|
||||
storm selection and layer enabling remain independent.
|
||||
|
||||
Optional card/badge/slider class names provide feature styling. Card titles use
|
||||
Optional card/badge class names provide feature styling. Card titles use
|
||||
`.data-name` typography; meta/time/badges use `.data-toggle-meta` typography;
|
||||
setting/result labels use `.panel-title`; chips retain `.data-toggle-chip`.
|
||||
Reserve one status line, even without a legend. Use app tokens. Wind's footer
|
||||
|
||||
+18
-10
@@ -8532,9 +8532,10 @@ Wind supports selectable GFS/IFS models with persisted model choice. Each fetch
|
||||
Weather combines the GFS/ECMWF surface forecast with three observation layers:
|
||||
NOAA Rain radar (CONUS), Satellite clouds (regional GOES or slower global infrared),
|
||||
and 15-minute lightning density (Americas and Pacific). One transient observed
|
||||
clock drives all enabled observation rows. Earlier/Later use the sorted union of
|
||||
non-suspended products' advertised times; each product selects its nearest frame
|
||||
at or before the requested UTC time, never a future frame or an interpolation.
|
||||
clock moves all enabled observation rows with the world clock; the world
|
||||
timeline is the only time control. Each product's advertised times are marks on
|
||||
that timeline, which its arrow keys step to; each product selects its nearest
|
||||
frame at or before the world time, never a future frame or an interpolation.
|
||||
The maximum gap is 30 minutes for radar, regional infrared and lightning, and
|
||||
3 hours for hourly global infrared, but never less than one and a half of the
|
||||
feed's median frame spacing over its latest frames, so a regional feed whose
|
||||
@@ -8544,16 +8545,23 @@ lightning, 4 hours for global infrared). A missing eligible frame hides that pro
|
||||
and reports the gap; rows show actual displayed UTC time with synced/nearest labels.
|
||||
Manifest rollover preserves the requested history time, even when frames expire.
|
||||
|
||||
Latest follows each product's own newest frame, so its timestamps can differ.
|
||||
Playback advances two seconds after all products settle, wraps, and stops with
|
||||
fewer than two union times or when all products are suspended. Hidden documents,
|
||||
reduced motion and unavailable imagery hosts suspend products. Re-enabling or
|
||||
Live follows each product's own newest frame, so its timestamps can differ.
|
||||
The timeline's Play runs the world clock at the chosen speed and stops at each
|
||||
product's next frame until that frame loads (for at most eight seconds), so
|
||||
every frame shows. Hidden documents, reduced motion and unavailable imagery
|
||||
hosts suspend products. Re-enabling or
|
||||
restoring a host joins the retained history target. The wind row explicitly says
|
||||
“Forecast · does not follow history” while the observed clock is in history mode.
|
||||
The catalog exposes `weatherClock` and destroys it with its lifetime signal.
|
||||
The Weather panel's frame time shows the newest frame and its age while live,
|
||||
and the timeline time alone at a past time.
|
||||
The catalog exposes `weatherClock` and destroys it with its lifetime signal. It
|
||||
has no time controls of its own: `weatherClock.world` is the world clock it
|
||||
follows, where time moves. A weather row's `play`, `latest` and `step` params
|
||||
move that world clock as the timeline does.
|
||||
|
||||
Source, opacity, coverage navigation and transport controls live in the WEATHER
|
||||
panel's cards and timeline, not in the rows. The viewer clock is untouched.
|
||||
Source, opacity and coverage navigation live in the WEATHER panel's cards, not
|
||||
in the rows; the panel shows the frame time and has no time controls. The
|
||||
viewer clock is untouched.
|
||||
Observation layers are off by default; share/persist includes appearance and product, while history
|
||||
is transient and shared links open latest. Rendering retains the previous frame
|
||||
when an incoming frame fails; no eligible historical frame instead hides imagery.
|
||||
|
||||
@@ -153,9 +153,9 @@ a feature supplying only its accent.
|
||||
`t()`, which follows the locale as the view renders; the views carry no
|
||||
`data-i18n*` markers, which `npm run i18n` rejects in a template. Shared builders become components first and
|
||||
keep their imperative entry points until their owners are components:
|
||||
the rail cards, card blocks and timeline (`src/ui/rail/`) render through
|
||||
Vue's synchronous `render()` behind `createRailCards()`,
|
||||
`createRailCardBlocks()` and `createRailTimeline()`. Order: Scenes (done: `SceneOptions` and
|
||||
the rail cards and card blocks (`src/ui/rail/`) render through
|
||||
Vue's synchronous `render()` behind `createRailCards()` and
|
||||
`createRailCardBlocks()`. Order: Scenes (done: `SceneOptions` and
|
||||
`SceneShotList` over the `gev-scenes` store; the panel's buttons, status
|
||||
line, progress bar and the runtime chip render the panel SceneControls
|
||||
presents there, and the buttons and file chooser call its actions), Weather (done: the owner
|
||||
|
||||
Reference in new issue
Block a user