in modules/ui/fields/radio.js [77:190]
function structureExtras(selection, tags) {
var selected = selectedKey() || tags.layer !== undefined;
var type = context.presets().field(selected);
var layer = context.presets().field('layer');
var showLayer = (selected === 'bridge' || selected === 'tunnel' || tags.layer !== undefined);
var extrasWrap = selection.selectAll('.structure-extras-wrap')
.data(selected ? [0] : []);
extrasWrap.exit()
.remove();
extrasWrap = extrasWrap.enter()
.append('div')
.attr('class', 'structure-extras-wrap')
.merge(extrasWrap);
var list = extrasWrap.selectAll('ul')
.data([0]);
list = list.enter()
.append('ul')
.attr('class', 'rows')
.merge(list);
// Type
if (type) {
if (!typeField || typeField.id !== selected) {
typeField = uiField(context, type, _entity, { wrap: false })
.on('change', changeType);
}
typeField.tags(tags);
} else {
typeField = null;
}
var typeItem = list.selectAll('.structure-type-item')
.data(typeField ? [typeField] : [], function(d) { return d.id; });
// Exit
typeItem.exit()
.remove();
// Enter
var typeEnter = typeItem.enter()
.insert('li', ':first-child')
.attr('class', 'labeled-input structure-type-item');
typeEnter
.append('span')
.attr('class', 'label structure-label-type')
.attr('for', 'preset-input-' + selected)
.text(t('inspector.radio.structure.type'));
typeEnter
.append('div')
.attr('class', 'structure-input-type-wrap');
// Update
typeItem = typeItem
.merge(typeEnter);
if (typeField) {
typeItem.selectAll('.structure-input-type-wrap')
.call(typeField.render);
}
// Layer
if (layer && showLayer) {
if (!layerField) {
layerField = uiField(context, layer, _entity, { wrap: false })
.on('change', changeLayer);
}
layerField.tags(tags);
field.keys = utilArrayUnion(field.keys, ['layer']);
} else {
layerField = null;
field.keys = field.keys.filter(function(k) { return k !== 'layer'; });
}
var layerItem = list.selectAll('.structure-layer-item')
.data(layerField ? [layerField] : []);
// Exit
layerItem.exit()
.remove();
// Enter
var layerEnter = layerItem.enter()
.append('li')
.attr('class', 'labeled-input structure-layer-item');
layerEnter
.append('span')
.attr('class', 'label structure-label-layer')
.attr('for', 'preset-input-layer')
.text(t('inspector.radio.structure.layer'));
layerEnter
.append('div')
.attr('class', 'structure-input-layer-wrap');
// Update
layerItem = layerItem
.merge(layerEnter);
if (layerField) {
layerItem.selectAll('.structure-input-layer-wrap')
.call(layerField.render);
}
}