modules/ui/issues_info.js (75 lines of code) (raw):

import { event as d3_event, select as d3_select } from 'd3-selection'; import { svgIcon } from '../svg/icon'; import { t } from '../util/locale'; import { tooltip } from '../util/tooltip'; export function uiIssuesInfo(context) { var warningsItem = { id: 'warnings', count: 0, iconID: 'iD-icon-alert', descriptionID: 'issues.warnings_and_errors' }; var resolvedItem = { id: 'resolved', count: 0, iconID: 'iD-icon-apply', descriptionID: 'issues.user_resolved_issues' }; function update(selection) { var shownItems = []; if (context.storage('validate-what') === 'all') { var liveIssues = context.validator().getIssues({ what: context.storage('validate-what') || 'edited', where: context.storage('validate-where') || 'all' }); if (liveIssues.length) { warningsItem.count = liveIssues.length; shownItems.push(warningsItem); } var resolvedIssues = context.validator().getResolvedIssues(); if (resolvedIssues.length) { resolvedItem.count = resolvedIssues.length; shownItems.push(resolvedItem); } } var chips = selection.selectAll('.chip') .data(shownItems, function(d) { return d.id; }); chips.exit().remove(); var enter = chips.enter() .append('a') .attr('class', function(d) { return 'chip ' + d.id + '-count'; }) .attr('href', '#') .attr('tabindex', -1) .each(function(d) { var chipSelection = d3_select(this); var tooltipBehavior = tooltip() .placement('top') .title(t(d.descriptionID)); chipSelection .call(tooltipBehavior) .on('click', function() { d3_event.preventDefault(); tooltipBehavior.hide(d3_select(this)); // open the Issues pane context.ui().togglePanes(d3_select('.map-panes .issues-pane')); }); chipSelection.call(svgIcon('#' + d.iconID)); }); enter.append('span') .attr('class', 'count'); enter.merge(chips) .selectAll('span.count') .text(function(d) { return d.count.toString(); }); } return function(selection) { update(selection); context.validator().on('validated.infobox', function() { update(selection); }); }; }