function getUserCoordinates(options) {
const { buttonText, auto, ...geolocationOptions } = {
buttonText: "Get Location",
enableHighAccuracy: false,
auto: true,
...options
};
const form = html`<form style="${styles.form}"></form>`;
const label = html`<label style="${styles.label}">↑ Allow location access</label>`;
const button = html`<button>${buttonText}</button>`;
function onSuccess(position) {
form.value = getCoordinates(position);
label.innerText = `Lat: ${position.coords.latitude}, Lon: ${position.coords.longitude}`;
label.style = styles.label;
button.disabled = false;
form.dispatchEvent(new Event("input"));
}
function onError(err) {
label.innerText = `Error: ${err.message}`;
label.style = styles.labelError;
button.disabled = false;
}
button.onclick = () => {
navigator.geolocation.getCurrentPosition(
onSuccess,
onError,
geolocationOptions
);
label.innerText = "Loading...";
label.style = styles.label;
button.disabled = true;
};
if (auto) {
const promise = new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(
(position) => {
onSuccess(position);
resolve(position.coords);
},
(error) => {
onError(error);
reject(error);
}
);
}).catch((error) => error);
}
form.value = {};
form.addEventListener("submit", (e) => e.preventDefault());
form.append(label, button);
return form;
}