- // 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 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 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({
- route: lat + ',' + lng + ';' + $('#route_to').val()
- }));
- }
-
- var context_directionsto = 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("/directions?" + querystring.stringify({
- route: $('#route_from').val() + ';' + lat + ',' + lng
- }));
- }
-
- var context_addnote = function(e){
- // 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');
- }
-
- 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,
- 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: 'Query features',
- callback: context_queryhere
- }, {
- text: 'Centre map here',
- callback: context_centrehere
- }]
- });
-
- $(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('');