diff --git a/js/id/behavior/drag.js b/js/id/behavior/drag.js index 012e08d34..c1d877d1c 100644 --- a/js/id/behavior/drag.js +++ b/js/id/behavior/drag.js @@ -24,7 +24,7 @@ iD.behavior.drag = function() { origin = null, selector = '', filter = null, - event_, target; + event_, target, surface; event.of = function(thiz, argumentz) { return function(e1) { @@ -62,14 +62,13 @@ iD.behavior.drag = function() { if (touchId === null) d3_eventCancel(); function point() { - var p = target.parentNode; + var p = target.parentNode || surface; return touchId !== null ? d3.touches(p).filter(function(p) { return p.identifier === touchId; })[0] : d3.mouse(p); } function dragmove() { - if (!target.parentNode) return dragend(); var p = point(), dx = p[0] - origin_[0], @@ -170,5 +169,11 @@ iD.behavior.drag = function() { return drag; }; + drag.surface = function() { + if (!arguments.length) return surface; + surface = arguments[0]; + return drag; + }; + return d3.rebind(drag, event, "on"); }; diff --git a/js/id/behavior/drag_node.js b/js/id/behavior/drag_node.js index 1d1afcc2c..0cf732b4d 100644 --- a/js/id/behavior/drag_node.js +++ b/js/id/behavior/drag_node.js @@ -148,6 +148,7 @@ iD.behavior.DragNode = function(context) { var behavior = iD.behavior.drag() .delegate("g.node, g.point, g.midpoint") + .surface(context.surface().node()) .origin(origin) .on('start', start) .on('move', move)