openstreetmap-website/app/assets/javascripts/index/search.js
Tom Hughes 9cc9a00988 Restore autofocusing of the search field
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
2013-12-10 19:45:28 +00:00

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;
};