modules/ui/sections/map_style_options.js (76 lines of code) (raw):
import { t } from '../../core/localizer';
import { uiTooltip } from '../tooltip';
import { uiSection } from '../section';
export function uiSectionMapStyleOptions(context) {
var section = uiSection('fill-area', context)
.label(t.html('map_data.style_options'))
.disclosureContent(renderDisclosureContent)
.expandedByDefault(false);
function renderDisclosureContent(selection) {
var container = selection.selectAll('.layer-fill-list')
.data([0]);
container.enter()
.append('ul')
.attr('class', 'layer-list layer-fill-list')
.merge(container)
.call(drawListItems, context.map().areaFillOptions, 'radio', 'area_fill', setFill, isActiveFill);
var container2 = selection.selectAll('.layer-visual-diff-list')
.data([0]);
container2.enter()
.append('ul')
.attr('class', 'layer-list layer-visual-diff-list')
.merge(container2)
.call(drawListItems, ['highlight_edits'], 'checkbox', 'visual_diff', toggleHighlightEdited, function() {
return context.surface().classed('highlight-edited');
});
}
function drawListItems(selection, data, type, name, change, active) {
var items = selection.selectAll('li')
.data(data);
// Exit
items.exit()
.remove();
// Enter
var enter = items.enter()
.append('li')
.call(uiTooltip()
.title(function(d) {
return t.html(name + '.' + d + '.tooltip');
})
.keys(function(d) {
var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
if (d === 'highlight_edits') key = t('map_data.highlight_edits.key');
return key ? [key] : null;
})
.placement('top')
);
var label = enter
.append('label');
label
.append('input')
.attr('type', type)
.attr('name', name)
.on('change', change);
label
.append('span')
.html(function(d) { return t.html(name + '.' + d + '.description'); });
// Update
items = items
.merge(enter);
items
.classed('active', active)
.selectAll('input')
.property('checked', active)
.property('indeterminate', false);
}
function isActiveFill(d) {
return context.map().activeAreaFill() === d;
}
function toggleHighlightEdited(d3_event) {
d3_event.preventDefault();
context.map().toggleHighlightEdited();
}
function setFill(d3_event, d) {
context.map().activeAreaFill(d);
}
context.map()
.on('changeHighlighting.ui_style, changeAreaFill.ui_style', section.reRender);
return section;
}