]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index.js
Move contextmenu callbacks to separate file
[rails.git] / app / assets / javascripts / index.js
index 69e223b22a74e71bbb2a2f997fafbf36fefac9fc..01682d5f8d60209417e9de9b3669a81a23fc6a92 100644 (file)
@@ -8,6 +8,7 @@
 //= require leaflet.polyline
 //= require leaflet.query
 //= require leaflet.contextmenu
+//= require index/contextmenu
 //= require index/search
 //= require index/browse
 //= require index/export
@@ -76,48 +77,6 @@ $(document).ready(function () {
 
   var params = OSM.mapParams();
 
-  // TODO consider using a separate js file for the context menu additions
-  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 context_directionsfrom = function(e){
-    var precision = OSM.zoomPrecision(map.getZoom());
-    OSM.router.route("/directions?" + querystring.stringify({
-      route: e.latlng.lat.toFixed(precision) + ',' + e.latlng.lng.toFixed(precision) + ';' + $('#route_to').val()
-    }));
-  }
-
-  var context_directionsto = function(e){
-    var precision = OSM.zoomPrecision(map.getZoom());
-    OSM.router.route("/directions?" + querystring.stringify({
-      route: $('#route_from').val() + ';' + e.latlng.lat.toFixed(precision) + ',' + e.latlng.lng.toFixed(precision)
-    }));
-  }
-
-  // TODO only allow this if zoomed in enough
-  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});
-    OSM.router.route('/note/new');
-  }
-
-  var context_centrehere = function(e){
-    map.panTo(e.latlng);
-  }
-
-  var context_queryhere = function(e) {
-    var precision = OSM.zoomPrecision(map.getZoom()),
-      latlng = e.latlng.wrap(),
-      lat = latlng.lat.toFixed(precision),
-      lng = latlng.lng.toFixed(precision);
-
-    OSM.router.route("/query?lat=" + lat + "&lon=" + lng);
-  }
-
   // TODO internationalisation of the context menu strings
   var map = new L.OSM.Map("map", {
     zoomControl: false,
@@ -126,22 +85,22 @@ $(document).ready(function () {
     contextmenuWidth: 140,
     contextmenuItems: [{
         text: 'Directions from here',
-        callback: context_directionsfrom
+        callback: function(e){ context_directionsfrom(e, map) }
     }, {
         text: 'Directions to here',
-        callback: context_directionsto
+        callback: function(e){ context_directionsto(e, map) }
     }, '-', {
         text: 'Add a note here',
-        callback: context_addnote
+        callback: function(e){ context_addnote(e, map) }
     }, {
         text: 'Show address',
-        callback: context_describe
+        callback: function(e){ context_describe(e, map) }
     }, {
         text: 'Query features',
-        callback: context_queryhere
+        callback: function(e){ context_queryhere(e, map) }
     }, {
         text: 'Centre map here',
-        callback: context_centrehere
+        callback: function(e){ context_centrehere(e, map) }
     }]
   });
 
@@ -150,6 +109,9 @@ $(document).ready(function () {
       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);
     }
   });