Merge main into PR #1387

This commit is contained in:
Sameh Khamis committed 2026-10-25 09:01:32 -07:00
commit ba783b4eea
5 files changed
+21 -2

No files matched your search

@@ -0,0 +1,3 @@
- Show a route leg of 59.5 seconds or more as 1 min. The route summary and step
cards kept seconds below 60, then rounded 59.6 s up to "60 s"
(Rudy Celekli, @rudycelekli, #1385).
@@ -0,0 +1,3 @@
- Show a route leg of 995 m or more as 1.0 km. The route summary and step
cards kept meters below 1000, then rounded 996 m up to "1000 m"
(Rudy Celekli, @rudycelekli, #1386).
+7
View File
@@ -4081,6 +4081,10 @@ routing it shows `Routing…`, and a router miss reads
The layer holds continuous render only while a route is drawn (the dashes The layer holds continuous render only while a route is drawn (the dashes
animate). Disable clears all state. animate). Disable clears all state.
At the metre/kilometre boundary, route distance labels use the rounded
ten-metre value to select the unit, switching to kilometres at 995 metres;
a 996-metre leg displays as `1.0 km` rather than `1000 m`.
**Keys needed: none.** Directions works on a keyless boot, and the layer is off **Keys needed: none.** Directions works on a keyless boot, and the layer is off
until the operator turns it on. until the operator turns it on.
@@ -4133,6 +4137,9 @@ and as the last line of the list, because the arrival step is among the ones
dropped. A route of exactly 200 is complete, and a roundabout exit after the dropped. A route of exactly 200 is complete, and a roundabout exit after the
200th keeps folding into it. 200th keeps folding into it.
Route duration labels select their unit after rounding seconds, switching to
minutes at 59.5 seconds; a 59.6-second leg displays as `1 min`, rather than `60 s`.
A step's card opens from its dot on the globe or from its line in the list, and A step's card opens from its dot on the globe or from its line in the list, and
the list covers every step including departure and arrival, which have no dot. the list covers every step including departure and arrival, which have no dot.
What a card needs is a resolved ground anchor: a step whose ground cell has not What a card needs is a resolved ground anchor: a step whose ground cell has not
+4
View File
@@ -846,9 +846,13 @@ test('route numbers follow the page language and never break from their unit', (
t.after(() => setLocale('en')); t.after(() => setLocale('en'));
assert.equal(routeDistanceText(8.4), '8\u00a0m'); assert.equal(routeDistanceText(8.4), '8\u00a0m');
assert.equal(routeDistanceText(236), '240\u00a0m'); assert.equal(routeDistanceText(236), '240\u00a0m');
assert.equal(routeDistanceText(994), '990\u00a0m');
assert.equal(routeDistanceText(996), '1.0\u00a0km');
assert.equal(routeDistanceText(1500), '1.5\u00a0km'); assert.equal(routeDistanceText(1500), '1.5\u00a0km');
assert.equal(routeDistanceText(2_345_000), '2345\u00a0km'); assert.equal(routeDistanceText(2_345_000), '2345\u00a0km');
assert.equal(routeDurationText(39), '39\u00a0s'); assert.equal(routeDurationText(39), '39\u00a0s');
assert.equal(routeDurationText(59.4), '59\u00a0s');
assert.equal(routeDurationText(59.6), '1\u00a0min');
assert.equal(routeDurationText(3900), '1\u00a0h\u00a05\u00a0min'); assert.equal(routeDurationText(3900), '1\u00a0h\u00a05\u00a0min');
assert.equal(routeDurationText(7200), '2\u00a0h'); assert.equal(routeDurationText(7200), '2\u00a0h');
assert.equal(routeDistanceText(-1), ''); assert.equal(routeDistanceText(-1), '');
+4 -2
View File
@@ -112,7 +112,8 @@ export const FLIGHT_PROGRESS_MS = 250;
export function routeDistanceText(meters) { export function routeDistanceText(meters) {
if (!Number.isFinite(meters) || meters < 0) return ''; if (!Number.isFinite(meters) || meters < 0) return '';
if (meters < 100) return formatQuantity(Math.round(meters), 'm'); if (meters < 100) return formatQuantity(Math.round(meters), 'm');
if (meters < 1000) return formatQuantity(Math.round(meters / 10) * 10, 'm'); const tens = Math.round(meters / 10) * 10;
if (tens < 1000) return formatQuantity(tens, 'm');
const km = meters / 1000; const km = meters / 1000;
return km < 10 return km < 10
? formatQuantity(km, 'km', { ? formatQuantity(km, 'km', {
@@ -130,7 +131,8 @@ export function routeDistanceText(meters) {
*/ */
export function routeDurationText(seconds) { export function routeDurationText(seconds) {
if (!Number.isFinite(seconds) || seconds < 0) return ''; if (!Number.isFinite(seconds) || seconds < 0) return '';
if (seconds < 60) return formatQuantity(Math.round(seconds), 's'); const wholeSeconds = Math.round(seconds);
if (wholeSeconds < 60) return formatQuantity(wholeSeconds, 's');
const minutes = Math.round(seconds / 60); const minutes = Math.round(seconds / 60);
if (minutes < 60) return formatQuantity(minutes, 'min'); if (minutes < 60) return formatQuantity(minutes, 'min');
const hours = formatQuantity(Math.floor(minutes / 60), 'h'); const hours = formatQuantity(Math.floor(minutes / 60), 'h');