diff --git a/umap/static/umap/js/umap.js b/umap/static/umap/js/umap.js index 84d567c27..b5c41450e 100644 --- a/umap/static/umap/js/umap.js +++ b/umap/static/umap/js/umap.js @@ -184,14 +184,17 @@ U.Map = L.Map.extend({ this._default_extent = true this.options.name = L._('Untitled map') let data = L.Util.queryString('data', null) - let dataUrl = L.Util.queryString('dataUrl', null) + const url = new URL(window.location.href) + const dataUrls = new URLSearchParams(url.search).getAll('dataUrl') const dataFormat = L.Util.queryString('dataFormat', 'geojson') - if (dataUrl) { - dataUrl = decodeURIComponent(dataUrl) - dataUrl = this.localizeUrl(dataUrl) - dataUrl = this.proxyUrl(dataUrl) - const datalayer = this.createDataLayer() - datalayer.importFromUrl(dataUrl, dataFormat) + if (dataUrls.length) { + for (let dataUrl of dataUrls) { + dataUrl = decodeURIComponent(dataUrl) + dataUrl = this.localizeUrl(dataUrl) + dataUrl = this.proxyUrl(dataUrl) + const datalayer = this.createDataLayer() + datalayer.importFromUrl(dataUrl, dataFormat) + } } else if (data) { data = decodeURIComponent(data) const datalayer = this.createDataLayer() diff --git a/umap/tests/integration/test_map_preview.py b/umap/tests/integration/test_map_preview.py index ca338956e..fe836f1fc 100644 --- a/umap/tests/integration/test_map_preview.py +++ b/umap/tests/integration/test_map_preview.py @@ -21,6 +21,21 @@ } ], } +GEOJSON2 = { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "Montmorency Falls", + }, + "geometry": { + "type": "Point", + "coordinates": [-71.14, 46.89], + }, + } + ], +} CSV = "name,latitude,longitude\nNiagara Falls,43.08,-79.04" @@ -43,10 +58,29 @@ def handle(route): expect(markers).to_have_count(1) +def test_map_preview_can_load_mutiple_remote_geojson(page, live_server, tilelayer): + def handle(route): + if "2" in route.request.url: + route.fulfill(json=GEOJSON2) + else: + route.fulfill(json=GEOJSON) + + # Intercept the route to the proxy + page.route("*/**/ajax-proxy/**", handle) + + page.goto( + ( + f"{live_server.url}/map/?" + "dataUrl=http://some.org/geo.json&dataUrl=http://some.org/geo2.json" + ) + ) + markers = page.locator(".leaflet-marker-icon") + expect(markers).to_have_count(2) + + def test_map_preview_can_load_remote_csv(page, live_server, tilelayer): def handle(route): - csv = """name,latitude,longitude\nNiagara Falls,43.08,-79.04""" - route.fulfill(body=csv) + route.fulfill(body=CSV) # Intercept the route to the proxy page.route("*/**/ajax-proxy/**", handle)