From: Richard Fairhurst Date: Sat, 8 Mar 2014 12:13:40 +0000 (+0000) Subject: Merge pull request #13 from danstowell/jsrouting-ffoxdragok X-Git-Tag: live~4229^2~33 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/3ddda7319c5e9f146a03ab86f1de8e32d9bae3ef?hp=f28676c07d25b803237278c668281a50be9ff605 Merge pull request #13 from danstowell/jsrouting-ffoxdragok fix firefox behaviour when dragging pointer from the tray to the map --- diff --git a/app/assets/images/searching-small.gif b/app/assets/images/searching-small.gif new file mode 100644 index 000000000..06dbc2bc2 Binary files /dev/null and b/app/assets/images/searching-small.gif differ diff --git a/app/assets/javascripts/routing.js.erb b/app/assets/javascripts/routing.js.erb index 74607ef39..d1c66e293 100644 --- a/app/assets/javascripts/routing.js.erb +++ b/app/assets/javascripts/routing.js.erb @@ -9,8 +9,6 @@ *** translation (including all alerts and presentation) *** export GPX *** URL history (or do we consciously not want to support that?) - *** spinner when waiting for result (beneath 'Go' button?) - *** add YOURS engine */ @@ -58,6 +56,7 @@ OSM.Routing=function(map,name,jqSearch) { r.route_to=null; // | r.awaitingGeocode=false;// true if the user has requested a route, but we're waiting on a geocode result r.awaitingRoute=false; // true if we've asked the engine for a route and are waiting to hear back + r.dragging=false; // true if the user is dragging a start/end point r.viaPoints=[]; // not yet used r.polyline=null; // Leaflet polyline object @@ -99,7 +98,7 @@ OSM.Routing=function(map,name,jqSearch) { r._gotGeocode=function(json,field) { if (json.length==0) { - alert("Sorry, couldn't find that place."); // *** internationalise + alert(I18n.t('javascripts.directions.errors.no_place')); r[field.id]=null; return; } @@ -145,10 +144,11 @@ OSM.Routing=function(map,name,jqSearch) { }; // Marker has been dragged r.markerDragged=function(e) { - if (e.type=='drag' && !r.chosenEngine.draggable) return; - if (e.type=='drag' && r.awaitingRoute) return; + r.dragging=(e.type=='drag'); // true for drag, false for dragend + if (r.dragging && !r.chosenEngine.draggable) return; + if (r.dragging && r.awaitingRoute) return; r.setNumericInput(e.target.getLatLng(), e.target.options.name); - r.requestRoute(e.type=='dragend', false); + r.requestRoute(!r.dragging, false); }; // Set a route input field to a numeric value r.setNumericInput=function(ll,id) { @@ -161,6 +161,7 @@ OSM.Routing=function(map,name,jqSearch) { r.requestRoute=function(isFinal, updateZoom) { if (r.route_from && r.route_to) { + $(".query_wrapper.routing .spinner").show(); r.awaitingRoute=true; r.chosenEngine.getRoute(isFinal,[r.route_from,r.route_to]); if(updateZoom){ @@ -184,13 +185,13 @@ OSM.Routing=function(map,name,jqSearch) { // Take directions and write them out // data = { steps: array of [latlng, sprite number, instruction text, distance in metres] } // sprite numbers equate to OSRM's route_instructions turn values - // *** translations? r.setItinerary=function(data) { // Create base table $("#content").removeClass("overlay-sidebar"); $('#sidebar_content').empty(); - var html='

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

'.replace(/~/g,"'"); - html+=""; + var html=('

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

