From 00dfa8cd08288c7292f4a18526a0593c3bc2d41e Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 22 Feb 2013 14:59:32 -0500 Subject: [PATCH] Fix shift-click to select --- js/id/behavior/lasso.js | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/js/id/behavior/lasso.js b/js/id/behavior/lasso.js index 0d234d1c4..bc040fce4 100644 --- a/js/id/behavior/lasso.js +++ b/js/id/behavior/lasso.js @@ -3,18 +3,14 @@ iD.behavior.Lasso = function(context) { var behavior = function(selection) { var timeout = null, - // the position of the first mousedown - pos = null, + mouse = null, lasso; function mousedown() { if (d3.event.shiftKey === true) { - pos = [d3.event.clientX, d3.event.clientY]; - - lasso = iD.ui.Lasso().a(d3.mouse(context.surface().node())); - - context.surface().call(lasso); + mouse = d3.mouse(context.surface().node()); + lasso = null; selection .on('mousemove.lasso', mousemove) @@ -27,6 +23,11 @@ iD.behavior.Lasso = function(context) { } function mousemove() { + if (!lasso) { + lasso = iD.ui.Lasso().a(mouse); + context.surface().call(lasso); + } + lasso.b(d3.mouse(context.surface().node())); } @@ -38,24 +39,24 @@ iD.behavior.Lasso = function(context) { function mouseup() { + selection + .on('mousemove.lasso', null) + .on('mouseup.lasso', null); + + if (!lasso) return; + var extent = iD.geo.Extent( normalize(context.projection.invert(lasso.a()), context.projection.invert(lasso.b()))); lasso.close(); - selection - .on('mousemove.lasso', null) - .on('mouseup.lasso', null); + var selected = context.intersects(extent).filter(function (entity) { + return entity.type === 'node'; + }); - if (d3.event.clientX !== pos[0] || d3.event.clientY !== pos[1]) { - var selected = context.intersects(extent).filter(function (entity) { - return entity.type === 'node'; - }); - - if (selected.length) { - context.enter(iD.modes.Select(context, _.pluck(selected, 'id'))); - } + if (selected.length) { + context.enter(iD.modes.Select(context, _.pluck(selected, 'id'))); } }