<script>
import UrlSubmitForm from '../components/UrlSubmitForm.svelte';
+ import DetailsLink from '../components/DetailsLink.svelte';
+ import PageLink from '../components/PageLink.svelte';
import { zoomLevels } from '../lib/helpers.js';
- import { map_store } from '../lib/stores.js';
+ import { map_store, refresh_page } from '../lib/stores.js';
- export let api_request_params = {};
+ export let lat = '';
+ export let lon = '';
+ export let zoom = '';
- map_store.subscribe(map => {
- if (!map) { return; }
+ function gotoCoordinates(newlat, newlon, newzoom) {
+ let params = new URLSearchParams();
+ params.set('lat', newlat);
+ params.set('lon', newlon);
+ params.set('zoom', newzoom || zoom);
+ refresh_page('reverse', params);
+ }
- map.on('click', function (e) {
- document.querySelector('input[name=lat]').value = e.latlng.lat.toFixed(5);
- document.querySelector('input[name=lon]').value = e.latlng.wrap().lng.toFixed(5);
- document.querySelector('form').submit();
- });
+ map_store.subscribe(map => {
+ if (map) {
+ map.on('click', (e) => {
+ let coords = e.latlng.wrap();
+ gotoCoordinates(coords.lat.toFixed(5), coords.lng.toFixed(5));
+ });
+ }
});
- function handleSwitchCoords() {
- let lat = document.querySelector('input[name=lat]').value;
- let lon = document.querySelector('input[name=lon]').value;
- document.querySelector('input[name=lat]').value = lon;
- document.querySelector('input[name=lon]').value = lat;
- document.querySelector('form').submit();
+ // common mistake is to copy&paste latitude and longitude into the 'lat' search box
+ function maybeSplitLatitude(e) {
+ var coords_split = e.target.value.split(',');
+ if (coords_split.length === 2) {
+ document.querySelector('input[name=lat]').value = L.Util.trim(coords_split[0]);
+ document.querySelector('input[name=lon]').value = L.Util.trim(coords_split[1]);
+ }
}
+
</script>
<div class="top-bar">
- <UrlSubmitForm>
+ <UrlSubmitForm page="reverse">
<div class="form-group">
<input name="format" type="hidden" value="html">
<label for="reverse-lat">lat</label>
type="text"
class="form-control form-control-sm"
placeholder="latitude"
- value="{api_request_params.lat || ''}" />
+ bind:value={lat}
+ on:change={maybeSplitLatitude} />
<a id="switch-coords"
- on:click|preventDefault|stopPropagation={handleSwitchCoords}
+ on:click|preventDefault|stopPropagation={() => gotoCoordinates(lon, lat)}
class="btn btn-outline-secondary btn-sm"
title="switch lat and lon"><></a>
<label for="reverse-lon">lon</label>
type="text"
class="form-control form-control-sm"
placeholder="longitude"
- value="{api_request_params.lon || ''}" />
+ bind:value={lon} />
<label for="reverse-zoom">max zoom</label>
- <select id="reverse-zoom" name="zoom" class="form-control form-control-sm" value="{api_request_params.zoom}">
- <option value="" selected={!api_request_params.zoom}>---</option>
+ <select id="reverse-zoom" name="zoom" class="form-control form-control-sm" bind:value={zoom}>
+ <option value="">---</option>
{#each zoomLevels() as zoomTitle, i}
- <option value="{i}" selected={i === api_request_params.zoom}>{i} - {zoomTitle}</option>
+ <option value="{i}">{i} - {zoomTitle}</option>
{/each}
</select>
<button type="submit" class="btn btn-primary btn-sm mx-1">
</button>
</div>
<div class="search-type-link">
- <a href="details.html" class="mr-2">search by id</a>
- <a href="search.html">forward search</a>
+ <DetailsLink extra_classes="mr-2">search by id</DetailsLink>
+ <PageLink page="search">forward search</PageLink>
</div>
</UrlSubmitForm>
</div>