modules/ui/sections/map_features.js (97 lines of code) (raw):

import { t } from '../../core/localizer'; import { uiTooltip } from '../tooltip'; import { uiSection } from '../section'; export function uiSectionMapFeatures(context) { var _features = context.features().keys(); var section = uiSection('map-features', context) .label(t.html('map_data.map_features')) .disclosureContent(renderDisclosureContent) .expandedByDefault(false); function renderDisclosureContent(selection) { var container = selection.selectAll('.layer-feature-list-container') .data([0]); var containerEnter = container.enter() .append('div') .attr('class', 'layer-feature-list-container'); containerEnter .append('ul') .attr('class', 'layer-list layer-feature-list'); var footer = containerEnter .append('div') .attr('class', 'feature-list-links section-footer'); footer .append('a') .attr('class', 'feature-list-link') .attr('href', '#') .html(t.html('issues.disable_all')) .on('click', function(d3_event) { d3_event.preventDefault(); context.features().disableAll(); }); footer .append('a') .attr('class', 'feature-list-link') .attr('href', '#') .html(t.html('issues.enable_all')) .on('click', function(d3_event) { d3_event.preventDefault(); context.features().enableAll(); }); // Update container = container .merge(containerEnter); container.selectAll('.layer-feature-list') .call(drawListItems, _features, 'checkbox', 'feature', clickFeature, showsFeature); } 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) { var tip = t.html(name + '.' + d + '.tooltip'); if (autoHiddenFeature(d)) { var msg = showsLayer('osm') ? t.html('map_data.autohidden') : t.html('map_data.osmhidden'); tip += '<div>' + msg + '</div>'; } return tip; }) .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', autoHiddenFeature); } function autoHiddenFeature(d) { return context.features().autoHidden(d); } function showsFeature(d) { return context.features().enabled(d); } function clickFeature(d3_event, d) { context.features().toggle(d); } function showsLayer(id) { var layer = context.layers().layer(id); return layer && layer.enabled(); } // add listeners context.features() .on('change.map_features', section.reRender); return section; }