mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-19 23:14:47 +02:00
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.
This commit is contained in:
+1
-6
@@ -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.
|
||||
|
||||
Vendored
+1
-7
@@ -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": {
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user