40204-vm/staticfiles/js/pinboard.js
Flatlogic Bot f3690a8b42 1.0.1
2026-06-04 16:43:04 +00:00

81 lines
2.8 KiB
JavaScript

function setText(id, text) {
const el = document.getElementById(id);
if (el) el.textContent = text;
}
function showManualAddressTip(message) {
const tip = document.querySelector("[data-manual-address-tip]");
const addressInput = document.querySelector("[data-manual-address]") || document.getElementById("id_address");
if (tip) {
tip.hidden = false;
}
if (message) {
setText("form-location-status", message);
}
if (addressInput) {
addressInput.focus({ preventScroll: true });
addressInput.scrollIntoView({ behavior: "smooth", block: "center" });
}
}
function requestLocation(callback, statusId, unavailableCallback) {
if (!navigator.geolocation) {
setText(statusId, "Location is not supported by this browser. You can type or paste the address instead.");
if (unavailableCallback) unavailableCallback();
return;
}
setText(statusId, "Requesting location…");
navigator.geolocation.getCurrentPosition(
(pos) => {
const lat = pos.coords.latitude.toFixed(6);
const lng = pos.coords.longitude.toFixed(6);
setText(statusId, `Captured ${lat}, ${lng}`);
callback(lat, lng);
},
() => {
setText(statusId, "Location permission was denied or unavailable. Type or paste the address instead.");
if (unavailableCallback) unavailableCallback();
},
{ enableHighAccuracy: true, timeout: 10000 }
);
}
document.addEventListener("click", (event) => {
const action = event.target?.dataset?.action;
if (action === "request-location") {
requestLocation(() => {}, "location-status");
}
if (action === "request-notifications") {
if (!window.Notification) {
setText("notification-status", "Notifications are not supported here.");
return;
}
Notification.requestPermission().then((permission) => {
setText("notification-status", `Notification permission: ${permission}`);
});
}
if (action === "manual-address") {
showManualAddressTip("Manual address mode: paste or type the property address below.");
}
if (action === "fill-current-location") {
requestLocation((lat, lng) => {
const latInput = document.getElementById("id_latitude");
const lngInput = document.getElementById("id_longitude");
if (latInput) latInput.value = lat;
if (lngInput) lngInput.value = lng;
}, "form-location-status", () => {
showManualAddressTip();
});
}
if (action === "use-location-for-list") {
requestLocation((lat, lng) => {
document.querySelector("[data-user-lat]").value = lat;
document.querySelector("[data-user-lng]").value = lng;
const sort = document.getElementById("sort");
if (sort) sort.value = "distance";
const form = document.querySelector("[data-distance-form]");
if (form) form.submit();
}, "list-location-status");
}
});