docs: client portal design + milestone plan (M1 live view → M4 full auth) #61
@@ -81,14 +81,18 @@ const withCoords = LOCATIONS.filter(l => l.coordinates);
|
|||||||
if (withCoords.length) {
|
if (withCoords.length) {
|
||||||
const mapEl = document.getElementById('loc-map');
|
const mapEl = document.getElementById('loc-map');
|
||||||
mapEl.classList.remove('hidden');
|
mapEl.classList.remove('hidden');
|
||||||
const map = L.map('loc-map');
|
const map = L.map('loc-map', { scrollWheelZoom: false });
|
||||||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||||
{ maxZoom: 19, attribution: '© OpenStreetMap' }).addTo(map);
|
{ maxZoom: 19, attribution: '© OpenStreetMap' }).addTo(map);
|
||||||
const pts = [];
|
const pts = [];
|
||||||
withCoords.forEach(l => {
|
withCoords.forEach(l => {
|
||||||
const [la, lo] = (l.coordinates || '').split(',').map(Number);
|
const [la, lo] = (l.coordinates || '').split(',').map(Number);
|
||||||
if (!isNaN(la) && !isNaN(lo)) {
|
if (!isNaN(la) && !isNaN(lo)) {
|
||||||
L.marker([la, lo]).addTo(map).bindPopup(l.name);
|
// Same dot style as the internal project map (circleMarker, not a pin).
|
||||||
|
L.circleMarker([la, lo], {
|
||||||
|
radius: 8, fillColor: '#f48b1c', color: '#fff',
|
||||||
|
weight: 2, opacity: 1, fillOpacity: 0.9,
|
||||||
|
}).addTo(map).bindTooltip(l.name, { direction: 'top', offset: [0, -6] });
|
||||||
pts.push([la, lo]);
|
pts.push([la, lo]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user