From: Dan Stowell Date: Wed, 5 Aug 2015 21:30:41 +0000 (+0100) Subject: Implement context menu with: directions, add note, describe, centre. X-Git-Tag: live~3568^2~4^2~7 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/cd61c8e0653b8edd5229e73f19aa89b54e5df74c Implement context menu with: directions, add note, describe, centre. --- diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 085b615c7..8964cef1d 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -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(''); diff --git a/app/assets/stylesheets/leaflet-all.scss b/app/assets/stylesheets/leaflet-all.scss index 10ad2607a..82312e5c2 100644 --- a/app/assets/stylesheets/leaflet-all.scss +++ b/app/assets/stylesheets/leaflet-all.scss @@ -1,6 +1,7 @@ /* *= require leaflet *= require leaflet.locationfilter + *= require leaflet.contextmenu */ /* Override to serve images through the asset pipeline. */