]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index.js
Move leaflet.contextmenu 3rd party code to "vendor" folder
[rails.git] / app / assets / javascripts / index.js
index dbc4b8c338e0723154e6f70e90e4062f25c112bc..496ab29b9be7316c3913c9dfa47c60e9ddb74110 100644 (file)
@@ -76,31 +76,38 @@ $(document).ready(function () {
 
   var params = OSM.mapParams();
 
 
   var params = OSM.mapParams();
 
-  // TODO consider using a separate js file for the context menu additions
+  // a separate js file would be nice for the context menu additions; however not clear if context menu can be added outside of context of map obj constructor
   var context_describe = function(e){
   var context_describe = function(e){
-    var precision = OSM.zoomPrecision(map.getZoom());
-    OSM.router.route("/search?query=" + encodeURIComponent(
-      e.latlng.lat.toFixed(precision) + "," + e.latlng.lng.toFixed(precision)
-    ));
+    var precision = OSM.zoomPrecision(map.getZoom()),
+      latlng = e.latlng.wrap(),
+      lat = latlng.lat.toFixed(precision),
+      lng = latlng.lng.toFixed(precision);
+    OSM.router.route("/search?query=" + encodeURIComponent(lat + "," + lng));
   };
 
   var context_directionsfrom = function(e){
   };
 
   var context_directionsfrom = function(e){
-    var precision = OSM.zoomPrecision(map.getZoom());
+    var precision = OSM.zoomPrecision(map.getZoom()),
+      latlng = e.latlng.wrap(),
+      lat = latlng.lat.toFixed(precision),
+      lng = latlng.lng.toFixed(precision);
     OSM.router.route("/directions?" + querystring.stringify({
     OSM.router.route("/directions?" + querystring.stringify({
-      route: e.latlng.lat.toFixed(precision) + ',' + e.latlng.lng.toFixed(precision) + ';' + $('#route_to').val()
+      route: lat + ',' + lng + ';' + $('#route_to').val()
     }));
   }
 
   var context_directionsto = function(e){
     }));
   }
 
   var context_directionsto = function(e){
-    var precision = OSM.zoomPrecision(map.getZoom());
+    var precision = OSM.zoomPrecision(map.getZoom()),
+      latlng = e.latlng.wrap(),
+      lat = latlng.lat.toFixed(precision),
+      lng = latlng.lng.toFixed(precision);
     OSM.router.route("/directions?" + querystring.stringify({
     OSM.router.route("/directions?" + querystring.stringify({
-      route: $('#route_from').val() + ';' + e.latlng.lat.toFixed(precision) + ',' + e.latlng.lng.toFixed(precision)
+      route: $('#route_from').val() + ';' + lat + ',' + lng
     }));
   }
 
   var context_addnote = function(e){
     }));
   }
 
   var context_addnote = function(e){
-    // TODO this currently doesn't work correctly - I think the "route" needs to be chained to ensure it comes once the pan has finished.
-    map.panTo(e.latlng, {animate: false});
+    // I'd like this, instead of panning, to pass a query parameter about where to place the marker
+    map.panTo(e.latlng.wrap(), {animate: false});
     OSM.router.route('/note/new');
   }
 
     OSM.router.route('/note/new');
   }
 
@@ -113,7 +120,6 @@ $(document).ready(function () {
       latlng = e.latlng.wrap(),
       lat = latlng.lat.toFixed(precision),
       lng = latlng.lng.toFixed(precision);
       latlng = e.latlng.wrap(),
       lat = latlng.lat.toFixed(precision),
       lng = latlng.lng.toFixed(precision);
-
     OSM.router.route("/query?lat=" + lat + "&lon=" + lng);
   }
 
     OSM.router.route("/query?lat=" + lat + "&lon=" + lng);
   }
 
@@ -144,6 +150,17 @@ $(document).ready(function () {
     }]
   });
 
     }]
   });
 
+  $(document).on('mousedown', function(e){
+    if(e.shiftKey){
+      map.contextmenu.disable(); // on firefox, shift disables our contextmenu. we explicitly do this for all browsers.
+    }else{
+      map.contextmenu.enable();
+      // we also decide whether to disable some options that only like high zoom
+      map.contextmenu.setDisabled(3, map.getZoom() < 12);
+      map.contextmenu.setDisabled(5, map.getZoom() < 14);
+    }
+  });
+
   map.attributionControl.setPrefix('');
 
   map.updateLayers(params.layers);
   map.attributionControl.setPrefix('');
 
   map.updateLayers(params.layers);