]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index.js
Implement context menu with: directions, add note, describe, centre.
[rails.git] / app / assets / javascripts / index.js
index 5e437c6ec47a8a05a299a4b474a1812daab55503..8964cef1dd78138410b3477d9dc7aa7985f10829 100644 (file)
@@ -7,6 +7,7 @@
 //= require leaflet.share
 //= require leaflet.polyline
 //= require leaflet.query
+//= require leaflet.contextmenu
 //= require index/search
 //= require index/browse
 //= require index/export
@@ -75,9 +76,60 @@ $(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)
+    }));
+  }
+
+  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);
+  }
+
+  // TODO internationalisation of the context menu strings
   var map = new L.OSM.Map("map", {
     zoomControl: false,
-    layerControl: false
+    layerControl: false,
+    contextmenu: true,
+    contextmenuWidth: 140,
+    contextmenuItems: [{
+        text: 'Directions from here',
+        callback: context_directionsfrom
+    }, {
+        text: 'Directions to here',
+        callback: context_directionsto
+    }, '-', {
+        text: 'Add a note here',
+        callback: context_addnote
+    }, {
+        text: 'Show address',
+        callback: context_describe
+    }, {
+        text: 'Centre map here',
+        callback: context_centrehere
+    }]
   });
 
   map.attributionControl.setPrefix('');
@@ -165,15 +217,6 @@ $(document).ready(function () {
     $.cookie("_osm_location", OSM.locationCookie(map), { expires: expiry, path: "/" });
   });
 
-  if ($.cookie('_osm_donate2015') === 'hide') {
-    $('#donate').hide();
-  }
-
-  $('#donate .close').on('click', function() {
-    $('#donate').hide();
-    $.cookie("_osm_donate2015", 'hide', { expires: expiry });
-  });
-
   if ($.cookie('_osm_welcome') === 'hide') {
     $('.welcome').hide();
   }