Zoom to searches before stops load

This commit is contained in:
Edward Betts 2026-08-15 15:42:26 +01:00
parent ae5ad9fabc
commit 7823349f8f
2 changed files with 24 additions and 5 deletions

View file

@ -124,6 +124,7 @@ function restoreSearchFromUrl() {
: null;
if (coordinates) {
byId('search-input').value = `${coordinates.lat}, ${coordinates.lon}`;
showLocationImmediately({...coordinates, label: `${coordinates.lat}, ${coordinates.lon}`});
loadUrl(`${API_URLS.stops}?${new URLSearchParams(coordinates)}`);
return;
}
@ -358,10 +359,21 @@ function renderGeocodeChoices(data) {
function chooseLocation(locationResult) {
const coordinates = {lat: locationResult.lat, lon: locationResult.lon};
setSearchUrl(new URLSearchParams(coordinates));
showLocationImmediately(locationResult);
const apiParams = new URLSearchParams({...coordinates, label: locationResult.label});
loadUrl(`${API_URLS.stops}?${apiParams}`);
}
/** Mark and zoom to known coordinates without waiting for the stop query. */
function showLocationImmediately(locationResult) {
if (searchMarker) searchMarker.remove();
searchMarker = L.circleMarker([locationResult.lat, locationResult.lon], {
radius: 7, color: '#0d6efd', fillColor: '#fff', fillOpacity: 1, weight: 3,
}).bindTooltip(locationResult.label || 'Search location').addTo(map);
if (isMobile()) setPanel(true);
moveMap(() => centrePointInVisibleMap(locationResult.lat, locationResult.lon, 16));
}
/** Choose marker colours that make different transport modes easy to scan. */
function markerColour(stop) {
const type = stop.transport_type || '';
@ -619,6 +631,7 @@ byId('search-form').addEventListener('submit', event => {
if (coordinates) {
const params = new URLSearchParams(coordinates);
setSearchUrl(params);
showLocationImmediately({...coordinates, label: `${coordinates.lat}, ${coordinates.lon}`});
loadUrl(`${API_URLS.stops}?${params}`);
} else {
const params = new URLSearchParams({q: query});
@ -637,6 +650,7 @@ byId('locate-button').addEventListener('click', () => {
const params = new URLSearchParams(coordinates);
setSearchUrl(params);
byId('search-input').value = `${coordinates.lat}, ${coordinates.lon}`;
showLocationImmediately({...coordinates, label: 'Your location'});
const apiParams = new URLSearchParams({...coordinates, label: 'Your location'});
loadUrl(`${API_URLS.stops}?${apiParams}`);
},