This simplifies the implementation, allows code sharing with "Where am I?", and produces friendlier results for lat/lon searches (actual reverse geocode results rather than a raw lat/lon display).
77 lines
1.9 KiB
JavaScript
77 lines
1.9 KiB
JavaScript
function initializeSearch(map) {
|
|
$("#search_form").submit(submitSearch);
|
|
$("#describe_location").click(describeLocation);
|
|
|
|
if ($("#query").val()) {
|
|
$("#search_form").submit();
|
|
}
|
|
|
|
// Focus the search field for browsers that don't support
|
|
// the HTML5 'autofocus' attribute
|
|
if (!("autofocus" in document.createElement("input"))) {
|
|
$("#query").focus();
|
|
}
|
|
|
|
$("#sidebar_content").on("click", ".search_results_entry a.set_position", clickSearchResult);
|
|
|
|
var marker = L.marker([0, 0], {icon: getUserIcon()});
|
|
|
|
function submitSearch(e) {
|
|
e.preventDefault();
|
|
|
|
var bounds = map.getBounds();
|
|
|
|
$("#sidebar_title").html(I18n.t('site.sidebar.search_results'));
|
|
$("#sidebar_content").load($(this).attr("action"), {
|
|
query: $("#query").val(),
|
|
zoom: map.getZoom(),
|
|
minlon: bounds.getWest(),
|
|
minlat: bounds.getSouth(),
|
|
maxlon: bounds.getEast(),
|
|
maxlat: bounds.getNorth()
|
|
});
|
|
|
|
openSidebar();
|
|
|
|
$("#sidebar").one("closed", function () {
|
|
map.removeLayer(marker);
|
|
map.removeObject();
|
|
});
|
|
}
|
|
|
|
function clickSearchResult(e) {
|
|
e.preventDefault();
|
|
|
|
var data = $(this).data(),
|
|
center = L.latLng(data.lat, data.lon);
|
|
|
|
if (data.minLon && data.minLat && data.maxLon && data.maxLat) {
|
|
map.fitBounds([[data.minLat, data.minLon],
|
|
[data.maxLat, data.maxLon]]);
|
|
} else {
|
|
map.setView(center, data.zoom);
|
|
}
|
|
|
|
marker
|
|
.setLatLng(center)
|
|
.addTo(map);
|
|
|
|
if (data.type && data.id) {
|
|
map.addObject(data, { zoom: false, style: { opacity: 0.2, fill: false } });
|
|
}
|
|
}
|
|
|
|
function describeLocation(e) {
|
|
e.preventDefault();
|
|
|
|
var center = map.getCenter(),
|
|
zoom = map.getZoom();
|
|
|
|
$("#sidebar_title").html(I18n.t('site.sidebar.search_results'));
|
|
$("#sidebar_content").load($(this).attr("href"), {
|
|
lat: center.lat,
|
|
lon: center.lng,
|
|
zoom: zoom
|
|
}, openSidebar);
|
|
}
|
|
}
|