|
182 | 182 | } |
183 | 183 | } |
184 | 184 |
|
| 185 | + function getPopupContent(segmentIdx, featureIdx) { |
| 186 | + const segment = allSegments[segmentIdx]; |
| 187 | + if (!segment) return "Unknown segment"; |
| 188 | + const feature = segment.features[featureIdx]; |
| 189 | + if (!feature) return "Unknown feature"; |
| 190 | + const priorityDetails = window.priorities[feature.priority]; |
| 191 | + return ` |
| 192 | + ${feature.title || 'Unknown'}<br> |
| 193 | + <strong>Priority:</strong> ${feature.priority}<br> |
| 194 | + <strong>Deadline:</strong> ${formatDeadline(priorityDetails.Deadline)}<br> |
| 195 | + <strong>Timeline:</strong> ${priorityDetails.Timeline} hours |
| 196 | + `; |
| 197 | + } |
| 198 | + |
185 | 199 | /** |
186 | 200 | * Update which segments are rendered based on the current map viewport. |
187 | 201 | * If any part of a segment is visible, all its features are rendered. |
188 | 202 | */ |
189 | 203 | function updateVisibleFeatures() { |
190 | 204 | const mapBounds = map.getBounds(); |
191 | | - allSegments.forEach((segment, segIndex) => { |
| 205 | + allSegments.forEach((segment, segmentIdx) => { |
192 | 206 | if (mapBounds.intersects(segment.bounds)) { |
193 | 207 | // If this segment isn’t rendered yet, add it. |
194 | | - if (!(segIndex in renderedSegments)) { |
| 208 | + if (!(segmentIdx in renderedSegments)) { |
195 | 209 | const segmentLayer = L.layerGroup(); |
196 | | - segment.features.forEach((feature) => { |
| 210 | + segment.features.forEach((feature, featureIdx) => { |
197 | 211 | const color = getPriorityColor(feature.priority); |
198 | 212 | const priorityDetails = window.priorities[feature.priority]; |
199 | 213 | const polyline = L.polyline(feature.coords, { color, weight: 6 }) |
200 | | - .bindPopup(` |
201 | | - ${feature.title || 'Unknown'}<br> |
202 | | - <strong>Priority:</strong> ${feature.priority}<br> |
203 | | - <strong>Deadline:</strong> ${formatDeadline(priorityDetails.Deadline)}<br> |
204 | | - <strong>Timeline:</strong> ${priorityDetails.Timeline} hours |
205 | | - `); |
| 214 | + .bindPopup(function() { |
| 215 | + return getPopupContent(segmentIdx, featureIdx); |
| 216 | + }); |
206 | 217 | polyline.addTo(segmentLayer); |
207 | 218 | }); |
208 | 219 | segmentLayer.addTo(featuresLayer); |
209 | | - renderedSegments[segIndex] = segmentLayer; |
| 220 | + renderedSegments[segmentIdx] = segmentLayer; |
210 | 221 | } |
211 | 222 | } else { |
212 | 223 | // If the segment is not visible and is currently rendered, remove it. |
213 | | - if (segIndex in renderedSegments) { |
214 | | - featuresLayer.removeLayer(renderedSegments[segIndex]); |
215 | | - delete renderedSegments[segIndex]; |
| 224 | + if (segmentIdx in renderedSegments) { |
| 225 | + featuresLayer.removeLayer(renderedSegments[segmentIdx]); |
| 226 | + delete renderedSegments[segmentIdx]; |
216 | 227 | } |
217 | 228 | } |
218 | 229 | }); |
|
0 commit comments