Faster Feature List (fixes #1604)

This commit is contained in:
John Firebaugh
2013-06-18 15:19:04 -07:00
parent 21fa8c9c5d
commit e6cc20efb5
2 changed files with 23 additions and 28 deletions

View File

@@ -47,7 +47,7 @@ iD.Map = function(context) {
var dataLayer = supersurface.append('div')
.attr('class', 'layer-layer layer-data');
surface = dataLayer.append('svg')
map.surface = surface = dataLayer.append('svg')
.on('mousedown.zoom', function() {
if (d3.event.button == 2) {
d3.event.stopPropagation();
@@ -88,7 +88,6 @@ iD.Map = function(context) {
});
map.size(selection.size());
map.surface = surface;
labels.supersurface(supersurface);
mouse = iD.util.fastMouse(supersurface.node());

View File

@@ -35,8 +35,6 @@ iD.ui.FeatureList = function(context) {
var list = listWrap.append('div')
.attr('class', 'feature-list fillL cf');
drawList();
context.history()
.on('change.feature-list', drawList);
@@ -50,40 +48,38 @@ iD.ui.FeatureList = function(context) {
}
function features() {
var result = [],
var entities = {},
result = [],
graph = context.graph(),
q = search.property('value').toLowerCase();
if (!context.map().editable()) {
return result;
}
function addEntity(entity) {
if (entity.id in entities || result.length > 200)
return;
var entities = context.intersects(context.extent());
for (var i = 0; i < entities.length; i++) {
var entity = entities[i];
entities[entity.id] = true;
if (entity.geometry(graph) === 'vertex')
continue;
if (context.surface().selectAll(iD.util.entityOrMemberSelector([entity.id], graph)).empty())
continue;
var preset = context.presets().match(entity, context.graph()),
var preset = context.presets().match(entity, graph),
name = iD.util.displayName(entity) || '';
if (q && name.toLowerCase().indexOf(q) === -1 &&
preset.name().toLowerCase().indexOf(q) === -1)
continue;
if (!q || name.toLowerCase().indexOf(q) >= 0 ||
preset.name().toLowerCase().indexOf(q) >= 0) {
result.push({
entity: entity,
geometry: context.geometry(entity.id),
preset: preset,
name: name
});
}
result.push({
entity: entity,
geometry: context.geometry(entity.id),
preset: preset,
name: name
graph.parentRelations(entity).forEach(function(parent) {
addEntity(parent);
});
}
if (result.length > 200)
break;
var visible = context.surface().selectAll('.point, .line, .area')[0];
for (var i = 0; i < visible.length && result.length <= 200; i++) {
addEntity(visible[i].__data__);
}
return result;