feat: handle multiple dataUrl parameters on map load

This commit is contained in:
David Larlet 2024-06-25 15:41:17 -04:00
parent adc1cf460f
commit b426d212f0
No known key found for this signature in database
GPG key ID: 3E2953A359E7E7BD
2 changed files with 46 additions and 9 deletions

View file

@ -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()

View file

@ -21,6 +21,21 @@ GEOJSON = {
}
],
}
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 test_map_preview_can_load_remote_geojson(page, live_server, tilelayer):
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)