diff --git a/modules/core/validator.js b/modules/core/validator.js
index 6fb066533..1ccce6aec 100644
--- a/modules/core/validator.js
+++ b/modules/core/validator.js
@@ -36,9 +36,9 @@ export function coreValidator(context) {
}
}
- self.featureApplicabilityOptions = ['edited', 'all'];
+ //self.featureApplicabilityOptions = ['edited', 'all'];
- var featureApplicability = context.storage('issue-features') || 'edited';
+ /*var featureApplicability = context.storage('issue-features') || 'edited';
self.getFeatureApplicability = function() {
return featureApplicability;
@@ -47,7 +47,7 @@ export function coreValidator(context) {
self.setFeatureApplicability = function(applicability) {
featureApplicability = applicability;
context.storage('issue-features', applicability);
- };
+ };*/
self.getIssues = function() {
return issues;
@@ -180,7 +180,7 @@ export function validationIssue(attrs) {
return osmEntity.key(entity);
});
// factor in the entities this issue is for
- id += entityKeys.join();
+ id += entityKeys.sort().join();
if (this.coordinates) {
// factor in coordinates since two separate issues can have an
// idential type and entities, e.g. in crossing_ways
diff --git a/modules/ui/issues.js b/modules/ui/issues.js
index a619b07a0..0343f4dbb 100644
--- a/modules/ui/issues.js
+++ b/modules/ui/issues.js
@@ -16,7 +16,7 @@ import { uiTooltipHtml } from './tooltipHtml';
export function uiIssues(context) {
var key = t('issues.key');
- var _featureApplicabilityList = d3_select(null);
+ //var _featureApplicabilityList = d3_select(null);
var _errorsList = d3_select(null),
_warningsList = d3_select(null);
var pane = d3_select(null);
@@ -24,7 +24,7 @@ export function uiIssues(context) {
context.validator().on('reload.issues_pane', update);
- function renderIssuesOptions(selection) {
+ /*function renderIssuesOptions(selection) {
var container = selection.selectAll('.issues-options-container')
.data([0]);
@@ -42,7 +42,7 @@ export function uiIssues(context) {
.merge(_featureApplicabilityList);
updateFeatureApplicabilityList();
- }
+ }*/
function renderErrorsList(selection) {
_errorsList = selection.selectAll('.errors-list')
@@ -68,7 +68,7 @@ export function uiIssues(context) {
updateWarningsList();
}
- function drawListItems(selection, data, type, name, change, active) {
+ /*function drawListItems(selection, data, type, name, change, active) {
var items = selection.selectAll('li')
.data(data);
@@ -109,7 +109,7 @@ export function uiIssues(context) {
.classed('active', active)
.selectAll('input')
.property('checked', active);
- }
+ }*/
function drawIssuesList(selection, issues) {
@@ -186,7 +186,7 @@ export function uiIssues(context) {
noIssuesLabel.append('span')
.text(t('issues.no_issues.info'));
}
-
+ /*
function showsFeatureApplicability(d) {
return context.validator().getFeatureApplicability() === d;
}
@@ -206,7 +206,7 @@ export function uiIssues(context) {
setFeatureApplicability,
showsFeatureApplicability
);
- }
+ }*/
function updateErrorsList() {
var errors = context.validator().getErrors();
@@ -226,7 +226,7 @@ export function uiIssues(context) {
pane.select('.issues-errors').classed('hide', errors.length === 0);
if (errors.length > 0) {
pane.select('.hide-toggle-issues_errors .hide-toggle-text')
- .text(t('issues.errors.list_title', { count: errors.length }))
+ .text(t('issues.errors.list_title', { count: errors.length }));
if (!pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
updateErrorsList();
}
@@ -236,7 +236,7 @@ export function uiIssues(context) {
pane.select('.issues-warnings').classed('hide', warnings.length === 0);
if (warnings.length > 0) {
pane.select('.hide-toggle-issues_warnings .hide-toggle-text')
- .text(t('issues.warnings.list_title', { count: warnings.length }))
+ .text(t('issues.warnings.list_title', { count: warnings.length }));
if (!pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
updateWarningsList();
}
@@ -328,7 +328,7 @@ export function uiIssues(context) {
content
.append('div')
.attr('class', 'issues-none')
- .call(renderNoIssuesBox)
+ .call(renderNoIssuesBox);
// errors
content
diff --git a/modules/validations/crossing_ways.js b/modules/validations/crossing_ways.js
index 99265ded4..717fb313d 100644
--- a/modules/validations/crossing_ways.js
+++ b/modules/validations/crossing_ways.js
@@ -191,7 +191,7 @@ export function validationCrossingWays() {
if (highwaysDisallowingFords.has(entity1.tags.highway) ||
highwaysDisallowingFords.has(entity2.tags.highway)) {
- // do not allow fords on major highways
+ // do not allow fords on major highways
return null;
}
return { ford: 'yes' };
@@ -278,96 +278,97 @@ export function validationCrossingWays() {
}
return [];
}));
- for (var i = 0; i < waysToCheck.length; i++) {
- var crosses = findCrossingsByWay(waysToCheck[i], graph, tree, edgePairsVisited);
- for (var j = 0; j < crosses.length; j++) {
- var crossing = crosses[j];
+ var crossings = waysToCheck.reduce(function(array, way) {
+ return array.concat(findCrossingsByWay(way, graph, tree, edgePairsVisited));
+ }, []);
+ for (var j in crossings) {
+ var crossing = crossings[j];
- // use the entities with the tags that define the feature type
- var entities = crossing.ways.sort(function(entity1, entity2) {
- var type1 = getFeatureTypeForCrossingCheck(entity1, graph);
- var type2 = getFeatureTypeForCrossingCheck(entity2, graph);
- if (type1 === type2) {
- return utilDisplayLabel(entity1, context) > utilDisplayLabel(entity2, context);
- } else if (type1 === 'waterway') {
- return true;
- } else if (type2 === 'waterway') {
- return false;
- }
- return type1 < type2;
- });
- entities = _map(entities, function(way) {
- return getFeatureWithFeatureTypeTagsForWay(way, graph);
- });
-
- var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
-
- var crossingTypeID;
- if (hasTag(entities[0].tags, 'tunnel') && hasTag(entities[1].tags, 'tunnel')) {
- crossingTypeID = 'tunnel-tunnel';
- if (connectionTags) {
- crossingTypeID += '_connectable';
- }
- }
- else if (hasTag(entities[0].tags, 'bridge') && hasTag(entities[1].tags, 'bridge')) {
- crossingTypeID = 'bridge-bridge';
- if (connectionTags) {
- crossingTypeID += '_connectable';
- }
- }
- else {
- crossingTypeID = crossing.featureTypes.sort().join('-');
+ // use the entities with the tags that define the feature type
+ var entities = crossing.ways.sort(function(entity1, entity2) {
+ var type1 = getFeatureTypeForCrossingCheck(entity1, graph);
+ var type2 = getFeatureTypeForCrossingCheck(entity2, graph);
+ if (type1 === type2) {
+ return utilDisplayLabel(entity1, context) > utilDisplayLabel(entity2, context);
+ } else if (type1 === 'waterway') {
+ return true;
+ } else if (type2 === 'waterway') {
+ return false;
}
+ return type1 < type2;
+ });
+ entities = _map(entities, function(way) {
+ return getFeatureWithFeatureTypeTagsForWay(way, graph);
+ });
- var messageDict = {
- feature: utilDisplayLabel(entities[0], context),
- feature2: utilDisplayLabel(entities[1], context)
- };
+ var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
- var fixes = [];
+ var crossingTypeID;
+ if (hasTag(entities[0].tags, 'tunnel') && hasTag(entities[1].tags, 'tunnel')) {
+ crossingTypeID = 'tunnel-tunnel';
if (connectionTags) {
- fixes.push(new validationIssueFix({
- title: t('issues.fix.add_connection_vertex.title'),
- onClick: function() {
- var loc = this.issue.coordinates;
- var ways = this.issue.info.ways;
-
- context.perform(
- function actionConnectCrossingWays(graph) {
- var projection = context.projection;
-
- var node = osmNode({ loc: loc, tags: connectionTags });
- graph = graph.replace(node);
-
- var way0 = graph.entity(ways[0].id);
- var choice0 = geoChooseEdge(graph.childNodes(way0), projection(loc), projection);
- var edge0 = [way0.nodes[choice0.index - 1], way0.nodes[choice0.index]];
- graph = actionAddMidpoint({loc: loc, edge: edge0}, node)(graph);
-
- var way1 = graph.entity(ways[1].id);
- var choice1 = geoChooseEdge(graph.childNodes(way1), projection(loc), projection);
- var edge1 = [way1.nodes[choice1.index - 1], way1.nodes[choice1.index]];
- graph = actionAddMidpoint({loc: loc, edge: edge1}, node)(graph);
-
- return graph;
- },
- t('issues.fix.add_connection_vertex.undo_redo')
- );
- }
- }));
+ crossingTypeID += '_connectable';
}
+ }
+ else if (hasTag(entities[0].tags, 'bridge') && hasTag(entities[1].tags, 'bridge')) {
+ crossingTypeID = 'bridge-bridge';
+ if (connectionTags) {
+ crossingTypeID += '_connectable';
+ }
+ }
+ else {
+ crossingTypeID = crossing.featureTypes.sort().join('-');
+ }
- issues.push(new validationIssue({
- type: 'crossing_ways',
- severity: 'warning',
- message: t('issues.crossing_ways.message', messageDict),
- tooltip: t('issues.crossing_ways.'+crossingTypeID+'.tip'),
- entities: entities,
- info: {'ways': crossing.ways},
- coordinates: crossing.cross_point,
- fixes: fixes
+ var messageDict = {
+ feature: utilDisplayLabel(entities[0], context),
+ feature2: utilDisplayLabel(entities[1], context)
+ };
+
+ var fixes = [];
+ if (connectionTags) {
+ fixes.push(new validationIssueFix({
+ title: t('issues.fix.add_connection_vertex.title'),
+ onClick: function() {
+ var loc = this.issue.coordinates;
+ var ways = this.issue.info.ways;
+ var connectionTags = this.issue.info.connectionTags;
+
+ context.perform(
+ function actionConnectCrossingWays(graph) {
+ var projection = context.projection;
+
+ var node = osmNode({ loc: loc, tags: connectionTags });
+ graph = graph.replace(node);
+
+ var way0 = graph.entity(ways[0].id);
+ var choice0 = geoChooseEdge(graph.childNodes(way0), projection(loc), projection);
+ var edge0 = [way0.nodes[choice0.index - 1], way0.nodes[choice0.index]];
+ graph = actionAddMidpoint({loc: loc, edge: edge0}, node)(graph);
+
+ var way1 = graph.entity(ways[1].id);
+ var choice1 = geoChooseEdge(graph.childNodes(way1), projection(loc), projection);
+ var edge1 = [way1.nodes[choice1.index - 1], way1.nodes[choice1.index]];
+ graph = actionAddMidpoint({loc: loc, edge: edge1}, node)(graph);
+
+ return graph;
+ },
+ t('issues.fix.add_connection_vertex.undo_redo')
+ );
+ }
}));
}
+
+ issues.push(new validationIssue({
+ type: 'crossing_ways',
+ severity: 'warning',
+ message: t('issues.crossing_ways.message', messageDict),
+ tooltip: t('issues.crossing_ways.'+crossingTypeID+'.tip'),
+ entities: entities,
+ info: { ways: crossing.ways, connectionTags: connectionTags },
+ coordinates: crossing.cross_point,
+ fixes: fixes
+ }));
}
return issues;
diff --git a/test/index.html b/test/index.html
index c69a406a4..66bf09be9 100644
--- a/test/index.html
+++ b/test/index.html
@@ -144,13 +144,13 @@
-
+
-
+
-
+