mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-16 05:49:16 +02:00
Make issue messages dynamic (close #6331)
This commit is contained in:
+2
-2
@@ -1402,8 +1402,8 @@ en:
|
||||
message: "{feature} has no tags"
|
||||
descriptive:
|
||||
message: "{feature} has no descriptive tags"
|
||||
specific:
|
||||
message: '{feature} has no "{tag}" tag'
|
||||
relation_type:
|
||||
message: "{feature} is a relation without a type"
|
||||
old_multipolygon:
|
||||
message: "{multipolygon} has misplaced tags"
|
||||
reference: "Multipolygons should be tagged on their relation, not their outer way."
|
||||
|
||||
Vendored
+2
-2
@@ -1732,8 +1732,8 @@
|
||||
"descriptive": {
|
||||
"message": "{feature} has no descriptive tags"
|
||||
},
|
||||
"specific": {
|
||||
"message": "{feature} has no \"{tag}\" tag"
|
||||
"relation_type": {
|
||||
"message": "{feature} is a relation without a type"
|
||||
}
|
||||
},
|
||||
"old_multipolygon": {
|
||||
|
||||
@@ -4,7 +4,7 @@ export function validationIssue(attrs) {
|
||||
this.type = attrs.type; // required - name of rule that created the issue (e.g. 'missing_tag')
|
||||
this.subtype = attrs.subtype; // optional - category of the issue within the type (e.g. 'relation_type' under 'missing_tag')
|
||||
this.severity = attrs.severity; // required - 'warning' or 'error'
|
||||
this.message = attrs.message; // required - localized string
|
||||
this.message = attrs.message; // required - function returning localized string
|
||||
this.reference = attrs.reference; // optional - function(selection) to render reference information
|
||||
this.entityIds = attrs.entityIds; // optional - array of IDs of entities involved in the issue
|
||||
this.loc = attrs.loc; // optional - [lon, lat] to zoom in on to see the issue
|
||||
|
||||
@@ -218,11 +218,14 @@ export default {
|
||||
var severity = Object.keys(selector).indexOf('error') > -1
|
||||
? 'error'
|
||||
: 'warning';
|
||||
var message = selector[severity];
|
||||
issues.push(new validationIssue({
|
||||
type: 'maprules',
|
||||
severity: severity,
|
||||
message: selector[severity],
|
||||
entityIds: [entity.id],
|
||||
message: function() {
|
||||
return message;
|
||||
},
|
||||
entityIds: [entity.id]
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ export function uiCommitWarnings(context) {
|
||||
|
||||
|
||||
var items = container.select('ul').selectAll('li')
|
||||
.data(issues, function(d) { return d.id; });
|
||||
.data(issues, function(d) { return d.message() + d.id; });
|
||||
|
||||
items.exit()
|
||||
.remove();
|
||||
@@ -53,7 +53,7 @@ export function uiCommitWarnings(context) {
|
||||
|
||||
itemsEnter
|
||||
.append('strong')
|
||||
.text(function(d) { return d.message; });
|
||||
.text(function(d) { return d.message(); });
|
||||
|
||||
itemsEnter.filter(function(d) { return d.tooltip; })
|
||||
.call(tooltip()
|
||||
|
||||
@@ -49,7 +49,7 @@ export function uiEntityIssues(context) {
|
||||
|
||||
|
||||
var containers = selection.selectAll('.issue-container')
|
||||
.data(issues, function(d) { return d.id; });
|
||||
.data(issues, function(d) { return d.message() + d.id; });
|
||||
|
||||
// Exit
|
||||
containers.exit()
|
||||
@@ -109,7 +109,7 @@ export function uiEntityIssues(context) {
|
||||
textEnter
|
||||
.append('span')
|
||||
.attr('class', 'issue-message')
|
||||
.text(function(d) { return d.message; });
|
||||
.text(function(d) { return d.message(); });
|
||||
|
||||
|
||||
var infoButton = labelsEnter
|
||||
|
||||
@@ -73,7 +73,7 @@ export function uiIssues(context) {
|
||||
|
||||
|
||||
var items = list.selectAll('li')
|
||||
.data(issues, function(d) { return d.id; });
|
||||
.data(issues, function(d) { return d.message() + d.id; });
|
||||
|
||||
// Exit
|
||||
items.exit()
|
||||
@@ -127,7 +127,7 @@ export function uiIssues(context) {
|
||||
textEnter
|
||||
.append('span')
|
||||
.attr('class', 'issue-message')
|
||||
.text(function(d) { return d.message; });
|
||||
.text(function(d) { return d.message(); });
|
||||
|
||||
|
||||
labelsEnter
|
||||
|
||||
@@ -89,10 +89,14 @@ export function validationAlmostJunction() {
|
||||
issues.push(new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.almost_junction.message', {
|
||||
feature: utilDisplayLabel(entity, context),
|
||||
feature2: utilDisplayLabel(edgeHighway, context)
|
||||
}),
|
||||
message: function() {
|
||||
var entity1 = context.hasEntity(this.entityIds[0]),
|
||||
entity2 = context.hasEntity(this.entityIds[2]);
|
||||
return (entity && entity2) ? t('issues.almost_junction.message', {
|
||||
feature: utilDisplayLabel(entity1, context),
|
||||
feature2: utilDisplayLabel(entity2, context)
|
||||
}) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id, node.id, edgeHighway.id],
|
||||
loc: extendableNodeInfo.node.loc,
|
||||
|
||||
@@ -65,7 +65,10 @@ export function validationCloseNodes() {
|
||||
return new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.close_nodes.message', { way: utilDisplayLabel(way, context) }),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.close_nodes.message', { way: utilDisplayLabel(entity, context) }) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [way.id, node1.id, node2.id],
|
||||
loc: node1.loc,
|
||||
|
||||
@@ -403,11 +403,6 @@ export function validationCrossingWays() {
|
||||
crossingTypeID += '_connectable';
|
||||
}
|
||||
|
||||
var messageDict = {
|
||||
feature: utilDisplayLabel(entities[0], context),
|
||||
feature2: utilDisplayLabel(entities[1], context)
|
||||
};
|
||||
|
||||
var fixes = [];
|
||||
if (connectionTags) {
|
||||
fixes.push(new validationIssueFix({
|
||||
@@ -485,7 +480,14 @@ export function validationCrossingWays() {
|
||||
return new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.crossing_ways.message', messageDict),
|
||||
message: function() {
|
||||
var entity1 = context.hasEntity(this.entityIds[0]),
|
||||
entity2 = context.hasEntity(this.entityIds[1]);
|
||||
return (entity1 && entity2) ? t('issues.crossing_ways.message', {
|
||||
feature: utilDisplayLabel(entity1, context),
|
||||
feature2: utilDisplayLabel(entity2, context)
|
||||
}) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: entities.map(function(entity) {
|
||||
return entity.id;
|
||||
|
||||
@@ -29,7 +29,6 @@ export function validationDisconnectedWay() {
|
||||
return [];
|
||||
}
|
||||
|
||||
var entityLabel = utilDisplayLabel(entity, context);
|
||||
var fixes = [];
|
||||
var entityID = entity.id;
|
||||
|
||||
@@ -84,18 +83,15 @@ export function validationDisconnectedWay() {
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
var suffix = isNewRoad(entity.id) ? '_new_road' : '';
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: (isNewRoad(entity.id)
|
||||
? t('issues.disconnected_way.highway.message_new_road', { highway: entityLabel })
|
||||
: t('issues.disconnected_way.highway.message', { highway: entityLabel })
|
||||
),
|
||||
tooltip: (isNewRoad(entity.id)
|
||||
? t('issues.disconnected_way.highway.reference_new_road')
|
||||
: t('issues.disconnected_way.highway.reference')
|
||||
),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.disconnected_way.highway.message' + suffix, { highway: utilDisplayLabel(entity, context) }) : '';
|
||||
},
|
||||
tooltip: t('issues.disconnected_way.highway.reference' + suffix),
|
||||
reference: showReference,
|
||||
entityIds: [entity.id],
|
||||
fixes: fixes
|
||||
|
||||
@@ -23,7 +23,10 @@ export function validationFixmeTag() {
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id]
|
||||
})];
|
||||
|
||||
@@ -53,11 +53,15 @@ export function validationGenericName() {
|
||||
var generic = isGenericName(entity);
|
||||
if (!generic) return [];
|
||||
|
||||
var preset = utilPreset(entity, context);
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.generic_name.message', {feature: preset.name(), name: generic}),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
if (!entity) return '';
|
||||
var preset = utilPreset(entity, context);
|
||||
return t('issues.generic_name.message', { feature: preset.name(), name: generic });
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id],
|
||||
hash: generic,
|
||||
|
||||
@@ -135,9 +135,12 @@ export function validationImpossibleOneway() {
|
||||
type: type,
|
||||
subtype: wayType,
|
||||
severity: 'warning',
|
||||
message: t('issues.impossible_oneway.' + messageID + '.message', {
|
||||
feature: utilDisplayLabel(way, context)
|
||||
}),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.impossible_oneway.' + messageID + '.message', {
|
||||
feature: utilDisplayLabel(entity, context)
|
||||
}) : '';
|
||||
},
|
||||
reference: getReference(referenceID),
|
||||
entityIds: [way.id, node.id],
|
||||
fixes: fixes
|
||||
|
||||
@@ -18,9 +18,12 @@ export function validationIncompatibleSource() {
|
||||
issues.push(new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
|
||||
feature: utilDisplayLabel(entity, context),
|
||||
}),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
|
||||
feature: utilDisplayLabel(entity, context)
|
||||
}) : '';
|
||||
},
|
||||
reference: getReference(invalidSource.id),
|
||||
entityIds: [entity.id],
|
||||
fixes: [
|
||||
|
||||
@@ -41,10 +41,14 @@ export function validationMissingRole() {
|
||||
return new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.missing_role.message', {
|
||||
member: utilDisplayLabel(way, context),
|
||||
relation: utilDisplayLabel(relation, context),
|
||||
}),
|
||||
message: function() {
|
||||
var member = context.hasEntity(this.entityIds[1]),
|
||||
relation = context.hasEntity(this.entityIds[0]);
|
||||
return (member && relation) ? t('issues.missing_role.message', {
|
||||
member: utilDisplayLabel(member, context),
|
||||
relation: utilDisplayLabel(relation, context)
|
||||
}) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [relation.id, way.id],
|
||||
data: {
|
||||
|
||||
@@ -43,30 +43,21 @@ export function validationMissingTag() {
|
||||
return [];
|
||||
}
|
||||
|
||||
var messageObj = {};
|
||||
var missingTagType;
|
||||
var subtype;
|
||||
|
||||
if (Object.keys(entity.tags).length === 0) {
|
||||
missingTagType = 'any';
|
||||
subtype = 'any';
|
||||
} else if (!hasDescriptiveTags(entity)) {
|
||||
missingTagType = 'descriptive';
|
||||
subtype = 'descriptive';
|
||||
} else if (isUntypedRelation(entity)) {
|
||||
missingTagType = 'specific';
|
||||
messageObj.tag = 'type';
|
||||
subtype = 'relation_type';
|
||||
} else if (isUnknownRoad(entity)) {
|
||||
missingTagType = 'unknown_road';
|
||||
subtype = 'highway_classification';
|
||||
}
|
||||
|
||||
if (!missingTagType) return [];
|
||||
if (!subtype) return [];
|
||||
|
||||
messageObj.feature = utilDisplayLabel(entity, context);
|
||||
|
||||
var selectFixType = missingTagType === 'unknown_road' ? 'select_road_type' : 'select_preset';
|
||||
var selectFixType = subtype === 'highway_classification' ? 'select_road_type' : 'select_preset';
|
||||
|
||||
var fixes = [
|
||||
new validationIssueFix({
|
||||
@@ -102,16 +93,21 @@ export function validationMissingTag() {
|
||||
);
|
||||
}
|
||||
|
||||
var messageID = missingTagType === 'unknown_road' ? 'unknown_road' : 'missing_tag.' + missingTagType;
|
||||
var referenceID = missingTagType === 'unknown_road' ? 'unknown_road' : 'missing_tag';
|
||||
var messageID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag.' + subtype;
|
||||
var referenceID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag';
|
||||
|
||||
var severity = (canDelete && missingTagType !== 'unknown_road') ? 'error' : 'warning';
|
||||
var severity = (canDelete && subtype !== 'highway_classification') ? 'error' : 'warning';
|
||||
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
subtype: subtype,
|
||||
severity: severity,
|
||||
message: t('issues.' + messageID + '.message', messageObj),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.' + messageID + '.message', {
|
||||
feature: utilDisplayLabel(entity, context)
|
||||
}) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id],
|
||||
fixes: fixes
|
||||
|
||||
@@ -55,7 +55,10 @@ export function validationOutdatedTags() {
|
||||
type: type,
|
||||
subtype: subtype,
|
||||
severity: 'warning',
|
||||
message: t('issues.outdated_tags.message', { feature: utilDisplayLabel(entity, context) }),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.outdated_tags.message', { feature: utilDisplayLabel(entity, context) }) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id],
|
||||
hash: JSON.stringify(tagDiff),
|
||||
@@ -124,12 +127,14 @@ export function validationOutdatedTags() {
|
||||
|
||||
if (!multipolygon || !outerWay) return [];
|
||||
|
||||
var multipolygonLabel = utilDisplayLabel(multipolygon, context);
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
subtype: 'old_multipolygon',
|
||||
severity: 'warning',
|
||||
message: t('issues.old_multipolygon.message', { multipolygon: multipolygonLabel }),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.issue.entityIds[1]);
|
||||
return entity ? t('issues.old_multipolygon.message', { multipolygon: utilDisplayLabel(entity, context) }) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [outerWay.id, multipolygon.id],
|
||||
fixes: [
|
||||
|
||||
@@ -58,9 +58,10 @@ export function validationPrivateData() {
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.private_data.contact.message', {
|
||||
feature: utilDisplayLabel(entity, context),
|
||||
}),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.private_data.contact.message', { feature: utilDisplayLabel(entity, context) }) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id],
|
||||
data: {
|
||||
|
||||
@@ -94,11 +94,16 @@ export function validationTagSuggestsArea() {
|
||||
}
|
||||
}));
|
||||
|
||||
var featureLabel = utilDisplayLabel(entity, context);
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.tag_suggests_area.message', { feature: featureLabel, tag: tagText }),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.tag_suggests_area.message', {
|
||||
feature: utilDisplayLabel(entity, context),
|
||||
tag: tagText
|
||||
}) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id],
|
||||
hash: JSON.stringify(tagSuggestingArea),
|
||||
|
||||
@@ -60,9 +60,10 @@ export function validationUnsquareWay() {
|
||||
return [new validationIssue({
|
||||
type: type,
|
||||
severity: 'warning',
|
||||
message: t('issues.unsquare_way.message', {
|
||||
feature: utilDisplayLabel(entity, context)
|
||||
}),
|
||||
message: function() {
|
||||
var entity = context.hasEntity(this.entityIds[0]);
|
||||
return entity ? t('issues.unsquare_way.message', { feature: utilDisplayLabel(entity, context) }) : '';
|
||||
},
|
||||
reference: showReference,
|
||||
entityIds: [entity.id],
|
||||
fixes: [
|
||||
|
||||
Reference in New Issue
Block a user