Commit Graph
1109 Commits
Author SHA1 Message Date
Manjunath 2a629f0987 fix(awareness): make the 250 km range ring readable on any ground
The Global Context range ring was a Cesium ellipse outline at 1 px in
rgba(98,181,255,0.72). WebGL ignores larger ellipse outline widths, so it
could not be thickened, and it vanished over desert and snow and under the
FLIR, NVG and CRT styles.

Draw it as a polyline instead: a 4 px line with a 2 px Context-blue core
inside a 1 px dark halo on each side (PolylineOutlineMaterialProperty).
The halo gives luminance contrast on light and dark ground, which the
monochrome styles keep. The ring sits at the same 2.5 km height and
follows the subject on the same 250 m threshold. Positions come from a
new awarenessRangeRingPositions helper that stays within 50 m of 250 km.

Style values live in AWARENESS_RANGE_RING_STYLE (awareness/policy.js).
Adds rangeRing.test.mjs (geometry at equator, Sahara, Greenland and the
antimeridian; contrast; entity shape; follow threshold) and a
CURRENT-STATE note.
2026-11-03 16:30:20 +05:30
Sameh Khamis b9f3dd649e merge feat/voice-outlines 3ac3499e into the review fixes 2026-11-02 13:14:02 -08:00
manjunath 3ac3499e4a merge main 43a67f9 into feat/voice-outlines 2026-11-03 00:26:40 +05:30
Sameh Khamis 64c9f4cfa5 let building words pass only on single-structure results
A building word ending the ask ('… Chapel', '… Library', '… Hall') now
passes the last-word rule only when the result is one a building ask
would accept, so a campus, zoo or district whose name merely starts the
ask (Duke University, Old Town) no longer answers it.
2026-11-02 09:07:31 -08:00
Sameh Khamis c059e12a11 merge main 17daf897 into feat/voice-outlines 2026-11-02 09:06:21 -08:00
Sameh Khamis 0712db9891 address the final review of the voice outline fixes
- A building word ("Burj Khalifa Tower", "Sagrada Familia Church") passes
  the last-word rule on a building-like result; enclosures stay out.
- The anchor chooses only among the best-named outlines, so a worse name
  never wins by containment alone.
- An ask without a quadrant takes only the quadrant of the matching street
  nearest the point; a leading quadrant ("SE Main St") may go unsaid too.
- On an unbuffered tile edge a fragment shows as an edge along the
  boundary, so a whole building touching it at a corner is not cut.
- Drop two orphaned comments and correct the place-name key wording.
2026-11-02 09:03:36 -08:00
Said Turksever f38961ef1e Merge main into the Utilities panel 2026-11-02 17:01:52 +00:00
Said Turksever 672a145254 Keep Contact folded until both Cockpit left panels close, and keep focus in a renamed row
Opening Utilities while Data Layers is open no longer forgets that Contact
was folded for the first, and closing one of them leaves Contact folded
while the other is still open. Enter and Esc in a drawn shape's name keep
focus in the field instead of dropping it to the page. The draw tool's
destroy test now checks it stops following the board, and the Draw gate's
amber-count comment sits on its function again.
2026-11-02 17:01:31 +00:00
Sameh Khamis a61d0f4c2a tighten the remaining voice outline review items
- One place-name key for server and tiles, so "St. Paul" and "Saint Paul"
  agree in Nominatim name checks.
- Tile street names: a lone letter is a direction only beside another name
  word ("E Street" is not "East Street"), and a trailing quadrant ("E St NW")
  may go unsaid in the ask.
- A building cut at the tile edge that is nearer the point than any whole
  one leaves the point instead of a farther neighbour standing in; an edge
  without a tile buffer counts as a cut, so a cut area never answers grounds.
- A batch building install re-judges only results that installed; a late
  timeout during caption conversion keeps the pending point drawn; a failed
  plain recaption keeps the old mark addressable.
- An interrupted Nominatim dispatch is reclaimed by the next lock owner ten
  minutes after the start its marker names; node:sqlite loads on first use
  without its experimental warning.
- PHOTON_URL accepts only https, which the page's connect-src allows.
- Shared OpenFreeMap tiles decode each layer when a consumer first selects
  it; outline selection reuses the shared ring area and simplification, and
  ground probes the shared ring centroid; the grounds word list lives once.
2026-11-02 08:50:05 -08:00
Said Turksever 4ebb287d36 Merge main into the Utilities panel, rebuilt on the Vue panel rail
main moved the panels to Vue views and a one-open-panel rail, and removed
the two templates this branch edited. This merge carries the branch onto
that architecture; it adds no behaviour of its own beyond the port.

- The Utilities panel is a RailPanel in LayerPanelsView with its own rail
  item (handyman). LayerPanel renders the Directions rows into its list with
  LayerRows, and falls back to Data Layers without it.
- Draw leaves DisplayPanel for DrawControls, DrawMarkList and DrawSwatches,
  which render what the draw tool publishes to the display store and call
  its actions, as GeoImport does. drawMarks.js words the rows; the DOM-built
  drawMarkList.js is gone. A row's fly-to is an immediate navigation like
  Import's ('drawing' gets its Cockpit refusal), the name field keeps a
  draft through v-field-value, and the colours are one radio group with a
  single tab stop.
