Commit Graph
435 Commits
Author SHA1 Message Date
Sameh Khamis 5582ff288d docs: describe the component kit on its own terms
The kit's comments and docs describe its props and classes directly instead
of by reference to another kit.
2026-11-01 19:40:46 -08:00
Sameh Khamis 859ceac8b4 docs: name the Vue and Pinia changelog entry after its pull request 2026-11-01 19:30:00 -08:00
Sameh Khamis 2dda92c9e6 docs: record that a map source's unavailableReason may be a function
The default map sources word their reason when it is shown, so it follows
the locale; hosts that read it directly need to know the new form.
2026-11-01 18:57:30 -08:00
Sameh Khamis 5605fdc60a Merge Core main into sameh/core-vue
railCardBlocks.js is the Vue wrapper on this branch, so main's verbatim
legend units move into RailCardBlocks.vue.
2026-11-01 17:37:56 -08:00
Sameh Khamis b20c80e590 Switch language in place, without a reload
Choosing a language in the picker now applies it at once. The choice is
stored and ?lang is kept in step through replaceState, and the picker keeps
focus.

Code that writes translated text itself re-presents it on a switch:
onLocaleChange() lets an owner listen, removed at teardown, and status
writers hand over a function of the locale (voice cards, scene director,
SDR, draw hints, imagery split, map sources, Bhote Koshi media) so the
words are rebuilt rather than re-sent. The HUD, cockpit, radio, CCTV,
launch, awareness and credit texts follow the same hook, and
applyDocumentTranslations can be applied again without undoing text code
wrote since.

The unsaved-work registry and persistLocaleAndReload existed only to guard
the reload, so they go, with their catalog entries.
2026-11-01 16:47:39 -08:00
Sameh Khamis ba20bc13d8 i18n: translate the application views with t() as they render
Every data-i18n, data-i18n-title, data-i18n-aria-label and
data-i18n-placeholder marker in the Vue templates becomes a t() call with
the key the boot pass used to look up, contexts included. The three labels
the shell rewrote at boot (Visual Presets, Location and the standby
description) render through t() too, and that rewrite is gone. With the
locale in vue-i18n, view text now follows a locale change, and markup
under v-if or v-for no longer comes back in English when it re-renders.

Rendered text and attributes are unchanged in every locale. The boot pass
still translates static page markup such as the loading screen and a host's
own markup, and npm run i18n rejects data-i18n* in a Vue template.
2026-11-01 15:38:23 -08:00
Sameh Khamis 2c72a038d5 i18n: keep the page's locale in a vue-i18n instance
The application views install one vue-i18n instance that holds the active
locale and the catalogs. src/i18n/index.js stays free of Vue: bindLocale()
keeps its locale in the instance's ref, so t(), tn() and the Intl formatters
read it from there and a view that translates while rendering renders again
when the locale changes. A tag written straight to the ref is normalized.
Message formatting, catalogs and call sites are unchanged, and switching
language still reloads the page.

