From: Richard Fairhurst Date: Sat, 8 Mar 2014 15:17:22 +0000 (+0000) Subject: Put marker at exact position user dragged it to X-Git-Tag: live~4282^2~27 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/9a05a7ba490cbf2ed7fdc50ef5ae203dc5cbfd18 Put marker at exact position user dragged it to --- diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 0a11b4899..178ed7611 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -359,8 +359,10 @@ $(document).ready(function () { $("#map").on('dragend dragover',function(e) { e.preventDefault(); }); $("#map").on('drop',function(e) { OSM.routing.handleDrop(e); e.preventDefault(); }); $(".routing_marker").on('dragstart',function(e) { - e.originalEvent.dataTransfer.effectAllowed = 'move'; + e.originalEvent.dataTransfer.effectAllowed = 'move'; e.originalEvent.dataTransfer.setData('id', this.id); + e.originalEvent.dataTransfer.setData('offsetX', e.originalEvent.target.width/2 - (e.originalEvent.x-e.target.x)); + e.originalEvent.dataTransfer.setData('offsetY', e.originalEvent.target.height - (e.originalEvent.y-e.target.y)); }); }); diff --git a/app/assets/javascripts/routing.js.erb b/app/assets/javascripts/routing.js.erb index 204606005..c774928b9 100644 --- a/app/assets/javascripts/routing.js.erb +++ b/app/assets/javascripts/routing.js.erb @@ -115,9 +115,12 @@ OSM.Routing=function(map,name,jqSearch) { // Drag and drop markers r.handleDrop=function(e) { - var id=e.originalEvent.dataTransfer.getData('id'); - var ll=r.map.mouseEventToLatLng(e.originalEvent); - // *** ^^^ this is slightly off - we need to work out the latLng of the tip + var oe=e.originalEvent; + var id=oe.dataTransfer.getData('id'); + var pt=L.DomEvent.getMousePosition(oe,map.getContainer()); // co-ordinates of the mouse pointer at present + pt.x+=Number(oe.dataTransfer.getData('offsetX')); + pt.y+=Number(oe.dataTransfer.getData('offsetY')); + var ll=map.containerPointToLatLng(pt); r.createMarker(ll,id); r.setNumericInput(ll,id); r.requestRoute(true, false);