diff --git a/js/id/behavior/drag.js b/js/id/behavior/drag.js index fcf31fb14..29f033c1c 100644 --- a/js/id/behavior/drag.js +++ b/js/id/behavior/drag.js @@ -22,7 +22,8 @@ iD.behavior.drag = function () { var event = d3.dispatch("start", "move", "end"), origin = null, - selector = ''; + selector = '', + filter = null; event.of = function(thiz, argumentz) { return function(e1) { @@ -119,7 +120,8 @@ iD.behavior.drag = function () { var root = this, target = d3.event.target; for (; target && target !== root; target = target.parentNode) { - if (target[matchesSelector](selector)) { + if (target[matchesSelector](selector) && + (!filter || filter(target.__data__))) { return mousedown.call(target, target.__data__); } } @@ -141,6 +143,12 @@ iD.behavior.drag = function () { return drag; }; + drag.filter = function(_) { + if (!arguments.length) return origin; + filter = _; + return drag; + }; + drag.origin = function (_) { if (!arguments.length) return origin; origin = _; diff --git a/js/id/behavior/drag_way.js b/js/id/behavior/drag_way.js index e0bff5caf..40709ee07 100644 --- a/js/id/behavior/drag_way.js +++ b/js/id/behavior/drag_way.js @@ -4,6 +4,9 @@ iD.behavior.DragWay = function(mode) { return iD.behavior.drag() .delegate('.casing, .stroke, .area') + .filter(function(d) { + return d && d.id === mode.entity.id; + }) .origin(function(entity) { return projection(entity.nodes[0].loc); })