Merge pull request #3165 from openstreetmap/3118-validations

refactor validations into ES6 modules for #3118
This commit is contained in:
Tom MacWright
2016-06-14 19:33:46 -04:00
committed by GitHub
10 changed files with 155 additions and 37 deletions
+5 -6
View File
@@ -43,11 +43,15 @@ $(BUILDJS_TARGETS): $(BUILDJS_SOURCES) build.js
MODULE_TARGETS = \
js/lib/id/actions.js
js/lib/id/actions.js \
js/lib/id/validations.js
js/lib/id/actions.js: modules/
node_modules/.bin/rollup -f umd -n iD.actions modules/actions/index.js --no-strict > $@
js/lib/id/validations.js: modules/
node_modules/.bin/rollup -f umd -n iD.validations modules/validations/index.js --no-strict > $@
dist/iD.js: \
js/lib/bootstrap-tooltip.js \
js/lib/d3.v3.js \
@@ -226,11 +230,6 @@ dist/iD.js: \
js/id/presets/collection.js \
js/id/presets/field.js \
js/id/presets/preset.js \
js/id/validations.js \
js/id/validations/deprecated_tag.js \
js/id/validations/many_deletions.js \
js/id/validations/missing_tag.js \
js/id/validations/tag_suggests_area.js \
js/id/end.js \
js/lib/locale.js \
data/introGraph.js
-1
View File
@@ -1 +0,0 @@
iD.validations = {};
+16 -16
View File
@@ -8,7 +8,7 @@
return function(graph) {
return graph.replace(way);
};
};
}
function AddMember(relationId, member, memberIndex) {
return function(graph) {
@@ -38,7 +38,7 @@
return graph.replace(relation.addMember(member, memberIndex));
};
};
}
function AddMidpoint(midpoint, node) {
return function(graph) {
@@ -62,20 +62,20 @@
return graph;
};
};
}
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
function AddVertex(wayId, nodeId, index) {
return function(graph) {
return graph.replace(graph.entity(wayId).addNode(nodeId, index));
};
};
}
function ChangeMember(relationId, member, memberIndex) {
return function(graph) {
return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
};
};
}
function ChangePreset(entityId, oldPreset, newPreset) {
return function(graph) {
@@ -88,14 +88,14 @@
return graph.replace(entity.update({tags: tags}));
};
};
}
function ChangeTags(entityId, tags) {
return function(graph) {
var entity = graph.entity(entityId);
return graph.replace(entity.update({tags: tags}));
};
};
}
function Circularize(wayId, projection, maxAngle) {
maxAngle = (maxAngle || 20) * Math.PI / 180;
@@ -279,7 +279,7 @@
};
return action;
};
}
function DeleteMultiple(ids) {
var actions = {
@@ -307,7 +307,7 @@
};
return action;
};
}
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
function DeleteRelation(relationId) {
@@ -398,7 +398,7 @@
};
return action;
};
}
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
function DeleteNode(nodeId) {
@@ -433,7 +433,7 @@
};
return action;
};
}
// Connect the ways at the given nodes.
//
@@ -476,7 +476,7 @@
return graph;
};
};
}
function CopyEntities(ids, fromGraph) {
var copies = {};
@@ -498,7 +498,7 @@
};
return action;
};
}
function DeleteMember(relationId, memberIndex) {
return function(graph) {
@@ -512,7 +512,7 @@
return graph;
};
};
}
function DeprecateTags(entityId) {
return function(graph) {
@@ -1168,7 +1168,7 @@
};
return action;
};
}
// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
@@ -1448,7 +1448,7 @@
};
return action;
};
}
// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
+121
View File
@@ -0,0 +1,121 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.iD = global.iD || {}, global.iD.validations = global.iD.validations || {})));
}(this, function (exports) { 'use strict';
function DeprecatedTag() {
var validation = function(changes) {
var warnings = [];
for (var i = 0; i < changes.created.length; i++) {
var change = changes.created[i],
deprecatedTags = change.deprecatedTags();
if (!_.isEmpty(deprecatedTags)) {
var tags = iD.util.tagText({ tags: deprecatedTags });
warnings.push({
id: 'deprecated_tags',
message: t('validations.deprecated_tags', { tags: tags }),
entity: change
});
}
}
return warnings;
};
return validation;
}
function ManyDeletions() {
var threshold = 100;
var validation = function(changes) {
var warnings = [];
if (changes.deleted.length > threshold) {
warnings.push({
id: 'many_deletions',
message: t('validations.many_deletions', { n: changes.deleted.length })
});
}
return warnings;
};
return validation;
}
function MissingTag() {
// Slightly stricter check than Entity#isUsed (#3091)
function hasTags(entity, graph) {
return _.without(Object.keys(entity.tags), 'area', 'name').length > 0 ||
graph.parentRelations(entity).length > 0;
}
var validation = function(changes, graph) {
var warnings = [];
for (var i = 0; i < changes.created.length; i++) {
var change = changes.created[i],
geometry = change.geometry(graph);
if ((geometry === 'point' || geometry === 'line' || geometry === 'area') && !hasTags(change, graph)) {
warnings.push({
id: 'missing_tag',
message: t('validations.untagged_' + geometry),
tooltip: t('validations.untagged_' + geometry + '_tooltip'),
entity: change
});
}
}
return warnings;
};
return validation;
}
function TagSuggestsArea() {
// https://github.com/openstreetmap/josm/blob/mirror/src/org/
// openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80
function tagSuggestsArea(tags) {
if (_.isEmpty(tags)) return false;
var presence = ['landuse', 'amenities', 'tourism', 'shop'];
for (var i = 0; i < presence.length; i++) {
if (tags[presence[i]] !== undefined) {
return presence[i] + '=' + tags[presence[i]];
}
}
if (tags.building && tags.building === 'yes') return 'building=yes';
}
var validation = function(changes, graph) {
var warnings = [];
for (var i = 0; i < changes.created.length; i++) {
var change = changes.created[i],
geometry = change.geometry(graph),
suggestion = (geometry === 'line' ? tagSuggestsArea(change.tags) : undefined);
if (suggestion) {
warnings.push({
id: 'tag_suggests_area',
message: t('validations.tag_suggests_area', { tag: suggestion }),
entity: change
});
}
}
return warnings;
};
return validation;
}
exports.DeprecatedTag = DeprecatedTag;
exports.ManyDeletions = ManyDeletions;
exports.MissingTag = MissingTag;
exports.TagSuggestsArea = TagSuggestsArea;
Object.defineProperty(exports, '__esModule', { value: true });
}));
@@ -1,4 +1,4 @@
iD.validations.DeprecatedTag = function() {
export function DeprecatedTag() {
var validation = function(changes) {
var warnings = [];
@@ -19,4 +19,4 @@ iD.validations.DeprecatedTag = function() {
};
return validation;
};
}
+4
View File
@@ -0,0 +1,4 @@
export { DeprecatedTag } from './deprecated_tag';
export { ManyDeletions } from './many_deletions';
export { MissingTag } from './missing_tag';
export { TagSuggestsArea } from './tag_suggests_area';
@@ -1,4 +1,4 @@
iD.validations.ManyDeletions = function() {
export function ManyDeletions() {
var threshold = 100;
var validation = function(changes) {
@@ -13,4 +13,4 @@ iD.validations.ManyDeletions = function() {
};
return validation;
};
}
@@ -1,4 +1,4 @@
iD.validations.MissingTag = function() {
export function MissingTag() {
// Slightly stricter check than Entity#isUsed (#3091)
function hasTags(entity, graph) {
@@ -25,4 +25,4 @@ iD.validations.MissingTag = function() {
};
return validation;
};
}
@@ -1,4 +1,4 @@
iD.validations.TagSuggestsArea = function() {
export function TagSuggestsArea() {
// https://github.com/openstreetmap/josm/blob/mirror/src/org/
// openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80
@@ -34,4 +34,4 @@ iD.validations.TagSuggestsArea = function() {
};
return validation;
};
}
+1 -6
View File
@@ -42,6 +42,7 @@
<script src='../js/id/id.js'></script>
<script src='../js/lib/id/actions.js'></script>
<script src='../js/lib/id/validations.js'></script>
<script src='../js/id/util.js'></script>
@@ -193,12 +194,6 @@
<script src='../js/id/util/session_mutex.js'></script>
<script src='../js/id/util/suggest_names.js'></script>
<script src='../js/id/validations.js'></script>
<script src='../js/id/validations/deprecated_tag.js'></script>
<script src='../js/id/validations/many_deletions.js'></script>
<script src='../js/id/validations/missing_tag.js'></script>
<script src='../js/id/validations/tag_suggests_area.js'></script>
<script src='../js/lib/locale.js'></script>
<script src="spec/spec_helpers.js"></script>