The instance outlives the views: unmounting one no longer disposes it. The
browser build defines vue-i18n's feature flags and drops its message
compiler, which Core does not use.
2026-11-01 15:25:55 -08:00
Sameh Khamis 22d4cf8ee7 docs: move the branch's changelog entries into a changelog.d fragment
The Vue and Pinia migration's entries move out of CHANGELOG.md into
changelog.d/0000-vue-and-pinia.md, newest first, as the contributing guide
asks. 0000 stands in for the pull request number until it is opened. The
migration plan's cleanup step now records where it stands: the template
expansion is gone, the pattern is required for new UI, the page-level
markup tests render the real views, the attribute translation pass waits
for vue-i18n, and a host panel registration API waits for its first host.
2026-11-01 15:10:46 -08:00
Sameh Khamis 903f59302b Add the changelog entry for weather product display metadata 2026-10-31 22:42:45 -07:00
Said Turksever 684dff3b55 Merge branch 'main' into fix/e-draw-area-unit 2026-11-01 00:04:22 +00:00
Sameh Khamis 691f27387b Add the changelog entry for the GNSS source window 2026-10-31 16:41:46 -07:00
Said Turksever 84028f71fe Merge branch 'main' into fix/e-draw-area-unit 2026-10-31 23:18:42 +00:00
Said Turksever 3119b2cf9c Merge branch 'main' into authoring-panel 2026-10-30 16:40:50 +00:00
Said Turksever b442cfdb54 Merge branch 'main' into panel-chrome-consistency 2026-10-30 16:09:12 +00:00
Said Turksever 3a681accfa Merge branch 'main' into fix/firms-ipv4-fallback 2026-10-30 15:08:35 +00:00
Said Turksever 47f3377d2b Merge branch 'main' into panel-chrome-consistency 2026-10-30 15:00:57 +00:00
Said Turksever 38302a27a4 Merge upstream/main into feat/cctv-a22-autobrennero
Resolve conflicts with the NYC, Toronto, Lithuania, Florida, Taiwan and
Kartverket work on main. The CHANGELOG entry moves to
changelog.d/956-a22-brennero-webcams.md, as main now asks.
2026-10-30 14:50:41 +00:00
Said Turksever df01964171 fix(firms): keep the IPv4 retry from crashing the server; guard the call sites
- fetchIpv4 builds its Response inside the https response callback, outside
  the promise. A 204, 205 or 304, a status above 599 or an invalid reason
  phrase made the Response constructor throw there, an uncaught exception
  that stops the dev server. Null-body statuses now get a null body and
  anything else that cannot become a Response rejects, as the Radio Browser
  transport does.
- A non-OK FIRMS or mapkey-status response cancels its body so the IPv4
  socket closes at once instead of at the deadline.
- Tests: the crash cases (fail on the old code), a source check that every
  upstream request goes through fetchFirms and that fetchSource's body read
  shares its deadline (fails if either call reverts to fetch), a real-fetch
  contract test for the address-selection error shape, and an explicit skip
  in the IPv4-only socket test where the host cannot tell the families apart.
- Changelog entry moves to changelog.d/1078-firms-ipv4-fallback.md per
  CONTRIBUTING; CURRENT-STATE says which timeouts are retried and that the
  retry does not follow redirects.
2026-10-30 14:50:27 +00:00
Said Turksever 44f9138d1e Keep panel titles inside their cards and scope the hover
Collapsed Recent Imagery (English) and Data Layers (Portuguese) pushed
their toggles out of the card. Collapsed rail launchers now drop the
divider and pack closer, translated collapsed titles use compact type,
and any title that still does not fit ends in an ellipsis.

The hover now matches the dock trays' hover rather than their pinned
look, only on pointers that can hover, and recolours only the hovered
panel's own header, so Radio and body labels keep their colours.

The cyber theme keeps main's gutters and Display toggle size, the dock
and rails share --dock-label-* tokens, and the dimmed open Context title
rule is gone.
2026-10-30 13:05:33 +00:00
Sameh Khamis 2640f6378c Add the changelog entry for the CCTV view thinning 2026-10-29 21:32:45 -07:00
Said Turksever 2b05461232 Merge remote-tracking branch 'origin/main' into authoring-panel
# Conflicts:
#	docs/CURRENT-STATE.md
2026-10-29 18:40:02 +00:00
Said Turksever 1252dacf07 Merge branch 'main' into panel-chrome-consistency 2026-10-29 17:35:23 +00:00
Said Turksever a370742e25 Merge remote-tracking branch 'origin/main' into ux/context-panel-cleanup 2026-10-29 16:42:17 +00:00
Said Turksever 9520238bfb Move the changelog entry to changelog.d and clear review leftovers
The entry now lives in changelog.d/1471-context-panel-cleanup.md with
credit, as CONTRIBUTING asks, and CHANGELOG.md is back to main.

CURRENT-STATE no longer lists a compact Radio power control and scopes
the readability description to what Cyber keeps. The responsive glow
comment no longer cites the removed Radio popover, and qa-radio's
pick-buffer comment is back above settleRadioFrames.