').replace(/~/g,"'"); $('#sidebar_content').html(html); // Add each row var cumulative=0; @@ -247,7 +248,18 @@ OSM.Routing=function(map,name,jqSearch) { script.src = url+r.name+".gotRoute"+num; document.body.appendChild(script); }; - r['gotRoute'+num]=function(data) { r.awaitingRoute=false; list[num].gotRoute(r,data); }; + r['gotRoute'+num]=function(data) { + r.awaitingRoute=false; + $(".query_wrapper.routing .spinner").hide(); + if (!list[num].gotRoute(r,data)) { + // No route found + if (r.polyline) { + map.removeLayer(r.polyline); + r.polyline=null; + } + if (!r.dragging) { alert(I18n.t('javascripts.directions.errors.no_route')); } + } + }; } select.append(""); } diff --git a/app/assets/javascripts/routing_engines/cloudmade_foot.js b/app/assets/javascripts/routing_engines/cloudmade_foot.js index bee9e448a..13368d0a2 100644 --- a/app/assets/javascripts/routing_engines/cloudmade_foot.js +++ b/app/assets/javascripts/routing_engines/cloudmade_foot.js @@ -28,6 +28,7 @@ OSM.RoutingEngines.list.push({ url+="/foot.js"; url+="?lang=" + I18n.currentLocale(); this.requestJSONP(url+"&callback="); + return true; }, gotRoute: function(router,data) { router.setPolyline(data.route_geometry); diff --git a/app/assets/javascripts/routing_engines/graphhopper_bicycle.js b/app/assets/javascripts/routing_engines/graphhopper_bicycle.js index bec855f88..acf089278 100644 --- a/app/assets/javascripts/routing_engines/graphhopper_bicycle.js +++ b/app/assets/javascripts/routing_engines/graphhopper_bicycle.js @@ -17,7 +17,6 @@ OSM.RoutingEngines.list.push({ }, gotRoute: function(router, data) { if (!data.info.routeFound) { - alert("Couldn't find route between those two places"); return false; } // Draw polyline @@ -36,6 +35,7 @@ OSM.RoutingEngines.list.push({ steps.push([{lat: latlng[0], lng: latlng[1]}, instrCode, instrText, distInMeter]); } router.setItinerary({steps: steps}); + return true; }, GH_INSTR_MAP: { "-3": 6, // sharp left diff --git a/app/assets/javascripts/routing_engines/mapquest_bicycle.js b/app/assets/javascripts/routing_engines/mapquest_bicycle.js index c7995246a..5d5ff9ffd 100644 --- a/app/assets/javascripts/routing_engines/mapquest_bicycle.js +++ b/app/assets/javascripts/routing_engines/mapquest_bicycle.js @@ -60,5 +60,6 @@ OSM.RoutingEngines.list.push({ steps.push([L.latLng(s.startPoint.lat, s.startPoint.lng), d, s.narrative, s.distance*1000]); } router.setItinerary( { steps: steps }); + return true; } }); diff --git a/app/assets/javascripts/routing_engines/osrm_car.js b/app/assets/javascripts/routing_engines/osrm_car.js index da94adf05..8ff6ba482 100644 --- a/app/assets/javascripts/routing_engines/osrm_car.js +++ b/app/assets/javascripts/routing_engines/osrm_car.js @@ -19,7 +19,6 @@ OSM.RoutingEngines.list.push({ }, gotRoute: function(router,data) { if (data.status==207) { - alert("Couldn't find route between those two places"); return false; } // Draw polyline @@ -39,5 +38,6 @@ OSM.RoutingEngines.list.push({ steps.push([line[s[3]], s[0].split('-')[0], instText, s[2]]); } if (steps.length) router.setItinerary({ steps: steps }); + return true; } }); diff --git a/app/views/layouts/_search.html.erb b/app/views/layouts/_search.html.erb index e9aa76f5a..839b3dcec 100644 --- a/app/views/layouts/_search.html.erb +++ b/app/views/layouts/_search.html.erb @@ -20,6 +20,7 @@ <%= image_tag "marker-red.png" , :class => 'routing_marker', :id => 'marker_to' , :draggable => 'true' %> <%= text_field_tag "route_to" , params[:to] , :placeholder => t('site.search.to') , :onchange=>"OSM.routing.geocode('route_to' ,event)" %> + <%= image_tag "searching-small.gif", :class => 'spinner', :style => "vertical-align: middle; display: none;" %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 573afa585..46fe41d10 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2125,6 +2125,9 @@ en: osrm_car: "Car (OSRM)" cloudmade_foot: "Foot (Cloudmade)" directions: "Directions" + errors: + no_route: "Couldn't find a route between those two places." + no_place: "Sorry - couldn't find that place." instructions: continue_on: "Continue on " slight_right: "Slight right onto "