diff --git a/js/id/id.js b/js/id/id.js index e21d83119..2f52c2f9c 100644 --- a/js/id/id.js +++ b/js/id/id.js @@ -205,7 +205,7 @@ window.iD = function () { context.background = function() { return background; }; /* Features */ - var features = iD.Features(context); + var features = iD.Features(); context.features = function() { return features; }; context.hasHiddenConnections = function(id) { var graph = history.graph(), diff --git a/js/id/modes/select.js b/js/id/modes/select.js index 5acee7a84..be2746ba8 100644 --- a/js/id/modes/select.js +++ b/js/id/modes/select.js @@ -137,9 +137,16 @@ iD.modes.Select = function(context, selectedIDs) { .call(keybinding); function selectElements() { - context.surface() - .selectAll(iD.util.entityOrMemberSelector(selectedIDs, context.graph())) - .classed('selected', true); + var selection = context.surface() + .selectAll(iD.util.entityOrMemberSelector(selectedIDs, context.graph())); + + if (selection.empty()) { + // Exit mode if selected DOM elements have disappeared.. + context.enter(iD.modes.Browse(context)); + } else { + selection + .classed('selected', true); + } } context.map().on('drawn.select', selectElements); diff --git a/js/id/renderer/features.js b/js/id/renderer/features.js index 7fe20b809..400932594 100644 --- a/js/id/renderer/features.js +++ b/js/id/renderer/features.js @@ -1,4 +1,4 @@ -iD.Features = function(context) { +iD.Features = function() { var major_roads = { 'motorway': true, 'motorway_link': true, @@ -378,21 +378,13 @@ iD.Features = function(context) { }; features.filter = function(d, resolver) { - var selected = context.selectedIDs(), - result = []; + var result = []; if (!_hidden.length) { return d; } else { for (var i = 0, imax = d.length; i !== imax; i++) { - if (features.isHidden(d[i], resolver)) { - for (var j = 0, jmax = selected.length; j !== jmax; j++) { - if (selected[j] === d[i].id) { - context.enter(iD.modes.Browse(context)); - break; - } - } - } else { + if (!features.isHidden(d[i], resolver)) { result.push(d[i]); } }