- UiSegmented draws an option's icon, named by its label, for the shape
  buttons.
- The catalogs take main's languages with this branch's strings, Arabic
  included, and the tests follow the views to their new homes.
2026-11-02 16:43:29 +00:00
Sameh Khamis a38a065c5c keep bent streets, enclosed landmarks and same-name outlines honest
A street ribbon that holds neither its ring mean nor the anchor is centred
on the street's nearest point when the street runs within 100 m.

Nominatim outline selection ranks an exact name, then one holding every
asked word, then an overlap, and refuses an overlap whose name lacks the
ask's last word unless that word is in the result's address or type, so
"Central Park Zoo" is no longer Central Park. The server caches every
accepted outline and answers each ask with the one holding its resolved
anchor (sent as alat/alon), read across the antimeridian.

A duplicate mark that fails to clean up no longer tears down the new
outline it duplicates.
2026-11-02 08:37:45 -08:00
Sameh Khamis d411802d8c Merge branch 'main' into fix/node-24.22.1-security-release 2026-11-02 08:05:41 -08:00
Sameh Khamis a50a61a0c7 Merge branch 'main' into denis/hal-728-dock-icon-only-wings 2026-11-02 07:45:21 -08:00
Sameh Khamis d646fdbe60 Pin Node 24.22.2, the current 24 LTS patch, keeping 24.22.1 as the security floor 2026-11-02 07:39:02 -08:00
Sameh Khamis 5b76a8a40b Merge branch 'main' into security/cross-site-gate-overpass-military 2026-11-02 07:36:10 -08:00
Sameh Khamis cb6a0e9008 Merge branch 'main' into fix/node-24.22.1-security-release 2026-11-02 07:35:05 -08:00
Sameh Khamis 26f668844e Merge branch 'main' into fix/multipart-cable-feature-ownership 2026-11-02 07:17:56 -08:00
Sameh Khamis 799273b301 Test the installations gate with the Overpass proxy tests, drop the stray PR body, and correct the fragment 2026-11-02 07:17:39 -08:00
Sameh Khamis e9c6f2541f Drop the gap beside the icon-only dock wings, point the state doc at the Vue dock, and credit the author 2026-11-02 07:17:18 -08:00
Sameh Khamis 2c007a4ace Merge branch 'main' into denis/hal-728-dock-icon-only-wings 2026-11-02 07:09:23 -08:00
Sameh Khamis 16756bb790 Align the doctor, state doc and bug template with the 24.22.1 pin, and credit the author 2026-11-02 07:06:14 -08:00
Sameh Khamis 8a23328ed1 Describe multipart cable ownership by behaviour and credit the author's handle 2026-11-02 07:06:11 -08:00
Sameh Khamis 0b5a207049 Merge branch 'main' into fix/node-24.22.1-security-release 2026-11-02 07:02:37 -08:00
Sameh Khamis c1b12a6aa4 Merge branch 'main' into fix/multipart-cable-feature-ownership 2026-11-02 07:00:05 -08:00
Sameh Khamis b17fe2b11c Merge branch 'main' into fix/e-bikeshare-derived-capacity 2026-11-02 06:58:29 -08:00
Sameh Khamis 780d8903ee Merge branch 'main' into fix/e-local-adsb-geom-rate 2026-11-02 00:09:11 -08:00
Sameh Khamis d25951272b Merge branch 'main' into fix/d-military-geom-vertical-rate 2026-11-02 00:01:44 -08:00
Sameh Khamis 411cfd850b Record the shared launch-year parser in the state doc and fragment 2026-11-01 23:53:25 -08:00
Sameh Khamis e6be83cad7 Merge branch 'main' into fix/e-cable-tool-duplicates 2026-11-01 23:42:33 -08:00
Sameh Khamis 36410c7f82 Merge branch 'main' into fix/e-traffic-coverage-rounding 2026-11-01 23:35:19 -08:00
Sameh Khamis 01c6977cdd Merge branch 'main' into fix/c-unknown-altitude-speech 2026-11-01 23:25:42 -08:00
Sameh Khamis 950d1b78ce Merge branch 'main' into fix/b-awareness-marker-km 2026-11-01 22:47:58 -08:00
Sameh Khamis d14205160a Format every metre/kilometre distance through one shared helper
Directions, the Contacts marker and panel, placed annotation labels, the
drawn-line measure, the Cockpit and formatRouteDistance each chose the unit
and precision on their own, and most chose before rounding: #1450, #1433 and
formatDistanceText or kilometreDigits from src/data/distanceFormat.js, which
cut after rounding. Each keeps its own metre step and rendering.

That also fixes the 10 km cut the Contacts marker and panel, the drawn-line
measure and the Cockpit still had (9,960 m read 10.0 km). The helper returns
kilometres already rounded, so the plain marker and the localized panel no
longer disagree on half-tenths such as 1,450 m.

