modules/ui/commit_warnings.js (76 lines of code) (raw):
import { utilEntityOrMemberSelector } from '@id-sdk/util';
import { t } from '../core/localizer';
import { svgIcon } from '../svg/icon';
import { uiTooltip } from './tooltip';
export function uiCommitWarnings(context) {
function commitWarnings(selection) {
var issuesBySeverity = context.validator()
.getIssuesBySeverity({ what: 'edited', where: 'all', includeDisabledRules: true });
for (var severity in issuesBySeverity) {
var issues = issuesBySeverity[severity];
if (severity !== 'error') { // exclude 'fixme' and similar - #8603
issues = issues.filter(function(issue) { return issue.type !== 'help_request'; });
}
var section = severity + '-section';
var issueItem = severity + '-item';
var container = selection.selectAll('.' + section)
.data(issues.length ? [0] : []);
container.exit()
.remove();
var containerEnter = container.enter()
.append('div')
.attr('class', 'modal-section ' + section + ' fillL2');
containerEnter
.append('h3')
.html(severity === 'warning' ? t.html('commit.warnings') : t.html('commit.errors'));
containerEnter
.append('ul')
.attr('class', 'changeset-list');
container = containerEnter
.merge(container);
var items = container.select('ul').selectAll('li')
.data(issues, function(d) { return d.key; });
items.exit()
.remove();
var itemsEnter = items.enter()
.append('li')
.attr('class', issueItem);
var buttons = itemsEnter
.append('button')
.on('mouseover', function(d3_event, d) {
if (d.entityIds) {
context.surface().selectAll(
utilEntityOrMemberSelector(
d.entityIds,
context.graph()
)
).classed('hover', true);
}
})
.on('mouseout', function() {
context.surface().selectAll('.hover')
.classed('hover', false);
})
.on('click', function(d3_event, d) {
context.validator().focusIssue(d);
});
buttons
.call(svgIcon('#iD-icon-alert', 'pre-text'));
buttons
.append('strong')
.attr('class', 'issue-message');
buttons.filter(function(d) { return d.tooltip; })
.call(uiTooltip()
.title(function(d) { return d.tooltip; })
.placement('top')
);
items = itemsEnter
.merge(items);
items.selectAll('.issue-message')
.html(function(d) {
return d.message(context);
});
}
}
return commitWarnings;
}