wip: make Map.initialize async

We want to be able to await function there.

Specifically, we want to await the data creation when it comes from
the `data` url param, so when we also consume the `feature` url param,
that feature is already on the map so we can open it
This commit is contained in:
Yohan Boniface 2024-07-05 14:06:56 +02:00
parent 49db1f9aaa
commit cc6ae95371

View file

@ -29,7 +29,7 @@ L.Map.mergeOptions({
U.Map = L.Map.extend({ U.Map = L.Map.extend({
includes: [ControlsMixin], includes: [ControlsMixin],
initialize: function (el, geojson) { initialize: async function (el, geojson) {
this.sync_engine = new U.SyncEngine(this) this.sync_engine = new U.SyncEngine(this)
this.sync = this.sync_engine.proxy(this) this.sync = this.sync_engine.proxy(this)
// Locale name (pt_PT, en_US…) // Locale name (pt_PT, en_US…)
@ -176,23 +176,7 @@ U.Map = L.Map.extend({
} }
this._default_extent = true this._default_extent = true
this.options.name = L._('Untitled map') this.options.name = L._('Untitled map')
let data = L.Util.queryString('data', null) await this.loadDataFromQueryString()
const url = new URL(window.location.href)
const dataUrls = new URLSearchParams(url.search).getAll('dataUrl')
const dataFormat = L.Util.queryString('dataFormat', 'geojson')
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()
datalayer.importRaw(data, dataFormat)
}
} }
this.slideshow = new U.Slideshow(this, this.options.slideshow) this.slideshow = new U.Slideshow(this, this.options.slideshow)
@ -297,7 +281,27 @@ U.Map = L.Map.extend({
} }
}, },
setViewFromQueryString: function () { loadDataFromQueryString: async function() {
let data = L.Util.queryString('data', null)
const url = new URL(window.location.href)
const dataUrls = new URLSearchParams(url.search).getAll('dataUrl')
const dataFormat = L.Util.queryString('dataFormat', 'geojson')
if (dataUrls.length) {
for (let dataUrl of dataUrls) {
dataUrl = decodeURIComponent(dataUrl)
dataUrl = this.localizeUrl(dataUrl)
dataUrl = this.proxyUrl(dataUrl)
const datalayer = this.createDataLayer()
await datalayer.importFromUrl(dataUrl, dataFormat)
}
} else if (data) {
data = decodeURIComponent(data)
const datalayer = this.createDataLayer()
await datalayer.importRaw(data, dataFormat)
}
},
setViewFromQueryString: async function () {
if (this.options.noControl) return if (this.options.noControl) return
this.initCaptionBar() this.initCaptionBar()
if (L.Util.queryString('share')) { if (L.Util.queryString('share')) {