toodego: use native combo code to reload layers with query

This commit is contained in:
Frédéric Péters 2020-05-13 16:40:09 +02:00
parent 8e29109138
commit b2612acac0
1 changed files with 40 additions and 89 deletions

View File

@ -176,14 +176,6 @@ $(function() {
var $map_widget = $('div.combo-cell-map');
var map = $map_widget[0].leaflet_map;
var search_timeout_id = null;
var base_geojson_url = $map_widget.data('geojson-url');
if (!base_geojson_url) { // individual layers
var map_id = $map_widget.data('cell-id');
var geojson_layers = window['geojson_' + map_id];
} else {
var geojson_layers = [];
geojson_layers.push({slug: 'base', 'url': base_geojson_url});
}
$map_search_input.on('change keyup paste search', function(e) {
var keycode = e.which || e.keyCode;
if (keycode == 13) { // enter
@ -201,17 +193,13 @@ $(function() {
query = query.toLowerCase();
query = query.replace(/^rue\s/i, '');
if (query.length == 0) { // reset view
new_geojson_layers = geojson_layers; // get all markers
map.query_string = "";
var initial_zoom = parseInt($map_widget.data('init-zoom'));
map.setZoom(initial_zoom);
} else if (query.length < 2) {
return; // don't react on short query
} else {
new_geojson_layers = jQuery.map(geojson_layers,
function(x) {
return {slug: x.slug, url: x.url + '?q=' + query};
}
);
map.query_string = 'q=' + query;
if (is_autour_de_moi) {
var center = map.getCenter();
var collectivity_slugs = JSON.parse(document.getElementById('collectivity-slugs').textContent);
@ -222,75 +210,14 @@ $(function() {
break;
}
}
new_geojson_layers = jQuery.map(new_geojson_layers,
function(x) {
return {slug: x.slug, url: x.url + '&lat=' + center.lat + '&lng=' + center.lng + distance_q};
}
);
if (distance_q) {
map.query_string += distance_q + '&lat=' + center.lat + '&lng=' + center.lng;
}
}
}
if (base_geojson_url) {
$map_widget.data('geojson-url', new_geojson_layers[0].url);
}
var layers_to_load = new_geojson_layers.length;
for (var i=0; i<new_geojson_layers.length; i++) {
var geojson_data = new_geojson_layers[i];
map.add_geojson_layer(function(geo_json) {
var layers = geo_json.getLayers();
var map_bounds = map.getBounds();
var found = 0;
var found_in_padded_bounds = false;
layers_to_load -= 1;
if (layers.length == 0) return;
for (var i=0; i<layers.length; i++) {
if (map_bounds.contains(layers[i].getLatLng())) {
found += 1;
}
}
if (!found) {
/* no visible marker */
if (is_autour_de_moi) {
/* on "autour de moi" page, don't move, just zoom out */
var min_zoom = parseInt($map_widget.data('min-zoom'));
if (query.length > 0 && map.getZoom() > min_zoom) {
// actual query, zoom out, to get more results
map.setZoom(map.getZoom() - 1);
}
} else {
if (layers.length == 1) {
map.flyTo(layers[0].getLatLng());
}
var bounds = geo_json.getBounds();
map.flyToBounds(bounds);
}
} else {
if (is_autour_de_moi) {
/* on "autour de moi" page, don't do anything, just get the
* markers filtered */
} else if (map.getZoom() < 16) {
if (layers.length == 1) {
map.flyTo(layers[0].getLatLng(), 16);
} else if (layers.length == found) {
var bounds = geo_json.getBounds();
map.flyToBounds(bounds);
} else if (layers.length <= 10) {
var bounds = geo_json.getBounds();
map.flyToBounds(bounds);
}
} else {
if (layers.length <= 10 && layers.length != found) {
var bounds = geo_json.getBounds();
map.flyToBounds(bounds);
}
}
}
if (layers_to_load == 0) {
$(document).trigger('gnm:new-results');
}
}, geojson_data);
}
search_timeout_id = null;
$('.search-page div.cell.map').addClass('loading');
map.load_geojson_layers();
}, 300);
});
$('#mapsearch').on('submit', function() {
@ -401,18 +328,42 @@ $(function() {
$empty.text('Aucun résultat dans cette zone.');
$empty.appendTo($sidebar);
}
if (cluster_groups.length && $sidebar.find('> div.cell').length == 0 && ! params.loadmore) {
$empty.text("Cliquez ou zoomez sur un point d'intérêt...");
}
}
});
if ($map_search_input.val()) { /* prefilled from query string */
$map_search_input.trigger('change');
} else {
$('div.cell.map').on('combo:map-markers-ready', function() {
$(document).trigger('gnm:new-results');
$('div.cell.map').on('combo:map-markers-ready', function() {
var map_bounds = map.getBounds();
var found = 0;
var found_in_padded_bounds = 0;
var query = $('#mapsearch input').val();
map.each_marker(function(marker) {
found++;
if (map_bounds.contains(marker.getLatLng())) {
found_in_padded_bounds++;;
}
});
}
if (found_in_padded_bounds) {
/* don't do anything, just get the markers filtered */
}
else if (found && !found_in_padded_bounds) {
/* no visible marker */
if (is_autour_de_moi) {
/* on "autour de moi" page, don't move, just zoom out */
var min_zoom = parseInt($map_widget.data('min-zoom'));
if (query.length > 0 && map.getZoom() > min_zoom) {
// actual query, zoom out, to get more results
map.setZoom(min_zoom);
}
} else {
map.flyToBounds(map.bounds);
}
}
else {
/* no markers at all */
}
$(document).trigger('gnm:new-results');
});
$map_search_input.trigger('change');
$('div.suggestions span').on('click', function() {
$map_search_input.val($(this).text()).trigger('change');