Skip to content

Commit

Permalink
feat: handle multiple dataUrl parameters on map load
Browse files Browse the repository at this point in the history
  • Loading branch information
davidbgk committed Jun 25, 2024
1 parent adc1cf4 commit b426d21
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 9 deletions.
17 changes: 10 additions & 7 deletions umap/static/umap/js/umap.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
38 changes: 36 additions & 2 deletions umap/tests/integration/test_map_preview.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"


Expand All @@ -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)
Expand Down

0 comments on commit b426d21

Please sign in to comment.