Improve error-handling

This commit is contained in:
Richard Fairhurst 2014-03-08 12:07:54 +00:00
parent 902f1b0887
commit 5b6558c0f2
6 changed files with 22 additions and 7 deletions

View file

@ -56,6 +56,7 @@ OSM.Routing=function(map,name,jqSearch) {
r.route_to=null; // | r.route_to=null; // |
r.awaitingGeocode=false;// true if the user has requested a route, but we're waiting on a geocode result 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.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.viaPoints=[]; // not yet used
r.polyline=null; // Leaflet polyline object r.polyline=null; // Leaflet polyline object
@ -97,7 +98,7 @@ OSM.Routing=function(map,name,jqSearch) {
r._gotGeocode=function(json,field) { r._gotGeocode=function(json,field) {
if (json.length==0) { if (json.length==0) {
alert("Sorry, couldn't find that place."); // *** internationalise alert(I18n.t('javascripts.directions.errors.no_place'));
r[field.id]=null; r[field.id]=null;
return; return;
} }
@ -143,10 +144,11 @@ OSM.Routing=function(map,name,jqSearch) {
}; };
// Marker has been dragged // Marker has been dragged
r.markerDragged=function(e) { r.markerDragged=function(e) {
if (e.type=='drag' && !r.chosenEngine.draggable) return; r.dragging=(e.type=='drag'); // true for drag, false for dragend
if (e.type=='drag' && r.awaitingRoute) return; if (r.dragging && !r.chosenEngine.draggable) return;
if (r.dragging && r.awaitingRoute) return;
r.setNumericInput(e.target.getLatLng(), e.target.options.name); 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 // Set a route input field to a numeric value
r.setNumericInput=function(ll,id) { r.setNumericInput=function(ll,id) {
@ -247,8 +249,16 @@ OSM.Routing=function(map,name,jqSearch) {
document.body.appendChild(script); document.body.appendChild(script);
}; };
r['gotRoute'+num]=function(data) { r['gotRoute'+num]=function(data) {
r.awaitingRoute=false; list[num].gotRoute(r,data); r.awaitingRoute=false;
$(".query_wrapper.routing .spinner").hide(); $(".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("<option value='"+i+"'>"+I18n.t(list[i].name)+"</option>"); select.append("<option value='"+i+"'>"+I18n.t(list[i].name)+"</option>");

View file

@ -28,6 +28,7 @@ OSM.RoutingEngines.list.push({
url+="/foot.js"; url+="/foot.js";
url+="?lang=" + I18n.currentLocale(); url+="?lang=" + I18n.currentLocale();
this.requestJSONP(url+"&callback="); this.requestJSONP(url+"&callback=");
return true;
}, },
gotRoute: function(router,data) { gotRoute: function(router,data) {
router.setPolyline(data.route_geometry); router.setPolyline(data.route_geometry);

View file

@ -17,7 +17,6 @@ OSM.RoutingEngines.list.push({
}, },
gotRoute: function(router, data) { gotRoute: function(router, data) {
if (!data.info.routeFound) { if (!data.info.routeFound) {
alert("Couldn't find route between those two places");
return false; return false;
} }
// Draw polyline // Draw polyline
@ -36,6 +35,7 @@ OSM.RoutingEngines.list.push({
steps.push([{lat: latlng[0], lng: latlng[1]}, instrCode, instrText, distInMeter]); steps.push([{lat: latlng[0], lng: latlng[1]}, instrCode, instrText, distInMeter]);
} }
router.setItinerary({steps: steps}); router.setItinerary({steps: steps});
return true;
}, },
GH_INSTR_MAP: { GH_INSTR_MAP: {
"-3": 6, // sharp left "-3": 6, // sharp left

View file

@ -60,5 +60,6 @@ OSM.RoutingEngines.list.push({
steps.push([L.latLng(s.startPoint.lat, s.startPoint.lng), d, s.narrative, s.distance*1000]); steps.push([L.latLng(s.startPoint.lat, s.startPoint.lng), d, s.narrative, s.distance*1000]);
} }
router.setItinerary( { steps: steps }); router.setItinerary( { steps: steps });
return true;
} }
}); });

View file

@ -19,7 +19,6 @@ OSM.RoutingEngines.list.push({
}, },
gotRoute: function(router,data) { gotRoute: function(router,data) {
if (data.status==207) { if (data.status==207) {
alert("Couldn't find route between those two places");
return false; return false;
} }
// Draw polyline // Draw polyline
@ -39,5 +38,6 @@ OSM.RoutingEngines.list.push({
steps.push([line[s[3]], s[0].split('-')[0], instText, s[2]]); steps.push([line[s[3]], s[0].split('-')[0], instText, s[2]]);
} }
if (steps.length) router.setItinerary({ steps: steps }); if (steps.length) router.setItinerary({ steps: steps });
return true;
} }
}); });

View file

@ -2125,6 +2125,9 @@ en:
osrm_car: "Car (OSRM)" osrm_car: "Car (OSRM)"
cloudmade_foot: "Foot (Cloudmade)" cloudmade_foot: "Foot (Cloudmade)"
directions: "Directions" directions: "Directions"
errors:
no_route: "Couldn't find a route between those two places."
no_place: "Sorry - couldn't find that place."
instructions: instructions:
continue_on: "Continue on " continue_on: "Continue on "
slight_right: "Slight right onto " slight_right: "Slight right onto "