toodego: use native combo code to reload layers with query
This commit is contained in:
parent
8e29109138
commit
b2612acac0
|
@ -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');
|
||||
|
|
Loading…
Reference in New Issue