-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathmap-shared.js
More file actions
122 lines (106 loc) · 3.51 KB
/
Copy pathmap-shared.js
File metadata and controls
122 lines (106 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* map-shared.js - shared utilities for map pages */
function escapeHtml(str) {
var el = document.createElement('span');
el.textContent = str;
return el.innerHTML;
}
function initMap(elementId) {
if (!CSS.supports('height', '100dvh')) {
document.body.style.height = window.innerHeight + 'px';
}
var map = L.map(elementId, {
center: [46.8, 8.2],
zoom: 8,
minZoom: 7,
maxZoom: 14,
renderer: L.canvas()
});
L.tileLayer('https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OSM</a> © <a href="https://carto.com/">CARTO</a>',
subdomains: 'abcd',
maxZoom: 19
}).addTo(map);
L.tileLayer('https://{s}.basemaps.cartocdn.com/light_only_labels/{z}/{x}/{y}{r}.png', {
subdomains: 'abcd',
maxZoom: 19,
pane: 'shadowPane'
}).addTo(map);
var resizeTimer;
window.addEventListener('resize', function () {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function () {
map.invalidateSize({ animate: false });
}, 100);
});
return map;
}
function setupInfoBar(map) {
function toggleInfo() {
var bar = document.getElementById('info-bar');
var btn = document.getElementById('toggle-info');
bar.classList.toggle('collapsed');
var collapsed = bar.classList.contains('collapsed');
btn.innerHTML = collapsed ? 'About \u25be' : 'About \u25b4';
btn.setAttribute('aria-expanded', String(!collapsed));
}
document.getElementById('toggle-info').addEventListener('click', function () {
toggleInfo();
map.invalidateSize({ animate: false });
});
if (window.innerWidth <= 600) {
document.getElementById('info-bar').classList.add('collapsed');
var btn = document.getElementById('toggle-info');
btn.innerHTML = 'About \u25be';
btn.setAttribute('aria-expanded', 'false');
}
}
function toggleLegend() {
var legend = document.querySelector('.legend');
var btn = legend.querySelector('.legend-toggle');
legend.classList.toggle('legend-collapsed');
var collapsed = legend.classList.contains('legend-collapsed');
btn.textContent = collapsed ? 'Legend \u25B8' : '\u2715';
btn.setAttribute('aria-expanded', String(!collapsed));
}
function showGenerated(dnsData) {
if (dnsData.generated) {
var date = new Date(dnsData.generated);
var text = 'Updated ' + date.toLocaleString('de-CH', { dateStyle: 'medium', timeStyle: 'short' });
if (dnsData.commit) {
text += ' \u00b7 commit ' + dnsData.commit;
}
document.getElementById('generated').textContent = text;
}
}
function addLakes(map, topo, lakeColor) {
if (topo.objects.lakes) {
var lakes = topojson.feature(topo, topo.objects.lakes);
return L.geoJSON(lakes, {
interactive: false,
style: { fillColor: lakeColor, fillOpacity: 1, weight: 0, color: 'transparent' }
}).addTo(map);
}
return null;
}
async function fetchMapData() {
var responses = await Promise.all([
fetch('https://unpkg.com/swiss-maps@4.7.0/2026/ch-combined.json'),
fetch('data.min.json')
]);
return {
topo: await responses[0].json(),
dnsData: await responses[1].json()
};
}
function removeLoading() {
var loading = document.getElementById('map-loading');
if (loading) loading.remove();
}
function handleLoadError(err) {
console.error('Failed to load data:', err);
var loading = document.getElementById('map-loading');
if (loading) {
loading.textContent = 'Failed to load map data. Please try again later.';
loading.style.color = '#dc2626';
}
}