From 398127974793b44d64985b01c3e70399b4be0a63 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 30 May 2013 11:44:39 -0700 Subject: [PATCH] Fix member list redraws d3 does not store the keys produced by a data bind -- it recomputes them on the fly. The key function that was used referred to `entity`, with the intent that rows referring to the previous entity would wind up in the exit selection. But since the key is recomputed for the existing bindings, and at that point `entity` refers to the new entity, that portion of the key effectively always matched. While here, fix deletion of incomplete members (don't know what the geometry is, so can't do geometry-specific annotations). Fixes #1548. --- data/core.yaml | 7 +------ dist/locales/en.json | 8 +------- js/id/ui/raw_member_editor.js | 26 ++++++++++++++++---------- js/id/ui/raw_membership_editor.js | 2 +- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/data/core.yaml b/data/core.yaml index d4be9bb25..0a065c096 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -69,12 +69,7 @@ en: multiple: "Deleted {n} objects." incomplete_relation: This feature can't be deleted because it hasn't been fully downloaded. delete_member: - annotation: - point: Removed a point from a relation. - vertex: Removed a node from a relation. - line: Removed a line from a relation. - area: Removed an area from a relation. - relation: Removed a relation from a relation. + annotation: Removed a member from a relation. connect: annotation: point: Connected a way to a point. diff --git a/dist/locales/en.json b/dist/locales/en.json index 0627d9aea..0320566f5 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -91,13 +91,7 @@ "incomplete_relation": "This feature can't be deleted because it hasn't been fully downloaded." }, "delete_member": { - "annotation": { - "point": "Removed a point from a relation.", - "vertex": "Removed a node from a relation.", - "line": "Removed a line from a relation.", - "area": "Removed an area from a relation.", - "relation": "Removed a relation from a relation." - } + "annotation": "Removed a member from a relation." }, "connect": { "annotation": { diff --git a/js/id/ui/raw_member_editor.js b/js/id/ui/raw_member_editor.js index 003e39ea5..71401ea36 100644 --- a/js/id/ui/raw_member_editor.js +++ b/js/id/ui/raw_member_editor.js @@ -2,20 +2,20 @@ iD.ui.RawMemberEditor = function(context) { var id; function selectMember(d) { - context.enter(iD.modes.Select(context, [d.member.id])); + context.enter(iD.modes.Select(context, [d.id])); } function changeRole(d) { var role = d3.select(this).property('value'); context.perform( - iD.actions.ChangeMember(id, _.extend({}, d.member, {role: role}), d.index), + iD.actions.ChangeMember(d.relation.id, _.extend({}, d.id, {role: role}), d.index), t('operations.change_role.annotation')); } function deleteMember(d) { context.perform( - iD.actions.DeleteMember(id, d.index), - t('operations.delete_member.annotation.' + context.geometry(d.member.id))); + iD.actions.DeleteMember(d.relation.id, d.index), + t('operations.delete_member.annotation')); } function rawMemberEditor(selection) { @@ -23,7 +23,13 @@ iD.ui.RawMemberEditor = function(context) { memberships = []; entity.members.forEach(function(member, index) { - memberships.push({member: member, index: index, entity: context.hasEntity(member.id)}); + memberships.push({ + index: index, + id: member.id, + role: member.role, + relation: entity, + member: context.hasEntity(member.id) + }); }); selection.call(iD.ui.Disclosure() @@ -46,13 +52,13 @@ iD.ui.RawMemberEditor = function(context) { .attr('class', 'member-list'); var $items = $list.selectAll('li') - .data(memberships, function(d) { return iD.Entity.key(entity) + ',' + d.index; }); + .data(memberships, function(d) { return iD.Entity.key(d.relation) + ',' + d.index; }); var $enter = $items.enter().append('li') .attr('class', 'member-row form-field'); $enter.each(function(d) { - if (d.entity) { + if (d.member) { var $label = d3.select(this).append('label') .attr('class', 'form-label') .append('a') @@ -61,11 +67,11 @@ iD.ui.RawMemberEditor = function(context) { $label.append('span') .attr('class', 'member-entity-type') - .text(function(d) { return context.presets().match(d.entity, context.graph()).name(); }); + .text(function(d) { return context.presets().match(d.member, context.graph()).name(); }); $label.append('span') .attr('class', 'member-entity-name') - .text(function(d) { return iD.util.localeName(d.entity); }); + .text(function(d) { return iD.util.localeName(d.member); }); } else { d3.select(this).append('label') @@ -79,7 +85,7 @@ iD.ui.RawMemberEditor = function(context) { .property('type', 'text') .attr('maxlength', 255) .attr('placeholder', t('inspector.role')) - .property('value', function(d) { return d.member.role; }) + .property('value', function(d) { return d.role; }) .on('change', changeRole); $enter.append('button') diff --git a/js/id/ui/raw_membership_editor.js b/js/id/ui/raw_membership_editor.js index 8a6652e99..c23baf71a 100644 --- a/js/id/ui/raw_membership_editor.js +++ b/js/id/ui/raw_membership_editor.js @@ -15,7 +15,7 @@ iD.ui.RawMembershipEditor = function(context) { function deleteMembership(d) { context.perform( iD.actions.DeleteMember(d.relation.id, d.index), - t('operations.delete_member.annotation.' + context.geometry(d.member.id))); + t('operations.delete_member.annotation')); } function rawMembershipEditor(selection) {