Enable the issues section for multiple selected features (close #7324)

This commit is contained in:
Quincy Morgan
2020-02-03 12:17:14 -05:00
parent e7c3ba0fd7
commit b4bc5305a1
3 changed files with 36 additions and 17 deletions
+25 -2
View File
@@ -186,10 +186,28 @@ export function coreValidator(context) {
'disconnected_way', 'impossible_oneway'
];
validator.getEntityIssues = function(entityID, options) {
// returns the issues that the given entity IDs have in common, matching the given options
validator.getSharedEntityIssues = function(entityIDs, options) {
var cache = _headCache;
var issueIDs = cache.issuesByEntityID[entityID];
var issueIDs;
// gather the issues that are common to all the entities
entityIDs.forEach(function(entityID) {
var entityIssueIDs = cache.issuesByEntityID[entityID];
if (!entityIssueIDs) return;
if (!issueIDs) {
issueIDs = new Set(entityIssueIDs);
} else {
for (let elem of issueIDs) {
if (!entityIssueIDs.has(elem)) {
issueIDs.delete(elem);
}
}
}
});
if (!issueIDs) return [];
var opts = options || {};
@@ -226,6 +244,11 @@ export function coreValidator(context) {
};
validator.getEntityIssues = function(entityID, options) {
return validator.getSharedEntityIssues([entityID], options);
};
validator.getRuleKeys = function() {
return Object.keys(_rules)
.filter(function(key) { return key !== 'maprules'; })
+2 -7
View File
@@ -109,7 +109,6 @@ export function uiEntityEditor(context) {
},
{
klass: 'preset-list-item inspector-inner',
shouldHave: true,
update: function(section) {
section.classed('mixed-types', _activePresets.length > 1);
@@ -227,16 +226,14 @@ export function uiEntityEditor(context) {
},
{
klass: 'entity-issues',
shouldHave: singularEntityID,
update: function(section) {
section
.call(entityIssues
.entityID(singularEntityID)
.entityIDs(_entityIDs)
);
}
}, {
klass: 'preset-editor',
shouldHave: true,
update: function(section) {
section
.call(presetEditor
@@ -248,7 +245,6 @@ export function uiEntityEditor(context) {
}
}, {
klass: 'raw-tag-editor inspector-inner',
shouldHave: true,
update: function(section) {
section
.call(rawTagEditor
@@ -278,7 +274,6 @@ export function uiEntityEditor(context) {
}
}, {
klass: 'key-trap-wrap',
shouldHave: true,
create: function(sectionEnter) {
sectionEnter
.append('input')
@@ -297,7 +292,7 @@ export function uiEntityEditor(context) {
];
sectionInfos = sectionInfos.filter(function(info) {
return info.shouldHave;
return info.shouldHave === undefined || info.shouldHave;
});
var sections = body.selectAll('.section')
+9 -8
View File
@@ -3,13 +3,14 @@ import { event as d3_event, select as d3_select } from 'd3-selection';
import { svgIcon } from '../svg/icon';
import { t } from '../util/locale';
import { uiDisclosure } from './disclosure';
import { utilArrayIdentical } from '../util/array';
import { utilHighlightEntities } from '../util';
export function uiEntityIssues(context) {
var _selection = d3_select(null);
var _activeIssueID;
var _entityID;
var _entityIDs = [];
// Refresh on validated events
context.validator()
@@ -36,7 +37,7 @@ export function uiEntityIssues(context) {
}
function getIssues() {
return context.validator().getEntityIssues(_entityID, { includeDisabledRules: true });
return context.validator().getSharedEntityIssues(_entityIDs, { includeDisabledRules: true });
}
function makeActiveIssue(issueID) {
@@ -81,13 +82,13 @@ export function uiEntityIssues(context) {
.on('mouseover.highlight', function(d) {
// don't hover-highlight the selected entity
var ids = d.entityIds
.filter(function(e) { return e !== _entityID; });
.filter(function(e) { return _entityIDs.indexOf(e) === -1; });
utilHighlightEntities(ids, true, context);
})
.on('mouseout.highlight', function(d) {
var ids = d.entityIds
.filter(function(e) { return e !== _entityID; });
.filter(function(e) { return _entityIDs.indexOf(e) === -1; });
utilHighlightEntities(ids, false, context);
});
@@ -265,10 +266,10 @@ export function uiEntityIssues(context) {
}
entityIssues.entityID = function(val) {
if (!arguments.length) return _entityID;
if (_entityID !== val) {
_entityID = val;
entityIssues.entityIDs = function(val) {
if (!arguments.length) return _entityIDs;
if (!_entityIDs || !val || !utilArrayIdentical(_entityIDs, val)) {
_entityIDs = val;
_activeIssueID = null;
}
return entityIssues;