Four test fixtures stop stubbing the removed launcher sync, and
PanelChrome drops the _syncRailPanelCollapseButton pass-through, wiring
the layout controller straight to _syncPanelCollapseButton.
2026-10-29 16:35:44 +00:00
Said Turksever c227f89852 Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 16:23:27 +00:00
German Khokhlov 29692ac7a1 changelog: Japanese (#1478) 2026-10-29 19:48:33 +04:00
Said Turksever d0059575d4 Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 15:45:26 +00:00
Said Turksever 8348402a56 Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 15:39:45 +00:00
German Khokhlov 6ab9432a2a changelog: German (#1477) 2026-10-29 19:01:00 +04:00
German Khokhlov b84f7f346c Merge branch 'main' into german/hal-638-fr 2026-10-29 18:26:36 +04:00
Said Turksever adb21d098d Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 14:22:01 +00:00
Said Turksever 3bcdc16dde Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 13:55:54 +00:00
German KhokhlovandClaude Opus 5.5 e44d15cd34 changelog: French (#1476)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:55:31 +04:00
Said Turksever 1990228889 Merge branch 'main' into fix/remove-snow-preset 2026-10-29 13:53:35 +00:00
German Khokhlov 4ed06fac22 Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 17:45:40 +04:00
German Khokhlov 4877be7f9b Merge branch 'main' into fix/remove-snow-preset 2026-10-29 17:45:25 +04:00
German KhokhlovandClaude Opus 5.5 01a097caae changelog: Brazilian Portuguese (#1475)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:42:57 +04:00
German KhokhlovandClaude Opus 5.5 cf1ef368d0 changelog: Italian (#1473)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:06:00 +04:00
Said Turksever 452292001a Add the changelog fragment for the Authoring panel 2026-10-29 11:32:27 +00:00
German KhokhlovandClaude Opus 5.5 1abe8cbb51 changelog: Ukrainian (#1470)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 15:22:15 +04:00
Said Turksever 2b5770c6a2 Add the changelog entry for the Snow removal 2026-10-29 11:21:37 +00:00
Said Turksever e693e665a6 Add the changelog entry for removing the Operator HUD layout 2026-10-29 10:42:38 +00:00
Said Turksever 361f7de3bd Add the changelog entry for the panel chrome change 2026-10-29 10:40:43 +00:00
Said Turksever 53ca307bb6 Merge branch 'main' into perf/vessels-idle-render 2026-10-29 09:53:34 +00:00
Sameh Khamis 391dba74eb Add the changelog entry 2026-10-28 22:36:18 -07:00
Said Turksever 1c0a30adaf Merge branch 'main' into perf/vessels-idle-render 2026-10-29 01:18:39 +00:00
Sameh Khamis 7914370b14 Merge branch 'main' into sameh/hud-google-lookups 2026-10-28 17:37:20 -07:00
Sameh Khamis d1e0ff4e06 Name the HUD lookups changelog entry after its pull request 2026-10-28 17:09:50 -07:00
Said Turksever 6847bc1433 Merge branch 'main' into upstream/traffic-layer-stale 2026-10-28 22:07:37 +00:00
Sameh Khamis c1f60cb7e7 Cut the Google requests the HUD summary makes on its own
The HUD builds place context for its AI summary whenever the camera
settles, and each build paid for up to four reverse geocodes plus a Nearby
Places search, even when no OpenAI key was configured to use them.

- Ask GET /api/openai/hud-summary/status once; with no summary configured,
  or after an unconfigured reply, make no place lookups for the page.
- Reverse-geocode at most two points: the view center and one viewport
  point.
- Reuse a lookup until the view center moves a quarter of the visible
  width, the camera's distance to it doubles or halves, or the camera
  crosses a lookup height. The reused points are asked again, so only a
  timeout, failure or empty answer spends.
- Repaint the last AI reply when a small pan leaves the context unchanged.

Cached-only hosts and voice context lookups are unchanged.
2026-10-28 14:59:33 -07:00