From 623ae07ebacb9d596b225179727dc87641ad1cca Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Fri, 17 Apr 2026 19:41:31 -0500 Subject: phase 2-6: complete D3/TopoJSON migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace ZingChart + jQuery with D3 v7 + TopoJSON. Implements all planned phases: choropleth map (NaturalEarth1 projection, YlOrRd gradient), hover tooltip, zoom/pan/reset, country detail modal, side-by-side compare, metric selector, label toggle, donut pie chart with per-country drilldown bar chart. Upgrades Bootstrap JS bundle from v4.5.3 (jQuery-dependent) to v5.0.0, fixes modal API calls to use getInstance/constructor pattern compatible with BS 5.0.0+. Removes jquery, zingchart ×3 library files. --- assets/js/map/zoom.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'assets/js/map/zoom.js') diff --git a/assets/js/map/zoom.js b/assets/js/map/zoom.js index aec278b..cba7c2c 100644 --- a/assets/js/map/zoom.js +++ b/assets/js/map/zoom.js @@ -1,3 +1,18 @@ -// Phase 3: zoom and pan behavior -export function initZoom(svg, mapGroup) {} -export function resetZoom(svg, zoomBehavior) {} +import * as d3 from "https://cdn.jsdelivr.net/npm/d3@7/+esm"; + +let _svg, _zoom; + +export function initZoom(svg, mapGroup) { + _svg = svg; + _zoom = d3.zoom() + .scaleExtent([0.5, 8]) + .on("zoom", (event) => { + mapGroup.attr("transform", event.transform); + }); + svg.call(_zoom); + return _zoom; +} + +export function resetZoom() { + _svg.transition().duration(750).call(_zoom.transform, d3.zoomIdentity); +} -- cgit v1.2.3