]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/directions.js
Remove references to global variables from endpoint drag listener
[rails.git] / app / assets / javascripts / index / directions.js
index f6b0581caef1d7ba5ce98a21da8990ac05638949..4e2c4a895cb89dfb3d2a8938b60c2774534603fe 100644 (file)
@@ -3,7 +3,6 @@
 //= require qs/dist/qs
 
 OSM.Directions = function (map) {
 //= require qs/dist/qs
 
 OSM.Directions = function (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 chosenEngine;
 
   var awaitingRoute; // true if we've asked the engine for a route and are waiting to hear back
   var chosenEngine;
 
@@ -21,9 +20,20 @@ OSM.Directions = function (map) {
     weight: 12
   });
 
     weight: 12
   });
 
+  var endpointDragCallback = function (dragging) {
+    if (!map.hasLayer(polyline)) return;
+    if (dragging && !chosenEngine.draggable) return;
+    if (dragging && awaitingRoute) return;
+
+    getRoute(false, !dragging);
+  };
+  var endpointGeocodeCallback = function () {
+    getRoute(true, true);
+  };
+
   var endpoints = [
   var endpoints = [
-    Endpoint($("input[name='route_from']"), OSM.MARKER_GREEN),
-    Endpoint($("input[name='route_to']"), OSM.MARKER_RED)
+    Endpoint($("input[name='route_from']"), OSM.MARKER_GREEN, endpointDragCallback, endpointGeocodeCallback),
+    Endpoint($("input[name='route_to']"), OSM.MARKER_RED, endpointDragCallback, endpointGeocodeCallback)
   ];
 
   var expiry = new Date();
   ];
 
   var expiry = new Date();
@@ -43,7 +53,7 @@ OSM.Directions = function (map) {
     select.append("<option value='" + i + "'>" + I18n.t("javascripts.directions.engines." + engine.id) + "</option>");
   });
 
     select.append("<option value='" + i + "'>" + I18n.t("javascripts.directions.engines." + engine.id) + "</option>");
   });
 
-  function Endpoint(input, iconUrl) {
+  function Endpoint(input, iconUrl, dragCallback, geocodeCallback) {
     var endpoint = {};
 
     endpoint.marker = L.marker([0, 0], {
     var endpoint = {};
 
     endpoint.marker = L.marker([0, 0], {
@@ -60,22 +70,15 @@ OSM.Directions = function (map) {
     });
 
     endpoint.marker.on("drag dragend", function (e) {
     });
 
     endpoint.marker.on("drag dragend", function (e) {
-      var dragging = (e.type === "drag");
-      if (dragging && !chosenEngine.draggable) return;
-      if (dragging && awaitingRoute) return;
       endpoint.setLatLng(e.target.getLatLng());
       endpoint.setLatLng(e.target.getLatLng());
-      if (map.hasLayer(polyline)) {
-        getRoute(false, !dragging);
-      }
+      dragCallback(e.type === "drag");
     });
 
     input.on("keydown", function () {
     });
 
     input.on("keydown", function () {
-      input.removeClass("error");
+      input.removeClass("is-invalid");
     });
 
     input.on("change", function (e) {
     });
 
     input.on("change", function (e) {
-      awaitingGeocode = true;
-
       // make text the same in both text boxes
       var value = e.target.value;
       endpoint.setValue(value);
       // make text the same in both text boxes
       var value = e.target.value;
       endpoint.setValue(value);
@@ -84,7 +87,7 @@ OSM.Directions = function (map) {
     endpoint.setValue = function (value, latlng) {
       endpoint.value = value;
       delete endpoint.latlng;
     endpoint.setValue = function (value, latlng) {
       endpoint.value = value;
       delete endpoint.latlng;
-      input.removeClass("error");
+      input.removeClass("is-invalid");
       input.val(value);
 
       if (latlng) {
       input.val(value);
 
       if (latlng) {
@@ -109,7 +112,7 @@ OSM.Directions = function (map) {
         endpoint.awaitingGeocode = false;
         endpoint.hasGeocode = true;
         if (json.length === 0) {
         endpoint.awaitingGeocode = false;
         endpoint.hasGeocode = true;
         if (json.length === 0) {
-          input.addClass("error");
+          input.addClass("is-invalid");
           alert(I18n.t("javascripts.directions.errors.no_place", { place: endpoint.value }));
           return;
         }
           alert(I18n.t("javascripts.directions.errors.no_place", { place: endpoint.value }));
           return;
         }
@@ -118,10 +121,7 @@ OSM.Directions = function (map) {
 
         input.val(json[0].display_name);
 
 
         input.val(json[0].display_name);
 
-        if (awaitingGeocode) {
-          awaitingGeocode = false;
-          getRoute(true, true);
-        }
+        geocodeCallback();
       });
     };
 
       });
     };
 
@@ -209,11 +209,9 @@ OSM.Directions = function (map) {
       var endpoint = endpoints[ep_i];
       if (!endpoint.hasGeocode && !endpoint.awaitingGeocode) {
         endpoint.getGeocode();
       var endpoint = endpoints[ep_i];
       if (!endpoint.hasGeocode && !endpoint.awaitingGeocode) {
         endpoint.getGeocode();
-        awaitingGeocode = true;
       }
     }
     if (endpoints[0].awaitingGeocode || endpoints[1].awaitingGeocode) {
       }
     }
     if (endpoints[0].awaitingGeocode || endpoints[1].awaitingGeocode) {
-      awaitingGeocode = true;
       return;
     }
 
       return;
     }