From d79b61894714d3c026cf239e1ee91f9aff02bd2b Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 5 Jun 2013 10:20:00 -0700 Subject: [PATCH] Optimize feature list --- js/id/renderer/map.js | 1 + js/id/ui/feature_list.js | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/js/id/renderer/map.js b/js/id/renderer/map.js index 7f0a2fa15..628c1fd0d 100644 --- a/js/id/renderer/map.js +++ b/js/id/renderer/map.js @@ -151,6 +151,7 @@ iD.Map = function(context) { function editOff() { surface.selectAll('.layer *').remove(); + dispatch.drawn(map); } function zoomPan() { diff --git a/js/id/ui/feature_list.js b/js/id/ui/feature_list.js index d584fec35..8a6646896 100644 --- a/js/id/ui/feature_list.js +++ b/js/id/ui/feature_list.js @@ -38,23 +38,30 @@ iD.ui.FeatureList = function(context) { .on('change.feature-list', drawList); context.map() - .on('move', drawList); + .on('drawn', drawList); function features() { var result = [], graph = context.graph(), q = search.property('value').toLowerCase(); - context.intersects(context.extent()).forEach(function(entity) { + if (!context.map().editable()) { + return result; + } + + var entities = context.intersects(context.extent()); + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; + + if (entity.geometry(graph) === 'vertex') + continue; + var preset = context.presets().match(entity, context.graph()), name = iD.util.displayName(entity) || ''; - if (entity.geometry(graph) === 'vertex') - return; - if (q && name.toLowerCase().indexOf(q) === -1 && preset.name().toLowerCase().indexOf(q) === -1) - return; + continue; result.push({ entity: entity, @@ -62,7 +69,10 @@ iD.ui.FeatureList = function(context) { preset: preset, name: name }); - }); + + if (result.length > 200) + break; + } return result; }