yeswiki icon indicating copy to clipboard operation
yeswiki copied to clipboard

Bazar : rendre identifiables les fiches visibles dans les boundaries de la carte

Open thom4parisot opened this issue 4 years ago • 2 comments

Type of issue (keep only one) / Type de demande (ne garder qu'une ligne) New feature / Nouvelle fonctionnalité

Description

Quand des fiches Bazar sont affichées sur une carte, il n'y a aujourd'hui aucun moyen d'avoir accès aux points qui sont visibles.

Par exemple, sur la capture d'écran suivantes, il y a 101 items de retournés par Bazar, mais seuls les 2 affichés m'intéressent :

image

Suggestion(s) :

  • mettre à jour avec les valeurs de data-id_fiche (ex : <div id="bazar-list-1" class="bazar-list" data-visible-id_fiche="FoyerRuralPlaisance,EpicerieChezAlexandreStGervaisSurMare2" data-template="map-min.tpl.html">)
  • émettre un événement avec les données des fiches sur la liste concernée :
var map = new L.Map(\'osmmapform\', {
    scrollWheelZoom:'.$GLOBALS['wiki']->config['baz_wheel_zoom'].',
    zoomControl:'.$GLOBALS['wiki']->config['baz_show_nav'].'
});
+ 
+ function broadcastChange ({ map }) {
+  	return (event) => {
+  	  var mapPane = map.getPane('mapPane')
+	 	
+  	 	var bounds = map.getBounds()
+ 	 	var visibleMarkers = getMarkers().filter(marker => bounds.contains(marker.getLatLng())
+   	 $(mapPane).trigger('bazar:selected-items', visibleMarkers)
+	}
+ }
+
+ map.on('zoomend', broadcastChange({ map }))
+ map.on('moveend', broadcastChange({ map }))
var geocodedmarker;

Et dans un autre script :

$('.bazar-list .leaflet-map-pane).on('bazar:selected-items', (items) => console.log(items)

thom4parisot avatar Jan 29 '21 13:01 thom4parisot

ok, intéressant, après je m'interroge sur le comportement de data-id_fiche dans le cas de cartes avec des centaines voire des milliers de point, aussi a quel point les clusters marchent avec cette proposition, et enfin, comment trigger ce changement en cas de filtrage avec les facettes.

mrflos avatar Jan 29 '21 16:01 mrflos

Oui, carrément intéressant.

Visiblement, en HTML y'a pas eu de limites de longueurs d'attributs. Des personnes ont testé, et 10 millions de caractères/100Ko de JS dans un attribut passaient tranquille.

Côté JS, si la carte supporte plusieurs milliers de points en affichage, ça se gèrera en événement (surtout si ça apparaît à la fin d'un déplacement, et pas pendant).

Ça peut aussi se gérer avec une limite arbitraire (tel niveau de zoom minimum et/ou un nombre max d'éléments présents à l'écran).

thom4parisot avatar Jan 29 '21 18:01 thom4parisot

tu voudrais ça pour faire du custom code en fonction des fiches visibles? Je pense que c'est un peu trop spécifique pour être implémenté. En plus on peut faire un workaround un peu moche avec un timer qui check toutes les secondes les points visibles

seballot avatar Dec 20 '23 18:12 seballot