From 5b6558c0f29013e85c9c398a61872f9dad5a69c5 Mon Sep 17 00:00:00 2001 From: Richard Fairhurst Date: Sat, 8 Mar 2014 12:07:54 +0000 Subject: [PATCH] Improve error-handling --- app/assets/javascripts/routing.js.erb | 20 ++++++++++++++----- .../routing_engines/cloudmade_foot.js | 1 + .../routing_engines/graphhopper_bicycle.js | 2 +- .../routing_engines/mapquest_bicycle.js | 1 + .../javascripts/routing_engines/osrm_car.js | 2 +- config/locales/en.yml | 3 +++ 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/routing.js.erb b/app/assets/javascripts/routing.js.erb index af9ce4fbf..d1c66e293 100644 --- a/app/assets/javascripts/routing.js.erb +++ b/app/assets/javascripts/routing.js.erb @@ -56,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 @@ -97,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; } @@ -143,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) { @@ -247,8 +249,16 @@ OSM.Routing=function(map,name,jqSearch) { document.body.appendChild(script); }; r['gotRoute'+num]=function(data) { - r.awaitingRoute=false; list[num].gotRoute(r,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/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 " -- 2.39.5