From 84ba112ff49a171c531dfc9bb053d9516e35f6bb Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Fri, 7 Oct 2016 15:28:16 -0400 Subject: [PATCH] Rebind clickhandler in update selection (bc it uses `wrap` selection) --- modules/ui/raw_member_editor.js | 39 ++++++------- modules/ui/raw_membership_editor.js | 87 ++++++++++++++++------------- 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/modules/ui/raw_member_editor.js b/modules/ui/raw_member_editor.js index 6dbfda20b..2a99b28d9 100644 --- a/modules/ui/raw_member_editor.js +++ b/modules/ui/raw_member_editor.js @@ -94,28 +94,29 @@ export function uiRawMemberEditor(context) { .attr('class', 'member-row form-field') .classed('member-incomplete', function(d) { return !d.member; }); - enter.each(function(d) { - if (d.member) { - var label = d3.select(this).append('label') - .attr('class', 'form-label') - .append('a') - .attr('href', '#') - .on('click', selectMember); + enter + .each(function(d) { + if (d.member) { + var label = d3.select(this).append('label') + .attr('class', 'form-label') + .append('a') + .attr('href', '#') + .on('click', selectMember); - label.append('span') - .attr('class', 'member-entity-type') - .text(function(d) { return context.presets().match(d.member, context.graph()).name(); }); + label.append('span') + .attr('class', 'member-entity-type') + .text(function(d) { return context.presets().match(d.member, context.graph()).name(); }); - label.append('span') - .attr('class', 'member-entity-name') - .text(function(d) { return utilDisplayName(d.member); }); + label.append('span') + .attr('class', 'member-entity-name') + .text(function(d) { return utilDisplayName(d.member); }); - } else { - d3.select(this).append('label') - .attr('class', 'form-label') - .text(t('inspector.incomplete')); - } - }); + } else { + d3.select(this).append('label') + .attr('class', 'form-label') + .text(t('inspector.incomplete')); + } + }); enter .append('input') diff --git a/modules/ui/raw_membership_editor.js b/modules/ui/raw_membership_editor.js index ed43a0fe4..41e8179b9 100644 --- a/modules/ui/raw_membership_editor.js +++ b/modules/ui/raw_membership_editor.js @@ -47,7 +47,6 @@ export function uiRawMembershipEditor(context) { } else { var relation = coreRelation(); - context.perform( actionAddEntity(relation), actionAddMember(relation.id, { id: id, type: context.entity(id).type, role: role }), @@ -120,7 +119,7 @@ export function uiRawMembershipEditor(context) { context.graph().parentRelations(entity).forEach(function(relation) { relation.members.forEach(function(member, index) { if (member.id === entity.id) { - memberships.push({relation: relation, member: member, index: index}); + memberships.push({ relation: relation, member: member, index: index }); } }); }); @@ -203,59 +202,68 @@ export function uiRawMembershipEditor(context) { } - if (showBlank) { - var newrow = list.selectAll('.member-row-new') - .data([0]); + var newrow = list.selectAll('.member-row-new') + .data(showBlank ? [0] : []); - enter = newrow.enter() - .append('li') - .attr('class', 'member-row member-row-new form-field'); + newrow.exit() + .remove(); - enter - .append('input') - .attr('type', 'text') - .attr('class', 'member-entity-input') - .call(d3combobox() - .minItems(1) - .fetcher(function(value, callback) { callback(relations(value)); }) - .on('accept', function(d) { - addMembership(d, list.selectAll('.member-row-new .member-role').property('value')); - }) - ); + enter = newrow.enter() + .append('li') + .attr('class', 'member-row member-row-new form-field'); - enter - .append('input') - .attr('class', 'member-role') - .property('type', 'text') - .attr('maxlength', 255) - .attr('placeholder', t('inspector.role')) - .on('change', changeRole); + enter + .append('input') + .attr('type', 'text') + .attr('class', 'member-entity-input'); - enter - .append('button') - .attr('tabindex', -1) - .attr('class', 'remove button-input-action member-delete minor') - .on('click', deleteMembership) - .call(svgIcon('#operation-delete')); + enter + .append('input') + .attr('class', 'member-role') + .property('type', 'text') + .attr('maxlength', 255) + .attr('placeholder', t('inspector.role')) + .on('change', changeRole); - } else { - list.selectAll('.member-row-new') - .remove(); - } + enter + .append('button') + .attr('tabindex', -1) + .attr('class', 'remove button-input-action member-delete minor') + .on('click', deleteMembership) + .call(svgIcon('#operation-delete')); + + newrow = newrow + .merge(enter); + + newrow.selectAll('.member-entity-input') + .call(d3combobox() + .minItems(1) + .fetcher(function(value, callback) { callback(relations(value)); }) + .on('accept', onAccept) + ); var addrel = wrap.selectAll('.add-relation') .data([0]); - addrel.enter() + addrel = addrel.enter() .append('button') .attr('class', 'add-relation') + .merge(addrel); + + addrel + .call(svgIcon('#icon-plus', 'light')) .on('click', function() { showBlank = true; content(wrap); list.selectAll('.member-entity-input').node().focus(); - }) - .call(svgIcon('#icon-plus', 'light')); + }); + + + function onAccept(d) { + var role = list.selectAll('.member-row-new .member-role').property('value'); + addMembership(d, role); + } function bindTypeahead(d) { @@ -289,6 +297,7 @@ export function uiRawMembershipEditor(context) { })); } + function unbind() { var row = d3.select(this);