|
|
|
@ -1,6 +1,7 @@
|
|
|
|
<script lang="ts">
|
|
|
|
<script lang="ts">
|
|
|
|
import NumberRangeInput from '$lib/components/shared-components/number-range-input.svelte';
|
|
|
|
import NumberRangeInput from '$lib/components/shared-components/number-range-input.svelte';
|
|
|
|
import { generateId } from '$lib/utils/generate-id';
|
|
|
|
import { generateId } from '$lib/utils/generate-id';
|
|
|
|
|
|
|
|
import { convert } from 'geo-coordinates-parser';
|
|
|
|
import { t } from 'svelte-i18n';
|
|
|
|
import { t } from 'svelte-i18n';
|
|
|
|
|
|
|
|
|
|
|
|
interface Props {
|
|
|
|
interface Props {
|
|
|
|
@ -20,22 +21,22 @@
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const onPaste = (event: ClipboardEvent) => {
|
|
|
|
const onPaste = (event: ClipboardEvent) => {
|
|
|
|
const coords = event.clipboardData?.getData('text/plain')?.split(',');
|
|
|
|
const pastedText = event.clipboardData?.getData('text/plain');
|
|
|
|
if (!coords || coords.length !== 2) {
|
|
|
|
if (!pastedText) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const [latitude, longitude] = coords.map((coord) => Number.parseFloat(coord));
|
|
|
|
try {
|
|
|
|
if (Number.isNaN(latitude) || latitude < -90 || latitude > 90) {
|
|
|
|
const parsed = convert(pastedText);
|
|
|
|
return;
|
|
|
|
if (parsed) {
|
|
|
|
}
|
|
|
|
event.preventDefault();
|
|
|
|
if (Number.isNaN(longitude) || longitude < -180 || longitude > 180) {
|
|
|
|
lat = parsed.decimalLatitude;
|
|
|
|
return;
|
|
|
|
lng = parsed.decimalLongitude;
|
|
|
|
|
|
|
|
onInput();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
|
|
// Invalid coordinate format, do nothing (let the default paste behavior occur)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
|
|
|
[lat, lng] = [latitude, longitude];
|
|
|
|
|
|
|
|
onInput();
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|