Use the HTML5 autofocus attribute, and focus on load for browsers which don't support it. Also change the removal of the "Where am I?" prompt to happen on input rather than when the field is focused, so that it is properly removed and restored when the field has been autofocused. Fixes https://trac.openstreetmap.org/ticket/5065
88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
OSM.Search = function(map) {
|
|
$(".search_form input[name=query]")
|
|
.on("input", function(e) {
|
|
if ($(e.target).val() == "") {
|
|
$(".describe_location").fadeIn(100);
|
|
} else {
|
|
$(".describe_location").fadeOut(100);
|
|
}
|
|
})
|
|
|
|
$("#sidebar_content")
|
|
.on("click", ".search_more a", clickSearchMore)
|
|
.on("click", ".search_results_entry a.set_position", clickSearchResult);
|
|
|
|
function clickSearchMore(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
var div = $(this).parents(".search_more");
|
|
|
|
$(this).hide();
|
|
div.find(".loader").show();
|
|
|
|
$.get($(this).attr("href"), function(data) {
|
|
div.replaceWith(data);
|
|
});
|
|
}
|
|
|
|
function clickSearchResult(e) {
|
|
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);
|
|
}
|
|
|
|
// Let clicks to object browser links propagate.
|
|
if (data.type && data.id) return;
|
|
|
|
marker.setLatLng(center).addTo(map);
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
}
|
|
|
|
var marker = L.marker([0, 0], {icon: getUserIcon()});
|
|
|
|
var page = {};
|
|
|
|
page.pushstate = page.popstate = function(path) {
|
|
var params = querystring.parse(path.substring(path.indexOf('?') + 1));
|
|
$(".search_form input[name=query]").val(params.query);
|
|
OSM.loadSidebarContent(path, page.load);
|
|
};
|
|
|
|
page.load = function() {
|
|
$(".search_results_entry").each(function() {
|
|
var entry = $(this);
|
|
$.ajax({
|
|
url: entry.data("href"),
|
|
method: 'GET',
|
|
data: {
|
|
zoom: map.getZoom(),
|
|
minlon: map.getBounds().getWest(),
|
|
minlat: map.getBounds().getSouth(),
|
|
maxlon: map.getBounds().getEast(),
|
|
maxlat: map.getBounds().getNorth()
|
|
},
|
|
success: function(html) {
|
|
entry.html(html);
|
|
}
|
|
});
|
|
});
|
|
|
|
return map.getState();
|
|
};
|
|
|
|
page.unload = function() {
|
|
map.removeLayer(marker);
|
|
map.removeObject();
|
|
$(".search_form input[name=query]").val("");
|
|
$(".describe_location").fadeIn(100);
|
|
};
|
|
|
|
return page;
|
|
};
|