mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-14 13:18:15 +02:00
Enable the issues section for multiple selected features (close #7324)
This commit is contained in:
@@ -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'; })
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user