Fix: Clean up map_iframe_single.html, remove debug overlay, ensure clean map rendering.

This commit is contained in:
ske087
2025-07-26 15:19:52 +03:00
parent 187254beca
commit 5ddde4bd9b
23 changed files with 1755 additions and 1658 deletions

View File

@@ -3,42 +3,116 @@
{% block title %}Motorcycle Adventures Romania{% endblock %}
{% block head %}
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<style>
.map-container {
height: 500px;
border-radius: 1rem;
/* 3-row grid card layout */
.map-card {
display: flex;
flex-direction: column;
min-height: 800px;
background: rgba(255,255,255,0.07);
border-radius: 1.5rem;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);
border: 2px solid #10b981;
padding: 0;
overflow: hidden;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
}
.route-popup {
font-family: inherit;
.map-card-square {
width: 100%;
max-width: 700px;
aspect-ratio: 1 / 1;
margin: 0 auto;
background: rgba(255,255,255,0.07);
border-radius: 1.5rem;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);
border: 2px solid #10b981;
display: flex;
flex-direction: column;
overflow: hidden;
}
.route-popup .popup-title {
font-weight: 600;
color: #1f2937;
margin-bottom: 0.25rem;
.map-card-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem 1.25rem 0.5rem 1.25rem;
}
.route-popup .popup-author {
color: #6b7280;
font-size: 0.875rem;
margin-bottom: 0.5rem;
.map-card-title {
font-size: 1.1rem;
font-weight: bold;
color: #fff;
}
.route-popup .popup-link {
background: linear-gradient(135deg, #f97316, #dc2626);
color: white;
padding: 0.375rem 0.75rem;
border-radius: 0.375rem;
text-decoration: none;
font-size: 0.875rem;
font-weight: 500;
display: inline-block;
transition: all 0.2s;
.map-card-count {
font-size: 0.95rem;
color: #a5b4fc;
text-align: right;
}
.route-popup .popup-link:hover {
transform: translateY(-1px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
.map-card-content {
flex: 1 1 0%;
display: flex;
align-items: center;
justify-content: center;
min-height: 0;
min-width: 0;
padding: 0;
}
.map-iframe-container {
width: 100%;
height: 100%;
aspect-ratio: 1 / 1;
background: #f0f0f0;
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);
border: 2px solid #10b981;
position: relative;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto;
overflow: hidden;
}
.map-iframe {
width: 100%;
height: 100%;
aspect-ratio: 1 / 1;
border: none;
display: block;
border-radius: 1rem;
background: #f0f0f0;
}
/* Loading state for iframe */
.iframe-loading {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 10;
background: rgba(255, 255, 255, 0.95);
padding: 20px;
border-radius: 12px;
text-align: center;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(255,255,255,0.2);
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
min-width: 200px;
transition: opacity 0.3s ease;
}
.iframe-loading.hidden {
opacity: 0;
pointer-events: none;
}
.map-card-footer {
padding: 0.5rem 1.25rem 0.75rem 1.25rem;
background: transparent;
text-align: center;
}
@media (max-width: 900px) {
.map-iframe-container, .map-iframe {
height: 40vh;
min-height: 200px;
}
}
</style>
{% endblock %}
@@ -48,29 +122,44 @@
<!-- Header Section -->
<div class="relative overflow-hidden">
<div class="absolute inset-0 bg-black/20"></div>
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
<div class="text-center mb-8">
<h1 class="text-4xl md:text-5xl font-bold text-white mb-4">
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-2 pb-2">
<div class="text-center mb-2">
<h1 class="text-2xl md:text-3xl font-bold text-white mb-1">
🏍️ Motorcycle Adventures Romania
</h1>
<p class="text-lg text-blue-100 max-w-3xl mx-auto">
<p class="text-base text-blue-100 max-w-2xl mx-auto">
Discover epic motorcycle routes, share your adventures, and connect with fellow riders across Romania's stunning landscapes.
</p>
</div>
</div>
</div>
<!-- Interactive Map Section -->
<!-- Interactive Map Section (Wide Rectangular Card) -->
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mb-12">
<div class="bg-white/10 backdrop-blur-sm rounded-2xl p-6 border border-white/20">
<div class="flex justify-between items-center mb-6">
<h2 class="text-2xl font-bold text-white">🗺️ Interactive Route Map</h2>
<div class="w-11/12 md:w-10/12 lg:w-5/6 xl:w-11/12 mx-auto bg-white/10 backdrop-blur-sm rounded-2xl p-4 border border-white/20 flex flex-col" style="">
<div class="flex justify-between items-center mb-2">
<h2 class="text-xl font-bold text-white">🗺️ Interactive Route Map</h2>
<div class="text-sm text-blue-200">
<span id="route-count">{{ posts_with_routes|length }}</span> routes discovered
</div>
</div>
<div id="romania-map" class="map-container"></div>
<p class="text-blue-200 text-sm mt-4 text-center">
<div class="flex-1 flex items-center justify-center">
<div class="w-full aspect-[10/7] rounded-xl overflow-hidden border-2 border-emerald-500 bg-gray-100 relative">
<!-- Loading indicator -->
<div id="iframe-loading" class="absolute inset-0 flex flex-col items-center justify-center bg-white/80 z-10">
<div class="animate-spin rounded-full h-5 w-5 border-b-2 border-orange-600 mb-2"></div>
<span class="text-gray-700 text-sm">Loading interactive map...</span>
</div>
<iframe
id="map-iframe"
src="{{ url_for('static', filename='map_iframe.html') }}"
class="w-full h-full border-0 rounded-xl bg-gray-100 aspect-[10/7]"
title="Adventure Routes Map"
onload="hideIframeLoading()">
</iframe>
</div>
</div>
<p class="text-blue-200 text-xs mt-2 text-center">
Click on any route to view the adventure story • Routes are updated live as new trips are shared
</p>
</div>
@@ -268,68 +357,24 @@
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Initialize map centered on Romania
var map = L.map('romania-map').setView([45.9432, 24.9668], 7);
// Add tile layer
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// Custom route colors
var routeColors = ['#f97316', '#dc2626', '#059669', '#7c3aed', '#db2777', '#2563eb'];
var colorIndex = 0;
// Load and display routes
fetch('{{ url_for("community.api_routes") }}')
.then(response => response.json())
.then(routes => {
routes.forEach(route => {
if (route.coordinates && route.coordinates.length > 0) {
// Create polyline for the route
var routeLine = L.polyline(route.coordinates, {
color: routeColors[colorIndex % routeColors.length],
weight: 4,
opacity: 0.8
}).addTo(map);
// Create popup content
var popupContent = `
<div class="route-popup">
<div class="popup-title">${route.title}</div>
<div class="popup-author">by ${route.author}</div>
<a href="${route.url}" class="popup-link">View Adventure</a>
</div>
`;
// Add popup to route
routeLine.bindPopup(popupContent);
// Add click event to highlight route
routeLine.on('click', function(e) {
this.setStyle({
weight: 6,
opacity: 1
});
setTimeout(() => {
this.setStyle({
weight: 4,
opacity: 0.8
});
}, 2000);
});
colorIndex++;
}
});
// Update route count
document.getElementById('route-count').textContent = routes.length;
})
.catch(error => {
console.error('Error loading routes:', error);
});
});
// Function to hide iframe loading indicator
function hideIframeLoading() {
const loadingEl = document.getElementById('iframe-loading');
if (loadingEl) {
loadingEl.classList.add('hidden');
setTimeout(() => {
loadingEl.style.display = 'none';
}, 300);
}
}
// Fallback to hide loading after 5 seconds if iframe doesn't trigger onload
setTimeout(() => {
const loadingEl = document.getElementById('iframe-loading');
if (loadingEl && !loadingEl.classList.contains('hidden')) {
console.log('Iframe loading timeout, hiding loading indicator');
hideIframeLoading();
}
}, 5000);
</script>
{% endblock %}