From 02eb69a2807a1a555b35a649e753034defbd1cb0 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Tue, 29 Aug 2023 16:56:04 +0200 Subject: [PATCH 1/2] Add a button to load remote data from configuration form cf #438 --- umap/static/umap/js/umap.core.js | 9 +++++++++ umap/static/umap/js/umap.layer.js | 11 +++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/umap/static/umap/js/umap.core.js b/umap/static/umap/js/umap.core.js index 2a9aeb03..12917c79 100644 --- a/umap/static/umap/js/umap.core.js +++ b/umap/static/umap/js/umap.core.js @@ -285,6 +285,15 @@ L.DomUtil.createFieldset = (container, legend, options) => { return fieldsEl } +L.DomUtil.createButton = (className, container, content, callback, context) => { + const el = L.DomUtil.add('a', className, container, content) + el.href = '#' + if (callback) { + L.DomEvent.on(el, 'click', L.DomEvent.stop).on(el, 'click', callback, context) + } + return el +} + L.DomUtil.classIf = (el, className, bool) => { if (bool) L.DomUtil.addClass(el, className) else L.DomUtil.removeClass(el, className) diff --git a/umap/static/umap/js/umap.layer.js b/umap/static/umap/js/umap.layer.js index 37fd2a2f..0cd09ae9 100644 --- a/umap/static/umap/js/umap.layer.js +++ b/umap/static/umap/js/umap.layer.js @@ -398,10 +398,10 @@ L.U.DataLayer = L.Evented.extend({ return !((!isNaN(from) && zoom < from) || (!isNaN(to) && zoom > to)) }, - fetchRemoteData: function () { + fetchRemoteData: function (force) { if (!this.isRemoteLayer()) return if (!this.showAtZoom()) return - if (!this.options.remoteData.dynamic && this.hasDataLoaded()) return + if (!this.options.remoteData.dynamic && this.hasDataLoaded() && !force) return if (!this.isVisible()) return let url = this.map.localizeUrl(this.options.remoteData.url) if (this.options.remoteData.proxy) @@ -961,6 +961,13 @@ L.U.DataLayer = L.Evented.extend({ const remoteDataContainer = L.DomUtil.createFieldset(container, L._('Remote data')) builder = new L.U.FormBuilder(this, remoteDataFields) remoteDataContainer.appendChild(builder.build()) + L.DomUtil.createButton( + 'button umap-verify', + remoteDataContainer, + L._('Verify remote URL'), + () => this.fetchRemoteData(true), + this + ) if (this.map.options.urls.datalayer_versions) this.buildVersionsFieldset(container) From 51c19906818f5790410177748df2fc2bdb9a2236 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Tue, 29 Aug 2023 17:49:19 +0200 Subject: [PATCH 2/2] Explicitly set DataLayer._dataloaded status, instead of guessing it fix #438 --- umap/static/umap/js/umap.layer.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/umap/static/umap/js/umap.layer.js b/umap/static/umap/js/umap.layer.js index 0cd09ae9..46d1fee7 100644 --- a/umap/static/umap/js/umap.layer.js +++ b/umap/static/umap/js/umap.layer.js @@ -201,6 +201,8 @@ L.U.DataLayer = L.Evented.extend({ this._layers = {} this._geojson = null this._propertiesIndex = [] + this._loaded = false // Are layer metadata loaded + this._dataloaded = false // Are layer data loaded this.parentPane = this.map.getPane('overlayPane') this.pane = this.map.createPane(`datalayer${L.stamp(this)}`, this.parentPane) @@ -346,6 +348,7 @@ L.U.DataLayer = L.Evented.extend({ this.backupOptions() this.fire('loaded') this._loading = false + this._dataloaded = true }, context: this, }) @@ -411,6 +414,7 @@ L.U.DataLayer = L.Evented.extend({ verb: 'GET', callback: (raw) => { this.clear() + this._dataloaded = true this.rawToGeoJSON(raw, this.options.remoteData.format, (geojson) => this.fromGeoJSON(geojson) ) @@ -435,7 +439,7 @@ L.U.DataLayer = L.Evented.extend({ }, hasDataLoaded: function () { - return this._geojson !== null + return !this.umap_id || this._dataloaded }, setUmapId: function (id) { @@ -800,6 +804,7 @@ L.U.DataLayer = L.Evented.extend({ this.off() this.clear() delete this._loaded + delete this._dataloaded }, reset: function () {