X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/2dd89f2d0806b249287d19e63e4392e6d21a847b..1b2bfb6e9242d5ec8ff5ab65d44b5761d95d1942:/app/assets/javascripts/index/directions.js.erb diff --git a/app/assets/javascripts/index/directions.js.erb b/app/assets/javascripts/index/directions.js.erb index ee2cce667..c3ad085ff 100644 --- a/app/assets/javascripts/index/directions.js.erb +++ b/app/assets/javascripts/index/directions.js.erb @@ -2,16 +2,6 @@ //= require_tree ./directions_engines OSM.Directions = function (map) { - $(".directions_form a.directions_close").on("click", function(e) { - e.preventDefault(); - var route_from = $(e.target).parent().parent().parent().find("input[name=route_from]").val(); - if (route_from) { - OSM.router.route("/?query=" + encodeURIComponent(route_from) + OSM.formatHash(map)); - } else { - OSM.router.route("/" + OSM.formatHash(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 @@ -32,8 +22,8 @@ OSM.Directions = function (map) { }); var endpoints = [ - Endpoint($("#content input[name='route_from']"), <%= asset_path('marker-green.png').to_json %>), - Endpoint($("#content input[name='route_to']"), <%= asset_path('marker-red.png').to_json %>) + Endpoint($("input[name='route_from']"), <%= asset_path('marker-green.png').to_json %>), + Endpoint($("input[name='route_to']"), <%= asset_path('marker-red.png').to_json %>) ]; function Endpoint(input, iconUrl) { @@ -62,24 +52,29 @@ OSM.Directions = function (map) { }); input.on("change", function (e) { + // make text the same in both text boxes + var value = e.target.value; + endpoint.setValue(value) endpoint.getGeocode(); }); - endpoint.getGeocode = function() { - var value = input.val(); + endpoint.setValue = function(value) { + endpoint.value = value; + input.val(value); + } + endpoint.getGeocode = function() { // if no one has entered a value yet, then we can't geocode, so don't // even try. - if (!value) { + if (!endpoint.value) { return; } endpoint.awaitingGeocode = true; - $.getJSON('<%= NOMINATIM_URL %>search?q=' + encodeURIComponent(value) + '&format=json', function (json) { + $.getJSON('<%= NOMINATIM_URL %>search?q=' + encodeURIComponent(endpoint.value) + '&format=json', function (json) { endpoint.awaitingGeocode = false; endpoint.hasGeocode = true; - if (json.length == 0) { alert(I18n.t('javascripts.directions.errors.no_place')); return; @@ -112,6 +107,16 @@ OSM.Directions = function (map) { return endpoint; } + $(".directions_form a.directions_close").on("click", function(e) { + e.preventDefault(); + var route_from = endpoint[0].value; + if (route_from) { + OSM.router.route("/?query=" + encodeURIComponent(route_from) + OSM.formatHash(map)); + } else { + OSM.router.route("/" + OSM.formatHash(map)); + } + }); + function formatDistance(m) { if (m < 1000) { return Math.round(m) + "m"; @@ -166,14 +171,16 @@ OSM.Directions = function (map) { d.lat.toFixed(precision) + ',' + d.lng.toFixed(precision) })); - $(".directions_form .spinner").show(); + // copy loading item to sidebar and display it. we copy it, rather than + // just using it in-place and replacing it in case it has to be used + // again. + $('#sidebar_content').html($('.directions_form .loader_copy').html()); awaitingRoute = true; + map.setSidebarOverlaid(false); chosenEngine.getRoute([o, d], function (err, route) { awaitingRoute = false; - $(".directions_form .spinner").hide(); - if (err) { map.removeLayer(polyline); @@ -188,8 +195,6 @@ OSM.Directions = function (map) { .setLatLngs(route.line) .addTo(map); - map.setSidebarOverlaid(false); - if (!dragging) { map.fitBounds(polyline.getBounds().pad(0.05)); } @@ -253,6 +258,14 @@ OSM.Directions = function (map) { $('#sidebar_content').append('
' + I18n.t('javascripts.directions.instructions.courtesy', {link: chosenEngine.creditline}) + '
'); + + $('#sidebar_content a.geolink').on('click', function(e) { + e.preventDefault(); + map.removeLayer(polyline); + $('#sidebar_content').html(''); + map.setSidebarOverlaid(true); + // TODO: collapse width of sidebar back to previous + }); }); } @@ -324,7 +337,7 @@ OSM.Directions = function (map) { } if (params.from) { - $(".directions_form input[name='route_from']").val(params.from); + endpoints[0].setValue(params.from); } var o = route[0] && L.latLng(route[0].split(',')),