From c0b8cd74de60dd9db0cfb92c4efdc16f6d79e672 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 13 Feb 2013 16:23:58 -0800 Subject: [PATCH] Reopen radial menu when clicking on selected entity (fixes #758) --- js/id/behavior/select.js | 6 ++++-- js/id/modes/select.js | 35 +++++++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/js/id/behavior/select.js b/js/id/behavior/select.js index 162535764..100cfcb78 100644 --- a/js/id/behavior/select.js +++ b/js/id/behavior/select.js @@ -8,9 +8,11 @@ iD.behavior.Select = function(context) { } else if (!d3.event.shiftKey) { // Avoid re-entering Select mode with same entity. - if (context.selection().length !== 1 || context.selection()[0] !== datum.id) + if (context.selection().length !== 1 || context.selection()[0] !== datum.id) { context.enter(iD.modes.Select(context, [datum.id])); - + } else { + context.mode().reselect(); + } } else if (context.selection().indexOf(datum.id) >= 0) { var selection = _.without(context.selection(), datum.id); context.enter(selection.length ? diff --git a/js/id/modes/select.js b/js/id/modes/select.js index d071d1484..9998852df 100644 --- a/js/id/modes/select.js +++ b/js/id/modes/select.js @@ -28,10 +28,31 @@ iD.modes.Select = function(context, selection, initial) { } } + function positionMenu() { + var entity = singular(); + + if (entity && entity.type === 'node') { + radialMenu.center(context.projection(entity.loc)); + } else { + radialMenu.center(d3.mouse(context.surface().node())); + } + } + + function showMenu() { + context.surface() + .call(radialMenu.close) + .call(radialMenu); + } + mode.selection = function() { return selection; }; + mode.reselect = function() { + positionMenu(); + showMenu(); + }; + mode.enter = function() { var entity = singular(); @@ -166,18 +187,16 @@ iD.modes.Select = function(context, selection, initial) { .classed('selected', true); radialMenu = iD.ui.RadialMenu(operations); - var showMenu = d3.event && !initial; + var show = d3.event && !initial; - if (showMenu) { - if (entity && entity.type === 'node') { - radialMenu.center(context.projection(entity.loc)); - } else { - radialMenu.center(d3.mouse(context.surface().node())); - } + if (show) { + positionMenu(); } timeout = window.setTimeout(function() { - if (showMenu) context.surface().call(radialMenu); + if (show) { + showMenu(); + } context.surface() .on('dblclick.select', dblclick);