Implement context menu with: directions, add note, describe, centre.
authorDan Stowell <danstowell@users.sourceforge.net>
Wed, 5 Aug 2015 21:30:41 +0000 (22:30 +0100)
committerDan Stowell <danstowell@users.sourceforge.net>
Wed, 5 Aug 2015 21:30:41 +0000 (22:30 +0100)
app/assets/javascripts/index.js
app/assets/stylesheets/leaflet-all.scss

index 085b615c7244f66214f2cddee69f89400c28d3d0..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('');
index 10ad2607a5a4c5bbbc56b6df50892edff384ac54..82312e5c2312ae3bc174e0606a6f3f10c2f555d9 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *= require leaflet
  *= require leaflet.locationfilter
+ *= require leaflet.contextmenu
  */
 
 /* Override to serve images through the asset pipeline. */