X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/609cedc4998805d38d1607e68c67e491ce589114..4330dcdf945bc7ec7964bb544eb2b0cd123a3528:/app/assets/javascripts/index/directions.js diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index ce8ac9c1c..1a3e0d4ec 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -4,10 +4,9 @@ OSM.Directions = function (map) { var awaitingGeocode; // true if the user has requested a route, but we're waiting on a geocode result var awaitingRoute; // true if we've asked the engine for a route and are waiting to hear back - var dragging; // true if the user is dragging a start/end point var chosenEngine; - var popup = L.popup(); + var popup = L.popup({autoPanPadding: [100, 100]}); var polyline = L.polyline([], { color: '#03f', @@ -45,16 +44,18 @@ OSM.Directions = function (map) { }); endpoint.marker.on('drag dragend', function (e) { - dragging = (e.type === 'drag'); + var dragging = (e.type === 'drag'); if (dragging && !chosenEngine.draggable) return; if (dragging && awaitingRoute) return; endpoint.setLatLng(e.target.getLatLng()); if (map.hasLayer(polyline)) { - getRoute(); + getRoute(false, !dragging); } }); input.on("change", function (e) { + awaitingGeocode = true; + // make text the same in both text boxes var value = e.target.value; endpoint.setValue(value); @@ -89,16 +90,13 @@ OSM.Directions = function (map) { return; } - input.val(json[0].display_name); + endpoint.setLatLng(L.latLng(json[0])); - endpoint.latlng = L.latLng(json[0]); - endpoint.marker - .setLatLng(endpoint.latlng) - .addTo(map); + input.val(json[0].display_name); if (awaitingGeocode) { awaitingGeocode = false; - getRoute(); + getRoute(true, true); } }); }; @@ -123,7 +121,7 @@ OSM.Directions = function (map) { OSM.router.route("/directions?" + querystring.stringify({ from: $("#route_to").val(), to: $("#route_from").val(), - route: from.lat + "," + from.lng + ";" + to.lat + "," + to.lng + route: to.lat + "," + to.lng + ";" + from.lat + "," + from.lng })); }); @@ -163,7 +161,7 @@ OSM.Directions = function (map) { }); } - function getRoute() { + function getRoute(fitRoute, reportErrors) { // Cancel any route that is already in progress if (awaitingRoute) awaitingRoute.abort(); @@ -207,7 +205,7 @@ OSM.Directions = function (map) { if (err) { map.removeLayer(polyline); - if (!dragging) { + if (reportErrors) { $('#sidebar_content').html('

' + I18n.t('javascripts.directions.errors.no_route') + '

'); } @@ -218,7 +216,7 @@ OSM.Directions = function (map) { .setLatLngs(route.line) .addTo(map); - if (!dragging) { + if (fitRoute) { map.fitBounds(polyline.getBounds().pad(0.05)); } @@ -321,13 +319,13 @@ OSM.Directions = function (map) { chosenEngine = engines[e.target.selectedIndex]; $.cookie('_osm_directions_engine', chosenEngine.id, { expires: expiry, path: '/' }); if (map.hasLayer(polyline)) { - getRoute(); + getRoute(true, true); } }); $(".directions_form").on("submit", function(e) { e.preventDefault(); - getRoute(); + getRoute(true, true); }); $(".routing_marker").on('dragstart', function (e) { @@ -360,7 +358,7 @@ OSM.Directions = function (map) { pt.y += 20; var ll = map.containerPointToLatLng(pt); endpoints[type === 'from' ? 0 : 1].setLatLng(ll); - getRoute(); + getRoute(true, true); }); var params = querystring.parse(location.search.substring(1)), @@ -377,7 +375,7 @@ OSM.Directions = function (map) { map.setSidebarOverlaid(!from || !to); - getRoute(); + getRoute(true, true); }; page.load = function() {