callsign page tweak

This commit is contained in:
Graham McIntire 2025-06-16 16:06:29 -05:00
parent 31d4719bcf
commit 86288d9a74
No known key found for this signature in database
2 changed files with 86 additions and 50 deletions

View file

@ -65,6 +65,18 @@ let MinimalAPRSMap = {
}, },
initializeMap(initialCenter, initialZoom) { initializeMap(initialCenter, initialZoom) {
// Ensure the element and its parent exist
if (!this.el || !this.el.parentNode) {
console.warn("Map element or parent not found, retrying...");
if (this.initializationAttempts < this.maxInitializationAttempts) {
setTimeout(() => this.attemptInitialization(), 500);
return;
} else {
this.handleFatalError("Map element structure invalid");
return;
}
}
// Check element dimensions // Check element dimensions
const rect = this.el.getBoundingClientRect(); const rect = this.el.getBoundingClientRect();
@ -73,6 +85,10 @@ let MinimalAPRSMap = {
console.warn("Map element has no dimensions, retrying..."); console.warn("Map element has no dimensions, retrying...");
this.errors.push("Map element has zero dimensions"); this.errors.push("Map element has zero dimensions");
// Try to force dimensions
this.el.style.width = "100%";
this.el.style.height = "100vh";
if (this.initializationAttempts < this.maxInitializationAttempts) { if (this.initializationAttempts < this.maxInitializationAttempts) {
setTimeout(() => this.attemptInitialization(), 500); setTimeout(() => this.attemptInitialization(), 500);
return; return;
@ -84,6 +100,12 @@ let MinimalAPRSMap = {
// Initialize basic map // Initialize basic map
try { try {
// Ensure element ID is unique and not already initialized
if (this.el._leaflet_id) {
console.warn("Map already initialized on this element");
return;
}
this.map = L.map(this.el, { this.map = L.map(this.el, {
zoomControl: true, zoomControl: true,
attributionControl: true, attributionControl: true,
@ -93,6 +115,15 @@ let MinimalAPRSMap = {
console.error("Error initializing map:", error); console.error("Error initializing map:", error);
this.errors.push("Map initialization failed: " + error.message); this.errors.push("Map initialization failed: " + error.message);
// Check if it's a container already initialized error
if (error.message && error.message.includes("already initialized")) {
// Try to get the existing map instance
if (this.el._leaflet_id && L.DomUtil.get(this.el.id)) {
console.warn("Attempting to recover existing map instance");
return;
}
}
if (this.initializationAttempts < this.maxInitializationAttempts) { if (this.initializationAttempts < this.maxInitializationAttempts) {
setTimeout(() => this.attemptInitialization(), 1000); setTimeout(() => this.attemptInitialization(), 1000);
return; return;
@ -178,14 +209,16 @@ let MinimalAPRSMap = {
// Add a delayed size check // Add a delayed size check
setTimeout(() => { setTimeout(() => {
if (this.el && this.el.parentNode) {
const rect = this.el.getBoundingClientRect(); const rect = this.el.getBoundingClientRect();
if (this.map) { if (this.map && rect.width > 0 && rect.height > 0) {
try { try {
this.map.invalidateSize(); this.map.invalidateSize();
} catch (error) { } catch (error) {
console.error("Error re-invalidating map size:", error); console.error("Error re-invalidating map size:", error);
} }
} }
}
}, 1000); }, 1000);
// LiveView event handlers // LiveView event handlers

View file

@ -602,6 +602,7 @@ defmodule AprsWeb.MapLive.CallsignView do
} }
</style> </style>
<div style="position: relative; width: 100vw; height: 100vh;">
<div class="callsign-header"> <div class="callsign-header">
<div class="callsign-title">📡 {@callsign}</div> <div class="callsign-title">📡 {@callsign}</div>
<div class="nav-links"> <div class="nav-links">
@ -648,10 +649,12 @@ defmodule AprsWeb.MapLive.CallsignView do
<div <div
id="aprs-map" id="aprs-map"
phx-hook="APRSMap" phx-hook="APRSMap"
phx-update="ignore"
data-center={Jason.encode!(@map_center || @default_center)} data-center={Jason.encode!(@map_center || @default_center)}
data-zoom={@map_zoom || @default_zoom} data-zoom={@map_zoom || @default_zoom}
> >
</div> </div>
</div>
""" """
end end