diff --git a/app/__init__.py b/app/__init__.py index ce0dfab..8e8efae 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,6 +1,6 @@ from flask import Flask from app.extensions import db, migrate, login_manager, mail -from config import config +from app.utils.config import config import os def create_app(config_name=None): diff --git a/app/static/map_iframe.html b/app/static/map_iframe.html index f542134..b000794 100644 --- a/app/static/map_iframe.html +++ b/app/static/map_iframe.html @@ -143,8 +143,6 @@
- -
@@ -162,10 +160,22 @@ // Create map map = L.map('map', { zoomControl: true, - scrollWheelZoom: true, + scrollWheelZoom: false, // Disable default scroll wheel zoom doubleClickZoom: true, touchZoom: true }).setView(romaniaCenter, romaniaZoom); + + // Enable zoom with Ctrl/Cmd + wheel only + map.getContainer().addEventListener('wheel', function(e) { + if ((e.ctrlKey || e.metaKey) && map.options.scrollWheelZoom !== true) { + map.options.scrollWheelZoom = true; + } else if (!(e.ctrlKey || e.metaKey) && map.options.scrollWheelZoom !== false) { + map.options.scrollWheelZoom = false; + } + if (!(e.ctrlKey || e.metaKey)) { + e.preventDefault(); // Prevent zoom if not holding Ctrl/Cmd + } + }, { passive: false }); // Add OpenStreetMap tiles L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { @@ -226,7 +236,7 @@ routesData.forEach((route, index) => { if (route.coordinates && route.coordinates.length > 0) { const color = colors[index % colors.length]; - + // Create polyline const polyline = L.polyline(route.coordinates, { color: color, @@ -234,7 +244,7 @@ opacity: 0.8, smoothFactor: 1 }); - + // Create popup content const popupContent = `
@@ -260,15 +270,43 @@
`; - + polyline.bindPopup(popupContent); - - // Add to route layer routeLayer.addLayer(polyline); - + + // Add start and end markers + const startCoord = route.coordinates[0]; + const endCoord = route.coordinates[route.coordinates.length - 1]; + + // Green start marker + const startMarker = L.marker(startCoord, { + icon: L.icon({ + iconUrl: 'https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-green.png', + iconSize: [25, 41], + iconAnchor: [12, 41], + popupAnchor: [1, -34], + shadowUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png', + shadowSize: [41, 41] + }) + }).bindPopup(`Start of route
${route.title}`); + routeLayer.addLayer(startMarker); + + // Red end marker + const endMarker = L.marker(endCoord, { + icon: L.icon({ + iconUrl: 'https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-red.png', + iconSize: [25, 41], + iconAnchor: [12, 41], + popupAnchor: [1, -34], + shadowUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png', + shadowSize: [41, 41] + }) + }).bindPopup(`End of route
${route.title}`); + routeLayer.addLayer(endMarker); + // Collect bounds for fitting allBounds.push(...route.coordinates); - + console.log(`Added route: ${route.title} (${route.coordinates.length} points)`); } }); @@ -298,27 +336,7 @@ } function setupControls() { - // Fit routes button - document.getElementById('fit-routes').addEventListener('click', () => { - if (routeLayer.getLayers().length > 0) { - const group = new L.FeatureGroup(); - routeLayer.eachLayer(layer => group.addLayer(layer)); - map.fitBounds(group.getBounds(), { padding: [20, 20] }); - } - }); - - // Toggle routes button - document.getElementById('toggle-routes').addEventListener('click', (e) => { - if (routesVisible) { - map.removeLayer(routeLayer); - e.target.classList.remove('active'); - routesVisible = false; - } else { - map.addLayer(routeLayer); - e.target.classList.add('active'); - routesVisible = true; - } - }); + // Only refresh map button remains // Refresh map button document.getElementById('refresh-map').addEventListener('click', () => { diff --git a/app/static/map_iframe_single.html b/app/static/map_iframe_single.html index 9d25c7c..4e85fd0 100644 --- a/app/static/map_iframe_single.html +++ b/app/static/map_iframe_single.html @@ -58,10 +58,28 @@ if (routeId) { const latlngs = data.coordinates.map(pt => [pt[0], pt[1]]); const polyline = L.polyline(latlngs, { color: '#ef4444', weight: 5, opacity: 0.9 }).addTo(map); map.fitBounds(polyline.getBounds(), { padding: [20, 20], maxZoom: 15 }); - // Start marker - L.marker(latlngs[0], { icon: L.divIcon({ html: '
', className: 'custom-div-icon', iconSize: [24,24], iconAnchor: [12,12] }) }).addTo(map); - // End marker - L.marker(latlngs[latlngs.length-1], { icon: L.divIcon({ html: '
', className: 'custom-div-icon', iconSize: [24,24], iconAnchor: [12,12] }) }).addTo(map); + // Start marker (green pin) + L.marker(latlngs[0], { + icon: L.icon({ + iconUrl: 'https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-green.png', + iconSize: [25, 41], + iconAnchor: [12, 41], + popupAnchor: [1, -34], + shadowUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png', + shadowSize: [41, 41] + }) + }).addTo(map); + // End marker (red pin) + L.marker(latlngs[latlngs.length-1], { + icon: L.icon({ + iconUrl: 'https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-red.png', + iconSize: [25, 41], + iconAnchor: [12, 41], + popupAnchor: [1, -34], + shadowUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png', + shadowSize: [41, 41] + }) + }).addTo(map); } else { map.setView([45.9432, 24.9668], 6); L.marker([45.9432, 24.9668]).addTo(map).bindPopup('No route data').openPopup(); diff --git a/app/static/media/posts/post_e39bf529_20250727/gpx/da245e13b0f646b1b81796c7e6a4a1f1.gpx b/app/static/media/posts/post_e39bf529_20250727/gpx/da245e13b0f646b1b81796c7e6a4a1f1.gpx new file mode 100644 index 0000000..ea01d8c --- /dev/null +++ b/app/static/media/posts/post_e39bf529_20250727/gpx/da245e13b0f646b1b81796c7e6a4a1f1.gpx @@ -0,0 +1,2044 @@ + + + + DJ105G, Sădurel 557205, Romania + https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png + + + DN67C, Romania + https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png + + + Directions from DJ105G, Sădurel 557205, Romania to DN67C, Romania + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/media/posts/post_e39bf529_20250727/images/52e340af2e6043dca44565d33619f46a.jpg b/app/static/media/posts/post_e39bf529_20250727/images/52e340af2e6043dca44565d33619f46a.jpg new file mode 100644 index 0000000..ef595da Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/52e340af2e6043dca44565d33619f46a.jpg differ diff --git a/app/static/media/posts/post_e39bf529_20250727/images/5e79f52af1ba4b9d903a6767c463d090.jpg b/app/static/media/posts/post_e39bf529_20250727/images/5e79f52af1ba4b9d903a6767c463d090.jpg new file mode 100644 index 0000000..0c9f2e5 Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/5e79f52af1ba4b9d903a6767c463d090.jpg differ diff --git a/app/static/media/posts/post_e39bf529_20250727/images/82d6e4b9096c49a7afdd35033299254e.jpg b/app/static/media/posts/post_e39bf529_20250727/images/82d6e4b9096c49a7afdd35033299254e.jpg new file mode 100644 index 0000000..a45dddf Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/82d6e4b9096c49a7afdd35033299254e.jpg differ diff --git a/app/static/media/posts/post_e39bf529_20250727/images/a6288676337e47ea868feac181fb1599.jpg b/app/static/media/posts/post_e39bf529_20250727/images/a6288676337e47ea868feac181fb1599.jpg new file mode 100644 index 0000000..ce42afc Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/a6288676337e47ea868feac181fb1599.jpg differ diff --git a/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/52e340af2e6043dca44565d33619f46a.jpg b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/52e340af2e6043dca44565d33619f46a.jpg new file mode 100644 index 0000000..f8b05f5 Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/52e340af2e6043dca44565d33619f46a.jpg differ diff --git a/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/5e79f52af1ba4b9d903a6767c463d090.jpg b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/5e79f52af1ba4b9d903a6767c463d090.jpg new file mode 100644 index 0000000..8cadad4 Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/5e79f52af1ba4b9d903a6767c463d090.jpg differ diff --git a/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/82d6e4b9096c49a7afdd35033299254e.jpg b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/82d6e4b9096c49a7afdd35033299254e.jpg new file mode 100644 index 0000000..599acca Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/82d6e4b9096c49a7afdd35033299254e.jpg differ diff --git a/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/a6288676337e47ea868feac181fb1599.jpg b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/a6288676337e47ea868feac181fb1599.jpg new file mode 100644 index 0000000..66d1a82 Binary files /dev/null and b/app/static/media/posts/post_e39bf529_20250727/images/thumbnails/a6288676337e47ea868feac181fb1599.jpg differ