maplibregl = (await import("https://esm.sh/maplibre-gl@4.7.1")).default
map = {
const container = document.createElement("div");
container.className = "talks-map";
yield container;
const m = new maplibregl.Map({
container,
style: "https://tiles.openfreemap.org/styles/liberty",
center: [4, 46],
zoom: 3
});
m.addControl(new maplibregl.NavigationControl(), "top-right");
m.on("load", () => {
if (!talks_map_data.length) return;
const bounds = new maplibregl.LngLatBounds();
talks_map_data.forEach((t) => {
const meta = [t.date, t.location].filter(Boolean).join(" · ");
const popupHtml = `<strong>${t.event}</strong>` +
(meta ? `<br>${meta}` : "") +
`<br><a href="#${t.alias}" onclick="window.__talksSelect && window.__talksSelect('${t.alias}')">View talk ↓</a>`;
new maplibregl.Marker({ color: "#eb6864" })
.setLngLat([t.lng, t.lat])
.setPopup(new maplibregl.Popup({ offset: 25 }).setHTML(popupHtml))
.addTo(m);
bounds.extend([t.lng, t.lat]);
});
m.fitBounds(bounds, { padding: 60, maxZoom: 8 });
});
}Talks
A selection of talks I’ve given. Hover a title to preview it, click to pin it below.
Hover or click a talk above to see it here.