Add ability to ignore warnings

Replace issue's array of entities with array of entity IDs
Improve issue ID hashing
This commit is contained in:
Quincy Morgan
2019-04-29 17:52:32 -07:00
parent 4215db39a2
commit 375779882d
34 changed files with 179 additions and 143 deletions
+5 -4
View File
@@ -47,10 +47,11 @@ export function validationAlmostJunction() {
icon: 'iD-icon-abutment',
title: t('issues.fix.connect_features.title'),
onClick: function() {
var endNode = this.issue.entities[1];
var endNodeId = this.issue.entityIds[1];
var endNode = context.entity(endNodeId);
var targetEdge = this.issue.data.edge;
var crossLoc = this.issue.data.cross_loc;
var edgeNodes = [context.graph().entity(targetEdge[0]), context.graph().entity(targetEdge[1])];
var edgeNodes = [context.entity(targetEdge[0]), context.entity(targetEdge[1])];
var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
var annotation = t('issues.fix.connect_almost_junction.annotation');
@@ -76,7 +77,7 @@ export function validationAlmostJunction() {
icon: 'maki-barrier',
title: t('issues.fix.tag_as_disconnected.title'),
onClick: function() {
var nodeID = this.issue.entities[1].id;
var nodeID = this.issue.entityIds[1];
context.perform(
actionChangeTags(nodeID, { noexit: 'yes' }),
t('issues.fix.tag_as_disconnected.annotation')
@@ -93,7 +94,7 @@ export function validationAlmostJunction() {
feature2: utilDisplayLabel(edgeHighway, context)
}),
reference: showReference,
entities: [entity, node, edgeHighway],
entityIds: [entity.id, node.id, edgeHighway.id],
loc: extendableNodeInfo.node.loc,
data: {
edge: extendableNodeInfo.edge,
+5 -3
View File
@@ -489,7 +489,9 @@ export function validationCrossingWays() {
severity: 'warning',
message: t('issues.crossing_ways.message', messageDict),
reference: showReference,
entities: entities,
entityIds: entities.map(function(entity) {
return entity.id;
}),
data: {
edges: crossing.edges,
connectionTags: connectionTags
@@ -521,8 +523,8 @@ export function validationCrossingWays() {
if (selectedIDs.length !== 1) return;
var selectedID = selectedIDs[0];
if (!this.issue.entities.some(function(entity) {
return entity.id === selectedID;
if (!this.issue.entityIds.some(function(entityId) {
return entityId === selectedID;
})) return;
var entity = context.hasEntity(selectedID);
+2 -2
View File
@@ -69,7 +69,7 @@ export function validationDisconnectedWay() {
title: t('issues.fix.delete_feature.title'),
entityIds: [entity.id],
onClick: function() {
var id = this.issue.entities[0].id;
var id = this.issue.entityIds[0];
var operation = operationDelete([id], context);
if (!operation.disabled()) {
operation();
@@ -83,7 +83,7 @@ export function validationDisconnectedWay() {
severity: 'warning',
message: t('issues.disconnected_way.highway.message', { highway: entityLabel }),
reference: showReference,
entities: [entity],
entityIds: [entity.id],
fixes: fixes
})];
+1 -1
View File
@@ -25,7 +25,7 @@ export function validationFixmeTag() {
severity: 'warning',
message: t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }),
reference: showReference,
entities: [entity]
entityIds: [entity.id]
})];
function showReference(selection) {
+5 -3
View File
@@ -59,17 +59,19 @@ export function validationGenericName() {
severity: 'warning',
message: t('issues.generic_name.message', {feature: preset.name(), name: generic}),
reference: showReference,
entities: [entity],
entityIds: [entity.id],
hash: generic,
fixes: [
new validationIssueFix({
icon: 'iD-operation-delete',
title: t('issues.fix.remove_generic_name.title'),
onClick: function() {
var entity = this.issue.entities[0];
var entityId = this.issue.entityIds[0];
var entity = context.entity(entityId);
var tags = Object.assign({}, entity.tags); // shallow copy
delete tags.name;
context.perform(
actionChangeTags(entity.id, tags),
actionChangeTags(entityId, tags),
t('issues.fix.remove_generic_name.annotation')
);
}
+5 -5
View File
@@ -98,7 +98,7 @@ export function validationImpossibleOneway() {
title: t('issues.fix.reverse_feature.title'),
entityIds: [way.id],
onClick: function() {
var id = this.issue.entities[0].id;
var id = this.issue.entityIds[0];
context.perform(actionReverse(id), t('operations.reverse.annotation'));
}
}));
@@ -108,8 +108,8 @@ export function validationImpossibleOneway() {
icon: 'iD-operation-continue' + (isFirst ? '-left' : ''),
title: t('issues.fix.continue_from_' + (isFirst ? 'start' : 'end') + '.title'),
onClick: function() {
var entityID = this.issue.entities[0].id;
var vertexID = this.issue.entities[1].id;
var entityID = this.issue.entityIds[0];
var vertexID = this.issue.entityIds[1];
var way = context.entity(entityID);
var vertex = context.entity(vertexID);
continueDrawing(way, vertex, context);
@@ -120,7 +120,7 @@ export function validationImpossibleOneway() {
var placement = isFirst ? 'start' : 'end',
messageID = wayType + '.',
referenceID = wayType + '.';
if (isWaterway) {
messageID += 'connected.' + placement;
referenceID += 'connected';
@@ -137,7 +137,7 @@ export function validationImpossibleOneway() {
feature: utilDisplayLabel(way, context)
}),
reference: getReference(referenceID),
entities: [way, node],
entityIds: [way.id, node.id],
fixes: fixes
})];
+1 -1
View File
@@ -22,7 +22,7 @@ export function validationIncompatibleSource() {
feature: utilDisplayLabel(entity, context),
}),
reference: getReference(invalidSource.id),
entities: [entity],
entityIds: [entity.id],
fixes: [
new validationIssueFix({
title: t('issues.fix.remove_proprietary_data.title')
+5 -4
View File
@@ -46,10 +46,11 @@ export function validationMissingRole() {
relation: utilDisplayLabel(relation, context),
}),
reference: showReference,
entities: [relation, way],
entityIds: [relation.id, way.id],
data: {
member: member
},
hash: member.index.toString(),
fixes: [
makeAddRoleFix('inner', context),
makeAddRoleFix('outer', context),
@@ -58,7 +59,7 @@ export function validationMissingRole() {
title: t('issues.fix.remove_from_relation.title'),
onClick: function() {
context.perform(
actionDeleteMember(this.issue.entities[0].id, this.issue.data.member.index),
actionDeleteMember(this.issue.entityIds[0], this.issue.data.member.index),
t('operations.delete_member.annotation')
);
}
@@ -83,9 +84,9 @@ export function validationMissingRole() {
title: t('issues.fix.set_as_' + role + '.title'),
onClick: function() {
var oldMember = this.issue.data.member;
var member = { id: this.issue.entities[1].id, type: oldMember.type, role: role };
var member = { id: this.issue.entityIds[1], type: oldMember.type, role: role };
context.perform(
actionChangeMember(this.issue.entities[0].id, member, oldMember.index),
actionChangeMember(this.issue.entityIds[0], member, oldMember.index),
t('operations.change_role.annotation')
);
}
+2 -2
View File
@@ -92,7 +92,7 @@ export function validationMissingTag() {
icon: 'iD-operation-delete',
title: t('issues.fix.delete_feature.title'),
onClick: function() {
var id = this.issue.entities[0].id;
var id = this.issue.entityIds[0];
var operation = operationDelete([id], context);
if (!operation.disabled()) {
operation();
@@ -113,7 +113,7 @@ export function validationMissingTag() {
severity: severity,
message: t('issues.' + messageID + '.message', messageObj),
reference: showReference,
entities: [entity],
entityIds: [entity.id],
fixes: fixes
})];
+3 -2
View File
@@ -70,7 +70,8 @@ export function validationOutdatedTags() {
severity: 'warning',
message: t('issues.outdated_tags.message', { feature: utilDisplayLabel(entity, context) }),
reference: showReference,
entities: [entity],
entityIds: [entity.id],
hash: JSON.stringify(tagDiff),
fixes: [
new validationIssueFix({
autoArgs: [doUpgrade, t('issues.fix.upgrade_tags.annotation')],
@@ -143,7 +144,7 @@ export function validationOutdatedTags() {
severity: 'warning',
message: t('issues.old_multipolygon.message', { multipolygon: multipolygonLabel }),
reference: showReference,
entities: [outerWay, multipolygon],
entityIds: [outerWay.id, multipolygon.id],
fixes: [
new validationIssueFix({
autoArgs: [doUpgrade, t('issues.fix.move_tags.annotation')],
+2 -2
View File
@@ -65,7 +65,7 @@ export function validationPrivateData() {
feature: utilDisplayLabel(entity, context),
}),
reference: showReference,
entities: [entity],
entityIds: [entity.id],
data: {
newTags: keepTags
},
@@ -74,7 +74,7 @@ export function validationPrivateData() {
icon: 'iD-operation-delete',
title: t('issues.fix.' + fixID + '.title'),
onClick: function() {
var entityID = this.issue.entities[0].id;
var entityID = this.issue.entityIds[0];
var newTags = this.issue.data.newTags;
context.perform(
actionChangeTags(entityID, newTags),
+9 -6
View File
@@ -43,7 +43,7 @@ export function validationTagSuggestsArea() {
// make sure this will not create a self-intersection
if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
connectEndpointsOnClick = function() {
var way = this.issue.entities[0];
var way = context.entity(this.issue.entityIds[0]);
context.perform(
actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
t('issues.fix.connect_endpoints.annotation')
@@ -59,11 +59,12 @@ export function validationTagSuggestsArea() {
// make sure this will not create a self-intersection
if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
connectEndpointsOnClick = function() {
var way = this.issue.entities[0];
var wayId = this.issue.entityIds[0];
var way = context.entity(wayId);
var nodeId = way.nodes[0];
var index = way.nodes.length;
context.perform(
actionAddVertex(way.id, nodeId, index),
actionAddVertex(wayId, nodeId, index),
t('issues.fix.connect_endpoints.annotation')
);
};
@@ -80,13 +81,14 @@ export function validationTagSuggestsArea() {
icon: 'iD-operation-delete',
title: t('issues.fix.remove_tag.title'),
onClick: function() {
var entity = this.issue.entities[0];
var entityId = this.issue.entityIds[0];
var entity = context.entity(entityId);
var tags = Object.assign({}, entity.tags); // shallow copy
for (var key in tagSuggestingArea) {
delete tags[key];
}
context.perform(
actionChangeTags(entity.id, tags),
actionChangeTags(entityId, tags),
t('issues.fix.remove_tag.annotation')
);
}
@@ -98,7 +100,8 @@ export function validationTagSuggestsArea() {
severity: 'warning',
message: t('issues.tag_suggests_area.message', { feature: featureLabel, tag: tagText }),
reference: showReference,
entities: [entity],
entityIds: [entity.id],
hash: JSON.stringify(tagSuggestingArea),
fixes: fixes
})];
+3 -3
View File
@@ -58,14 +58,14 @@ export function validationUnsquareWay() {
context.validator().validate();
};
return new validationIssue({
return [new validationIssue({
type: type,
severity: 'warning',
message: t('issues.unsquare_way.message', {
feature: utilDisplayLabel(entity, context)
}),
reference: showReference,
entities: [entity],
entityIds: [entity.id],
fixes: [
new validationIssueFix({
icon: 'iD-operation-orthogonalize',
@@ -76,7 +76,7 @@ export function validationUnsquareWay() {
}
})
]
});
})];
function showReference(selection) {
selection.selectAll('.issue-reference')