A negative annotation distance now leaves the label without a distance, and
a drawn line with a coordinate that is not a number shows no measure, rather
than printing 0 m or NaN km. The HUD altitude tag and the spoken view height
keep their own unit choice.
2026-11-01 22:40:28 -08:00
Sameh Khamis d546d65380 feat(kit): show the panel rails as labelled pills until a panel opens
UiRail takes `collapsible`: while no panel on its side is open, each item
shows its icon and label as a pill, and once one opens the labels fold away
to the icon rail, making room for the panel. The tip is not shown while the
label is on screen; the button keeps its accessible name and the visible
label is hidden from assistive technology. The side panel rails turn it on.

Each rail is now placed by its screen-side edge, at the rail clearance, so a
rail that widens grows toward the middle of the screen; collapsed, it sits
6px outside its stack as before.
2026-11-01 22:40:17 -08:00
Sameh Khamis 2124f56f92 Merge branch 'main' into fix/b-awareness-marker-km 2026-11-01 22:40:10 -08:00
Sameh Khamis 54f12140cf Merge branch 'main' into fix/e-route-label-kilometre 2026-11-01 22:30:51 -08:00
Sameh Khamis 941a7a392e Merge branch 'main' into fix/e-route-distance-ten-km 2026-11-01 22:22:22 -08:00
manjunath d9a460658d merge main 0c28dc7 into feat/voice-outlines 2026-11-02 11:39:21 +05:30
Sameh Khamis 0e90a03de7 Round every heading readout through one shared helper
The transit, ALPR, vessel, CCTV and flight/military context fixes each
wrapped 359.5° to north with an inline Math.round(x) % 360. They now call
roundHeadingDegrees in src/data/headingDegrees.js, which also wraps negative
and multi-turn bearings. normalizeHeading moves there with it, and
cockpitMath re-exports it so existing imports keep working. It now adds a
turn only to a negative remainder, so a bearing just under half a degree
keeps its precision.

The awareness, Local ADS-B, cockpit wind, cockpit heading and Street Level
readouts use the same helper. The Cockpit's TRACK ACQUIRED signal rounded
without wrapping and could read COURSE 360°; it now uses
formatHeadingReadout, which shows --- for a track that is not finite.
2026-11-01 21:41:49 -08:00
Sameh Khamis e200e46695 Merge branch 'main' into fix/e-context-heading-north 2026-11-01 21:41:48 -08:00
manjunath c5aa0d28c3 merge main 07094d9 into feat/voice-outlines 2026-11-02 11:05:08 +05:30
Sameh Khamis 0e942de38c Merge branch 'main' into fix/e-cctv-heading-north 2026-11-01 21:28:43 -08:00
Sameh Khamis 87e2a2eaa8 Merge branch 'main' into fix/b-vessel-course-north 2026-11-01 21:16:27 -08:00
Sameh Khamis e5fb496d90 Merge branch 'main' into fix/b-awareness-marker-km 2026-11-01 21:04:42 -08:00
Sameh Khamis 188dd4fd29 Merge branch 'main' into fix/e-alpr-direction-360 2026-11-01 21:04:29 -08:00
Sameh Khamis 37d12ad731 Merge branch 'main' into fix/e-context-heading-north 2026-11-01 20:53:42 -08:00
Sameh Khamis c62e580d7e Merge branch 'main' into fix/e-cctv-heading-north
# Conflicts:
#	src/ui/cctvPresentation.js
2026-11-01 20:52:40 -08:00
Sameh Khamis 08265d94d4 Merge branch 'main' into fix/b-vessel-course-north 2026-11-01 20:52:20 -08:00
Sameh Khamis 66d7a4ebce Merge branch 'main' into fix/e-transit-heading-north 2026-11-01 20:52:05 -08:00
Sameh Khamis bc5d038afd Merge Core main into german/hal-644-ar: Arabic on the Vue UI
Main moved the UI to Vue views and Pinia stores, so the Arabic changes to
the old DOM controllers now live in their views: the rail legend range
comes from formatScaleRange (keeping units a source supplies as given),
the voice timeout options are worded by Intl unit formatting in
VoiceControl, and the scene editor's JSON fields stay left to right in
SceneDialog. Main's CCTV status line, launch panel and calibration values
keep the Arabic isolates and Western-digit formatting.

isolate() and keepCodesWithValues() read the locale through getLocale(),
which follows the page's vue-i18n instance, and the Intl formatters take
intlLocale(getLocale()). A language switch now applies in place, and
applyDocumentLanguage sets <html dir> on every switch, so the page mirrors
without a reload.

The icon rails and their tips are placed with logical properties, so they
stay on the outer side of the mirrored stacks; Cyber's new stack offsets,
padding and edge lines are logical too, and rtl.css moves Cyber's right
stack to its new rail clearance. Main removed the Context mini radio, so its
right-to-left rules and test go.

The Arabic catalog gains main's new strings and drops the ones main no
longer uses; the other catalogs keep main's new keys and the branch's
landing labels.
2026-11-01 20:15:02 -08:00