diff -r 808bd0bc9d86 -r c038be682567 src/pyams_gis/resources/js/pyams_gis.js --- a/src/pyams_gis/resources/js/pyams_gis.js Mon Feb 01 13:27:46 2021 +0100 +++ b/src/pyams_gis/resources/js/pyams_gis.js Mon Feb 01 13:28:18 2021 +0100 @@ -42,8 +42,7 @@ return group; }, - init: function(context, options, callback) { - var map = context; + init: function(context, options, callback, globalCallback) { MyAMS.ajax.check([ globals.L ], [ @@ -60,20 +59,26 @@ } $.when.apply($, required).then(function() { - function createMap(config) { - var settings = { - preferCanvas: data.mapLeafletPreferCanvas || false, - attributionControl: data.mapLeafletAttributionControl === undefined ? - config.attributionControl : - data.mapLeafletAttributionControl, - zoomControl: data.mapLeafletZoomControl === undefined ? - config.zoomControl : - data.mapLeafletZoomControl, - crs: data.mapLeafletCrs || MyAMS.getObject(config.crs) || globals.L.CRS.EPSG3857, - center: data.mapLeafletCenter || config.center, - zoom: data.mapLeafletZoom || config.zoom, - gestureHandling: true - }; + function createMap(map, config) { + var data = map.data(), + settings = { + preferCanvas: data.mapLeafletPreferCanvas || false, + attributionControl: data.mapLeafletAttributionControl === undefined ? + config.attributionControl : + data.mapLeafletAttributionControl, + zoomControl: data.mapLeafletZoomControl === undefined ? + config.zoomControl : + data.mapLeafletZoomControl, + crs: data.mapLeafletCrs || MyAMS.getObject(config.crs) || globals.L.CRS.EPSG3857, + center: data.mapLeafletCenter || config.center, + zoom: data.mapLeafletZoom || config.zoom, + gestureHandling: data.mapLeafletWheelZoom === undefined ? + !config.scrollWheelZoom : + data.mapLeafletWheelZoom, + keyboard: data.mapLeafletKeyboard === undefined ? + config.keyboard && !L.Browser.mobile : + data.amsLeafletKeyboard + }; settings = $.extend({}, settings, options); map.trigger('map.init', [map, settings, config]); var leafmap = L.map(map.attr('id'), settings); @@ -114,14 +119,24 @@ }); } - var data = map.data(), - config = data.mapConfiguration; - if (config) { - createMap(config); - } else { - MyAMS.ajax.post(data.mapConfigurationUrl || 'get-map-configuration.json', {}, function(config) { - createMap(config); + var maps = $.map(context, function(elt) { + return new Promise(function(resolve, reject) { + var map = $(elt), + data = map.data(), + config = data.mapConfiguration; + if (config) { + createMap(map, config); + resolve(); + } else { + MyAMS.ajax.post(data.mapConfigurationUrl || 'get-map-configuration.json', {}, function(config) { + createMap(map, config); + resolve(); + }); + } }); + }); + if (globalCallback) { + $.when.apply($, maps).then(globalCallback); } }); } @@ -223,7 +238,7 @@ */ markers: { - init: function(leafmap, markers, config) { + init: function(maps) { MyAMS.ajax.check([ L.MarkerClusterGroup @@ -251,76 +266,84 @@ this.closeTooltip(); } - // create custom icon - var markerIcon = L.icon({ - iconUrl: markers.icon.url, - iconSize: markers.icon.size, - iconAnchor: markers.icon.anchor - }); - // customize cluster icon - var markersClusterCustom = new L.MarkerClusterGroup({ - iconCreateFunction: function(cluster) { - return L.divIcon({ - html: cluster.getChildCount(), - className: markers.clusterClass || 'map-cluster', - iconSize: null + maps.each(function(idx, elt) { + + var map = $(elt), + data = map.data(), + leafmap = map.data('leafmap'), + config = map.data('leafmap.config'), + markers = data.mapMarkers; + + // create custom icon + var markerIcon = L.icon({ + iconUrl: markers.icon.url, + iconSize: markers.icon.size, + iconAnchor: markers.icon.anchor + }); + // customize cluster icon + var markersClusterCustom = new L.MarkerClusterGroup({ + iconCreateFunction: function(cluster) { + return L.divIcon({ + html: cluster.getChildCount(), + className: markers.clusterClass || 'map-cluster', + iconSize: null + }); + } + }); + + // object to save markers + var icons = {}; + + // create markers + for (var i = 0; i < markers.markers.length; i++) { + var markerConfig = markers.markers[i]; + var latLng = new L.LatLng(markerConfig.point.y, markerConfig.point.x); + var marker = new L.Marker(latLng, { + icon: markerIcon, + clickURL: markerConfig.href, + markerId: markerConfig.id, + alt: markerConfig.id }); + if (markerConfig.href) { + marker.addEventListener('click', clickMarker); + } + icons[markerConfig.id] = marker; + // bind tooltip with title content + var label; + if (markerConfig.img) { + label = '