mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-12 16:52:50 +00:00
fix calculation of access field placeholder on multiselections
This commit is contained in:
@@ -277,55 +277,60 @@ export function uiFieldAccess(field, context) {
|
||||
utilGetSetValue(items.selectAll('.preset-input-access'), function(d) {
|
||||
return typeof tags[d] === 'string' ? tags[d] : '';
|
||||
})
|
||||
.classed('mixed', function(d) {
|
||||
return tags[d] && Array.isArray(tags[d]);
|
||||
.classed('mixed', function(accessField) {
|
||||
return tags[accessField] && Array.isArray(tags[accessField])
|
||||
|| new Set(getAllPlaceholders(tags, accessField)).size > 1;
|
||||
})
|
||||
.attr('title', function(d) {
|
||||
return tags[d] && Array.isArray(tags[d]) && tags[d].filter(Boolean).join('\n');
|
||||
.attr('title', function(accessField) {
|
||||
return tags[accessField] && Array.isArray(tags[accessField]) && tags[accessField].filter(Boolean).join('\n');
|
||||
})
|
||||
.attr('placeholder', function(d) {
|
||||
if (tags[d] && Array.isArray(tags[d])) {
|
||||
.attr('placeholder', function(accessField) {
|
||||
let placeholders = getAllPlaceholders(tags, accessField);
|
||||
if (new Set(placeholders).size === 1) {
|
||||
// all objects have the same implied access
|
||||
return placeholders[0];
|
||||
} else {
|
||||
return t('inspector.multiple_values');
|
||||
}
|
||||
if (d === 'bicycle' || d === 'motor_vehicle') {
|
||||
if (tags.vehicle && typeof tags.vehicle === 'string') {
|
||||
return tags.vehicle;
|
||||
}
|
||||
}
|
||||
if (tags.access && typeof tags.access === 'string') {
|
||||
return tags.access;
|
||||
}
|
||||
function getPlaceholdersByTag(key, placeholdersByKey) {
|
||||
if (typeof tags[key] === 'string') {
|
||||
if (placeholdersByKey[tags[key]] &&
|
||||
placeholdersByKey[tags[key]][d]) {
|
||||
return placeholdersByKey[tags[key]][d];
|
||||
}
|
||||
} else {
|
||||
var impliedAccesses = tags[key].filter(Boolean).map(function(val) {
|
||||
return placeholdersByKey[val] && placeholdersByKey[val][d];
|
||||
}).filter(Boolean);
|
||||
});
|
||||
|
||||
if (impliedAccesses.length === tags[key].length &&
|
||||
new Set(impliedAccesses).size === 1) {
|
||||
// if all the barrier values have the same implied access for this type then use that
|
||||
return impliedAccesses[0];
|
||||
}
|
||||
}
|
||||
function getAllPlaceholders(tags, accessField) {
|
||||
let allTags = tags[Symbol.for('allTags')];
|
||||
if (allTags && allTags.length > 1) {
|
||||
// multi selection
|
||||
const placeholders = [];
|
||||
allTags.forEach(tags => {
|
||||
placeholders.push(getPlaceholder(tags, accessField));
|
||||
});
|
||||
return placeholders;
|
||||
} else {
|
||||
return [getPlaceholder(tags, accessField)];
|
||||
}
|
||||
}
|
||||
|
||||
function getPlaceholder(tags, accessField) {
|
||||
if (tags[accessField]) {
|
||||
return tags[accessField];
|
||||
}
|
||||
if (tags.vehicle && (accessField === 'bicycle' || accessField === 'motor_vehicle')) {
|
||||
return tags.vehicle;
|
||||
}
|
||||
if (tags.access) {
|
||||
return tags.access;
|
||||
}
|
||||
for (const key in placeholdersByTag) {
|
||||
if (tags[key]) {
|
||||
const impliedAccess = getPlaceholdersByTag(key, placeholdersByTag[key]);
|
||||
if (impliedAccess) {
|
||||
return impliedAccess;
|
||||
if (placeholdersByTag[key][tags[key]] &&
|
||||
placeholdersByTag[key][tags[key]][accessField]) {
|
||||
return placeholdersByTag[key][tags[key]][accessField];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (d === 'access' && !tags.barrier) {
|
||||
if (accessField === 'access' && !tags.barrier) {
|
||||
return 'yes';
|
||||
}
|
||||
return field.placeholder();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -298,6 +298,7 @@ export function utilCombinedTags(entityIDs, graph) {
|
||||
var tags = {};
|
||||
var tagCounts = {};
|
||||
var allKeys = new Set();
|
||||
var allTags = [];
|
||||
|
||||
var entities = entityIDs.map(function(entityID) {
|
||||
return graph.hasEntity(entityID);
|
||||
@@ -312,6 +313,7 @@ export function utilCombinedTags(entityIDs, graph) {
|
||||
});
|
||||
|
||||
entities.forEach(function(entity) {
|
||||
allTags.push(entity.tags);
|
||||
|
||||
allKeys.forEach(function(key) {
|
||||
|
||||
@@ -358,6 +360,7 @@ export function utilCombinedTags(entityIDs, graph) {
|
||||
});
|
||||
}
|
||||
|
||||
tags = Object.defineProperty(tags, Symbol.for('allTags'), { enumerable: false, value: allTags });
|
||||
return tags;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user