Improve error-handling
authorRichard Fairhurst <richard@systemeD.net>
Sat, 8 Mar 2014 12:07:54 +0000 (12:07 +0000)
committerRichard Fairhurst <richard@systemeD.net>
Sat, 8 Mar 2014 12:07:54 +0000 (12:07 +0000)
app/assets/javascripts/routing.js.erb
app/assets/javascripts/routing_engines/cloudmade_foot.js
app/assets/javascripts/routing_engines/graphhopper_bicycle.js
app/assets/javascripts/routing_engines/mapquest_bicycle.js
app/assets/javascripts/routing_engines/osrm_car.js
config/locales/en.yml

index af9ce4fbf95dc6f9430919a305354235dd48ce5b..d1c66e2939b6d86d98983fc584e54f1f018e2f54 100644 (file)
@@ -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("<option value='"+i+"'>"+I18n.t(list[i].name)+"</option>");
index bee9e448a931be071d34349579f45e94c3b208f5..13368d0a2d09475c53693634f95a9c5836a80b5e 100644 (file)
@@ -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);
index bec855f88dd44e0f1b07f6cd21a537ddf18055ab..acf089278439db8d2445085f3ac7b23d50f77550 100644 (file)
@@ -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
index c7995246ab22466a84aeed019eac1d86c1f26498..5d5ff9ffd49c119bf017982966376235b668bf83 100644 (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]);
                }
                router.setItinerary( { steps: steps });
+               return true;
        }
 });
index da94adf053aa8356c385a1aff8b9ad9562850545..8ff6ba482a3883cd5ea0d86643f4d0cdbe0894e1 100644 (file)
@@ -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;
        }
 });
index 573afa5855bca6b51feae1e52e74e5b0844f0201..46fe41d10d9a0d626c8f61fc5ef68e14fc31fbac 100644 (file)
@@ -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 "