This commit is contained in:
@@ -173,4 +173,90 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
localStorage.setItem('freemoto-roundtrip-norepeat', roundTripNoRepeat.checked ? '1' : '0');
|
||||
});
|
||||
}
|
||||
|
||||
// Swap start/end like Google Maps
|
||||
(function(){
|
||||
var swapBtn = document.getElementById('swapBtn');
|
||||
if (!swapBtn) return;
|
||||
function swapInputs() {
|
||||
var s = document.getElementById('sourceInput');
|
||||
var d = document.getElementById('destInput');
|
||||
if (!s || !d) return;
|
||||
// Swap visible values
|
||||
var tmpVal = s.value; s.value = d.value; d.value = tmpVal;
|
||||
// Swap lat/lon datasets
|
||||
var sLat = s.dataset.lat, sLon = s.dataset.lon;
|
||||
s.dataset.lat = d.dataset.lat || '';
|
||||
s.dataset.lon = d.dataset.lon || '';
|
||||
d.dataset.lat = sLat || '';
|
||||
d.dataset.lon = sLon || '';
|
||||
// If both look valid, trigger plot
|
||||
var sourceLat = parseFloat(s.dataset.lat);
|
||||
var sourceLon = parseFloat(s.dataset.lon);
|
||||
var destLat = parseFloat(d.dataset.lat);
|
||||
var destLon = parseFloat(d.dataset.lon);
|
||||
if (!isNaN(sourceLat) && !isNaN(sourceLon) && !isNaN(destLat) && !isNaN(destLon)) {
|
||||
var plot = document.getElementById('plotRouteBtn');
|
||||
if (plot) plot.click();
|
||||
}
|
||||
}
|
||||
swapBtn.addEventListener('click', swapInputs);
|
||||
})();
|
||||
|
||||
// Recenter FAB behavior
|
||||
(function(){
|
||||
var recenter = document.getElementById('recenterBtn');
|
||||
if (!recenter) return;
|
||||
recenter.addEventListener('click', function(){
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(function(position){
|
||||
var lat = position.coords.latitude;
|
||||
var lon = position.coords.longitude;
|
||||
map.setView([lat, lon], Math.max(map.getZoom(), 14));
|
||||
});
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
// Mobile panel toggle (portrait)
|
||||
try {
|
||||
var panel = document.querySelector('.nav-panel');
|
||||
var toggleBtn = document.getElementById('panelToggle');
|
||||
function isSmallPortrait() {
|
||||
var mqW = window.matchMedia('(max-width: 576px)');
|
||||
var mqP = window.matchMedia('(orientation: portrait)');
|
||||
return (mqW.matches && mqP.matches);
|
||||
}
|
||||
// Initialize collapsed state on load for small portrait
|
||||
if (panel && isSmallPortrait()) {
|
||||
panel.classList.add('collapsed');
|
||||
if (toggleBtn) toggleBtn.setAttribute('aria-expanded', 'false');
|
||||
}
|
||||
// Auto-collapse panel when user hits Plot on small portrait
|
||||
var plotBtn = document.getElementById('plotRouteBtn');
|
||||
if (plotBtn) {
|
||||
plotBtn.addEventListener('click', function(){
|
||||
if (panel && isSmallPortrait()) {
|
||||
panel.classList.add('collapsed');
|
||||
if (toggleBtn) toggleBtn.setAttribute('aria-expanded', 'false');
|
||||
}
|
||||
});
|
||||
}
|
||||
if (toggleBtn && panel) {
|
||||
toggleBtn.addEventListener('click', function() {
|
||||
panel.classList.toggle('collapsed');
|
||||
var expanded = !panel.classList.contains('collapsed');
|
||||
toggleBtn.setAttribute('aria-expanded', expanded ? 'true' : 'false');
|
||||
});
|
||||
}
|
||||
// When orientation/viewport changes, ensure panel doesn't exceed screen
|
||||
window.addEventListener('resize', function(){
|
||||
if (!panel) return;
|
||||
if (isSmallPortrait()) {
|
||||
// Keep collapsed if it would cover map too much
|
||||
if (!panel.classList.contains('collapsed')) panel.classList.add('collapsed');
|
||||
if (toggleBtn) toggleBtn.setAttribute('aria-expanded', 'false');
|
||||
}
|
||||
});
|
||||
} catch (_) {}
|
||||
});
|
||||
Reference in New Issue
Block a user