// ==================== SETTINGS ==================== async function loadLocations() { const _apiBase = location.hostname === 'localhost' ? 'http://localhost:4000/api' : '/api'; const res = await fetch(`${_apiBase}/map-images`, { headers: { 'X-API-Key': sessionStorage.getItem('admin_api_key') || '' } }); const data = await res.json(); locationsData = data.images.map((src, i) => ({ src, name: `Map ${i + 1}` })); filteredLocations = locationsData; await loadCities(); displayLocations(locationsData); } function displayLocations(locations) { const galleryDiv = document.getElementById('gallery'); galleryDiv.innerHTML = ''; const settings = window._gallerySettings || {}; const noBorder = settings.isBorder === false; locations.forEach((location, index) => { const item = document.createElement('div'); item.className = 'gallery-item'; item.dataset.index = index; item.innerHTML = `
${location.name}
${location.name}
`; galleryDiv.appendChild(item); }); } function initSettings() { const btn = document.getElementById('settingsBtn'); const panel = document.getElementById('settingsPanel'); btn.addEventListener('click', (e) => { e.stopPropagation(); panel.classList.toggle('open'); }); document.addEventListener('click', (e) => { if (!panel.contains(e.target) && e.target !== btn) { panel.classList.remove('open'); } }); let _prevSize = parseInt(document.getElementById('sSize').value) || 400; window._gallerySettings = { items: parseInt(document.getElementById('sItems').value) || 23, size: _prevSize, isBorder: document.getElementById('sIsBorder').checked, opacity: parseInt(document.getElementById('sOpacity').value) ?? 100 }; document.getElementById('sOpacity').addEventListener('input', () => { const opacity = parseInt(document.getElementById('sOpacity').value) / 100; document.getElementById('gallery').style.opacity = opacity; if (window._gallerySettings) window._gallerySettings.opacity = parseInt(document.getElementById('sOpacity').value); }); document.getElementById('sSize').addEventListener('change', () => { const items = parseInt(document.getElementById('sItems').value) || 23; const newSize = parseInt(document.getElementById('sSize').value); if (!newSize || newSize < 1) return; document.querySelector('.gallery').style.gridTemplateColumns = `repeat(${items}, ${newSize}px)`; const oldSize = _prevSize || (window._gallerySettings && window._gallerySettings.size); rescalePointrs(oldSize, newSize); _prevSize = newSize; if (window._gallerySettings) window._gallerySettings.size = newSize; }); document.getElementById('sIsStreetPath').addEventListener('change', () => { refreshStreetPath(); }); document.getElementById('sIsPoi').addEventListener('change', () => { renderPois(); }); document.getElementById('settingsSave').addEventListener('click', () => { const items = parseInt(document.getElementById('sItems').value) || 23; const newSize = parseInt(document.getElementById('sSize').value) || 400; const isBorder = document.getElementById('sIsBorder').checked; const opacity = parseInt(document.getElementById('sOpacity').value) / 100; const oldSize = _prevSize || (window._gallerySettings && window._gallerySettings.size); document.querySelector('.gallery').style.gridTemplateColumns = `repeat(${items}, ${newSize}px)`; document.querySelectorAll('.gallery-item img').forEach(img => { img.style.border = isBorder ? '' : 'none'; }); document.getElementById('gallery').style.opacity = opacity; rescalePointrs(oldSize, newSize); _prevSize = newSize; window._gallerySettings = { items, size: newSize, isBorder, opacity: parseInt(document.getElementById('sOpacity').value) }; panel.classList.remove('open'); }); }